Сейчас 09:53:15 Понедельник, 22 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Проверка наличия файла в папке варкрафта (И без десинхронизации.)
[Вопрос] Проверка наличия файла в папке варкрафта
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())))


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Проверка наличия файла в папке варкрафта (И без десинхронизации.)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz