Extremator
offline
Опыт:
40,317Активность: |
адд-кондишн унивёрсл
Хотел сделать функцию для регистрации условия каста конкретного спелла.
И выглядеть это должно было так, я беру функцию (свою) и даю ей два аргумента
Таким образом мои триггры должны были проходит вот такую регистрацию
Но я застреваю вот здесь... и там дальше...
. . .
В общем - я не знаю как нужно это сконструировать...
И это вообще возможно таким образом завернуть? Extremator добавил:
» типа моя идея
появилас идея с глобалкой
приравнять к id в AddCond_EX какю нить например udg_id (ну для примера) а далее в Func0001 уже возвращаться логическую от GetSpellAbilityId() == udg_id
Но что будет проверять каждый раз при срабатывании триггера?
Extremator добавил:
^ идея провалилась, т.к. сравнение идти по последнему результату... Подскажите, как же всё таки это сделать? Должно ж быть просто... просто я... что-то не знаю... |
31.08.2014, 09:57 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Tobi123
offline
Опыт:
7,826Активность: |
А чем вам обычное добавление условий не угодило? |
31.08.2014, 10:23 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
40,317Активность: |
Tobi123:
Ну как это чем? :С вот смотри - я сделаю 100 триггеров, и буду использовать 100 раз функцию AddCond_EX
и она будет задавать одна и та же, и будет делать одно и тоже - сравнивать юзнутый скилл с указанным а так... мне придё
тся 100 раз ставить добавление условия на отельную функцию !!!!!! а это ещё 100 функций которые будут просто возвращаться ответы на сравнение юзнутого скилла с указанным Extremator добавил:
» додумка
подсадить это тёмное дело на глобалку с массивом
да-да, и апать её до упора... не думаю что до 8к абилок доберусь Отредактировано Extremator, 31.08.2014 в 11:53. |
31.08.2014, 11:35 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,774Активность: |
Extremator, я пробовал завязать все в 1 триггере все, кст спела, изучение спелла, приказ на каст спелла...
Все работает, аттачим на РО код спелла строку с именем функции и взываем её execute func. quq_CCCP добавил:
((код jass
function Ability_Conditions takes nothing returns boolean return LoadStr( gg_htb_HashData, 1, GetSpellAbilityId( ) ) != null endfunction )) Вот пример одного условия условия на все спеллы, если в хештаблице нету функции для данного скилла то триггер не выполнит действия. Базу данных для сопоставления РО коду именам функций думаю реализовать не сложно даже без хештаблицы. |
31.08.2014, 15:25 | #4
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
у сижасса же есть всякие эвенты в 1 функцию |
31.08.2014, 15:49 | #5
+1/−2
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
online
Опыт:
43,127Активность: |
зачем? зачем это делать? я просто не понимаю сути, в чем логика таких манипуляций и чего вы пытаетесь добиться |
31.08.2014, 16:58 | #6
+1/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,774Активность: |
Hate:
1 триггер, 1 кондишн, 100500 акшенов... Думаю суть понятна... |
31.08.2014, 17:03 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
40,317Активность: |
|
01.09.2014, 17:54 | #8
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,774Активность: |
Extremator, так если что, то достаточно всего 1 триггера чтобы обработать все возможные события... 1 триггер, 1 условие, и собственно exeuce func необходимую для данного спелла, нужна только база данных для хранения имен функций которые будут вызваны при соответствии условию. |
01.09.2014, 18:04 | #9
+1/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
ADOLF добавил: И даже обычно создание триггера и нормальное добавление туда события/условия занимает от силы несколько секунд. Но нужно изобретать больше своих нелепых велосипедов. |
02.09.2014, 21:29 | #10
+2/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XyZoD
offline
Опыт:
2,073Активность: |
Года 2 сюда не заходил не помню как код оформить правильно.
У меня в общем все спеллы карты запускались с одной этой функции. На инициализации карты я заносил в массивы имена запускающих спелл функций: ((код cjass
#define
{ CL_ID = 2235921386 CL_ID_SMALL = 386 } .... string s = "_Cast"; SPF = Filter(function SpellsCore_Filter);
SPELL_FUNC[CL_ID_SMALL] = "ChainLightning"+s; ... library SpellsExecuter requires MainCore { private void Check(int aId) { aId = S2I(SubString(I2S(GetSpellAbilityId()), 7, 10)); if (vIs(SPELL_FUNC[aId])) { SetTempInt(0, aId); ExecuteFunc(SPELL_FUNC[aId]); DeleteTempInt(0); } } public void Init()
{ trigger t = CreateTrigger(); TriggerRegisterPlayerUnitEventAll(t, EVENT_PLAYER_UNIT_SPELL_EFFECT);
TriggerAddAction(t, function Check); t = null; } } )) В общем функция запускает функцию через эксекут, которую я занёс в массив строк, индекс которых является последние 3 цифры ида спела. vIs = v != null Отредактировано Кет, 17.09.2014 в 23:42. |
17.09.2014, 21:36 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,774Активность: |
papapa071, сабстринги как то не очень, учитывая что id скилла тупо целое число, не проще ли массив строк организовать по принципу:
((код jass
globals
integer udg_offset = 'A000' id самой первой способности. string array udg_ExecuteList endglobals function Ability_Conditions takes nothing returns boolean return udg_ExecuteList[ GetSpellAbilityId() - udg_offset] != null endfunction )) |
18.09.2014, 05:52 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
опять байтодрочеры....
и вообще учите нормальные языки и берите с них пример, рекомендую сишарп или яву, оба языка в целом одинаковы. |
18.09.2014, 11:03 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,774Активность: |
|
18.09.2014, 11:49 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
зачем сабстринг от айди абилки ваще?
вы хоть раз открывали описание хеш таблицы, она число берёт, а не строку. диагноз - рак третьей степени. |
18.09.2014, 15:05 | #15
+2/−2
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
плохо работает, к сожалению 3: когда будут те самые "100 спеллов", загнется, а то и раньше по опыту говорю, были проблемы! |
18.09.2014, 20:18 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XyZoD
offline
Опыт:
2,073Активность: |
DioD:
Не захлебнитесь желчью, уважаемый. Карта последний раз была сохранена в 2009-2010 году, конечно глупо запускать все спелы в карте 1 строкой кода.
((код cjass
...
ExecuteFunc(SPELL_FUNC[S2I(SubString(I2S(GetSpellAbilityId()), 7, 10))); ... )) quq_CCCP, я почему то думал что макс ид массива в варе 8192. Все равно в твоем примере нет универсальности, много кода придется также, а тут 1 строка. Отредактировано Кет, 19.09.2014 в 16:16. |
19.09.2014, 14:03 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,774Активность: |
XyZoD:
Так и есть, только причем тут это? Мы заполняем массив с 0 до 8190, хотя примерно 2000 хватит чтобы карта не запустилась, 2000 абилок многовато для вара, а число функций в j файле.... |
19.09.2014, 14:21 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
Карта последний раз была сохранена в 2009-2010 году
ой рачьё рачьё, давайте лучше вспомним виндоус 95 который был 10 лет назад популярен и начнём осуждать всех кто сидит на семёрке, а тех кто будет обоснованно против клеймить "тролли захлебнитесь желчью" |
19.09.2014, 15:49 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XyZoD
offline
Опыт:
2,073Активность: |
DioD:
Продолжать дискуссию с человеком, который смотрит на двигатель и видит лошадь, более не вижу смысла. |
19.09.2014, 17:00 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|