|
|
|
|
Function(действие) на установки максимального здоровья
|
|
Borodach | Дата: Четверг, 01 Декабря 2011, 19:05:25 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Нет возможности создать в другом разделе, модеры перенесите в надлежащий раздел Эта фукция позволит добавлять и убавлять максимальное значение хп. Требования: 1)JNGP 2)способность - Предмет:увеличение запаса здоровья задать способности 7 уровней и установить значения Уровень 1 = 0 Уровень 2 = -100 Уровень 3 =-10 Уровень 4 = -1 Уровень 5 = 100 Уровень 6 = 10 Уровень 7 = 1 3)Скопировать код в шапку карты и записать ид способности "Предмет:увеличение запаса здоровья" Code globals integer idBonusHeal = 'A000' // 'A000' меняйте на ид вашей способности hashtable H = InitHashtable() endglobals
function EndTimeH takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local integer hp=LoadInteger(H,id,1) local unit u=LoadUnitHandle(H,id,2) loop exitwhen hp<=0 call UnitAddAbility(u,idBonusHeal) if hp>=100 then call SetUnitAbilityLevel(u,idBonusHeal,5) set hp=hp-100 elseif hp<100 and hp>=10 then call SetUnitAbilityLevel(u,idBonusHeal,6) set hp=hp-10 elseif hp<10 then call SetUnitAbilityLevel(u,idBonusHeal,7) set hp=hp-1 endif call UnitRemoveAbility(u,idBonusHeal) endloop call DestroyTimer(t) call FlushChildHashtable(H,id) set t=null endfunction
function BonusHealth takes unit u, integer ValueHp, real time returns nothing local integer hp=ValueHp local timer t local integer id if time>0. then set t=CreateTimer() set id=GetHandleId(t) call SaveInteger(H,id,1,ValueHp) call SaveUnitHandle(H,id,2,u) call TimerStart(t,time,false,function EndTimeH) endif loop exitwhen hp<=0 call UnitAddAbility(u,idBonusHeal) if hp>=100 then call SetUnitAbilityLevel(u,idBonusHeal,2) set hp=hp-100 elseif hp<100 and hp>=10 then call SetUnitAbilityLevel(u,idBonusHeal,3) set hp=hp-10 elseif hp<10 then call SetUnitAbilityLevel(u,idBonusHeal,4) set hp=hp-1 endif call UnitRemoveAbility(u,idBonusHeal) endloop set t=null endfunction В любом триггере пишем в сs: call BonusHealth(unit, Value, time) unit* = боевая единица которой надо добавить value* = количество добавляемого хп time* = на сколько сек. добавит - если поставить 0. , то добавит на всегда
Karamba
|
|
|
|
oleg_best_oleg | Дата: Четверг, 01 Декабря 2011, 20:56:06 | Сообщение # 2 |
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
| Borodach, а обязательно в шапку карты ? И оно так может любое количество жизни дать ?
|
|
|
|
Ty3uK | Дата: Четверг, 01 Декабря 2011, 22:26:09 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Зачем нужно пропагандировать еретический jngp, когда можно сделать как нормальные люди: создаем в редакторе переменных две переменные с типом целочисленная idBonusHeal и хэштаблица H. В инициализации делаем два кс: set udg_H = InitHashtable() set udg_idBonusHeal = 'равкод'. Но в таком случае придется в коде везде приписать этим переменным приставку udg. Зато не нужен jngp, юзаем обычный ве
|
|
|
|
[DUОS] | Дата: Четверг, 01 Декабря 2011, 22:29:10 | Сообщение # 4 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (Ty3uK) Зачем нужно пропагандировать еретический jngp Полностью повторяю его вопрос. Ty3uK, Но можно просто бонусхил в хэш записать, мы же имеем 100к свободных родительских индексов.
|
|
|
|
Ty3uK | Дата: Четверг, 01 Декабря 2011, 22:32:51 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Можно, я хотел это написать, но тупая опера мини вылетела и мне было лень это писать заново. По сабжу- если автор не захочет сделать адаптацию под обычный ве- завтра кину код
|
|
|
|
adiga | Дата: Четверг, 01 Декабря 2011, 23:51:51 | Сообщение # 6 |
7 уровень
Группа: Проверенные
Сообщений: 489
Награды: 0
Репутация: 14
Блокировки:
| А нахер ваще чета кроме гуи, 2 предмета медицинских трактата один +50 второй -50, и цикл =)
триггеринг 439/450 спеллкрафт 447/450 картокрафт 427/450 ландшафтинг 189/450 фастмэйкинг 225/225 иконкрафтинг 310/450 импортинг 110/450 самооценкинг 450/450
|
|
|
|
Extremator | Дата: Пятница, 02 Декабря 2011, 00:16:48 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| я так делал абилку с 3 уровнями... 0 / +1 / -1 узнаю число, запускаю цикл... на +/- 5000хп хватает
|
|
|
|
Ty3uK | Дата: Пятница, 02 Декабря 2011, 07:09:46 | Сообщение # 8 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Все, гуишники пошли показывать, как же можно делать альтернативу через call UnitAddAbilityBJ()... =/
|
|
|
|
Hexing | Дата: Пятница, 02 Декабря 2011, 09:26:24 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| код бред Code constant integer HP_BOOK_1 = 'A000' //способность трактата с +1 к хп constant integer HP_BOOK_2 = 'A001' //способность трактата с -1 к хп hashtable Hash = InitHashTable()
function AdjustHPEnd takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local integer hp = LoadReal(Hash, id, 0) local unit u = LoadUnit(Hash, id, 1) if not u == null then call AdjustHP(u, -hp, 0.) endif call FlushChildHashtable(Hash, id) set u = null call DestroyTimer(t) set t = null endfunction
function AdjustHP takes unit u, integer hp, real time returns nothing local integer i = 0 local integer abi = HP_BOOK_1 local integer limit = hp local timer t = CreateTimer() if(hp < 0) then set abi = HP_BOOK_2 set limit = hp*-1 endif loop set i = i+1 call UnitAddAbility(u, abi) exitwhen(i == limit) endloop if not timer==0. then call SaveReal(Hash, GetHandleId(t), 0, hp) call SaveUnit(Hash, GetHandleId(t), 1, u) call TimerStart(t, timer, false, function AdjustHPEnd) endif set t = null endfunction
за работоспособность не ручаюсь, писал от руки
Сообщение отредактировал Hexing - Пятница, 02 Декабря 2011, 09:27:03 |
|
|
|
Ty3uK | Дата: Пятница, 02 Декабря 2011, 11:07:39 | Сообщение # 10 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Фу, и ты тоже пропагандируешь jngp. Ну сделайте код для обычного ве, а? Неужели сложно везде приписать udg_ ?
|
|
|
|
Extremator | Дата: Пятница, 02 Декабря 2011, 11:51:57 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (Ty3uK) и ты тоже пропагандируешь jngp Quote (Ty3uK) Ну сделайте код для обычного ве, а? Quote (Ty3uK) Неужели сложно везде приписать udg_ ?
Quote (Hexing) за работоспособность не ручаюсь, писал от руки Quote (Hexing) писал от руки
Сообщение отредактировал Extremator - Пятница, 02 Декабря 2011, 11:52:16 |
|
|
|
Hexing | Дата: Пятница, 02 Декабря 2011, 14:03:07 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Extremator,
|
|
|
|
SirNikolas | Дата: Пятница, 02 Декабря 2011, 14:07:09 | Сообщение # 13 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| В одном из примеров использования этой библиотеки реализована подобная функция, однако производительность у нее в разы выше, т. к. она работает на степенях двойки. Не стоит изобретать велосипед.
|
|
|
|
Hexing | Дата: Пятница, 02 Декабря 2011, 15:01:37 | Сообщение # 14 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| SirNikolas, стоит упомянуть что это лишь имитация и работает она ну не как не Quote (SirNikolas) в разы выше и кстати тут можно без битсета обойтись(я понял твою идею), ибо трактаты можно сколько-угодно раз юзать
|
|
|
|
YaNeZnauJass | Дата: Пятница, 02 Декабря 2011, 15:21:51 | Сообщение # 15 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 15
Блокировки:
| Borodach, Если юзпеш блок глобалс то хоть тогда пиши саму й-ию на vJass,иначе не извращайся ок? и допиши udg_
|
|
|
|
SirNikolas | Дата: Пятница, 02 Декабря 2011, 15:33:10 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Hexing, моя функция разбивает n на сумму степеней двойки и добавляет способность столько раз, сколько получилось слагаемых. Например, n = 10 => count = 2. n = 100 => count = 3. n = 128 => count = 1. n = 750 => count = 6 7. n = 1250 => count = 5.
Эта же - (n div 100 + (n mod 100) div 10 + n mod 10) раз. Примеры: n = 10 => count = 1. n = 100 => count = 1. n = 128 => count = 11. n = 750 => count = 12. n = 1250 => count = 17.
Сообщение отредактировал SirNikolas - Суббота, 03 Декабря 2011, 18:10:07 |
|
|
|
Borodach | Дата: Пятница, 02 Декабря 2011, 16:17:03 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| SirNikolas, JUSS хоть чем то понятный для большинства. Сделал пример, и добавил действие на добавление макс МП Добавлено (02 Декабрь 2011, 16:17:03) --------------------------------------------- Так же заменил на обычный WE
Karamba
|
|
|
|
Hexing | Дата: Пятница, 02 Декабря 2011, 18:40:00 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| YaNeZnauJass, наглыыыый SirNikolas, слишком сложно чтобы понять хоть немного - Quote (SirNikolas) Эта же - (n div 100 + (n mod 100) div 10 + n mod 10) раз. Примеры: слава богу знаком с div из delphi - это целочисленное деление, а вот mod это я так понял остаток, а вообще смысл выражения каков? Quote (SirNikolas) n = 10 => count = 2. n = 100 => count = 3. n = 128 => count = 1. n = 750 => count = 6. n = 1250 => count = 5. не улавливаю логику/последовательность)))) во я тупарь и всётаки для чего разбивать число в данной задаче, ведь можно добавить сколько угодно трактатов на любое кол-во хп(ограничений нет), другое дело если бы был лимит скажем в 1ну способность одного типа - тогда пожалуйста, начиная с самых больших чисел добавляешь, но тут то зачем мудрить SirNikolas, ты пишешь как какой-нибудь microsoft-овский C-программист с 10-летним стажем, что ты забыл в этом интерлитационном высокоуровневом языке Jass, адаптированным всего лишь под один движок и ограниченный вызывом скриптовых функций, исходники которых нам даже не известны? Неужели просто интересно?)
|
|
|
|
SirNikolas | Дата: Суббота, 03 Декабря 2011, 18:06:34 | Сообщение # 19 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Hexing) слишком сложно, чтобы понять хоть немного - (Цифра в разряде единиц) + (Цифра в разряде десятков) + (Оставшееся число).
10 (1 + 0) 100 (1 + 0 + 0) 128 (1 + 2 + 8) 750 (7 + 5 + 0) 1250 (12 + 5 + 0)Quote (Hexing) не улавливаю логику/последовательность)))) 10 = 8 + 2 100 = 64 + 32 + 4 128 = 128 750 = 512 + 128 + 64 + 32 + 8 + 4 + 2//Ошибся, count = 7 1250 = 1024 + 128 + 64 + 32 + 2Quote (Hexing) и всё-таки, для чего разбивать число в данной задаче Чтобы не добавлять способность 100 раз.Quote (Hexing) что ты забыл в этом интерлитационном высокоуровневом языке Jass Это первый язык программирования, который я выучил. Quote (Hexing) Неужели просто интересно?) Quote (|DUОS|) Уже два года как я изучаю Jass, в котором фишек и багов, как в пирожке, похожем на баранку.
Сообщение отредактировал SirNikolas - Суббота, 03 Декабря 2011, 18:11:10 |
|
|
|
Hexing | Дата: Суббота, 03 Декабря 2011, 18:59:43 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) Чтобы не добавлять способность 100 раз. а что в этом плохого, если ограничения нет, да и что быстрее спорить нет смысла ибо проверить очень трудно
|
|
|
|
Ty3uK | Дата: Суббота, 03 Декабря 2011, 19:03:45 | Сообщение # 21 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Плохое- нерациональное использование ресурсов, Холмс
|
|
|
|
Hexing | Дата: Суббота, 03 Декабря 2011, 19:39:08 | Сообщение # 22 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Ty3uK, ок Ватсон
|
|
|
|
|
|
|
|
|
|
|