游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2715|回复: 5

问个有关VB脚本的问题。

[复制链接]

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
发表于 2006-11-28 12:31:00 | 显示全部楼层 |阅读模式
RT :
    游戏使用外部程序写入 , 使用了microsoft  script control  
    难点关键是如何取得同主程序的联系。
   
     通常的做法是Add object  .添加对对象的引用.  

     可是如果当需要运行的脚本需要引用调用当前脚本中的对象中的变量呢? 我想到了外部调用参数
     
      Sub Result(Aday,Bday,Cday)
   Dim i As Integer, j As Integer, k As Integer
   Dim A As Integer, Ab As Integer, Ac As Integer
          For i = 1 To Aday
            If Bday Mod 2 = 0 Then
              A = Bday \ 2
            Else
              A = (Bday + 1) \ 2
            A = Bday \ 2
            Ab = Cday + i
            If Ab <= A Then
              For j = 0 To 3
                se.ind(i).Value = se.ind(i).Value - (Ab * 40) \ A + 20
              Next j
            Else
              For k = 0 To 3
                Ac = Bday - Ab
                se.ind(i).Value = se.ind(i).Value - (Ac * 40) \ A - 20
              Next k
            End If
          Next i
End Sub

在脚本中是不能给参数定义数据类型的.  一定义就报错 ,
但是如果过程中 ,还需要用到别的变量,怎么办?  脚本不允许定义变量啊.  
真郁闷 .  连个用来做循环的i 都不能用
CJ,MIU请帮帮我 .  

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-11-28 12:45:00 | 显示全部楼层

Re:问个有关VB脚本的问题。

当我要给脚本中加入变量时,我会定义一个动态数组,然后将脚本中涉及的变量存入动态数组里面。

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
 楼主| 发表于 2006-11-28 13:12:00 | 显示全部楼层

Re:问个有关VB脚本的问题。

    能不能发个例子我看看啊 ?
    是不是定义一个动态数组作为参数啊 ?

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2006-11-28 18:20:00 | 显示全部楼层

Re:问个有关VB脚本的问题。

Private Type Variable
    Name As String
    Value As String
End Type
Dim VarCount As Integer
Dim Var() As Variable

定义变量:
                tmpstr = Parameter + ","
                tmpint = 0
                For i = 1 To Len(tmpstr)
                    If Mid(tmpstr, i, 1) = "," Then tmpint = tmpint + 1
                Next i
                VarCount = tmpint
                ReDim Var(tmpint)
                For i = 1 To tmpint
                    Var(i).Name = Mid(tmpstr, 1, InStr(1, tmpstr, ",", vbTextCompare) - 1)
                    tmpstr = Mid(tmpstr, InStr(1, tmpstr, ",", vbTextCompare) + 1)
                    Var(i).Value = ""
                Next i

设置变量的值:
                tmpstr = Scripts(j)
                For i = 1 To VarCount
                    If GetPart(Parameter, ",", 1) = Var(i).Name Then
                        Select Case GetPart(Parameter, ",", 3)
                            Case "", "String"
                                Var(i).Value = GetPart(Parameter, ",", 2)
                            Case "Number", "Numerical"
                                Var(i).Value = Calc(PatchVar(GetPart(Parameter, ",", 2)))
                        End Select
                        Exit For
                    End If
                Next i
引用变量:(我的程序里变量部分用/'和'/括起来)
Private Function PatchVar(strInput As String) As String
Dim i As Integer, tmpstr As String, tmpstr2 As String, tmpint As Long
    tmpstr = strInput
    Do While InStr(1, tmpstr, "/'", vbTextCompare) > 0
        If GetBetween(tmpstr, "/'", "'/") Like "*.Direction" Then
            tmpstr2 = Mid(GetBetween(tmpstr, "/'", "'/"), 1, InStr(1, GetBetween(tmpstr, "/'", "'/"), ".", vbTextCompare) - 1)
            If tmpstr2 = "Lead" Then
                tmpstr = Mid(tmpstr, 1, InStr(1, tmpstr, "/'", vbTextCompare) - 1) + ConvertDirection(Trim(Str(Direction))) + Mid(tmpstr, InStr(1, tmpstr, "'/", vbTextCompare) + 2)
            Else
                For i = 0 To SpiritsCount 'SpiritsCount - 1
                    If GetPart(Spirits(i).Name, ",", 1) = tmpstr2 Then
                        tmpstr = Mid(tmpstr, 1, InStr(1, tmpstr, "/'", vbTextCompare) - 1) + Spirits(i).ArrSpiritsDirection + Mid(tmpstr, InStr(1, tmpstr, "'/", vbTextCompare) + 2)
                        Exit For
                    End If
                Next i
            End If
        ElseIf GetBetween(tmpstr, "/'", "'/") Like "*.Position" Then
            tmpstr2 = Mid(GetBetween(tmpstr, "/'", "'/"), 1, InStr(1, GetBetween(tmpstr, "/'", "'/"), ".", vbTextCompare) - 1)
            If tmpstr2 = "Lead" Then
                If Spirits(0).ArrSpiritsX < imgWidth Then
                    tmpint = Spirits(0).ArrSpiritsX + (Spirits(0).ArrSpiritsY - 1) * imgWidth
                Else
                    tmpint = Spirits(0).ArrSpiritsY * imgWidth
                End If
                tmpstr = Mid(tmpstr, 1, InStr(1, tmpstr, "/'", vbTextCompare) - 1) + Trim(Str(tmpint)) + Mid(tmpstr, InStr(1, tmpstr, "'/", vbTextCompare) + 2)
            Else
                For i = 0 To SpiritsCount 'SpiritsCount - 1
                    If GetPart(Spirits(i).Name, ",", 1) = tmpstr2 Then
                        If Spirits(i).ArrSpiritsX < imgWidth Then
                            tmpint = Spirits(i).ArrSpiritsX + (Spirits(i).ArrSpiritsY - 1) * imgWidth
                        Else
                            tmpint = Spirits(i).ArrSpiritsY * imgWidth
                        End If
                        tmpstr = Mid(tmpstr, 1, InStr(1, tmpstr, "/'", vbTextCompare) - 1) + Trim(Str(tmpint)) + Mid(tmpstr, InStr(1, tmpstr, "'/", vbTextCompare) + 2)
                        Exit For
                    End If
                Next i
            End If
        Else
            For i = 1 To VarCount
                If Var(i).Name = GetBetween(tmpstr, "/'", "'/") Then
                    tmpstr = Mid(tmpstr, 1, InStr(1, tmpstr, "/'", vbTextCompare) - 1) + Var(i).Value + Mid(tmpstr, InStr(1, tmpstr, "'/", vbTextCompare) + 2)
                    Exit For
                End If
            Next i
        End If
    Loop
    PatchVar = tmpstr
End Function

时间仓促,没有整理,只是把我的游戏里的相关代码贴出,看不懂的继续研究,谢谢。

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
 楼主| 发表于 2006-11-28 21:50:00 | 显示全部楼层

Re:问个有关VB脚本的问题。

想这样一段外部代码, 能够在VB主程序中执行。
脚本使用script control 来执行
脚本代码:
  Public sub Result(Aday, i)
    for i= 1 to Aday
       Man.ep=Man.ep-10
    next i
  End sub

程序代码:
Public Sub Done()
    With FrmMain.ScMain '读取脚本
        .Language = "vbscript"
        .Modules.Add "Event"       outcode为保存脚本的字符变量名.  
        .Modules("Event").AddCode outcode (错误发生在这句,提示语句没有结束)
        .AddObject "Man", TieXue, True
        .AddObject "SA", SYSA, True
        .AddObject "se", SYSE, True
        .Modules("Event").Run "Result", GetLday, Vday, VTime
        .Reset
    End With
  .......
End Sub
  
   主要问题, 脚本如何实现循环, 别的都看烂了, 翻了很多资料。。 都没翻到

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
 楼主| 发表于 2006-11-28 22:38:00 | 显示全部楼层

Re:问个有关VB脚本的问题。

终于搞定了, 破VB,害死我了。
原来把循环的next i去掉  i  就可以了。
这个破问题捆饶了我10来个小时, 还好我的典韦救了老头子我一命。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 23:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表