ajax.open打不開本地檔案_各種技巧——外接檔案相關
阿新 • • 發佈:2021-01-19
技術標籤: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裡,因為你不可能不匯入就預覽。
好了,這樣你可以把資原始檔放到外面的資料夾而不放輸入管理器,在編譯時候可以匯入。
而且如果你電腦不咋地,需要的時候臨時關閉匯入檔案,還能節約你的編譯時間。