JS+ASP后台写的在线RPG游戏
来源:互联网 发布:淘宝怎么给顾客发短信 编辑:程序博客网 时间:2024/05/09 20:22
你看看画面,你当然会想得到这一定是一款RPG游戏,但是,你想得到么?这是一款完全由JS+ASP后台写的在线游戏。汉,那些家伙,实在是crazy...
JS-RPG <白之绊> 核心GameScript服务端代码:
DEMO地址:http://bzb.gbq.cn
战斗画面DEMO:http://bzb.gbq.cn/test/2.asp
游戏脚本范例1:http://bzb.gbq.cn/xml/scene/1000.xml
游戏脚本范例2:http://bzb.gbq.cn/xml/scene/1001.xml
游戏脚本范例3:http://bzb.gbq.cn/xml/scene/1002.xml
游戏脚本范例4:http://bzb.gbq.cn/xml/scene/1003.xml
JS-RPG <白之绊> 核心GameScript服务端代码:
DEMO地址:http://bzb.gbq.cn
战斗画面DEMO:http://bzb.gbq.cn/test/2.asp
游戏脚本范例1:http://bzb.gbq.cn/xml/scene/1000.xml
游戏脚本范例2:http://bzb.gbq.cn/xml/scene/1001.xml
游戏脚本范例3:http://bzb.gbq.cn/xml/scene/1002.xml
游戏脚本范例4:http://bzb.gbq.cn/xml/scene/1003.xml
引用内容
<%
Dim XML
Dim DOM
Dim JS
Dim Scene
Dim JsPatch '补充到JS脚本的部分
Scene = Request.QueryString("Scene")
If Scene="" Then Scene="1001"
XML = "/XML/Scene/" & Scene & ".xml"
Set DOM = Server.CreateObject("MSXML2.DOMDocument")
DOM.async = false
DOM.load(Server.MapPath ( XML))
'获取地图信息
Function MapInfo(DOM)
Dim MapXML
Dim MapDom
Dim MapHtml,MapX,MapY
Dim MapImg
Dim i,j
Dim MapWay
Dim JS
'得到MapXML
MapXML = DOM.selectSingleNode("/Scene").GetAttribute("Map")
Set MapDOM = Server.CreateObject("MSXML2.DOMDocument")
MapDom.async = false
MapDom.load(Server.MapPath(MapXML))
'得到MapHTML,MapX,MapY信息
MapHTML = MapDom.selectSingleNode("/Map/HTML").text
MapX = MapDom.selectSingleNode("/Map/X").text
MapY = MapDom.selectSingleNode("/Map/Y").text
MapHTML = Replace(MapHTML,Chr(13),"")
MapHTML = Replace(MapHTML,Chr(10),"")
JS = JS & "MAP.insertAdjacentHTML('beforeEnd','" & MapHTML & "')" & Vbcrlf
JS = JS & "MapX = " & MapX & Vbcrlf
JS = JS & "MapY = " & MapY & Vbcrlf
If MapDom.selectSingleNode("/Map").getElementsBytagname("Images").Length>0 Then
Set MapImg = MapDom.selectSingleNode("/Map/Images")
For Each i In MapImg.childNodes
JS = JS & "AddImg('" & i.text & "')" & Vbcrlf
Next
End If
JS = JS & "MAP.style.width = CeilSize*" & MapX & Vbcrlf
JS = JS & "MAP.style.height = CeilSize*" & MapY & Vbcrlf
JS = JS & "MAPBG.style.width = CeilSize*" & MapX & Vbcrlf
JS = JS & "MAPBG.style.height = CeilSize*" & MapY & Vbcrlf
MapWay = MapDOM.selectSingleNode("/Map/Way").text
MapWay = Split(MapWay,",")
Dim EachWay,X,Y
For X = 0 To MapX-1
EachWay = ""
For Y = 0 To MapY-1
EachWay = EachWay + MapWay(Y*MapX+X) + ","
Next
EachWay = Left(EachWay,Len(EachWay)-1)
JS = JS & "MapInfo[" & X & "] = new Array(" & EachWay & ")" & Vbcrlf
Next
MapInfo = Js
End Function
'获取声音信息
Function SoundInfo(DOM)
Dim Nodes
Dim Node
Dim NodeID
Dim NodeText
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("Sounds").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/Sounds")
For Each Node In Nodes.childNodes
NodeID = Node.GetAttribute("ID")
NodeText = Node.Text
Js = Js & "new Sound(" & NodeID & "," & Chr(34) & NodeText & Chr(34) & ")" & Vbcrlf
Next
End If
SoundInfo = Js
End Function
'获取文本信息
Function TextInfo(DOM)
Dim Nodes
Dim Node
Dim NodeID
Dim NodeName
Dim NodeIMG
Dim NodeText
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("Texts").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/Texts")
For Each Node In Nodes.childNodes
NodeID = Node.GetAttribute("ID")
NodeName = Node.GetAttribute("Name")
NodeIMG = Node.GetAttribute("IMG")
NodeText = Node.Text
NodeText = Replace(NodeText,"[BR]","<br>")
Js = Js & "new Text(" & NodeID & "," & Chr(34) & NodeName & Chr(34) & "," & Chr(34) & NodeIMG & Chr(34) & "," & Chr(34) & NodeText & Chr(34) & ")" & Vbcrlf
Next
End If
TextInfo = Js
End Function
'获取角色信息
Function RoleInfo(DOM)
Dim Nodes
Dim Node
Dim NodeName
Dim NodeW
Dim NodeH
Dim NodeF
Dim NodeIMG
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("RoleInfos").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/RoleInfos")
For Each Node In Nodes.childNodes
NodeName = Node.GetAttribute("Name")
NodeW = Node.GetAttribute("Width")
NodeH = Node.GetAttribute("Height")
NodeF = Node.GetAttribute("AllFrame")
NodeIMG = Node.GetAttribute("IMG")
Js = Js & "new RoleInfo("
Js = Js & Chr(34) & NodeName & Chr(34)
Js = Js & ","
Js = Js & Chr(34) & NodeIMG & Chr(34)
If NodeW<>"" Then
Js = Js & ","
Js = Js & NodeW
Js = Js & ","
Js = Js & NodeH
Js = Js & ","
Js = Js & NodeF
End If
Js = Js & ")"
Js = Js & Vbcrlf
Next
End If
RoleInfo = Js
End Function
'获取NPC信息
Function NPCInfo(DOM)
Dim Nodes
Dim Node
Dim NodeID
Dim NodeRoleInfo
Dim NodeX
Dim NodeY
Dim NodeF
Dim NodeMT
Dim NodeMS
Dim NodeMF
Dim NodeIsOverpass
Dim NodeFilter
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("NPCs").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/NPCs")
For Each Node In Nodes.childNodes
NodeID = Node.GetAttribute("ID")
NodeRoleInfo = Node.GetAttribute("RoleInfo")
If IsNull(NodeRoleInfo) Then NodeRoleInfo = "NULL"
NodeX = Node.GetAttribute("X")
NodeY = Node.GetAttribute("Y")
NodeF = Node.GetAttribute("F")
NodeMT = Node.GetAttribute("MoveType")
NodeMS = Node.GetAttribute("MoveSpeed")
NodeMF = Node.GetAttribute("MoveFrequency")
NodeMP = Node.GetAttribute("MovePath")
NodeMP = Node.GetAttribute("MovePath")
NodeMRD = Node.GetAttribute("MoveRedo")
NodeMOL = Node.GetAttribute("MoveOverLook")
NodeIsOverpass = Node.GetAttribute("IsOverpass")
NodeFilter = Node.GetAttribute("Filter")
If IsNull(NodeF) Then NodeF = "0"
Js = Js & "LoadNPC("
Js = Js & NodeID
Js = Js & ","
Js = Js & Chr(34) & NodeRoleInfo & Chr(34)
Js = Js & ","
Js = Js & NodeX
Js = Js & ","
Js = Js & NodeY
Js = Js & ","
Js = Js & NodeF
Js = Js & ")"
Js = Js & Vbcrlf
If Not IsNull(NodeIsOverpass) Then
If NodeIsOverpass = "1" Then Js = Js & "Roles[" & NodeID & "].IsOverpass=true" & Vbcrlf
End If
If Not IsNull(NodeFilter) Then
Js = Js & "Role" & NodeID & ".style.filter=" & Chr(34) & NodeFilter & Chr(34) & Vbcrlf
End If
If Not IsNull(NodeMT) Then '设定移动方式了
If NodeMT = "Random" Then
NodeMT = 2
ElseIf NodeMT = "Follow" Then
NodeMT = 3
ElseIf NodeMT = "Plan" Then
NodeMT = 4
Else
NodeMT = 0
End If
Js = Js & "Roles[" & NodeID & "].SetMoveType("
Js = Js & NodeMT
Js = Js & ","
Js = Js & NodeMS
Js = Js & ","
Js = Js & NodeMF
Js = Js & ","
Js = Js & Chr(34) & NodeMP & Chr(34)
Js = Js & ","
If NodeMRD = "0" Then
Js = Js & "false"
Else
Js = Js & "true"
End If
Js = Js & ","
If NodeMOL = "0" Then
Js = Js & "false"
Else
Js = Js & "true"
End If
Js = Js & ")"
Js = Js & Vbcrlf
JsPatch = JsPatch & "Roles[" & NodeID & "].Move()" & Chr(10)
End If
If NodeF<>"0" Then '转向了
JsPatch = JsPatch & "Roles[" & NodeID & "].TurnTo(" & NodeF & ")" & Chr(10)
End If
If Node.hasChildNodes Then
Dim EvType
EvType = Node.childNodes(0).GetAttribute("Type")
EvCloneID = Node.childNodes(0).GetAttribute("CloneID")
If IsNull(EvCloneID) Then
Js = JS & "with(Roles[" & NodeID & "]){" & Vbcrlf
Js = JS & "EventType=" & EvType & Vbcrlf
Js = JS & EventInfo(Node.childNodes(0).text)
Js = JS & "}" & Vbcrlf
Else
Js = JS & "with(Roles[" & NodeID & "]){" & Vbcrlf
Js = JS & "EventType=" & EvType & Vbcrlf
Js = JS & "CloneEvent(" & EvCloneID & ")" & Vbcrlf
Js = JS & "}" & Vbcrlf
End If
End If
Next
End If
NPCInfo = Js
'Response.Write JS
'Response.End
End Function
'获取主脚本信息
Function MainInfo(DOM)
Dim NodeText
Dim EventHead
NodeText = DOM.selectSingleNode("/Scene/MainScript").text
EventHead = "" '自动添加以下事件到主脚本
EventHead = EventHead & "IsKeyLocked=true" & Chr(10) '锁定键盘
'EventHead = EventHead & "MapHide()" & Chr(10) '隐藏屏幕
EventHead = EventHead & "DrawIMGObj()" & Chr(10) '隐藏屏幕
'EventHead = EventHead & "Sleep(100)" & Chr(10) '隐藏屏幕
EventHead = EventHead & "LoadAllImage()" & Chr(10) '载入图片
EventHead = EventHead & JsPatch '补丁部分
NodeText = EventHead & NodeText
NodeText = NodeText & "AllEnd()" & Chr(10) '全部结束
Js = JS & "with(Roles[" & 0 & "]){" & Vbcrlf
Js = JS & "EventType=2" & Vbcrlf
Js = JS & EventInfo(NodeText)
Js = JS & "}" & Vbcrlf
MainInfo = Js
End Function
'处理事件信息[将GameScript转化为Javascript]
Function EventInfo(Events)
Dim Info1
Dim Info2
Dim i
Dim JS
Dim AllDim(100)
Dim AllIf(100)
Dim DimCount
Dim IfCount
Dim NowIfID
Dim IsAdd
Dim sNO
DimCount = 0
IfCount = 0
sNO = 0
Info1 = Split(Events,Chr(10))
For i = LBound(Info1) To UBound(Info1)
iInfo = Info1(i)
IsAdd = True
'如果为空行则忽略
iInfo = Trim(iInfo)
iInfo = Replace(iInfo,Chr(9),"")
iSp = Split(iInfo,"//")
If Ubound(iSp)>0 Then iInfo = iSP(0)
If iInfo="" Then IsAdd = False
'如果为Dim则加入自定义变量列表
If UCase(Left(iInfo,5)) = "DIM $" Then
AllDim(DimCount) = Right(iInfo,Len(iInfo)-5)
DimCount = DimCount+1
IsAdd = False
End If
'处理If Then语句
If UCase(Left(iInfo,3)) = "IF " And UCase(Right(iInfo,5)) = " THEN" Then
'取出Bol表达市
'1 状态:0尚未处理,1已经处理完Else,2已经处理完End If
'2 表达式为False出口
'3 结束点出口
AllIf(IfCount) = "0,0,0"
NowIfID = IfCount
IfCount = IfCount+1
BolStr = Mid(iInfo,4,Len(iInfo)-8)
BolStr = Replace(BolStr,">=",">>")
BolStr = Replace(BolStr,"<=","<<")
BolStr = Replace(BolStr,"=","==")
BolStr = Replace(BolStr,">>",">=")
BolStr = Replace(BolStr,"<<","<=")
BolStr = Replace(BolStr,"<>","!=")
BolStr = Replace(BolStr,"And","&&")
BolStr = Replace(BolStr,"and","&&")
BolStr = Replace(BolStr,"AND","&&")
BolStr = Replace(BolStr,"Or","||")
BolStr = Replace(BolStr,"OR","||")
BolStr = Replace(BolStr,"or","||")
iInfo = "if(!(" & BolStr & "))this.EventGoto(#IFA" & NowIfID & ")"
End If
'处理Else语句
If UCase(iInfo) = "ELSE" Then
AllIf(NowIfID) = "1," & sNo+1 & ",0"
iInfo = "this.EventGoto(#IFB" & NowIfID & ")"
End If
'处理End If语句
If UCase(iInfo) = "END IF" Then
S = Split(AllIf(NowIfID),",")
S(0) = 2
S(2) = sNO
If S(1)="0" Then S(1) = S(2)
AllIf(NowIfID) = S(0) & "," & S(1) & "," & S(2)
IsAdd = False
NowIfID = NowIfID-1
End If
'处理Sleep语句
If UCase(Left(iInfo,5)) = "SLEEP" Then
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "SleepOn()" & Chr(34) & ")" & Vbcrlf
sNO = sNO+1
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & iInfo & Chr(34) & ")" & Vbcrlf
sNO = sNO+1
IsAdd = False
End If
If IsAdd Then
iInfo = Replace(iInfo,Chr(34),"/" & Chr(34))
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & iInfo & Chr(34) & ")" & Vbcrlf
sNO = sNO+1
End If
Next
' Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "SleepOn()" & Chr(34) & ")" & Vbcrlf
' sNO = sNO+1
' Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "Sleep(100)" & Chr(34) & ")" & Vbcrlf
' sNO = sNO+1
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "End()" & Chr(34) & ")" & Vbcrlf
'替换Dim标志
For i = 0 To DimCount-1
Info2 = Replace(Info2,"$" & AllDim(i),"this.Values[" & i & "]")
Next
'替换If标志
For i = 0 To IfCount-1
iIf = Split(AllIf(i),",")
Info2 = Replace(Info2,"#IFA" & i ,iIf(1))
Info2 = Replace(Info2,"#IFB" & i ,iIf(2))
Next
EventInfo = Info2
End Function
OutJS = ""
OutJS = OutJS & MapInfo(DOM)
OutJS = OutJS & SoundInfo(DOM)
OutJS = OutJS & TextInfo(DOM)
OutJS = OutJS & RoleInfo(DOM)
OutJS = OutJS & "LoadHero(-1,-1,0)" & Vbcrlf
OutJS = OutJS & NPCInfo(DOM)
OutJS = OutJS & MainInfo(DOM)
%>
Dim XML
Dim DOM
Dim JS
Dim Scene
Dim JsPatch '补充到JS脚本的部分
Scene = Request.QueryString("Scene")
If Scene="" Then Scene="1001"
XML = "/XML/Scene/" & Scene & ".xml"
Set DOM = Server.CreateObject("MSXML2.DOMDocument")
DOM.async = false
DOM.load(Server.MapPath ( XML))
'获取地图信息
Function MapInfo(DOM)
Dim MapXML
Dim MapDom
Dim MapHtml,MapX,MapY
Dim MapImg
Dim i,j
Dim MapWay
Dim JS
'得到MapXML
MapXML = DOM.selectSingleNode("/Scene").GetAttribute("Map")
Set MapDOM = Server.CreateObject("MSXML2.DOMDocument")
MapDom.async = false
MapDom.load(Server.MapPath(MapXML))
'得到MapHTML,MapX,MapY信息
MapHTML = MapDom.selectSingleNode("/Map/HTML").text
MapX = MapDom.selectSingleNode("/Map/X").text
MapY = MapDom.selectSingleNode("/Map/Y").text
MapHTML = Replace(MapHTML,Chr(13),"")
MapHTML = Replace(MapHTML,Chr(10),"")
JS = JS & "MAP.insertAdjacentHTML('beforeEnd','" & MapHTML & "')" & Vbcrlf
JS = JS & "MapX = " & MapX & Vbcrlf
JS = JS & "MapY = " & MapY & Vbcrlf
If MapDom.selectSingleNode("/Map").getElementsBytagname("Images").Length>0 Then
Set MapImg = MapDom.selectSingleNode("/Map/Images")
For Each i In MapImg.childNodes
JS = JS & "AddImg('" & i.text & "')" & Vbcrlf
Next
End If
JS = JS & "MAP.style.width = CeilSize*" & MapX & Vbcrlf
JS = JS & "MAP.style.height = CeilSize*" & MapY & Vbcrlf
JS = JS & "MAPBG.style.width = CeilSize*" & MapX & Vbcrlf
JS = JS & "MAPBG.style.height = CeilSize*" & MapY & Vbcrlf
MapWay = MapDOM.selectSingleNode("/Map/Way").text
MapWay = Split(MapWay,",")
Dim EachWay,X,Y
For X = 0 To MapX-1
EachWay = ""
For Y = 0 To MapY-1
EachWay = EachWay + MapWay(Y*MapX+X) + ","
Next
EachWay = Left(EachWay,Len(EachWay)-1)
JS = JS & "MapInfo[" & X & "] = new Array(" & EachWay & ")" & Vbcrlf
Next
MapInfo = Js
End Function
'获取声音信息
Function SoundInfo(DOM)
Dim Nodes
Dim Node
Dim NodeID
Dim NodeText
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("Sounds").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/Sounds")
For Each Node In Nodes.childNodes
NodeID = Node.GetAttribute("ID")
NodeText = Node.Text
Js = Js & "new Sound(" & NodeID & "," & Chr(34) & NodeText & Chr(34) & ")" & Vbcrlf
Next
End If
SoundInfo = Js
End Function
'获取文本信息
Function TextInfo(DOM)
Dim Nodes
Dim Node
Dim NodeID
Dim NodeName
Dim NodeIMG
Dim NodeText
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("Texts").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/Texts")
For Each Node In Nodes.childNodes
NodeID = Node.GetAttribute("ID")
NodeName = Node.GetAttribute("Name")
NodeIMG = Node.GetAttribute("IMG")
NodeText = Node.Text
NodeText = Replace(NodeText,"[BR]","<br>")
Js = Js & "new Text(" & NodeID & "," & Chr(34) & NodeName & Chr(34) & "," & Chr(34) & NodeIMG & Chr(34) & "," & Chr(34) & NodeText & Chr(34) & ")" & Vbcrlf
Next
End If
TextInfo = Js
End Function
'获取角色信息
Function RoleInfo(DOM)
Dim Nodes
Dim Node
Dim NodeName
Dim NodeW
Dim NodeH
Dim NodeF
Dim NodeIMG
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("RoleInfos").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/RoleInfos")
For Each Node In Nodes.childNodes
NodeName = Node.GetAttribute("Name")
NodeW = Node.GetAttribute("Width")
NodeH = Node.GetAttribute("Height")
NodeF = Node.GetAttribute("AllFrame")
NodeIMG = Node.GetAttribute("IMG")
Js = Js & "new RoleInfo("
Js = Js & Chr(34) & NodeName & Chr(34)
Js = Js & ","
Js = Js & Chr(34) & NodeIMG & Chr(34)
If NodeW<>"" Then
Js = Js & ","
Js = Js & NodeW
Js = Js & ","
Js = Js & NodeH
Js = Js & ","
Js = Js & NodeF
End If
Js = Js & ")"
Js = Js & Vbcrlf
Next
End If
RoleInfo = Js
End Function
'获取NPC信息
Function NPCInfo(DOM)
Dim Nodes
Dim Node
Dim NodeID
Dim NodeRoleInfo
Dim NodeX
Dim NodeY
Dim NodeF
Dim NodeMT
Dim NodeMS
Dim NodeMF
Dim NodeIsOverpass
Dim NodeFilter
Dim Js
If DOM.selectSingleNode("/Scene").getElementsBytagname("NPCs").Length>0 Then
Set Nodes = DOM.selectSingleNode("/Scene/NPCs")
For Each Node In Nodes.childNodes
NodeID = Node.GetAttribute("ID")
NodeRoleInfo = Node.GetAttribute("RoleInfo")
If IsNull(NodeRoleInfo) Then NodeRoleInfo = "NULL"
NodeX = Node.GetAttribute("X")
NodeY = Node.GetAttribute("Y")
NodeF = Node.GetAttribute("F")
NodeMT = Node.GetAttribute("MoveType")
NodeMS = Node.GetAttribute("MoveSpeed")
NodeMF = Node.GetAttribute("MoveFrequency")
NodeMP = Node.GetAttribute("MovePath")
NodeMP = Node.GetAttribute("MovePath")
NodeMRD = Node.GetAttribute("MoveRedo")
NodeMOL = Node.GetAttribute("MoveOverLook")
NodeIsOverpass = Node.GetAttribute("IsOverpass")
NodeFilter = Node.GetAttribute("Filter")
If IsNull(NodeF) Then NodeF = "0"
Js = Js & "LoadNPC("
Js = Js & NodeID
Js = Js & ","
Js = Js & Chr(34) & NodeRoleInfo & Chr(34)
Js = Js & ","
Js = Js & NodeX
Js = Js & ","
Js = Js & NodeY
Js = Js & ","
Js = Js & NodeF
Js = Js & ")"
Js = Js & Vbcrlf
If Not IsNull(NodeIsOverpass) Then
If NodeIsOverpass = "1" Then Js = Js & "Roles[" & NodeID & "].IsOverpass=true" & Vbcrlf
End If
If Not IsNull(NodeFilter) Then
Js = Js & "Role" & NodeID & ".style.filter=" & Chr(34) & NodeFilter & Chr(34) & Vbcrlf
End If
If Not IsNull(NodeMT) Then '设定移动方式了
If NodeMT = "Random" Then
NodeMT = 2
ElseIf NodeMT = "Follow" Then
NodeMT = 3
ElseIf NodeMT = "Plan" Then
NodeMT = 4
Else
NodeMT = 0
End If
Js = Js & "Roles[" & NodeID & "].SetMoveType("
Js = Js & NodeMT
Js = Js & ","
Js = Js & NodeMS
Js = Js & ","
Js = Js & NodeMF
Js = Js & ","
Js = Js & Chr(34) & NodeMP & Chr(34)
Js = Js & ","
If NodeMRD = "0" Then
Js = Js & "false"
Else
Js = Js & "true"
End If
Js = Js & ","
If NodeMOL = "0" Then
Js = Js & "false"
Else
Js = Js & "true"
End If
Js = Js & ")"
Js = Js & Vbcrlf
JsPatch = JsPatch & "Roles[" & NodeID & "].Move()" & Chr(10)
End If
If NodeF<>"0" Then '转向了
JsPatch = JsPatch & "Roles[" & NodeID & "].TurnTo(" & NodeF & ")" & Chr(10)
End If
If Node.hasChildNodes Then
Dim EvType
EvType = Node.childNodes(0).GetAttribute("Type")
EvCloneID = Node.childNodes(0).GetAttribute("CloneID")
If IsNull(EvCloneID) Then
Js = JS & "with(Roles[" & NodeID & "]){" & Vbcrlf
Js = JS & "EventType=" & EvType & Vbcrlf
Js = JS & EventInfo(Node.childNodes(0).text)
Js = JS & "}" & Vbcrlf
Else
Js = JS & "with(Roles[" & NodeID & "]){" & Vbcrlf
Js = JS & "EventType=" & EvType & Vbcrlf
Js = JS & "CloneEvent(" & EvCloneID & ")" & Vbcrlf
Js = JS & "}" & Vbcrlf
End If
End If
Next
End If
NPCInfo = Js
'Response.Write JS
'Response.End
End Function
'获取主脚本信息
Function MainInfo(DOM)
Dim NodeText
Dim EventHead
NodeText = DOM.selectSingleNode("/Scene/MainScript").text
EventHead = "" '自动添加以下事件到主脚本
EventHead = EventHead & "IsKeyLocked=true" & Chr(10) '锁定键盘
'EventHead = EventHead & "MapHide()" & Chr(10) '隐藏屏幕
EventHead = EventHead & "DrawIMGObj()" & Chr(10) '隐藏屏幕
'EventHead = EventHead & "Sleep(100)" & Chr(10) '隐藏屏幕
EventHead = EventHead & "LoadAllImage()" & Chr(10) '载入图片
EventHead = EventHead & JsPatch '补丁部分
NodeText = EventHead & NodeText
NodeText = NodeText & "AllEnd()" & Chr(10) '全部结束
Js = JS & "with(Roles[" & 0 & "]){" & Vbcrlf
Js = JS & "EventType=2" & Vbcrlf
Js = JS & EventInfo(NodeText)
Js = JS & "}" & Vbcrlf
MainInfo = Js
End Function
'处理事件信息[将GameScript转化为Javascript]
Function EventInfo(Events)
Dim Info1
Dim Info2
Dim i
Dim JS
Dim AllDim(100)
Dim AllIf(100)
Dim DimCount
Dim IfCount
Dim NowIfID
Dim IsAdd
Dim sNO
DimCount = 0
IfCount = 0
sNO = 0
Info1 = Split(Events,Chr(10))
For i = LBound(Info1) To UBound(Info1)
iInfo = Info1(i)
IsAdd = True
'如果为空行则忽略
iInfo = Trim(iInfo)
iInfo = Replace(iInfo,Chr(9),"")
iSp = Split(iInfo,"//")
If Ubound(iSp)>0 Then iInfo = iSP(0)
If iInfo="" Then IsAdd = False
'如果为Dim则加入自定义变量列表
If UCase(Left(iInfo,5)) = "DIM $" Then
AllDim(DimCount) = Right(iInfo,Len(iInfo)-5)
DimCount = DimCount+1
IsAdd = False
End If
'处理If Then语句
If UCase(Left(iInfo,3)) = "IF " And UCase(Right(iInfo,5)) = " THEN" Then
'取出Bol表达市
'1 状态:0尚未处理,1已经处理完Else,2已经处理完End If
'2 表达式为False出口
'3 结束点出口
AllIf(IfCount) = "0,0,0"
NowIfID = IfCount
IfCount = IfCount+1
BolStr = Mid(iInfo,4,Len(iInfo)-8)
BolStr = Replace(BolStr,">=",">>")
BolStr = Replace(BolStr,"<=","<<")
BolStr = Replace(BolStr,"=","==")
BolStr = Replace(BolStr,">>",">=")
BolStr = Replace(BolStr,"<<","<=")
BolStr = Replace(BolStr,"<>","!=")
BolStr = Replace(BolStr,"And","&&")
BolStr = Replace(BolStr,"and","&&")
BolStr = Replace(BolStr,"AND","&&")
BolStr = Replace(BolStr,"Or","||")
BolStr = Replace(BolStr,"OR","||")
BolStr = Replace(BolStr,"or","||")
iInfo = "if(!(" & BolStr & "))this.EventGoto(#IFA" & NowIfID & ")"
End If
'处理Else语句
If UCase(iInfo) = "ELSE" Then
AllIf(NowIfID) = "1," & sNo+1 & ",0"
iInfo = "this.EventGoto(#IFB" & NowIfID & ")"
End If
'处理End If语句
If UCase(iInfo) = "END IF" Then
S = Split(AllIf(NowIfID),",")
S(0) = 2
S(2) = sNO
If S(1)="0" Then S(1) = S(2)
AllIf(NowIfID) = S(0) & "," & S(1) & "," & S(2)
IsAdd = False
NowIfID = NowIfID-1
End If
'处理Sleep语句
If UCase(Left(iInfo,5)) = "SLEEP" Then
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "SleepOn()" & Chr(34) & ")" & Vbcrlf
sNO = sNO+1
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & iInfo & Chr(34) & ")" & Vbcrlf
sNO = sNO+1
IsAdd = False
End If
If IsAdd Then
iInfo = Replace(iInfo,Chr(34),"/" & Chr(34))
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & iInfo & Chr(34) & ")" & Vbcrlf
sNO = sNO+1
End If
Next
' Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "SleepOn()" & Chr(34) & ")" & Vbcrlf
' sNO = sNO+1
' Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "Sleep(100)" & Chr(34) & ")" & Vbcrlf
' sNO = sNO+1
Info2 = Info2 & "AddEvent(" & sNO & "," & Chr(34) & "End()" & Chr(34) & ")" & Vbcrlf
'替换Dim标志
For i = 0 To DimCount-1
Info2 = Replace(Info2,"$" & AllDim(i),"this.Values[" & i & "]")
Next
'替换If标志
For i = 0 To IfCount-1
iIf = Split(AllIf(i),",")
Info2 = Replace(Info2,"#IFA" & i ,iIf(1))
Info2 = Replace(Info2,"#IFB" & i ,iIf(2))
Next
EventInfo = Info2
End Function
OutJS = ""
OutJS = OutJS & MapInfo(DOM)
OutJS = OutJS & SoundInfo(DOM)
OutJS = OutJS & TextInfo(DOM)
OutJS = OutJS & RoleInfo(DOM)
OutJS = OutJS & "LoadHero(-1,-1,0)" & Vbcrlf
OutJS = OutJS & NPCInfo(DOM)
OutJS = OutJS & MainInfo(DOM)
%>
- JS+ASP后台写的在线RPG游戏
- js+php+mysql写的rpg网页游戏引擎源码-DotK改进版
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第0篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第1篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第2篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第3篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第4篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第5篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第6篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第7篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第8篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第9篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第10篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第11篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第12篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第13篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第14篇)
- 网络游戏demo开发实例:多人在线RPG游戏(MMO RPG)demo的开发记录(第15篇)
- jsp读取中文参数乱码解决
- 说明
- 关于描述性统计分析
- 一些常见的又不了解的定律
- 无组件ASP文件上传源代码
- JS+ASP后台写的在线RPG游戏
- 自动本地化
- 简单set互异
- IPv6协议在各操作系统下的安装与配置
- 利用FIFO编写一个Server/Client程序
- asp.net2.0 问题集锦 解答
- 端口镜像详解
- 全局变量和局部变量在内存里的区别?堆和栈(转载-无法确定作者与出处)
- 步入J2EE架构和过程(1)