XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
koloff, JNGP тут не причем. У тебя еще может не переноситься по тем причсинам что
  1. у тебя нет нужного типа юнита на второй карте
  2. файлы находятся не в кампании
  3. ты не сохраняешь кеш =)
  4. ты ошибся при записи в кеш значений.
  5. ты не инициализируешь кеш на одной из карт (хотя в этом случае вкрипт подвешивает поток).
Старый 29.08.2009, 10:09
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Я думаю, дело в первом пункте, сейчас экспортирую героя в карту с подземельем. Все остальные о.к. Спасибо.

koloff добавил:
Сунул героя в карту с подземельем, итог, не помогло. Можно, ещё попробовать экспортировать не в карту, а в общую базу кампании, но скорей всего, это вариант-масло масляное. Жаль, после прочтения постаPlayerDark, я обнадёжился, что причина найдена.
Старый 29.08.2009, 13:52
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
»
Код:
function Trig_Podzemelye_Conditions takes nothing returns boolean
if ( not ( IsUnitType(gg_unit_H000_0011, UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction

function Trig_Podzemelye_Actions takes nothing returns nothing
call InitGameCacheBJ( "fog.w3v" )
call StoreUnitBJ( gg_unit_H000_0011, "Чёрный Медведь", "Category", GetLastCreatedGameCacheBJ() )
call SaveGameCache( GetLastCreatedGameCacheBJ() )
call SaveAndChangeLevelBJ( "SaveFile.w3z", "Maps\\Dung 1.w3x", false )
call ShowCustomCampaignButton( true, 2 )
call RemoveUnit( gg_unit_H000_0011 )
call DestroyTrigger( GetTriggeringTrigger() )

************************************
call BJDebugMsg("11111!!!!!")
************************************
endfunction

//===========================================================================
function InitTrig_Podzemelye takes nothing returns nothing
set gg_trg_Podzemelye = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_Podzemelye, gg_rct________________034 )
call TriggerAddCondition( gg_trg_Podzemelye, Condition( function Trig_Podzemelye_Conditions ) )
call TriggerAddAction( gg_trg_Podzemelye, function Trig_Podzemelye_Actions )
endfunction


Попробуй сделать так. Если все функции до эхо работают, тогда на экране должна появляться надпись. Если не появляется, по переставляй функцию под звёздочками вверх на функцию, потом ещё на функцию, и т.д.. Когда текст вновь появится, напиши сюда и скинь код.
Старый 29.08.2009, 14:00
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Так подойдёт?call DisplayTextToForce( bj_FORCE_PLAYER[0], "TRIGSTR_161" ). Я не знаю, как ты выводишь текст такой строчкой.call BJDebugMsg("11111!!!!!")
Старый 29.08.2009, 15:35
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
koloff, подойдёт, разумеется.
Старый 29.08.2009, 15:41
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Вообщем, прогнал оба тригера поэтапно, своей строчкой. Получается, все действия выполняются. Может, в кэш надо писать героя, не в категории, а в другой раздел? Я что-то такое слышал, что есть ещё что-то, кроме категорий.

koloff добавил:
Нет, ерунда. Нашёл статью, запись проводится по двум параметрам, категории и метка. Используются оба.

koloff добавил:
PlayerDark,
А, что за файлы могут находится, не в кампании? Я делал так, создаёшь карту, затем вторую, обе добавляешь в кампанию. Есть ещё база данных файлов в самой кампании, но насколько я знаю, она нужна для снижения веса карт, если у тебя несколько карт в кампании, не экспортируешь объекты, в каждую карту, а добавляешь в общую базу кампании. В принципе, должно работать и так, и так, но с общей базой кампании рациональней.
Старый 29.08.2009, 16:49
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Разобрался, спасибо всем за помощь.
P.S. Не допускаются пробелы в имени, при записи в кэш.

koloff добавил:
С переносом героя порядок, сделал дополнительное задание на подземелье. Теперь стал насущным вопрос по переносу квестов. По теме на сайте задавались вопросы, найденная инфа делится на две категории:
1. Совет, пиши в кэш квесты, с последующим впадением в ступор вопрошающего, пытающегося выспросить детали, и закрытием темы с нулевым результатом.
2. Совет, пиши в кэш квесты, с последующей благодарностью, и закрытием темы, с опять же, нулевым результатом.
Все статьи мало содержательны, именно по кэшу. Рассматривается в основном. вопрос переноса героя, без подробностей. Исходя, из своего невеликого опыта работы с кэшем, заключил следующие:
В кэш можно писать, юнита, целочисленную, реальную переменную, строку и булиан. Отсюда вывод, надо как-то конвертировать запись с квестами, в одну из четырёх(юнит не в счёт) пригодных для записи в кэш величин. Потом, можно будет оперировать с ними, по аналогии с юнитом. Такая схема правильна? И во что правильно конвертировать?
Ещё один, важный вопрос. несколько не по теме. Увидел такое мнение, что нельзя использовать действие Destroy triger во избежание глюков, это так? Сам, широко использовал это действие в карте, будет ли turn off trigger лучшим решением? Спасибо.

Отредактировано koloff, 31.08.2009 в 21:02.
Старый 31.08.2009, 21:33
Doc

offline
Опыт: 63,163
Активность:
koloff, я считаю лучше использовать булеан, или интежр, но лучше интежр, пример такой, абсолютно условно ставим интежры, например 0 - квест игроку неизвестен\недоступен, 1 - квест игроку известен но не выполнен, 2 - квест выполнен, 3 - квест провален, возможно есть лучшие способы конечно.
Старый 31.08.2009, 21:41
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Насколько я понял, конвертировать ничего не надо, нужно в понятных кэшу переменных описать квесты, и затем на другой карте, восстановить их(переменные)? Я не понимаю, как то ведь надо приравнять, например, описание квеста к переменной, что бы по этой переменной восстановить его на другой карте. Сам механизм мне не понятен, вот квест записан в переменную типа квест, туда входит вся инфа по квесту, так? Как приравнять эту переменную, или конвертировать её к целочисленной?

koloff добавил:
Вот, к примеру, выбираем действие Store Integer, по щелчку на Value, доступные возможности, конвертировать реальную и строку в целочисленную, по герою, по юниту и т.д, но нет про квесты вообще ничего. Есть даже на тригеры.
Старый 31.08.2009, 22:55
Uber
Все любят статусы
offline
Опыт: 39,243
Активность:
Я не совсем понимаю, зачем тебе лишние проблемы. Ты писал, что герою нужно достать камень. Ты находишь его в подземелье, загружаешь главную карту, восстанавливаешь героя из кэша, но все твои квесты ведь были сохранены и загружены заново. Герой имеет камень - значит задание выполнено. Кажется это тебе люди пытались обьяснить. Или например, тебе нужно убить на другой карте человека и доложить об этом на первой карте. Там ты убиваешь его, ставишь бул (например) man_killed=true, и сохраняешь его в кэш. Загружаешь первую карту, и восстанавливаешь man_killed (тоесть заносишь его значение в другую переменную, можно с таким же именем). Приходишь с докладом, если man_killed то задание выполнено. А ты стараешься квест сохранить в кэш. Попробуй что ни-будь попроще сначала.
Старый 01.09.2009, 02:16
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Uber,
Так я ставил задачу освоить редактор, а не сделать игру. Игра лишь средство освоения редактора. Вот и разбираюсь потихоньку. Кроме того, я уже сделал дополнительное задание на подземелье, помимо камня. Ты считаешь нормальным явление, что при выходе из подземелья оно не будет нигде отображаться? Да и камень, часть сюжетного квеста, получил камень задание должно обновиться. Я решаю задачи по мере их возникновения, работе с кэшем всё равно надо учиться, если сейчас встал этот вопрос, ну и хорошо, буду разбираться. Я стараюсь набрать базовый уровень знаний по редактору, согласись кэш туда 100% должен входить. Я вскрыл кампанию Рексара, посмотрел тригеры. Схема такая, как писал DoctorGester, в квестах используется целочисленная переменная в качестве отметки продвижения по квесту, она и пишется в кэш, и она же востанавливается из кэша. Вроде, ничего не конвертируется, хотя я так и не понимаю до конца механизм действия. Но, знаю больше чем час назад, прогресс есть. Сегодня уже спать, а завтра будет новый прогресс. Не боги горшки обжигают, разберусь. В крайнем случае, есть форум.
Старый 01.09.2009, 02:47
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Обшарил все тригеры в кампании Рексара, вроде схема ясна (хотя механизм действия непонятен), всё именно так, как писал DoctorGester, ничего конвертировать не надо. Опишу детально, как я делаю. Перед входом в подземелье, у нас доступен основной квест Служба (Создаётся на инициализации карты), пишем туда отметку set udg_SlushbaProgres = IMaxBJ(1, udg_SlushbaProgres), на заход в подземелье работает тригер
» Спойлер
function Trig_Podzemelye_Conditions takes nothing returns boolean
if ( not ( IsUnitType(gg_unit_H000_0011, UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction

function Trig_Podzemelye_Actions takes nothing returns nothing
call InitGameCacheBJ( "Cashe" )
call StoreUnitBJ( udg_Hero, "HeroSaved", "Units", GetLastCreatedGameCacheBJ() )
call StoreIntegerBJ( udg_SlushbaProgres, "SlushbaProgres", "TransitionKey", GetLastCreatedGameCacheBJ() )
call SaveGameCache( GetLastCreatedGameCacheBJ() )
call SaveAndChangeLevelBJ( "SaveFile.w3z", "Maps\\Dung 1.w3x", false )
call ShowCustomCampaignButton( true, 2 )
call DestroyTrigger( GetTriggeringTrigger() )
endfunction

//===========================================================================
function InitTrig_Podzemelye takes nothing returns nothing
set gg_trg_Podzemelye = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_Podzemelye, gg_rct________________034 )
call TriggerAddCondition( gg_trg_Podzemelye, Condition( function Trig_Podzemelye_Conditions ) )
call TriggerAddAction( gg_trg_Podzemelye, function Trig_Podzemelye_Actions )
endfunction

Соответственно, строчка call StoreIntegerBJ( udg_SlushbaProgres, "SlushbaProgres", "TransitionKey", GetLastCreatedGameCacheBJ() ) пишет нашу отметку в кэш. Загружается подземелье, на инициализацию карты повешен тригер
» Спойлер
function Trig___________________________u_Actions takes nothing returns nothing
call InitGameCacheBJ( "Cashe" )
call RestoreUnitLocFacingAngleBJ( "HeroSaved", "Units", GetLastCreatedGameCacheBJ(), Player(0), GetRectCenter(gg_rct________________000), 0 )
set udg_Hero = GetLastRestoredUnitBJ()
set udg_SlushbaProgres = GetStoredIntegerBJ("SlushbaProgres", "TransitionKey", GetLastCreatedGameCacheBJ())
call ModifyGateBJ( bj_GATEOPERATION_OPEN, gg_dest_DTg5_0000 )
call QuestMessageBJ( GetPlayersAll(), bj_QUESTMESSAGE_ALWAYSHINT, "TRIGSTR_015" )
call SetUnitInvulnerable( udg_Hero, true )
endfunction

//===========================================================================
function InitTrig___________________________u takes nothing returns nothing
set gg_trg___________________________u = CreateTrigger( )
call TriggerAddAction( gg_trg___________________________u, function Trig___________________________u_Actions )
endfunction

Строчка set udg_SlushbaProgres = GetStoredIntegerBJ("SlushbaProgres", "TransitionKey", GetLastCreatedGameCacheBJ()) загружает нашу отметку из кэша. В результате загружается подземелье, появляется герой, по квестам ничего не перенеслось... Вот, схему я описал. Сделано точно под копирку с кампании Рексара, что не так в ней?

koloff добавил:
По логике, получается что мы записали и восстановили значение переменной, сам квест остался за бортом. Но, в кампании Рексара ничего нет кроме этой схемы, сам механизм привязки содержимого квеста к отметке, неизвестен... Она может работать, только если содержимое квестов где то сохраняется, а отметка служит просто ссылкой, на динамику квеста. Всё бы было гораздо проще, если бы, например, Save Cash писал бы по умолчанию, в какую то категорию профиль игрока. А так, ну не знаю, наверно в сейв игры пишется, только использовать это нельзя. Вообщем, идей не осталось никаких, нужен толчок в правильном направлении.

Отредактировано koloff, 01.09.2009 в 17:01.
Старый 01.09.2009, 16:14
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Оказывается, на Jass'е можно конвертировать любой обьект(handle), в одну из четырёх переменных понятных кэшу. Почитав в целях ознакомления, статью по Jass'у, впечатлился, возможностей больше, и проще их ипользовать. Но рано ещё... Кампания Рексара, ведь тригерно сделана, нужно просто понять устройство переноса квестов, без этого понимания самому не сделать, тупо скопировав пару строк, получил закономерный, неработающий результат.
Старый 01.09.2009, 22:03
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
А квест точно такой же кто создавать будет? Хочешь таскать за собой все квесты, будь добр, создай в каждой карте их заново. Через кэш таскай только их состояние.
Старый 02.09.2009, 06:20
koloff
Кинопланетянин
offline
Опыт: 31,149
Активность:
Да я думал уже об этом, когда в кампании рексара нашёл странный пустой тригер, с коментарием создать квесты. Смутило, что он пустой. Спасибо огромное, буду пробовать.
Старый 02.09.2009, 14:44
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:06.