Сейчас 05:28:44 Пятница, 27 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Помощь с хешем
TitansДата: Пятница, 29 Апреля 2011, 17:44:00 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Как правильно записывать переменные в хеш?
В чём тут ошибка?
Первый триггер:

Второй триггер:


Сообщение отредактировал Titans - Пятница, 29 Апреля 2011, 17:45:21
 

DragoNДата: Пятница, 29 Апреля 2011, 19:23:25 | Сообщение # 2
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Quote (Titans)

local lightning Line
call AddLightningLoc( "DRAM", Point_spell, Point_Tree )
set Line = GetLastCreatedLightningBJ()

что за ужасы?
Quote (Titans)
Как правильно записывать переменные в хеш?

почитай статью на форуме про таблицы


El Psy Congroo
 

SirNikolasДата: Пятница, 29 Апреля 2011, 19:31:40 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Кстати, вот она.

 

lawsonДата: Пятница, 29 Апреля 2011, 21:16:40 | Сообщение # 4
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
CreateTimer() - а дальше? почему не активируешь его?
Где call TimerStart()?
А так все правильно записал в хеш. Только есть несколько не нужных перменных типа integer i, да и BJ ну в общем исполнение триггера не очень.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Пятница, 29 Апреля 2011, 21:23:46
 

FkoFFДата: Пятница, 29 Апреля 2011, 22:11:35 | Сообщение # 5
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Titans, много бж функций, много лишних действий.

call AddLightningHandle(Hashtable, index1,index2, AddLightning("modelname",x1,y1,x2,y2))


 

TitansДата: Суббота, 30 Апреля 2011, 12:23:55 | Сообщение # 6
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (lawson)
CreateTimer() - а дальше? почему не активируешь его? Где call TimerStart()?

Я думал таймер нужен для записи переменной в хеш, но прочитав статью я зашёл в тупик, у меня получилось вот так:
Code
call SaveUnitHandle(udg_Data,GetHandleId(Hero),0,Hero)
local unit Hero = LoadUnitHandle(udg_Data,GetHandleId(Hero),0)

И когда триггер пытается присвоить переменную из хеша, то это вызывает ошибку, типо необъявлена переменая "Hero" в этом куске "GetHandleId(Hero)". И что делать?
Quote (DragoN)
что за ужасы?

Что вы имели ввиду? (BJ?)
Quote (lawson)
да и BJ

Quote (FkoFF)
много бж функций

Что такое BJ(Blizzard Jass) и чем отличаются к примеру такие действия?
Code
set Line = GetLastCreatedLightningBJ()
set Line = GetLastCreatedLightning()


Сообщение отредактировал Titans - Суббота, 30 Апреля 2011, 12:26:43
 

lawsonДата: Суббота, 30 Апреля 2011, 13:36:13 | Сообщение # 7
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Titans)
И когда триггер пытается присвоить переменную из хеша, то это вызывает ошибку, типо необъявлена переменая "Hero" в этом куске "GetHandleId(Hero)". И что делать?

Ты пытаешься сначала добавить переменную Hero в хеш а потом объявляешь ее надо наоборот сначала объявить переменную а потом добавлять ее в хеш.
Вот тебе триггер пример.
local timer t = CreateTrimer()
local unit u = GetTriggerUnit()
call TimerStart(t, 2, false, function TimerFunction)
call SaveUnitHandle(hash, GetHandleId(t), 0, u)
set t = null
set u = null
Функция TimerFunction должна стоять выше функциии где создаеться таймер или в нестандартном коде.
Вот так и создаеться таймер и записываються в хеш переменные.

Добавлено (30-04-2011, 13:32)
---------------------------------------------

Quote (Titans)
и чем отличаются к примеру такие действия?

Я не знаю как точно это объяснить, BJ - это функции которые перед действием исполняют еще ряд функция которые в них прописаны, и их не желательно использовать так как большинство из них вызывают утечки а большинство вообще бесмысленные типа твоего GetLastCreatedLightningBJ(). Я примерно объяснил.

Добавлено (30-04-2011, 13:36)
---------------------------------------------
Вообще не читай статьи учись по примерам, скачай наработку Dreii по воскрешению героев там хорошо показано как использовать хеш в таймерах.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Суббота, 30 Апреля 2011, 13:39:05
 

TitansДата: Суббота, 30 Апреля 2011, 14:04:24 | Сообщение # 8
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
lawson а если мне не нужен таймер, то обязательно его создавать? Ну создал я таймер и всё равно не хочет он загружать переменные из хеша, в игре ноль эмоций.

Сообщение отредактировал Titans - Суббота, 30 Апреля 2011, 14:04:55
 

SirNikolasДата: Суббота, 30 Апреля 2011, 14:39:12 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (lawson)
Вообще не читай статьи, учись по примерам
Очень глупый совет. Это кому как понятнее.

Добавлено (30-04-2011, 14:39)
---------------------------------------------
Titans, что тебе нужно сделать?


 

TitansДата: Суббота, 30 Апреля 2011, 14:53:33 | Сообщение # 10
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
SirNikolas, способность которая создаёт линии от находящихся поблизости деревьев в указанною точку и при прохождении через эти линии наносился урон проходящему. Это всё я зделал, я хотел заменить глобалки на локалки и воспользовался для этого хешем, а он не хочет сохранять переменные или загружать.

Сообщение отредактировал Titans - Суббота, 30 Апреля 2011, 14:54:48
 

SirNikolasДата: Суббота, 30 Апреля 2011, 15:03:18 | Сообщение # 11
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Никогда (практически) не нужно заменять глобалки на хэш.

 

TitansДата: Суббота, 30 Апреля 2011, 15:47:24 | Сообщение # 12
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (SirNikolas)
Никогда (практически) не нужно заменять глобалки на хэш.

Я и не заменял.
 

lawsonДата: Суббота, 30 Апреля 2011, 16:31:54 | Сообщение # 13
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (SirNikolas)
Очень глупый совет. Это кому как понятнее.

Не знаю я учился на примерах, из статей читал только какие перменные записываються в хеш - тоесть UnitHandle Integer GroupHandle.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Суббота, 30 Апреля 2011, 16:32:12
 

SirNikolasДата: Суббота, 30 Апреля 2011, 18:48:58 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:


 

TitansДата: Суббота, 30 Апреля 2011, 18:53:07 | Сообщение # 15
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
А как мне перенести перемнные через хеш в другой триггер?
Я остановился на таком варианте:
Первый триггер
Code
function Bm01 takes nothing returns nothing
     local unit Hero = GetSpellAbilityUnit()
     local location Point_spell = GetSpellTargetLoc()
     local destructable Tree = GetEnumDestructable()
     local lightning Line
     call AddLightningLoc( "DRAM", Point_spell, GetDestructableLoc(Tree) )
     set Line = GetLastCreatedLightningBJ()
     call SaveUnitHandle(udg_Data,GetHandleId(Hero),0,Hero)
     call SaveLocationHandle(udg_Data,GetHandleId(Point_spell),1,Point_spell)
     call SaveLightningHandle(udg_Data,GetHandleId(Line),2,Line)
     call SaveDestructableHandle(udg_Data,GetHandleId(Tree),3,Tree)
     call EnableTrigger( gg_trg_Bm2 )
     set Hero = null
     set Point_spell = null
     set Tree = null
     set Line = null
endfunction

function Trig_Bm1_Actions takes nothing returns nothing
     call EnumDestructablesInCircleBJ( 600.00, GetSpellTargetLoc(), function Bm01 )
endfunction

Второй триггер
Code
function Trig_Bm2_Actions takes nothing returns nothing
     local unit Hero =  
     local location Point_spell =  
     local destructable Tree =  
     local lightning Line =  
     call UnitDamageTargetBJ( Hero, Hero, 100.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
     if ( RectContainsUnit(RectFromLoc(Point_spell, GetDestructableLoc(Tree)), GroupPickRandomUnit(GetUnitsOfPlayerAll(Player(0)))) == true ) then
         call UnitDamageTargetBJ( Hero, Hero, 100.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
         call DestroyLightningBJ( Line )
         call DisableTrigger( gg_trg_Bm2 )
     else
     endif
     set Hero = null
     set Point_spell = null
     set Tree = null
     set Line = null
endfunction


Сообщение отредактировал Titans - Суббота, 30 Апреля 2011, 19:00:36
 

SirNikolasДата: Суббота, 30 Апреля 2011, 19:05:32 | Сообщение # 16
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Есть задержка между запусками триггеров? Если нет, то используй глобальные переменные. Если есть, то скачай JassCraft и набери в function list "Load". Там будет целый список функций с указанием принимаемых аргументов. Сохранять значения нужно с помощью пяти указанных выше функций (все, что не является boolean, integer, real и string, прогоняем через SaveAgentHandle), загружать - с помощью найденных тобой. Потом нужно еще сделать FlushChildHashtable, чтобы очистить хэш.

 

TitansДата: Суббота, 30 Апреля 2011, 19:17:23 | Сообщение # 17
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (SirNikolas)
Если нет, то используй глобальные переменные.

И зачем? Если я так зделаю то в результате получю, что если создалось 2-е и больше линий то при вхождении на 1-ю линию урон нанесётся и она исчезнет, а вот при вхождении на 2-ю линию нечего не будет происходить.
 

SirNikolasДата: Суббота, 30 Апреля 2011, 19:25:37 | Сообщение # 18
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (SirNikolas)
Если нет


 

  • Страница 1 из 1
  • 1
Поиск:

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