VBS excel 导出生成lua文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xin_y/article/details/79787098
Class TaskDesc
	public id
	public name
	public typeTask
	public klass
	public state
	public frd
	public reqLev
	public taskPre1
	public taskPre2
	public taskPre3
	public taskPre4
	public taskPre5
	public teamReq
	public timeReq
	public numReq
	public bakReq
	public acceptNpc
	public conveyNpc
	public conveyPath
	public taskTargetDesc
	public NpcDialog1
	public PlayerDialog1
	public NpcDialog2
	public PlayerDialog2
	public NpcDialog3
	public PlayerDialog3
	public NpcDialog4
	public PlayerDialog4
	public GiveItem1
	public GiveItem2
	public GiveItem3
	public GiveItem4
	public GiveItem5
	public SubmitNpc
	public TaskStep
	public TaskComplteDesc
	public SubmitItem1
	public SubmitItem1Num
	public SubmitItem2
	public SubmitItem2Num
	public SubmitItem3
	public SubmitItem3Num
	public SubmitItem4
	public SubmitItem4Num
	public SubmitItem5
	public SubmitItem5Num
	public SubmitNpcDialog
	public AwardExp
	public AwardTael
	public AwardMoney
	public AwardGift
	public AwardFriend
	public AwardOther
	public AwardItem1
	public AwardItem1Num
	public m_AwardItem1SelToken
	public AwardItem2
	public AwardItem2Num
	public m_AwardItem2SelToken
	public AwardItem3
	public AwardItem3Num
	public m_AwardItem3SelToken
	public AwardItem4
	public AwardItem4Num
	public m_AwardItem4SelToken
	public AwardItem5
	public AwardItem5Num
	public m_AwardItem5SelToken
	public ClanBuilding
	public ClanContrib
	public PExp

	Private Sub Class_Initialize()
		id					   = 0
		name                   = 0
		typeTask               = 0
		klass                  = 0
		state                  = 0
		frd                    = 0
		reqLev                 = 0
		taskPre1               = 0
		taskPre2               = 0
		taskPre3               = 0
		taskPre4               = 0
		taskPre5               = 0
		teamReq                = 0
		timeReq                = 0
		numReq                 = 0
		bakReq                 = 0
		acceptNpc              = 0
		conveyNpc              = 0
		conveyPath             = 0
		taskTargetDesc         = 0
		NpcDialog1             = 0
		PlayerDialog1          = 0
		NpcDialog2             = 0
		PlayerDialog2          = 0
		NpcDialog3             = 0
		PlayerDialog3          = 0
		NpcDialog4             = 0
		PlayerDialog4          = 0
		GiveItem1              = 0
		GiveItem2              = 0
		GiveItem3              = 0
		GiveItem4              = 0
		GiveItem5              = 0
		SubmitNpc              = 0
		TaskStep               = 0
		TaskComplteDesc        = 0
		SubmitItem1            = 0
		SubmitItem1Num         = 0
		SubmitItem2            = 0
		SubmitItem2Num         = 0
		SubmitItem3            = 0
		SubmitItem3Num         = 0
		SubmitItem4            = 0
		SubmitItem4Num         = 0
		SubmitItem5            = 0
		SubmitItem5Num         = 0
		SubmitNpcDialog        = 0
		AwardExp               = 0
		AwardTael              = 0
		AwardMoney             = 0
		AwardGift              = 0
		AwardFriend            = 0
		AwardOther             = 0
		AwardItem1             = 0
		AwardItem1Num          = 0
		m_AwardItem1SelToken   = 0
		AwardItem2             = 0
		AwardItem2Num          = 0
		m_AwardItem2SelToken   = 0
		AwardItem3             = 0
		AwardItem3Num          = 0
		m_AwardItem3SelToken   = 0
		AwardItem4             = 0
		AwardItem4Num          = 0
		m_AwardItem4SelToken   = 0
		AwardItem5             = 0
		AwardItem5Num          = 0
		m_AwardItem5SelToken   = 0
		ClanBuilding           = 0
		ClanContrib            = 0
		PExp                   = 0
	End Sub

End Class

Dim gPath
Out_1()

Sub Out_1()

	if wscript.arguments(0) = "-h" Then
		'MsgBox "使用说明" & Chr(13) & Chr(10) & "windows系统运行 cmd 进入对应文件目录 -h 帮助 -s 读取文件Task.xlsx路径"
		MsgBox "使用说明" & vbCrLf & "windows系统运行 cmd 进入对应文件目录" & vbCrLf & " -h 帮助 -s 读取文件Task.xlsx路径"
	ElseIf wscript.arguments(0) = "-s" Then
		Out_2()
	Else
		MsgBox "噢噢!! 输入错误!! 文件名 -h 查看帮助"
	End If

End Sub

Dim task_desc
Sub Out_2()
	
	gPath = CreateObject("Scripting.FileSystemObject").GetFolder(wscript.arguments(1)).Path

	'MsgBox "OK1"
	'msgbox(gPath)
	
	Dim oSheet,oWb,oExcel
	Set	oExcel = CreateObject("Excel.Application")
	Set oWb = oExcel.Workbooks.Open(gPath & "\Task2.xlsx")
	Set oSheet = oWb.Sheets("Task")
	
    Max = oSheet.UsedRange.Rows.Count
	ColumnMax = oSheet.UsedRange.Columns.Count
	
	For row = 2 To Max
		Set task_desc = new TaskDesc
		
		For column = 1 To ColumnMax
			Dim value_column
			value_column = oSheet.Cells(row, column).Value
			
			'id	name	type	preTaskId	playerLevel	klass	step	describe	toolsPublish	awardExp	awardTael	awardItem
			If oSheet.Cells(1, column).Value = "id" Then
				task_desc.id = value_column
			ElseIf oSheet.Cells(1, column).Value = "name" Then
				task_desc.name = value_column
			ElseIf oSheet.Cells(1, column).Value = "type" Then
				task_desc.typeTask = value_column
			ElseIf oSheet.Cells(1, column).Value = "preTaskId" Then
				task_desc.taskPre1 = value_column
			ElseIf oSheet.Cells(1, column).Value = "playerLevel" Then
				task_desc.reqLev = value_column
			ElseIf oSheet.Cells(1, column).Value = "klass" Then
				task_desc.klass = value_column
			ElseIf oSheet.Cells(1, column).Value = "step" Then
				task_desc.TaskStep = value_column
			ElseIf oSheet.Cells(1, column).Value = "describe" Then
				task_desc.TaskComplteDesc = value_column
				'暂留
			ElseIf oSheet.Cells(1, column).Value = "toolsPublish" Then
				task_desc.GiveItem1 = split(value_column, "|")
			ElseIf oSheet.Cells(1, column).Value = "awardExp" Then
				task_desc.AwardExp = value_column
			ElseIf oSheet.Cells(1, column).Value = "awardTael" Then
				task_desc.AwardTael = value_column
				'暂留
			ElseIf oSheet.Cells(1, column).Value = "awardItem" Then
				task_desc.AwardItem1 = split(value_column, "|")
			End If
		Next

		Call WriteLuaFile(task_desc, gPath)
		
		Set task_desc = Nothing	

	Next

	oExcel.Workbooks.Close
    MsgBox "OK"
	
End Sub

Sub WriteLuaFile(task_desc, Path)
	If task_desc.id = 1101 Then
		msgbox(task_desc.id)

	
	dim f
	set f = CreateObject("ADODB.Stream")
	f.Type=2
	f.Charset = "UTF-8"
	f.Open

	'-----------------------------------------------------------------------------------------
	f.WriteText "--任务的接受条件", 1
	f.WriteText "function Task_Accept_0000" & task_desc.id & "()", 1
	
	If task_desc.state <> 2 Then
		f.WriteText "    if GetPlayerData(6) ~= " & task_desc.state & " then", 1
		f.WriteText "        return false;", 1
		f.WriteText "    end", 1
	End If

	f.WriteText "    local player = GetPlayer();", 1	
	If task_desc.reqLev <> 0 Then
		f.WriteText "    if player:GetLev() < " & task_desc.reqLev & " then", 1
		f.WriteText "        return false;", 1
		f.WriteText "    end", 1	
	End If
	f.WriteText "    local task =  player:GetTaskMgr();", 1
	f.WriteText "    if task:HasAcceptedTask(" & task_desc.id & ") or task:HasCompletedTask(" & task_desc.id & ") or task:HasSubmitedTask(" & task_desc.id & ") then", 1
	f.WriteText "        return false;", 1
	f.WriteText "    end", 1
	
	'前置任务
	If task_desc.taskPre1 <> 0 Then
		f.WriteText "    if not task:HasSubmitedTask(" & task_desc.taskPre1 & ") then" , 1
		f.WriteText "        return false;" , 1
		f.WriteText "    end" , 1
	End If

	f.WriteText "    return true;", 1
	f.WriteText "end", 1

	'-----------------------------------------------------------------------------------------	
	f.WriteText "-----可接任务条件", 1
	f.WriteText "function Task_Can_Accept_0000" & task_desc.id & "()", 1
	f.WriteText "    local player = GetPlayer();", 1
	f.WriteText "    local task =  player:GetTaskMgr();", 1

	If task_desc.state <> 2 Then
	f.WriteText "    if GetPlayerData(6) ~= " & task_desc.state & " then", 1
	f.WriteText "        return false;", 1
	f.WriteText "    end", 1
	End If
	
	If task_desc.reqLev <> 0 Then
		f.WriteText "    if player:GetLev() < " & task_desc.reqLev & " then", 1
		f.WriteText "        return false;", 1
		f.WriteText "    end", 1	
	End If
	
	If task_desc.typeTask = 6 Then
		f.WriteText "    if task:HasAcceptedTask(" & task_desc.id & ") or task:HasCompletedTask(" & task_desc.id & ") or task:HasSubmitedTask(" & task_desc.id & ") or not player:isClanTask(" & task_desc.id & ") then", 1
	Else
		f.WriteText "    if task:HasAcceptedTask(" & task_desc.id & ") or task:HasCompletedTask(" & task_desc.id & ") or task:HasSubmitedTask(" & task_desc.id & ") then", 1	
	End If

	f.WriteText "        return false;", 1
	f.WriteText "    end", 1
	
	f.WriteText "    if not task:HasSubmitedTask(" & task_desc.taskPre1 & ") then" , 1
	f.WriteText "        return false;" , 1
	f.WriteText "    end" , 1
	
	f.WriteText "    return true;" , 1
	f.WriteText "end" , 1
	f.WriteText " ", 1
	f.WriteText " ", 1
	
	'-----------------------------------------------------------------------------------------
	f.WriteText "--任务完成条件", 1
	f.WriteText "function Task_Submit_0000" & task_desc.id & "()", 1
	f.WriteText "    if GetPlayer():GetTaskMgr():HasCompletedTask(" & task_desc.id & ") then", 1
	f.WriteText "        return true;", 1
	f.WriteText "    end", 1
	f.WriteText "    return false;", 1
	f.WriteText "end", 1
	
	f.WriteText " ", 1
	f.WriteText " ", 1
	
	'-----------------------------------------------------------------------------------------
	f.WriteText "---------------------------------------", 1
	f.WriteText "------NPC交互的任务脚本", 1
	f.WriteText "---------------------------------------", 1
	f.WriteText "function Task_0000" & task_desc.id & "(npcId)", 1
	f.WriteText "    local player = GetPlayer();", 1
	f.WriteText "    local task = player:GetTaskMgr();", 1
	f.WriteText "    local action = ActionTable:Instance();", 1

	f.WriteText " ", 1
	
	f.WriteText "    if task:GetTaskAcceptNpc("  & task_desc.id & ") == npcId and Task_Accept_0000" & task_desc.id & "() then", 1
	f.WriteText "        action.m_ActionType = 0x0001;", 1
	f.WriteText "        action.m_ActionID = ", 1
	f.WriteText "        action.m_ActionToken = 1;", 1
	f.WriteText "        action.m_ActionStep = 01;", 1
	'有待商榷
	f.WriteText "        action.m_ActionMsg = task_msg_294", 1
	If task_desc.klass = 4 Then
			f.WriteText "    elseif task:GetTaskAcceptNpc("  & task_desc.id & ") == npcId and task:HasAcceptedTask(" & task_desc.id & ") then", 1
			f.WriteText "        action.m_ActionType = 0x0001;", 1
			f.WriteText "        action.m_ActionID = " & task_desc.id, 1
			f.WriteText "        action.m_ActionToken = 3;", 1
			f.WriteText "        action.m_ActionStep = 11;", 1
			'有待商榷
			f.WriteText "        action.m_ActionMsg = task_msg_294", 1
	End If
	
	f.WriteText "    elseif task:GetTaskSubmitNpc("  & task_desc.id & ") == npcId then", 1
	f.WriteText "        action.m_ActionStep = 01;", 1
	f.WriteText "        if Task_Submit_0000" & task_desc.id & "() then", 1
	f.WriteText "            action.m_ActionType = 0x0001;", 1
	f.WriteText "            action.m_ActionID = " & task_desc.id, 1
	f.WriteText "            action.m_ActionToken = 2;", 1
	f.WriteText "            action.m_ActionStep = 10;", 1
	'有待商榷
	f.WriteText "            action.m_ActionMsg = task_msg_294", 1
	f.WriteText "            elseif task:HasAcceptedTask(" & task_desc.id & ") then", 1
	f.WriteText "            action.m_ActionType = 0x0001;", 1
	f.WriteText "            action.m_ActionID = " & task_desc.id, 1
	f.WriteText "            action.m_ActionToken = 0;", 1
	f.WriteText "            action.m_ActionStep = 0;", 1
	'有待商榷
	f.WriteText "            action.m_ActionMsg = task_msg_294", 1
	f.WriteText "        end", 1
	f.WriteText "    end", 1
	f.WriteText "    return action;", 1
	f.WriteText "end", 1
	
	f.WriteText " ", 1
	f.WriteText " ", 1

	'交互步骤 这块暂时不写

	'-----------------------------------------------------------------------------------------
	f.WriteText "--接受任务", 1
	f.WriteText "function Task_0000" & task_desc.id & "_accept()", 1
	f.WriteText "    local player = GetPlayer();", 1
	f.WriteText "    local task = player:GetTaskMgr();", 1
	f.WriteText "    if not Task_Accept_0000" & task_desc.id & "() then", 1
	f.WriteText "        return false", 1
	f.WriteText "    end", 1
    for i = 0 to ubound(task_desc.GiveItem1) 
        if i = 0 Then
            f.WriteText "    local awards = {{" & task_desc.GiveItem1(i) & "}", 1
        ElseIf i = ubound(task_desc.GiveItem1) Then
            f.WriteText "        ,{" & task_desc.GiveItem1(i) & "}}", 1
        Else
            f.WriteText "        ,{" & task_desc.GiveItem1(i) & "}", 1
		End If
    next
	f.WriteText "    local fixReqGrid = 0", 1

    f.WriteText "    for i = 1, #awards do", 1
	f.WriteText "        fixReqGrid = fixReqGrid + package:GetItemUsedGrids(awards[i][1],awards[i][2],1)", 1
	f.WriteText "    end", 1
    f.WriteText "    if fixReqGrid > player:GetFreePackageSize() then", 1
    f.WriteText "        player:sendMsgCode(2, 1013, 0);", 1
    f.WriteText "        return false;", 1
    f.WriteText "    end", 1

    f.WriteText "    for i = 1, #awards do", 1
    f.WriteText "        if IsEquipTypeId(awards[1]) then", 1
    f.WriteText "            for k = 1, awards[2] do", 1
    f.WriteText "                package:AddEquip(awards[1], 1);", 1
    f.WriteText "            end", 1
    f.WriteText "        else", 1
    f.WriteText "            package:AddItem(awards[1],awards[2],1);", 1
    f.WriteText "        end", 1
	f.WriteText "    end", 1


	f.WriteText "end", 1
	f.WriteText "", 1
	
	f.WriteText "--提交任务", 1
	f.WriteText "function Task_0000" & task_desc.id & "_submit(itemId, itemNum)", 1

	If task_desc.typeTask <> 3 Then
		f.WriteText "        local player = GetPlayer();", 1
		f.WriteText " ", 1
	End If
	
	f.WriteText "    local package = player:GetPackage();", 1
	f.WriteText "    if not player:GetTaskMgr():SubmitTask(" & task_desc.id & " then", 1
	f.WriteText "        return false;", 1
	f.WriteText "    end", 1
	f.WriteText " ", 1
    for i = 0 to ubound(task_desc.AwardItem1) 
        if i = 0 Then
            f.WriteText "    local awards = {{" & task_desc.AwardItem1(i) & "}", 1
        ElseIf i = ubound(task_desc.AwardItem1) Then
            f.WriteText "        ,{" & task_desc.AwardItem1(i) & "}}", 1
        Else
            f.WriteText "        ,{" & task_desc.AwardItem1(i) & "}", 1
		End If
    next
	f.WriteText "    local fixReqGrid = 0", 1

    f.WriteText "    for i = 1, #awards do", 1
	f.WriteText "        fixReqGrid = fixReqGrid + package:GetItemUsedGrids(awards[i][1],awards[i][2],1)", 1
	f.WriteText "    end", 1
    f.WriteText "    if fixReqGrid > player:GetFreePackageSize() then", 1
    f.WriteText "        player:sendMsgCode(2, 1013, 0);", 1
    f.WriteText "        return false;", 1
    f.WriteText "    end", 1

    f.WriteText "    for i = 1, #awards do", 1
    f.WriteText "        if IsEquipTypeId(awards[1]) then", 1
    f.WriteText "            for k = 1, awards[2] do", 1
    f.WriteText "                package:AddEquip(awards[1], 1);", 1
    f.WriteText "            end", 1
    f.WriteText "        else", 1
    f.WriteText "            package:AddItem(awards[1],awards[2],1);", 1
    f.WriteText "        end", 1
	f.WriteText "    end", 1

    f.WriteText "    player:AddExp(" & task_desc.AwardExp & ");", 1
    f.WriteText "    player:getTael(" & task_desc.AwardTael & ");", 1

	f.WriteText "end", 1
	f.WriteText "", 1

	'-----------------------------------------------------------------------------------------
	f.WriteText "--放弃任务", 1
	f.WriteText "function Task_0000" & task_desc.id & "_abandon()", 1
	f.WriteText "    local package = GetPlayer():GetPackage();", 1
	f.WriteText "    return GetPlayer():GetTaskMgr():AbandonTask(" & task_desc.id & ");", 1
	f.WriteText "end", 1

	SaveFile Path & "\" & "TaskTest\" & "Task_0000" & task_desc.id  & ".lua", f
	f.Close()
	set f = Nothing
	
	End If
	
End Sub

Sub SaveFile(Path, txtStream)
	dim f
	set f = CreateObject("ADODB.Stream")
	f.Type=1
	f.Open
	txtStream.position = 3
	txtStream.CopyTo f,txtStream.size-3
	f.SaveToFile Path, 2
	f.Close()
	set f = Nothing
End Sub

猜你喜欢

转载自blog.csdn.net/xin_y/article/details/79787098
vbs