1. 程式人生 > 其它 >ajax.open打不開本地檔案_各種技巧——外接檔案相關

ajax.open打不開本地檔案_各種技巧——外接檔案相關

技術標籤:ajax.open打不開本地檔案

寫在前面:

我已退坑多年,有很多東西可能已經記不清了,我只能憑著現在的知識來寫。

可能有的東西已經不符合現在的版本了。

如果有什麼錯誤的地方歡迎指出。

知乎沒有為jass設高亮程式碼,因此把高亮設為相近的語言。


這裡指的外接檔案並非外接模型,而是指一些檔案並不寫在we裡,而是編譯時候引用。

通過外接指令碼與其他資原始檔,配合版本控制程式就可以實現多人制作。雖然VSC的相關流程已成熟,但是這裡我給出了另一種方法。

首先外接指令碼檔案大家應該都清楚,利用YDWE的wave預處理,include指定檔案即可。

但是這裡我們可以玩點別的東西。

#define DISK E
#define MAP_NAME HH
#define COMMON(s) <DISK:/Sync/Script/common/s>
#define MAP_FILE(s) <DISK:/Sync/Script/MAP_NAME/s>

上面先巨集定義DISK為你的硬碟碟符,MAP_NAME為地圖名縮寫,然後COMMON指定公用程式碼庫的路徑,MAP_FILE指定該地圖程式碼路徑。

然後我們可以引用程式碼了。

#include COMMON(BBCC.j)
#include COMMON(AAABBB.lua)

#include MAP_FILE(EERR.lua)
#include MAP_FILE(QQWW.lua)
#include MAP_FILE(CCDD.h)

這樣管理就非常方便。

接下來我們利用stormlib來實現資原始檔外接,下面的固定路徑你都可以更改為巨集名,我就不寫了。

lua程式碼:

<?
local importfile=false--是否匯入模型
local preview=false--是否確定預覽模型
local previewfiles={}

local ffi = require 'ffi'
local stormlib = ffi.load('stormlib')
local filenum=0
if importfile then
stormlib.SFileSetMaxFileCount(__map_handle__.handle,0x1000)
imppath=io.popen([[@echo off&&E:&&cd E:SyncHH&&for /R %%f in (*.*) do echo %%f]],"r")
for s in imppath:lines() do
    local_,_,ipath=string.find(s,"E:SyncHH(.+)")
    if not (string.find(ipath,"jpg") or string.find(ipath,"png")) then
        __map_handle__:add_file(ipath,fs.path(s))
        if preview then
            filenum=filenum+1
            table.insert(previewfiles,string.char(0xD)..ipath..string.char(0))
        end
    end
end
end
?>

需要注意使用stormlib.SFileSetMaxFileCount來設定地圖的最大檔案數量,不然匯入不進去。

資料夾裡新增jpg和png檔案,可以實現預覽貼圖,這裡判斷jpg與png也是因為如此。

由於這裡編譯時候直接新增到地圖中,在輸入管理器沒有這些檔案,因此預覽變成了一個問題,我們可以通過寫入並匯入imp檔案來解決。

Lua程式碼:

<?
if preview then
    --__map_handle__:extract("war3map.imp",)
    read_file = io.__open("E:SyncScript"..mapname.."war3map.imp","r")
	content = read_file:read("*a")
    local int=string.sub(content,5,5)
    filenum=filenum+string.byte(int)
    local se=string.sub(content,1,4)..string.char(filenum-(filenum//0x100)*0x100)..string.char(filenum//0x100)..string.sub(content,7,#content)..table.concat(previewfiles)
	write_file = io.__open("E:war3map.imp","w")
	write_file:write(se)
	read_file:close()
	write_file:close()
    __map_handle__:add_file("war3map.imp",fs.path("E:war3map.imp"))--預設匯入你想要的檔案
else
    __map_handle__:add_file("war3map.imp",fs.path("E:SyncScript"..mapname.."war3map.imp"))
end
imppath:close()
?>

注意這裡的程式碼要放到第一個lua程式碼的if裡,因為你不可能不匯入就預覽。

好了,這樣你可以把資原始檔放到外面的資料夾而不放輸入管理器,在編譯時候可以匯入。

而且如果你電腦不咋地,需要的時候臨時關閉匯入檔案,還能節約你的編譯時間。