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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: PUVer, SirNikolas, Ty3uK  
[ВАЖНО] 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 например и вообще для чего угодно buba
Автор: 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,
Достаточно давно это вывел ещё Дема, юзнув в Лофе buba
А так да, полезно.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

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 раз подряд и разпаковки обратно получится не то число.


Nyan
Я в Знай наших
Уже на форум не захожу, варкрафт перестал интересовать (
 

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
Блокировки:
я об этом не знал trollface
я считал что в любом случае в ячейку может писаться только один хэндл одного из типов


El Psy Congroo
 

SirNikolasДата: Среда, 16 Мая 2012, 15:58:13 | Сообщение # 191
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Узнал достаточно давно, когда пытался обмануть типизацию в JASS. К слову сказать, ничего не вышло, зато узнал об этой штуке.
Quote (Faion)
А что, это не прописные истины? :O
Я нигде не видел, чтобы об этом писалось.

Quote (Ty3uK)
я обманул trollface
Code
var u = GetTriggerUnit()
var id = &u
var u2 = SOME_FEATURE(id)
У тебя все равно не работает. :)


 

Ty3uKДата: Среда, 16 Мая 2012, 17:07:50 | Сообщение # 192
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
я обманул trollface

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

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
Блокировки:
^толсто ;)

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

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
Блокировки:
если триггер выше всех, то можно
можно еще либу сделать для таких функций


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

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)
---------------------------------------------
но для этого нужен жнгп
да и чем тебя не устраивает нестандартный код карты?


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

newbee-beeДата: Воскресенье, 03 Июня 2012, 11:46:36 | Сообщение # 200
5 уровень
Группа: Проверенные
Сообщений: 101
Награды: 0
Репутация: 12
Блокировки:
Quote (Ty3uK)
да и чем тебя не устраивает нестандартный код карты?

Просто если этих функций много, то это ведь громоздко, много проще использовать триггеры, которые содержат только функции. Имхо, конечно
 

Поиск:

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