Jass Полезные функций - Wc3-Maps Форум













[ Главная · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Strateg, Melissa  
Jass Полезные функций
-
[DS]Дата: Воскресенье, 05-06-2011, 13:25:42 | Сообщение # 1
Раб

загрузка наград ...
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Не на сайте
В этой теме публикуйте свои Jass-функции

Это некоторые мои функций которые я часто использую в своих картах:

DistanceBetweenCoords. Находит расстояние между заданными координатами.

Code
function DistanceBetweenCoords takes real x1, real y1, real x2, real y2 returns real    
         return SquareRoot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))       
endfunction


AngleBetweenCoords.Находит угол между заданными координатами.

Code
function AngleBetweenCoords takes real xa, real xb, real ya, real yb returns real    
          return 57.295827 * Atan2(yb - ya, xb - xa)    
endfunction


Функция для того чтобы при использования движения юнита триггерно, юнит не выходил за пределы карты.
Code
function RectX takes real x returns real
      local real xm = GetRectMinX(bj_mapInitialPlayableArea)+50
        if(x<xm)then
           return xm
        endif
      set xm = GetRectMaxX(bj_mapInitialPlayableArea)-50
        if(x>xm)then
           return xm
        endif
      return x
endfunction

function RectY takes real y returns real
      local real ym = GetRectMinY(bj_mapInitialPlayableArea)+50
        if(y<ym)then
           return ym
        endif
      set ym = GetRectMaxY(bj_mapInitialPlayableArea)-50
        if(y>ym)then
           return ym
        endif
      return y
endfunction


Возраждения героя.
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

...
 
-
AncientPenguinДата: Воскресенье, 05-06-2011, 20:06:30 | Сообщение # 2

загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
Quote (|DS|)
Функция для того чтобы при использования движения юнита триггерно, юнит не выходил за пределы карты.


killed

Что это за чушь?
Полярник для юнита, и за карту не улетит:

Code
bool PolarUnit(unit u,real angle,real dist){
     real x=GetUnitX(u)+dist*Cos(angle)
     real y=GetUnitY(u)+dist*Sin(angle)
     if((x>MINX)&&(x<MAXX)&&(y>MINY)&&(y<MAXY)){
         return false
     }else{
         SetUnitX(u,x)
         SetUnitY(u,y)
         return true
     }
}


MINX MAXX MINY MAXY - это GetRectMinX(bj_mapInitialPlayableArea), GetRectMaxX(bj_mapInitialPlayableArea) и так далее записаные зарание.

Quote (|DS|)
AngleBetweenCoords.Находит угол между заданными координатами.


а зачем в градусы, вроде все функции с радианами работают.

Quote (|DS|)
      call TriggerSleepAction(5.00)


от это убрать нафиг, поставить таймер и будет ок
 
-
[DS]Дата: Воскресенье, 05-06-2011, 22:57:12 | Сообщение # 3
Раб

загрузка наград ...
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Не на сайте
Quote (AncientPenguin)
Codeuzcbool PolarUnit(unit u,real angle,real dist){      real x=GetUnitX(u)+dist*Cos(angle)      real y=GetUnitY(u)+dist*Sin(angle)      if((x>MINX)&&(x<MAXX)&&(y>MINY)&&(y<MAXY)){          return false      }else{          SetUnitX(u,x)          SetUnitY(u,y)          return true      } }

Думаешь каждый нуб знает cJass? Ему и хватает Jass'a.

Добавлено (05.06.2011, 22:57)
---------------------------------------------

Quote (|DS|)
Функция для того чтобы при использования движения юнита триггерно, юнит не выходил за пределы карты.

Действует так:
Code

    local  real x = RectX(GetUnitX(u)+dist*Cos(angle))  
    local  real y = RectY(GetUnitY(u)+dist*Sin(angle))
    call SetUnitX(u,x)
    call SetUnitY(u,y)

...
 
-
KlasterstormДата: Понедельник, 06-06-2011, 07:47:44 | Сообщение # 4
Воин

загрузка наград ...
Группа: Пользователи
Сообщений: 118
Репутация: 385
Статус: Не на сайте
Пойду повешусь..
 
-
[DS]Дата: Понедельник, 06-06-2011, 15:26:28 | Сообщение # 5
Раб

загрузка наград ...
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Не на сайте
Quote (Klasterstorm)
Пойду повешусь..

Веревку, мыло дать?

...
 
-
AncientPenguinДата: Вторник, 07-06-2011, 02:38:21 | Сообщение # 6

загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
Quote (|DS|)
Думаешь каждый нуб знает cJass? Ему и хватает Jass'a.


я наверно раскрою великую тайну, но чтобы использовать ту функцию достаточно просто ее копировать и использовать как обычную функцию жасса, никакие знания сжасс ненужны...

Quote (|DS|)
Действует так:


на вызов любой функции тратится время, у тебя 2 выходит у меня 1...
и ненадо мне рассказывать что времени тратится мало, во первых при большом количестве "летательных" юнитов эт важно, во вторых это полюбому не повод делать хуже...

и еще каждый раз вызывать GetRectMinX(bj_mapInitialPlayableArea) и тд....
 
-
[DS]Дата: Среда, 08-06-2011, 11:07:20 | Сообщение # 7
Раб

загрузка наград ...
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Не на сайте
Моя функция быстрее, если передвигается 1 юнит, а твоя при 2ых и более.
...
 
-
AncientPenguinДата: Среда, 08-06-2011, 14:36:24 | Сообщение # 8

загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
Quote (|DS|)
Моя функция быстрее, если передвигается 1 юнит, а твоя при 2ых и более.


дык функции по сути одинаковые (ну за исключением того, что у меня юнит когда наткнется на конец карты остановится, а у тебя по краю до угла ползти продолжит), у твоей проблема только одна по которой быстрее она быть неможет, а именно потому что их две <_< короче если вместо RectX и RectY сделать RectXY (надеюсь мысль ясна) будет ок

Кстати полярник для тех у кого нету JNGP (непонятно зачем таким жасс...) или кто сильно боится сжасса:

Code
function PolarUnit takes unit u, real angle, real dist return boolean
       local real x=GetUnitX(u)+dist*Cos(angle)   
       local real y=GetUnitY(u)+dist*Sin(angle)   
       if ((x>GetRectMinX(bj_mapInitialPlayableArea))&&(x<GetRectMaxX(bj_mapInitialPlayableArea))&&(y>GetRectMinY(bj_mapInitialPlayableArea))&&(y<GetRectMaxY(bj_mapInitialPlayableArea))) then
           return false   
       else
           call SetUnitX(u,x)   
           call SetUnitY(u,y)   
           return true   
       endif
endfunction
 
-
[DS]Дата: Среда, 08-06-2011, 15:06:14 | Сообщение # 9
Раб

загрузка наград ...
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Не на сайте
ок.
Пишем все свой функций.

...
 
-
wetalqДата: Среда, 29-06-2011, 13:57:15 | Сообщение # 10
Король Мёртвых

загрузка наград ...
Группа: V.I.P.
Сообщений: 1263
Репутация: 1572
Статус: Не на сайте
на форуме только два человека поняли о том что вы писали, это AncientPenguin и [DS].

Добавлено (29.06.2011, 13:57)
---------------------------------------------

Quote (|DS|)
DistanceBetweenCoords. Находит расстояние между заданными координатами.


Разница в значенях будет если мерять на Jass и на GUI (расстояния между точками) ?


Покупка предметов через способность
 
-
AncientPenguinДата: Среда, 29-06-2011, 16:23:29 | Сообщение # 11

загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
Quote (wetalq)
Разница в значенях будет если мерять на Jass и на GUI (расстояния между точками) ?


откуда быть разнице?) Он просто переписал функцию чтобы мерять растояние между координатами, а не точками.
 
-
wetalqДата: Среда, 29-06-2011, 18:53:27 | Сообщение # 12
Король Мёртвых

загрузка наград ...
Группа: V.I.P.
Сообщений: 1263
Репутация: 1572
Статус: Не на сайте
AncientPenguin, на тригерах можно же тоже задать точку в кординатах и посмотреть ростояния

Покупка предметов через способность
 
-
AncientPenguinДата: Четверг, 30-06-2011, 00:30:07 | Сообщение # 13

загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
Quote (wetalq)
AncientPenguin, на тригерах можно же тоже задать точку в кординатах и посмотреть ростояния


Там бж DistanceBetweenPoints которая берет локейшины(точки), а точки это ссылки, их надо удалять и обнулять, а координаты то тупо числа =)
 
-
DreiiДата: Вторник, 12-07-2011, 09:25:59 | Сообщение # 14
Ополченец

загрузка наград ...
Группа: Пользователи
Сообщений: 87
Репутация: 58
Статус: Не на сайте
 
-
wetalqДата: Вторник, 06-09-2011, 18:20:06 | Сообщение # 15
Король Мёртвых

загрузка наград ...
Группа: V.I.P.
Сообщений: 1263
Репутация: 1572
Статус: Не на сайте
хм кто то может подсказать функцию на проверку проходимости области ?

Добавлено (06.09.2011, 18:20)
---------------------------------------------

Quote (AncientPenguin)
Там бж DistanceBetweenPoints которая берет локейшины(точки), а точки это ссылки, их надо удалять и обнулять, а координаты то тупо числа =)


это уже понял но Угол между точками и AngleBetweenCoords у меня была разница в пару градусов)


Покупка предметов через способность
 
-
†ŇΣŖΖϋλ†121†Дата: Вторник, 06-09-2011, 19:19:39 | Сообщение # 16
Король Мертвых

загрузка наград ...
Группа: Заблокирован
Сообщений: 440
Репутация: 262
Статус: Не на сайте
Внимание XD супер функция) для того что-бы камера не проходила сквозь холмы)

Code

local location loc
local real HeroZ
set loc =  (GetUnitLoc(udg_Hero))
set HeroZ = GetLocationZ(loc)
call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_ZOFFSET, HeroZ, 0 )

Всё это я сделал сам, создав 6 мап в которых разные триггерные действия) я это в личный сценарий запихал и работает

Боло. Хочешь болосмайлы? их много xD пиши в ЛС!
 
-
CaturnДата: Пятница, 04-11-2011, 05:17:39 | Сообщение # 17
Темный рыцарь

загрузка наград ...
Группа: Проверенные
Сообщений: 217
Репутация: 128
Статус: Не на сайте
AncientPenguin, vJASS и классический жасс разные вещи, последнее в свою очередь лучше первого, по многим причинам, к ним относятся и понимание кода функции, без каких либо констант-глобал и других различных функций. В cJASS всё намного проще, и сложнее одновременно. а vJASS сделали для лентяев которым влом учить cJASS.
надо ведь было ему написать NULL раздельно, а особенно в vJASS. И насколько я помню, аргументы, переданные из первой вызова функции(действия) для другой, обнулять не надо, они сами обнуляются, или это в vJASS лишний гемор обнулять арг.-переменные?

Мои статьи:
1. http://wc3-maps.ru/forum/78-1507-1
Школа тригеростроения, ГУИ.
http://wc3-maps.ru/forum/99-1471-1
 
  • Страница 1 из 1
  • 1
Поиск:
Рейтинг@Mail.ru
Яндекс.Метрика

Copyright © 2010-2017
Вакансии :: Контакты
Мобильная версия сайта
chat