美丽世界架设简化
本帖最后由 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 求一键虚拟机{:soso_e124:} 感谢分享,现在给予高亮并编辑入本版置顶帖中。望楼主继续努力。 好复杂哦 本帖最后由 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。 还请问一下楼主,服务器开始的顺序是什么啊,地图文件和NPC文件是否都要手动开启: 顶起 虽然看不懂 还想学 有视频就好了 希望楼主能放个视频 啥的麻烦了{:soso__1620823281082563426_2:} 残念。。。怨念啊,总了好多的版本,但是总是假设不起来,楼主分享一下啊 :我也架设不来啊~~~通的回忆· 小碎 发表于 2013-7-22 16:18 static/image/common/back.gif
我也架设不来啊~~~通的回忆·
不算复杂嘛 zhitianjiao 发表于 2013-7-22 23:07 static/image/common/back.gif
不算复杂嘛
可能是我的智商不足吧~~ 谢谢楼主分享啊~ 高手啊,不过看完就懒得研究了 感觉好复杂啊还是谢谢楼主分享~ 666,游戏很老,很有味道 强烈要求阅读权限减少,这也看不了帖子啊
页:
[1]