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

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

Закрытая тема
 
iiiCpu

offline
Опыт: 509
Активность:
Ошибка чтения из ХэшТаблицы
Всё, я окончательно разобрался в проблеме. Суть заключается в том, что кэш\хеш нельзя использовать в одном тригере с трекейблами. То есть если триггер вызывает функцию создания трекейбла, то из этого же триггера вызывать сохранение в кеш\хеш нельзя (не имеет смысла, результат - ноль. см карту). И так было с давних пор. НО! Обходили это просым способом - запускали функцию одного триггера из другого. Это было прекрасно и всё работало. А в версии 1,24 это пофиксали. То есть если мы пытаемся выполнить любую функцию, не содержащуюся в теле триггера или в кастомскрипт, карта просто не загружается.
Методов решения два:
  • Сохранять сами трекейблы в хэш, а потом их оттуда извлекать и измываться. Но это сложно и багоюзно. Создай кучу трекейблов, сохрани каждый, потом по-одному извлекай и сохраняй уже инфу под его ИД. К тому же сохранять свежесозданный трекейбл в хеш-таблицу движок отказывается, пихая туда нулл. Поэтому первый, кто сотворит сие чудо заслуживает премии имени Нобеля и премии имени Дарвина. Зато все любители Доты и БэтлНэта будут довольны. Или менее кровавый способ:
  • Использовать старые версии Вара. Вариант для многих неприемлимый. Но пока единственный описанный
Тема закрыта. Теперь уже целиком и полностью

Отредактировано iiiCpu, 21.08.2009 в 01:05.
Старый 19.08.2009, 17:17
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
У тебя никак не может быть равно TRUE
GetHandleId(testTrackable) - 1048600 != GetHandleId(GetTriggeringTrackable()) - 1048683) / 4
Ты обращаешься не к той ячейке, сделай так...
call SaveInteger(udg_HashNo1, 1, GetHandleId(testTrackable)
set x = LoadInteger(udg_HashNo1, 1, GetHandleId(GetTriggeringTrackable())
Да и зачем тебе брать какое-то значение привязанное к локальной переменной...
Старый 19.08.2009, 17:28
iiiCpu

offline
Опыт: 509
Активность:
сори, эт я форматировал от лишних функций. Это кусок того кода, старого. Короче вот без форматирования
function Trig_TrackCreateActions takes nothing returns nothing
   local integer x
    set x = LoadInteger(udg_HashNo1, 1, (GetHandleId(GetTriggeringTrackable()) - 1048683) / 4)
     call DisplayTimedTextToPlayer(Player(0), 0, 0, 5, I2S(GetHandleId(GetTriggeringTrackable())))
     call DisplayTimedTextToPlayer(Player(0), 0, 0, 5, I2S((GetHandleId(GetTriggeringTrackable()) - 1048663) / 4))
     call DisplayTimedTextToPlayer(Player(0), 0, 0, 5, I2S(x))
endfunction

//===========================================================================
function InitTrig_TrackCreate takes nothing returns nothing
 local trigger hit=CreateTrigger()
 local trigger track=CreateTrigger()
 local trackable testTrackable
 local real x = udg_invx
 local real y = udg_invy
    call CreateDestructable('B000', x, y, 0, 1, 0)
    set testTrackable = CreateTrackable("her.mdx",x,y,0)
     call DisplayTimedTextToPlayer(Player(0), 0, 0, 5, I2S(GetHandleId(testTrackable)))
    call SaveInteger(udg_HashNo1, 1, (GetHandleId(testTrackable) - 1048663) / 4, 1)//Save this... In the name off Godness!!!
    call TriggerRegisterTrackableHitEvent(hit,testTrackable)
    call TriggerRegisterTrackableTrackEvent(track,testTrackable)
   call TriggerAddAction(hit, function Trig_TrackCreateActions)
endfunction
Итог: числа одинаковые, но в итоге извлекается ноль
Числа специально подобраны. В итоге если повторим блок создания трекабеля, то получим ровные порядковые номера от единицы до Н.
Старый 19.08.2009, 17:47
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
iiiCpu, таблица не создана =)
Нужно написать udg_HashNo1=InitHashtable()
Hellfim добавил:
И это, вопросы по Jass'у логичнее писать в Jass разделе, не находишь?)
Старый 19.08.2009, 17:57
iiiCpu

offline
Опыт: 509
Активность:
Hellfim, я ж писал: она создаётся в другом триге при инициализации. причём если б что - она вылетала, а она упорно возвращает ноль.
ЗЫ: да, я вижу, что там снова разность не совпадает, но я ещё раз пишу - это кусок тригера, облегчённый и изменённый
Старый 19.08.2009, 18:04
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
iiiCpu, Проблема осталась...
(GetHandleId(GetTriggeringTrackable()) - 1048683) / 4
(GetHandleId(testTrackable) - 1048663) / 4
1048683 != 1048663
Ты все ровно считываешь разные Ячейки...
Старый 19.08.2009, 18:38
iiiCpu

offline
Опыт: 509
Активность:
MupaMaX, повторяю для особо тормозных: ЭТО НЕ ОСНОВНОЙ ТРИГЕР. ЭТО ЕГО КОПИЯ В ДРУГОЙ КАРТЕ, ПРИЛИЗАНАЯ И КРИВАЯ. сори за крик - нервы Попробуй создать пустую карту, задать переменные, исправить эти ДОЛБАНЫЕ циферки или удалить их нафик. Они вообще через день после нахождения проблемы появились.
У меня такое чувство, что придётся отдельную функцию делать... блин...
Старый 19.08.2009, 18:54
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
iiiCpu, Дружище тебе рассказать что я сейчас с помощи ХТ делаю ? ты просто офигеешь... если не в циферках дела, ты значит считываешь разные Trackable...
ХТ тупо бомба... кэш отдыхает, на столько удобней... практичней...
Если ты даешь кусок кода... в котором проблема... ( ты думаешь что в нем проблема... ) тебе вряд ли кто скажет в чем проблема... либо выкладывай весь код связанный с данной таблицей либо ищи проблему сам...
Вероятная проблема - ты считываешь разные Trackable, а циферки ваше удали они не нужны !
Старый 19.08.2009, 19:17
iiiCpu

offline
Опыт: 509
Активность:
Пусть тот, у кого на этой карте вдруг загрузится сохранённая циферка, кинет меня камень, завёрнутый в скриншот
Прикрепленные файлы
Тип файла: w3x htdhhtd.w3x (79.6 Кбайт, 13 просмотров )
Старый 19.08.2009, 20:46
Nekit1234007

offline
Опыт: 11,916
Активность:
И в правду нули:
Старый 19.08.2009, 21:01
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
Вот держи, на ошибку я тебе указал, ищи способ её решения сам...
Если не поймешь в чем она... напиши...
Прикрепленные файлы
Тип файла: w3x htdhhtd.w3x (80.0 Кбайт, 14 просмотров )
Старый 19.08.2009, 21:21
iiiCpu

offline
Опыт: 509
Активность:
Возможно... Но есть 3 НО.
первое: ты добавил 2 глобальных трака... Зачем? функция спокольно распозновала трак, ты ведь тыкая на моей карте получал постоянно одинаковые и точные значения?
второе: куча ненужных переменных. зачем делать 4 раза одно и то же? я тут и так переборщил, а ты ещё хуже делаешь... И два раза дал действия тригерам с траками... некомпитентно
третье: твоя исходная карта у меня варом не кушается.
Итог: нефиг выпендриваться, это тебе не 50 думмиюнитов делать. Это блин другое.
ИМХО тут не в этом дело. У меня кеш тоже не естся. Даже если вынести сохранение переменных за пределы тригера - фапфапфап... Мож вдруг тоткогонельзяназывать выйдет сюда и тыкнет меня носом в мою ошибку...
Старый 19.08.2009, 21:54
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
iiiCpu, Рассказываю прикол... если ты не понял, и не смог запустить карту в варе... у тебя не стоит JNGP, дальше прикол в том что SaveInteger делаться только 1 раз, и то при загрузки карты...
Объяснять дальше есть необходимость ?
Старый 19.08.2009, 22:02
iiiCpu

offline
Опыт: 509
Активность:
MupaMaX, он стоит версия 5с + новый список функций. А ты свою карту проверял? запускал в Варе? Эта "фишка" - всё-равно что себя из болота за волосы тянуть: мож с танком и прокатит, а вот человеку плохо. Проще функцию вписать в кастомскрипт. Всё, спорить с тобой я не буду.
Жду ещё мнений от других людей.
[+] 3 пункта от ScorpioT1000: завуалированный мат

Отредактировано ScorpioT1000, 20.08.2009 в 01:31.
Старый 19.08.2009, 22:12
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
iiiCpu, 2 скрина...
на 1м скрине, сразу после старта игры... показываеться ... - 0 ( инициализация... ) хэш таблица еще даже создаться не успела выходит 0...
на 2м скрине, я кликаю на зону, и ого, что происходит нам не выводиться ... - 0, потому что сработала функция не установки маяка, а функция клика на зону...
P.s. Советую тебе себя за волосы тягать почаще...
[+] 2 пункта от Hellfim: 8.1 (прикрепление больших изображений)

Отредактировано Hellfim, 20.08.2009 в 20:03.
Старый 19.08.2009, 23:06
iiiCpu

offline
Опыт: 509
Активность:
Гений... Мне пофф, я хачу тупо в ячейку 1, 1 записать значение 2 и прочитать его. Объясняю ещё раз: я хочу записать в ячейку число. а мне фиг. И знаешь, почему? потому, что я должен это делать в секции function Trig__Actions takes nothing returns nothing иначе никак. Выглядит это где-то так:
=======Тригер==========
=====События=====
к примеру юнит здох. Только события и простая арифметика.
=====Действия=====
Всё, что душе угодно. Сюда нужно писать всю работу с хешэм
(А озможно ли здесь создавать тригеры\добавлять им условия\действия?)
=====Тело=====
Назначает связи событий и действий. работа с кеш\хеш здесь невозможна.
Я писал именно сюда.
Итого перенести все записи в Действия и сделать там тригеры. Вот что бывает, когда не знаешь структуру языка. _~
MupaMaX, у тебя вылазит по 2 раза одна надпись. ты не сохранил в хэш, а лишь вывел на экран номер тракейбла. Вылазит по 2 нуля. выводишь 0 при запуске... Подвиг! Занимаешься спеллами... система патронов... Потроны в массив - 10 способов выбора патронов - 10 способов заставить юнита атаковать или НЕ атаковать... Только которые я могу реально реализовать. Создать нестандартную молнию или ещё чего - хммм... когда ToadCop скажет, что твоя карта лучше, чем его квакАрена - я принесу тебе сколько угодно извинений в любом виде. А до тех пор не умничий!
ХОЛИВАР!!!
Тема закрыта.
Старый 19.08.2009, 23:45
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
iiiCpu, Я тебе раза 3 написал в чем искать проблему, ты же уперся и не хотел даже попробовать самостоятельно решить эту проблему...
Лучше объясни для чего тебе нужна Хэш Таблица ?
Старый 20.08.2009, 00:36
iiiCpu

offline
Опыт: 509
Активность:
обновил первый пост. прошу прочесть и закрыть.
Старый 21.08.2009, 01:06
Закрытая тема

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

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

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

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



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