|
|
|
|
[ВАЖНО] Jass: Полезные функции
|
|
lawson | Дата: Четверг, 24 Ноября 2011, 18:01:32 | Сообщение # 176 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| IIAXAH, Где хозяин аккаунта?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Четверг, 24 Ноября 2011, 18:01:40 |
|
|
|
IIAXAH | Дата: Четверг, 24 Ноября 2011, 18:08:17 | Сообщение # 177 |
3 уровень
Группа: Проверенные
Сообщений: 72
Награды: 0
Репутация: 26
Блокировки:
| Все права принадлежат укозу. Все окей.
|
|
|
|
InvisibleCatэ | Дата: Суббота, 10 Декабря 2011, 22:55:08 | Сообщение # 178 |
3 уровень
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 8
Блокировки:
| [DUОS], а как именно использовать такой код ? Code function ReviveHeroTimed_Child eakes nothing returns nothing local timer t = GetExpiredTimer() local unit hero = LoadUnitHandle(udg_Hashtable,GetHandleId(t),0) local real x = LoadReal(udg_Hashtable,GetHandleId(t),1) local real y = LoadReal(udg_Hashtable,GetHandleId(t),2) local boolean show = LoadBoolean(udg_Hashtable,GetHandleId(t),3) call ReviveHero(hero,x,y,show) call FludhChildHashtable(udg_Hashtable,GetHandleId(t)) call DestroyTimer(t) set hero = null set t = null endfunction
function ReviveHeroTimed takes unit hero, real time, real x, real y, boolean doEyeCandy returns nothing local timer t = CreateTimer() call TimerStart(t,time,false,function ReviveHeroTimed_Child) call SaveUnitHandle(udg_Hashtable,GetHandleId(t),0,hero) call SaveReal(udg_Hashtable,GetHandleId(t),1,x) call SaveReal(udg_Hashtable,GetHandleId(t),2,y) call SaveBoolean(udg_Hashtable,GetHandleId(t),3,doEyeCandy) set t = null endfunction ???Добавлено (10 Декабрь 2011, 22:55:08) --------------------------------------------- С. юнит умирает У. умирающий типа герой равно да Д. запустить триггер ReviveJass Так ?
|
|
|
|
DragoN | Дата: Понедельник, 12 Декабря 2011, 18:59:22 | Сообщение # 179 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Накопал на хайве, оказалось довольно любопытным Сжатие integer'а, можно использовать несколько раз подряд удобно для save/load system например и вообще для чего угодно Автор: Nestharus Code function CompressInt takes integer n returns integer return R2I(Pow(n,2/3.)) endfunction
function DecompressInt takes integer n returns integer return R2I(Pow(n,1.5)+.5) endfunction
El Psy Congroo
|
|
|
|
[DUОS] | Дата: Понедельник, 12 Декабря 2011, 20:09:04 | Сообщение # 180 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| DragoN, Достаточно давно это вывел ещё Дема, юзнув в Лофе А так да, полезно.
|
|
|
|
Novice998 | Дата: Среда, 14 Декабря 2011, 00:46:26 | Сообщение # 181 |
8 уровень
Группа: Проверенные
Сообщений: 693
Награды: 0
Репутация: 86
Блокировки:
| Quote (DragoN) Code function CompressInt takes integer n returns integer return R2I(Pow(n,2/3.)) endfunction
function DecompressInt takes integer n returns integer return R2I(Pow(n,1.5)+.5) endfunction Может я незнаю jass, но знаю другие более осмысленные языки программирования,и функция pow всирает кучу цифр...При сжатии 20 раз подряд и разпаковки обратно получится не то число.
|
|
|
|
DragoN | Дата: Среда, 14 Декабря 2011, 15:52:22 | Сообщение # 182 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Quote (Novice998) Может я незнаю jass, но знаю другие более осмысленные языки программирования,и функция pow всирает кучу цифр...При сжатии 20 раз подряд и разпаковки обратно получится не то число. в варе нет смысла сжимать 20 раз подряд 4 вполне хватит для хорошего сжатия
El Psy Congroo
|
|
|
|
SirNikolas | Дата: Среда, 14 Декабря 2011, 17:50:39 | Сообщение # 183 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| DragoN, не понял, как это работает. Возьмем, например, число 10. int(10^(2./3.)) = 4 int(4^1.5 + .5) = 8 8 != 10
|
|
|
|
DragoN | Дата: Четверг, 15 Декабря 2011, 00:32:14 | Сообщение # 184 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| сжатие для больших чисел, офк не очень точное для 100 неточность на 4 влево
El Psy Congroo
|
|
|
|
[DUОS] | Дата: Среда, 04 Января 2012, 13:45:59 | Сообщение # 185 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Code function GroupEnumUnitsInRangeOfUnitFront takes unit ofUnit, group g, real range, boolexpr filter returns nothing local real f = GetUnitFacing(ofUnit) local real minx = GetWidgetX(ofUnit) + range * .5 * Cos((f+90.)*.0174532) local real miny = GetWidgetY(ofUnit) + range * .5 * Sin((f+90.)*.0174532) local real maxx = GetWidgetX(ofUnit) + range * .5 * Cos((f-45.)*.0174532) local real maxy = GetWidgetY(ofUnit) + range * .5 * Sin((f-45.)*.0174532) local rect r = Rect(minx,miny,maxx,maxy)
call GroupEnumUnitsInRect(g,r,filter)
call RemoveRect®
set r = null endfunction Выбирает в группу юнитов, которые находятся впереди указанного юнита.
|
|
|
|
SirNikolas | Дата: Понедельник, 23 Апреля 2012, 16:32:09 | Сообщение # 186 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Несколько полезных define'ов.Code define { IsPlayerComp(p) = (GetPlayerController(p) == MAP_CONTROL_COMPUTER) IsPlayerUser(p) = (GetPlayerController(p) == MAP_CONTROL_USER) IsPlaying(p) = (GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING) IsGroupEmpty(g) = (FirstOfGroup(g) == null) GetItemX(i) = GetWidgetX(i) GetItemY(i) = GetWidgetY(i) GetDestructableX(d) = GetWidgetX(d) GetDestructableY(d) = GetWidgetY(d) GetUnitX(u) = GetWidgetX(u) GetUnitY(u) = GetWidgetY(u) SetUnitLife(u, v) = SetWidgetLife(u, v) SetUnitMana(u, v) = SetUnitState(u, UNIT_STATE_MANA, v) SetUnitXY(u, x, y) = { SetUnitX(u, x); SetUnitY(u, y) } GetUnitLife(u) = GetWidgetLife(u) GetUnitMana(u) = GetUnitState(u, UNIT_STATE_MANA) GetUnitMaxLife(u) = GetUnitState(u, UNIT_STATE_MAX_LIFE) GetUnitMaxMana(u) = GetUnitState(u, UNIT_STATE_MAX_MANA) UnitDamagePhysical(u, w, a) = UnitDamageTarget(u, w, a, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) UnitDamageMagic(u, w, a) = UnitDamageTarget(u, w, a, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) UnitDamagePure(u, w, a) = UnitDamageTarget(u, w, a, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS) PreloadGameCache(s) = FlushGameCache(InitGameCache(s)) PreloadUnit(id) = RemoveUnit(CreateUnit(Player(15), id, .0, .0, .0)) PreloadDestructable(id) = RemoveDestructable(CreateDestructable(id, .0, .0, .0, 1., 0)) PreloadItem(id) = RemoveItem(CreateItem(id, .0, .0)) GetRandomInt(x) = GetRandomInt(0, x) GetRandomInt(x, y) = GetRand##omInt(x, y) <GetRandomAngle()> = GetRandomReal(.0, 6.283) GetRectRandomX(r) = GetRandomReal(GetRectMinX(r), GetRectMaxX(r)) GetRectRandomY(r) = GetRandomReal(GetRectMinY(r), GetRectMaxY(r)) AddDestroyEffect(s, x, y) = DestroyEffect(AddSpecialEffect(s, x, y)) AddDestroyEffectTarget(s, w, a) = DestroyEffect(AddSpecialEffectTarget(s, w, a)) }
|
|
|
|
Hexing | Дата: Понедельник, 23 Апреля 2012, 17:23:55 | Сообщение # 187 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) <GetRandomAngle()> = GetRandomReal(.0, 6.283) полезно, каждый раз на калькуляторе удваивал пи и округлял, остальное имеет мало смысла без подсветки... нужно бы запилить свою сборочку без мусорных аддонов, чисто vjass cjass nolimits и эти дефайны припилить, можно jasp по желанию
Quote (SirNikolas) UnitDamagePhysical(u, w, a) = UnitDamageTarget(u, w, a, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) UnitDamageMagic(u, w, a) = UnitDamageTarget(u, w, a, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) UnitDamagePure(u, w, a) = UnitDamageTarget(u, w, a, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS) почему true, false? если это магия, счего должен срабатывать скажем фрост шилд? почему не false, false? и еще непомешало бы DamagePoint() перегрузить на скажем кондишн, либо просто isunitenemy() и isunittype(immune)!=true, было бы полезно, а то функция всех дамажит
а вообще полезные дефы, обязательно заюзаю) на 1ую страницу их надо мб
|
|
|
|
DragoN | Дата: Вторник, 15 Мая 2012, 18:33:50 | Сообщение # 188 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Нашёл один очень любопытный факт, который хочу донести до вас Хэш таблица позволяет заносить в одну дочернюю ячейку хэндлы разных типов(инты, реалы, юниты, эффекты и т.п) Думаю на примере, который набросал будет всё видно Code function test_Actions takes nothing returns nothing call SaveUnitHandle(udg_Hash,0,0,CreateUnit(Player(0),'hfoo',0.,0.,0.)) call SaveReal(udg_Hash,0,0,125.) call SaveInteger(udg_Hash,0,0,15) call SaveEffectHandle(udg_Hash,0,0,AddSpecialEffect("Abilities\\Spells\\Other\\FrostDamage\\FrostDamage.mdl",GetUnitX(bj_lastCreatedUnit), GetUnitY(bj_lastCreatedUnit))) call TriggerSleepAction(1.) call BJDebugMsg("Unit health is "+R2S(GetWidgetLife(LoadUnitHandle(udg_Hash,0,0)))) call BJDebugMsg("Real is "+R2S(LoadReal(udg_Hash,0,0))) call BJDebugMsg("Integer is "+I2S(LoadInteger(udg_Hash,0,0))) if (LoadEffectHandle(udg_Hash,0,0) != null) then call BJDebugMsg("WE GOTTA EFFECT") call DestroyEffect(LoadEffectHandle(udg_Hash,0,0)) endif endfunction Писал на чистом коде, прошу меня простить за bj_lastCreatedUnit, т.к писал впопыхах и было лень писать больше кода(мог загрузить юнита обратно, но было лень) Как видите я сохраняю на одну ячейку как самого юнита, так и целочисленную, реальную и ко всем прочему вешаю на него же эффект, всё записав в одну ячейку Думаю область применения дописывать не надо - найдёте сами Всем хорошего, качественного кода, да и багов поменьше //может для кого-то это не новость, но меня этот факт порадовал как я его увидел
El Psy Congroo
Сообщение отредактировал DragoN - Вторник, 15 Мая 2012, 18:35:19 |
|
|
|
Faion | Дата: Вторник, 15 Мая 2012, 20:25:55 | Сообщение # 189 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (DragoN) Нашёл один очень любопытный факт, который хочу донести до вас Хэш таблица позволяет заносить в одну дочернюю ячейку хэндлы разных типов(инты, реалы, юниты, эффекты и т.п)
А что, это не прописные истины? :O
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
DragoN | Дата: Вторник, 15 Мая 2012, 23:43:56 | Сообщение # 190 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| я об этом не знал я считал что в любом случае в ячейку может писаться только один хэндл одного из типов
El Psy Congroo
|
|
|
|
SirNikolas | Дата: Среда, 16 Мая 2012, 15:58:13 | Сообщение # 191 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Узнал достаточно давно, когда пытался обмануть типизацию в JASS. К слову сказать, ничего не вышло, зато узнал об этой штуке.Quote (Faion) А что, это не прописные истины? :O Я нигде не видел, чтобы об этом писалось.
Quote (Ty3uK) я обманул Code var u = GetTriggerUnit() var id = &u var u2 = SOME_FEATURE(id) У тебя все равно не работает.
|
|
|
|
Ty3uK | Дата: Среда, 16 Мая 2012, 17:07:50 | Сообщение # 192 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| я обманул
|
|
|
|
Faion | Дата: Среда, 16 Мая 2012, 20:50:07 | Сообщение # 193 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Быть может вы не слышали и про SaveAgentHandle ?=)
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
Ty3uK | Дата: Среда, 16 Мая 2012, 21:01:57 | Сообщение # 194 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| ^толсто
|
|
|
|
SirNikolas | Дата: Четверг, 17 Мая 2012, 11:12:09 | Сообщение # 195 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Слышали, слышали.
|
|
|
|
newbee-bee | Дата: Суббота, 02 Июня 2012, 21:17:06 | Сообщение # 196 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 12
Блокировки:
| Понубить разрешите? Разве собственные функции можно вызывать только если они в коде карте? Т.е. если они просто в триггере без событий, то их нельзя вызывать?
|
|
|
|
Ty3uK | Дата: Суббота, 02 Июня 2012, 21:23:36 | Сообщение # 197 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| если триггер выше всех, то можно можно еще либу сделать для таких функций
|
|
|
|
newbee-bee | Дата: Суббота, 02 Июня 2012, 21:41:12 | Сообщение # 198 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 12
Блокировки:
| Quote (Ty3uK) если триггер выше всех, то можно Был выше всех, но при попытке вызова функции выдавал, что не объявленная функцияQuote (Ty3uK) можно еще либу сделать для таких функций А вот тут поподробнее
|
|
|
|
Ty3uK | Дата: Суббота, 02 Июня 2012, 22:33:46 | Сообщение # 199 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| vjass Code library Funcs function test takes nothing returns nothing endfunction endlibrary либа вставляется выше всего кода, сразу после глобалокДобавлено (02 Июнь 2012, 22:33:46) --------------------------------------------- но для этого нужен жнгп да и чем тебя не устраивает нестандартный код карты?
|
|
|
|
newbee-bee | Дата: Воскресенье, 03 Июня 2012, 11:46:36 | Сообщение # 200 |
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 12
Блокировки:
| Quote (Ty3uK) да и чем тебя не устраивает нестандартный код карты? Просто если этих функций много, то это ведь громоздко, много проще использовать триггеры, которые содержат только функции. Имхо, конечно
|
|
|
|
|
|
|
|
|
|
|