zhitianjiao 发表于 2012-1-24 00:38:35

美丽世界架设简化

本帖最后由 zhitianjiao 于 2012-1-24 00:45 编辑


在网上可以搜得到美丽世界服务端 ,
美丽世界架设有点麻烦,我现在就在玩美丽世界。

架设:
第1步:必须win2000或win2003才能架设,我是用虚拟机装win2000的。(xp能运行服务端,但客户端连接不上,测试多次)
不能用精简版的操作系统,否则sql2000安装不了, 我下载的是300多m的win2000操作系统。
非精简版的操作系统,可以用绿色版的Gsql ,但同样要求操作系统必须完整,否则Gsql同样无法运行。(我用精简版的win2000系统测试过多次, sql2000或Gsql均无法正常运行)

第2步,修改服务端内所有txt , ini 的ip地址。
第3,运行sql ,手动或者写脚本,创建当日的表名称;
第4步,将服务端压缩包之内的 客户端补丁及登陆器,覆盖到客户端安装目录。
第5步,用Uedit 打开客户端目录下的 登陆器 Me-NAge.exe , 以正则表达式的方法搜索ip地址,表达式是 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}    ,找到后替换为服务器ip ,然后保存。

做完5步后,还要进数据库建立游戏角色(我是自己写脚本完成的),然后就可以运行游戏了。由于客户端版本高于服务端,所以读取地图偶尔会出错。


具体参考服务端内的帮助文档,尽管里面诸多错误。

以下代码保存为xxx.vbs文件可以简化一些操作:

-------------------------------------------------
        ' /*************************
        '   by橘 : zhitian@studio
        ' *************************/
        Option Explicit        
        Dim sqlname , sqlpass
        Dim conn , statu , action , i , server_ip , sqlinfo

        ' 填写: sqlser账号 密码
        sqlname = "sa"   ' // 这里修改mssql的账号密码
        sqlpass = "123456"
       


       



        ' 功能选择
        action = InputBox("请选择执行的功能:( 多个用空格分开 ) " & Chr(13) & Chr(10) & "数字1 【修改服务器ip】 " & Chr(13) & Chr(10) & "数字2 【替换文件ip】" & Chr(13) & Chr(10) & "数字3 【添加游戏账号】" & Chr(13) & Chr(10) & "数字4 【创建当天新表(数据库内类似Loginlog_200522的表名)】", "执行功能" , "1 2 3 4" )
       
        If action = "" Then
                MsgBox "没有执行任何动作."
        else
                action = Split( action , " " )

                set conn = CreateObject("ADODB.Connection")
                For Each i In action
                        Select Case Trim( i )
                                Case 1
                                        ' 执行更改服务器ip
                                        server_ip = changeserver( sqlname , sqlpass , conn )

                                Case 2
                                       
                                        ' 修改本地文件内的ip
                                        replace_ip "./" , server_ip
                                        ' 提示
                                        msgbox "文件内的ip地址修改完毕" , 64 , "提示"
                                       
                                Case 3
                                        ' 执行添加角色函数
                                        addmember sqlname , sqlpass , conn
                                Case 4
                                        createtable( conn )
                               
                                Case 5
                                        testodbc( conn )

                                Case 6
                                        getComputerName

                                Case 7
                                        createodbc
                        End select
                next

                Set conn = Nothing

        End If





        ' /**************** 函数区域 *****************/


        ' ###### 更改服务器ip函数
        Function changeserver( sqlname , sqlpass , conn )

                Dim serverip , regEx , tmp , statu ' 状态

                serverip = InputBox( "请输入你的游戏服务器ip:", "您现在执行的是 修改数据库servinfo的ip字段" , "192.168.1.100" )

                statu = checkip( serverip )
                If statu = 0 Then
                        Exit Function
                End if

                ' 建立sql连接 .数据库驱动连接方法
                ' 打开Nage数据库
                conn.Open "Database=Nage;uid=" & sqlname & ";pwd=" & sqlpass & ";Driver={SQL Server};server=localhost"


                If conn.State = 0 Then
                        statu = 0
                        MsgBox "连接数据库失败," & Chr(13) & Chr(10) & "请检查sqlser.exe是否运行," & Chr(13) & Chr(10) & "以及数据库账号和密码是否正确." , 53 , "连接数据库提示"
                Else
                        ' 更新ip
                        conn.Execute "update ServInfo set servIP='" & serverip & "'"
                        statu = serverip
                       
                        ' 提示
                        msgbox "数据库内的服务器ip修改完成" , 64 , "提示"

                End If

                ' 关闭数据库连接
                conn.Close

                ' 函数返回值
                changeserver = statu
        End function


        ' ###### 查找替换ip程序
        Sub replace_ip( op_path , server_ip )
                Dim fso , current , folder , file , fp
                Dim regEx , suffix , tempstr , statu
               
                ' 如果没有server_ip则提示输入 , 否则使用server_ip的值
                If server_ip = "" Then
                        server_ip = InputBox("请输入服务器ip地址:", "修改文件内的所有ip" , "192.168.1.100" )
                Else                                       
                End If

                ' 检查输入的ip地址的合法性
                statu = checkip( server_ip )
                If statu = 0 Then
                        Exit sub
                End if


                ' ip地址 正则表达式
                Set regEx = New RegExp
                regEx.Pattern = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
                regEx.Global = True

               
                ' fso对象
                Set fso = CreateObject("Scripting.FileSystemObject")
                set current = fso.GetFolder( op_path )
               
                ' 处理第一层目录
                For Each file In current.Files
                       
                        ' 只处理txt和ini文件
                        suffix = Lcase( mid( file , instrrev( file , "." ) + 1 ) )

                        If (suffix = "txt") Or (suffix = "ini") Then
                                ' 打开文件
                                set fp = fso.OpenTextFile( file, 1, True )
                                On Error Resume next

                                ' 读取文件 , 正则替换 , 写入文件
                                tempstr = fp.Readall
                                If regEx.test( tempstr ) Then
                                        MsgBox file
                                        tempstr = regEx.Replace( tempstr , server_ip )
                                        set fp=fso.OpenTextFile( file, 2 , False , -2 )
                                        fp.Write tempstr
                                End If
                                fp.close
                        End if
                Next


                ' 递归处理 子目录
                for each folder in current.subfolders
                        Call replace_ip( folder.path , server_ip )
                next


                set fso=nothing
        End Sub

       
        ' ###### 添加角色函数
        Function addmember( sqlname , sqlpass , conn )
               
                Dim is_exist , u_input , uname , upass , statu
                Dim rand_ppid

                u_input = InputBox( "您现在执行的是建立角色功能" & Chr(13) & Chr(10) & "请输入 游戏账号和密码 " & Chr(13) & Chr(10) & " (限字母和数字) 用空格分开:", "建立游戏账号" )
                u_input = Split( u_input , " " )

                ' 返回下标最大值,判断长度
                If UBound( u_input ) < 1 Then
                        MsgBox "您只填写了1项,至少要填写2项内容,用空格分开."
                        Exit Function
                End if

                uname = u_input(0)
                upass = u_input(1)

                ' 打开NageMember表
                conn.Open "Database=NageMember;uid=" & sqlname & ";pwd=" & sqlpass & ";Driver={SQL Server};server=localhost"


                If conn.State = 0 Then
                        statu = 0
                        MsgBox "连接数据库失败," & Chr(13) & Chr(10) & "请检查sqlser.exe是否运行," & Chr(13) & Chr(10) & "以及数据库账号和密码是否正确." , 53 , "连接数据库提示"
                Else
                        ' 查询账号是否存在
                        Set is_exist = conn.Execute( "SELECT count( id_loginid ) FROM chr_log_info WHERE id_loginid='" & uname & "'" )

                        If is_exist.recordcount > 0 then
                                MsgBox "游戏账号: "& uname & " 已经存在.", 53 , "账号提示"
                                statu = 0
                        Else

                                rand_ppid = myrand()

                                ' 建立 游戏账户 此3项不能重复(随机数id,账号,密码)
                                conn.Execute "insert into chr_log_info( propid , id_loginid , id_passwd , sta_num , type_num , id_real , bill ) values(" & rand_ppid & " , '" & uname & "' , '" & upass & "' , 1 , 1 , 0 , 151 )"
                                statu = 1                       
                        End If
                       
                End If

                ' 关闭数据库连接
                conn.Close
               
                ' 提示
                If statu = 0 Then
                        msgbox "角色添加失败!" , 64 , "提示"
                Else
                        MsgBox "角色添加成功!" , 64 , "提示"
                End if

                ' 返回值
                addmember = statu
        End Function
       


        Function createtable( conn )
                Dim newtable , is_exist

                ' 打开NageMember表
                conn.Open "Database=NageMember;uid=" & sqlname & ";pwd=" & sqlpass & ";Driver={SQL Server};server=localhost"


                If conn.State = 0 Then
                        statu = 0
                        MsgBox "连接数据库失败," & Chr(13) & Chr(10) & "请检查sqlser.exe是否运行," & Chr(13) & Chr(10) & "以及数据库账号和密码是否正确." , 53 , "连接数据库提示"
                Else

                        ' 新表名 (当天时间)
                        newtable = "Loginlog_" & Year(Date()) & Month(Date()) & Day(Date())
                       
                        ' 查询 新表 是否存在
                        Set is_exist = conn.Execute( "select count(*) from sysobjects where ='" & newtable & "' and xtype='U'" )

                        If is_exist.Fields(0).Value <> 1 then
                                ' 复制的方式 建立新表
                                conn.execute "select * into " & newtable & " from Loginlog_200552 where 1=2"
                        End If
               
                End If

                ' 关闭数据库连接
                conn.Close
                MsgBox "更新数据库表名完成" , 64 , "ok"

        End Function
       



        ' ###### 随机数
        Function myrand( )
                Dim i

                Randomize
                i = Int((99999 - 10000 + 1) * Rnd() + 10000)
               

                myrand = i
        End Function


        ' ###### 检查ip地址合法性
        Function checkip( serverip )
                Dim regEx , statu
                statu = 1

                If serverip = "" Then
                        MsgBox "服务器ip地址不能为空." , 53 , "ip地址不合法!"
                        checkip = 0
                        Exit function
                End if

                Set regEx = NEW RegExp
                regEx.Pattern = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
                If Not( regEx.test( serverip ) ) Then
                        MsgBox "您输入的服务器ip不正确." , 53 , "ip地址不合法!"
                        statu = 0
                End If

                checkip = statu
        End function
       








        Function testodbc( conn )

                ' 打开NageMember表
                conn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=(local)\test"


                If conn.State = 0 Then
                        MsgBox "连接数据库失败," & Chr(13) & Chr(10) & "请检查sqlser.exe是否运行," & Chr(13) & Chr(10) & "以及数据库账号和密码是否正确." , 53 , "连接数据库提示"
                Else
                        MsgBox "ok!!!!!!!!"&Chr(13) & Chr(10)&"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=(local)\test"
               
                End If

                ' 关闭数据库连接
                conn.Close

        End Function
       


        ' 从注册表获取计算机名称
        Function getComputerName()

                MsgBox "此功能已被作者移除"
        End Function



        ' 创建odbc
        Function createodbc()

                Dim compname , wsobj
                compname = getComputerName
                Set wsobj = WScript.CreateObject("WScript.Shell")
               
                ' 在根键HKEY_CLASSES_ROOT之下新建主键.xxf,并置其默认值xxffile
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\LocalServer" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageBoard" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageBoard10" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageLocal" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageLocal10" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageLogin" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageManager" , "SQL Server"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\NageSystem" , "SQL Server"


                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "LocalServer"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Description" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Server" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Database" , "test2"
                wsobj.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\LocalServer\Trusted_Connection" , "1"

        End Function



        Function config( str )
               


        End function

593907672 发表于 2012-1-28 18:59:16

求一键虚拟机{:soso_e124:}

关东唐 发表于 2012-1-24 10:14:46

感谢分享,现在给予高亮并编辑入本版置顶帖中。望楼主继续努力。

quyan123456789 发表于 2012-1-24 09:47:15

好复杂哦

zhitianjiao 发表于 2012-1-24 00:54:49

本帖最后由 zhitianjiao 于 2012-1-24 01:06 编辑

附录:

比较准确的 NAGE服务器架建初步教程


1、建立数据库

(1) 分别建立Nage,NageManager,NageBoard,NageMember
(2) 分别还原Nage.dat,NageManager.dat,NageBoard.dat,NageMember.dat。

3、建立ODBC
        运行odbc注册.reg文件



4、修改服务器端目录里所有*.txt和*.INI文件为自己服务器的IP。( system_server.exe operate_server.exe 里的IP为自己服务器的IP.???? 说的毛意思不知道,也许是低版本的两个程序文件才需要用uedit去修改。 )
   
( 修改/op_server/serinfo.ini 找到两个DB 类型的 )
   111000        11        DB        nage-11       这里写SQL名称        1433
   44 11200        11        DB        nage-11       这里写SQL名称        1433

5、修改数据库Nage里ServInfo表里的IP:查询sql语句执行 update ServInfo set servIP='你的服务器ip'

   修改NageMember数据库中Loginlog_200522到Loginlog_2005215六个中任何一个为你的系统时间,否则登陆游戏会出现"服务器维护",如:Loginlog_2012124 (当天日期,每天都要创建一个这样的表,对应的sql是:select * into Loginlog_当天年月日   from Loginlog_200552 where 1=2)

7、将 附件/登陆器 和 客户端补丁 复制到美丽世界游戏安装目录。

8、在 登陆器 修改客户端IP。 用Uedit打开登陆器 , ctrl + H 正则表达式搜索(高级 选perl语言的)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}找到ip之后,替换为你的服务器ip。

zargeryan 发表于 2012-2-23 09:45:57

还请问一下楼主,服务器开始的顺序是什么啊,地图文件和NPC文件是否都要手动开启:

h15161718 发表于 2012-3-2 20:27:39

顶起 虽然看不懂 还想学 有视频就好了 希望楼主能放个视频 啥的麻烦了{:soso__1620823281082563426_2:}

kingdi2004 发表于 2012-3-26 22:18:42

残念。。。怨念啊,总了好多的版本,但是总是假设不起来,楼主分享一下啊

小碎 发表于 2013-7-22 16:18:54

:我也架设不来啊~~~通的回忆·

zhitianjiao 发表于 2013-7-22 23:07:39

小碎 发表于 2013-7-22 16:18 static/image/common/back.gif
我也架设不来啊~~~通的回忆·

不算复杂嘛

小碎 发表于 2013-7-23 16:59:20

zhitianjiao 发表于 2013-7-22 23:07 static/image/common/back.gif
不算复杂嘛

可能是我的智商不足吧~~

Zoweezy、 发表于 2014-5-18 21:02:25

谢谢楼主分享啊~

dsssb 发表于 2016-9-13 11:06:34

高手啊,不过看完就懒得研究了

oka924 发表于 2018-5-28 22:45:32

感觉好复杂啊还是谢谢楼主分享~

无名的小子 发表于 2018-5-29 22:14:22

666,游戏很老,很有味道

嘻嘻哈哈过每天 发表于 2018-5-31 10:15:21

强烈要求阅读权限减少,这也看不了帖子啊
页: [1]
查看完整版本: 美丽世界架设简化

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明