Сейчас 15:57:59 Среда, 24 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Function(действие) на установки максимального здоровья (MUI)
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, юзаем обычный ве

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|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
Блокировки:
Можно, я хотел это написать, но тупая опера мини вылетела и мне было лень это писать заново. По сабжу- если автор не захочет сделать адаптацию под обычный ве- завтра кину код

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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()... =/

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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_ ?

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ExtrematorДата: Пятница, 02 Декабря 2011, 11:51:57 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Quote (Ty3uK)
Фу,
Quote (Ty3uK)
и ты тоже пропагандируешь jngp
Quote (Ty3uK)
Ну сделайте код для обычного ве, а?
Quote (Ty3uK)
Неужели сложно везде приписать udg_ ?


Quote (Hexing)
за работоспособность не ручаюсь, писал от руки
Quote (Hexing)
писал от руки
Quote (Hexing)
от руки

zomba


Сообщение отредактировал Extremator - Пятница, 02 Декабря 2011, 11:52:16
 

HexingДата: Пятница, 02 Декабря 2011, 14:03:07 | Сообщение # 12
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Extremator, avtorklif

 

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, наглыыыый fie
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 + 2
Quote (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
Блокировки:
Плохое- нерациональное использование ресурсов, Холмс

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

HexingДата: Суббота, 03 Декабря 2011, 19:39:08 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Ty3uK, ок Ватсон alco

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Function(действие) на установки максимального здоровья (MUI)
  • Страница 1 из 1
  • 1
Поиск:

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