[Вопрос] Проверка наличия файла в папке варкрафта
|
|
Chain-Saw | Дата: Среда, 12 Июня 2013, 13:48:20 | Сообщение # 1 |
1 уровень
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Блокировки:
| Как сделать функцию проверки файла в папке варкрафта, так, чтобы если файл есть, что устанавливалась Логическая = ДА, а если нет, то Логическая = НЕТ, какую функцию надо вставить в этот файл, который проверяешь, и главное, сделать так, чтобы не было дисенхронизации.
http://vk.com/id103136436
|
|
|
|
Zonnery | Дата: Среда, 12 Июня 2013, 15:26:28 | Сообщение # 2 |
3 уровень
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 95
Блокировки:
| Без включённых локальных файлов и использовании сторонних средств - это невозможно. Использование локальных файлов, в свою очередь, чревато багами. У меня, к примеру, варкрафт не распознаёт карты, если включены лок. файлы. Теоретически, можно подгрузить функцию прелоадом из файла, установить с помощью неё имя игроку №16 "1". Соответственно, если такой функции\файла нет, то функция выполняться не будет, и имя будет отличным. Но это в теории, на практике проверить не имею возможности, ввиду вышеперечисленного.
Мир, как зеркало, отражает ваше отношение к нему. Когда боретесь с миром, он борется с вами. Когда прекращаете свою битву, мир идет навстречу.(В.Зеланд) vk.com/zonnery
|
|
|
|
SirNikolas | Дата: Среда, 12 Июня 2013, 17:04:21 | Сообщение # 3 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Код //file.j: function PreloadFiles takes nothing returns nothing call ExecuteFunc("FileDoesExist") endfunction Код //war3map.j: globals boolean udg_FExists = false endglobals
function FileDoesExist takes nothing returns nothing call BJDebugMsg("Файл существует") set udg_FExists = true endfunction
function test takes nothing returns nothing call Preloader("file.j") if udg_FExists then call BJDebugMsg("Мы также можем вывести сообщение здесь") else call BJDebugMsg("Файла не существует") endif endfunction Код Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III] "Allow Local Files"=dword:00000001
|
|
|
|
Chain-Saw | Дата: Среда, 12 Июня 2013, 19:07:46 | Сообщение # 4 |
1 уровень
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Блокировки:
| Цитата (SirNikolas) function FileDoesExist takes nothing returns nothing call BJDebugMsg("Файл существует") set udg_FExists = true endfunction
Произойдёт дисенхронизация на 2 части: В первой части останутся игроки, у которых udg_FExists = false Во второй части останутся игроки, у которых udg_FExists = true
Разве не так?
http://vk.com/id103136436
|
|
|
|
SirNikolas | Дата: Среда, 12 Июня 2013, 21:29:29 | Сообщение # 5 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Тьфу, не увидел, что для мультиплеера надо. Возьми DataManager. Там данные синхронизируются.
|
|
|
|
Chain-Saw | Дата: Среда, 12 Июня 2013, 21:46:07 | Сообщение # 6 |
1 уровень
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Блокировки:
| Ах, если б я разбирался в этом... Вот я и прошу сделать краткую наработку.
http://vk.com/id103136436
|
|
|
|
SirNikolas | Дата: Четверг, 13 Июня 2013, 13:33:08 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Код globals gamecache udg_Cache boolean array udg_FExists integer udg_Integer endglobals
function FileDoesExist takes nothing returns nothing call StoreBoolean(udg_Cache, "", I2S(udg_Integer), true) endfunction
function test takes nothing returns nothing local integer i = 0 local string s = ""//Добавляем в таблицу строк пустую строку. call FlushGameCache(InitGameCache("FileExists.w3v"))//Убираем последствия предыдущих игр set udg_Cache = InitGameCache("FileExists.w3v") set udg_Integer = 0 loop //Код функции FileDoesExist может вызвать десинхронизацию таблицы строк, так что перестрахуемся и добавим строки "0", "1", ..., "11" в таблицы всех игроков. set s = I2S(udg_Integer) if GetLocalPlayer() == Player(udg_Integer) then call Preloader("file.txt") endif exitwhen udg_Integer == 11 set udg_Integer = udg_Integer + 1 endloop call TriggerSyncStart() loop if GetLocalPlayer() == Player(i) then call SyncStoredBoolean(udg_Cache, "", I2S(i)) endif exitwhen i == 11 set i = i + 1 endloop call TriggerSleepAction(8.) call TriggerSyncReady() set i = 0 loop set udg_FExists[i] = GetStoredBoolean(udg_Cache, "", I2S(i)) exitwhen i == 11 set i = i + 1 endloop call FlushGameCache(udg_Cache) set udg_Cache = null//Переменная больше использоваться не будет. Обнулим ее. endfunction Как-то так. Можно попробовать wait заменить таймером. Примечание. Если будет использоваться какой-нибудь оптимизатор (Векса, например), проследить, чтобы он не стер манипуляции с переменной s. Я не уверен, но вместо второго цикла можно попытаться написать вот так:Код call SyncStoredBoolean(udg_Cache, "", I2S(GetPlayerId(GetLocalPlayer())))
|
|
|
|