Сейчас 16:06:41 Среда, 30 ноября, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Jass: Полезные функции
[ВАЖНО] Jass: Полезные функции
lawsonДата: Среда, 02 Марта 2011, 22:38:55 | Сообщение # 51
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
В приставке udg_

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

rixt7956Дата: Среда, 02 Марта 2011, 22:58:10 | Сообщение # 52
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Нет, не в этом
в vJass к примеру глобалка объявляется
Code
globals
real x
endglobals

а константы
Code
globals  
constant real x
endglobals
 

lawsonДата: Среда, 02 Марта 2011, 23:21:08 | Сообщение # 53
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
а ты про это.

Добавлено (02-03-2011, 23:21)
---------------------------------------------
не знаю во всех языках програмирования есть константы. Вроде бы они работаеют аналогично обычным переменным.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

MalfattoДата: Четверг, 03 Марта 2011, 01:28:20 | Сообщение # 54
Группа: Модераторы
Сообщений: 3806
Награды: 7
Репутация: 2425
Блокировки:
значение констант нельзя изменить, значение переменных - можно
 

rixt7956Дата: Четверг, 03 Марта 2011, 07:35:17 | Сообщение # 55
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Ясно)
 

lawsonДата: Четверг, 03 Марта 2011, 20:27:24 | Сообщение # 56
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Хамяг)
значение констант нельзя изменить

Хмм наверное такое только в JASS.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

MalfattoДата: Пятница, 04 Марта 2011, 13:17:41 | Сообщение # 57
Группа: Модераторы
Сообщений: 3806
Награды: 7
Репутация: 2425
Блокировки:
не только
 

DreiiДата: Пятница, 04 Марта 2011, 13:33:25 | Сообщение # 58
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Quote (rixt7956)
Я тоже так думаю, но зачем тогда писать это слово перед объявлнием)

rixt7956, constant пишут тогда когда эта переменная задаеться 1 раз и больше нигде не изменяеться))Оптимизация мб


 

FkoFFДата: Суббота, 05 Марта 2011, 00:03:41 | Сообщение # 59
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Dreii, или удобная настройка эффектов тех или иных скиллов.

 

SirNikolasДата: Суббота, 05 Марта 2011, 13:41:56 | Сообщение # 60
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
А что тогда такое constant function?

 

[DUОS]Дата: Суббота, 05 Марта 2011, 14:30:06 | Сообщение # 61
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
SirNikolas,
Оптимизация :)
JESP.


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


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


Сообщение отредактировал [DUОS] - Суббота, 05 Марта 2011, 14:30:16
 

SirNikolasДата: Суббота, 05 Марта 2011, 14:41:47 | Сообщение # 62
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (|DUОS|)
Оптимизация
Каким образом? И что вообще делают такие функции?




Сообщение отредактировал SirNikolas - Суббота, 05 Марта 2011, 14:42:16
 

EdiTTORRДата: Воскресенье, 06 Марта 2011, 00:09:15 | Сообщение # 63
8 уровень
Группа: Проверенные
Сообщений: 585
Награды: 0
Репутация: 147
Блокировки:
SirNikolas, почти то же что и переменные с такой приставкой.

Местами здесь.
 

FaionДата: Воскресенье, 06 Марта 2011, 11:11:24 | Сообщение # 64
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
А еще функции могут быть constant, а так же публичными\приватными и протектед, тоже весьма полезная вещь=)

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

rixt7956Дата: Воскресенье, 06 Марта 2011, 14:53:02 | Сообщение # 65
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (Faion)
А еще функции могут быть constant
и для чего делать функцию константой?
 

ImpregnableДата: Среда, 06 Апреля 2011, 14:14:57 | Сообщение # 66
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
FkoFF у тебя немного незавершенная функция. Думаю лучше будет сделать так.

Code

globals
     constant real MapMinX = GetRectMinX(bj_mapInitialPlayableArea) + 50
     constant real MapMinY = GetRectMinY(bj_mapInitialPlayableArea) + 50
     constant real MapMaxX = GetRectMaxX(bj_mapInitialPlayableArea) - 50
     constant real MapMaxY = GetRectMaxY(bj_mapInitialPlayableArea) - 50
endglobals

function SafeX takes real x returns real
     if x < MapMinX then
         return MapMinX
     elseif x > MapMaxX then
         return MapMaxX
     endif
     return x
endfunction

function SafeY takes real y returns real
     if y < MapMinY then
         return MapMinY
     elseif y > MapMaxY then
         return MapMaxY
     endif
     return y
endfunction
 

rixt7956Дата: Пятница, 08 Апреля 2011, 16:35:22 | Сообщение # 67
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (Impregnable)
globals
     constant real MapMinX
     constant real MapMinY
     constant real MapMaxX
     constant real MapMaxY
endglobals

Не будет работать.
Если объявлять в библиотеки, то надо вот так
Code
library A initializer Init
globals
      real MinX  
      real MinY  
      real MaxX  
      real MaxY
endglobals

function GetMinMax takes real x, real y returns boolean
return x>MinX and x<MaxX and y>MinY and y<MaxY
endfunction

function Init takes nothing returns nothing
MinX = GetRectMinX(bj_mapInitialPlayableArea)  
MinY = GetRectMinY(bj_mapInitialPlayableArea)  
MaxX = GetRectMaxX(bj_mapInitialPlayableArea)  
MaxY = GetRectMaxY(bj_mapInitialPlayableArea)  
endfunction
endlibrary
 

H_A_PKДата: Вторник, 03 Мая 2011, 17:42:48 | Сообщение # 68
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Quote (lawson)
Хмм наверное такое только в JASS.

видать физику с математикой не изучали в школе ...
например bj_Pi , чтоб у бедных кодеров бошка не кипела при вспоминании этого числа 3,14159...


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

FkoFFДата: Пятница, 06 Мая 2011, 18:31:29 | Сообщение # 69
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Code
function DummyCast takes unit u, unit targ, integer SpellId,integer lvl, string order returns nothing
local unit du = CreateUnit(GetOwningPlayer(u),'dummyname',GetUnitX(u),GetUnitY(u),bj_RADTODEG * Atan2(GetWidgetY(targ) - GetWidgetY(u), GetWidgetX(targ) - GetWidgetX(u)))
call UnitAddAbility(u,SpellId)
call SetUnitAbilityLevel(u,SpellId,lvl)
call IssueTargetOrder(du,order,targ)
call UnitApplyTimedLife(du,'BTLF',0.5)
set du = null
endfunction


 

H_A_PKДата: Вторник, 10 Мая 2011, 15:17:55 | Сообщение # 70
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
FkoFF, А если нужно просто сымитировать движение до точки, а не до юнита ?:О

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

FkoFFДата: Среда, 11 Мая 2011, 17:07:44 | Сообщение # 71
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
причем здесь движение? это даммикаст одной строчкой

 

KartohaДата: Воскресенье, 15 Мая 2011, 23:34:56 | Сообщение # 72
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Написал систему, которая позволяет узнавать защиту у любого юнита на карте. Использовать ее очень просто - создайте в своей карте переменную целочисленную Armor, вставьте код в шапку карты, а потом в любом триггере можете написать
Code
call GetUnitArmor (unit)

после чего в переменную udg_Armor запишется защита юнита, которого вы передали в функцию. Пока система определяет защиту в промежутке [-20;20] у юнитов, и [-10;20] у героев, но если будут просьбы я расширю диапазон.
Код, который нужно вставить в шапку:
Code
function DeterminationArmorForUnit takes integer p, unit u returns integer

//========== DETERMINATION ARMOR FOR NO HERO UNITS ==========

if IsUnitType (u, UNIT_TYPE_HERO) == false then

//========== > 0 VALUES ==========
if p == 0 then
return 0
elseif p == 6 then
return 1
elseif p == 11 then
return 2
elseif p == 16 then
return 3
elseif p == 20 then
return 4
elseif p == 24 then
return 5
elseif p == 27 then
return 6
elseif p == 30 then
return 7
elseif p == 33 then
return 8
elseif p == 36 then
return 9
elseif p == 38 then
return 10
elseif p == 40 then
return 11
elseif p == 42 then
return 12
elseif p == 44 then
return 13
elseif p == 46 then
return 14
elseif p == 48 then
return 15
elseif p == 49 then
return 16
elseif p == 51 then
return 17
elseif p == 52 then
return 18
elseif p == 54 then
return 19
elseif p == 55 then
return 20
elseif p > 55 then
return 20
//========== < 0 VALUES ==========
elseif p == -5 then
return -1
elseif p == -11 then
return -2
elseif p == -16 then
return -3
elseif p == -21 then
return -4
elseif p == -26 then
return -5
elseif p == -31 then   
return -6
elseif p == -35 then
return -7
elseif p == -39 then
return -8
elseif p == -42 then
return -9
elseif p == -46 then
return -10
elseif p == -49 then
return -11
elseif p == -52 then
return -12
elseif p == -55 then
return -13
elseif p == -57 then
return -14
elseif p == -60 then
return -15
elseif p == -62 then
return -16
elseif p == -65 then
return -17
elseif p == -67 then
return -18
elseif p == -69 then
return -19
elseif p == -70 then
return -20
elseif p < -70 then
return -20
endif

//========== DETERMINATION ARMOR FOR HERO UNITS ==========

else

//========== > 0 VALUES ==========
if p == 27 then
return 0
elseif p == 30 or p == 31 then
return 1
elseif p == 34 or p == 35 then
return 2
elseif p == 37 or p == 38 then
return 3
elseif p == 40 or p == 41 then
return 4
elseif p == 43 or p == 44 then
return 5
elseif p == 45 or p == 46 then
return 6
elseif p == 47 or p == 48 then
return 7
elseif p == 49 or p == 50 then
return 8
elseif p == 51 or p == 52 then
return 9
elseif p == 53 or p == 54 then
return 10
elseif p == 55 or p == 56 then
return 11
elseif p == 57 then
return 12
elseif p == 58 or p == 59 then
return 13
elseif p == 60 then
return 14
elseif p == 61 then
return 15
elseif p == 62 or p == 63 then
return 16
elseif p == 64 then
return 17
elseif p == 65 then
return 18
elseif p == 66 then
return 19
elseif p == 67 then
return 20
elseif p > 67 then
return 20
//========== < 0 VALUES ==========
elseif p == 25 then
return -1
elseif p == 21 then
return -2
elseif p == 17 then
return -3
elseif p == 13 then
return -4
elseif p == 9 then
return -5
elseif p == 6 then
return -6
elseif p == 2 then
return -7
elseif p == -1 then
return -8
elseif p == -4 then
return -9
elseif p == -7 then
return -10
elseif p < -7 then
return -10
endif
endif

endfunction

function Computings takes nothing returns nothing
local real d = GetEventDamage()
local real p = (I2R(R2I(d))* 100)/100
local integer p2 = 100 - R2I (p)
set udg_Armor = DeterminationArmorForUnit (p2, GetTriggerUnit())
endfunction

function GetUnitArmor takes unit u returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterUnitEvent (t, u, EVENT_UNIT_DAMAGED)
call TriggerAddAction (t, function Computings)
call SetWidgetLife (u, (GetUnitState(u, UNIT_STATE_LIFE) + 100) )
call UnitDamageTarget (u, u, 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call DestroyTrigger (t)
set t = null
endfunction


Сообщение отредактировал Kartoha - Воскресенье, 15 Мая 2011, 23:44:39
 

ImpregnableДата: Понедельник, 16 Мая 2011, 07:29:57 | Сообщение # 73
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Kartoha какой ужас...
Для твоей системы придется все расписывать для каждого типа брони? И ведь броня не только в целых значениях.

Я вроде бы уже выкладывал карту с примером получения брони. Вот код:

Code

globals
     constant real DefenseArmor = .06
endglobals

function GetUnitArmor takes unit u returns real
     local real life = GetUnitState(u, UNIT_STATE_LIFE)
     local real damage
     local real r
     local real c

     if IsUnitType(u, UNIT_TYPE_ETHEREAL) == true then
         return -.2
     endif
     call SetUnitState(u, UNIT_STATE_LIFE, life+50.)
     call UnitDamageTarget(u, u, 10., false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
     set damage = life - GetUnitState(u, UNIT_STATE_LIFE)
     call SetUnitState(u, UNIT_STATE_LIFE, life)

     set r = 1. - damage/10.
     if damage == 0. then
         return -.1
     elseif damage <= 10. then
         return r / (DefenseArmor - r*DefenseArmor)
     else
         set r = r + 1.
         set c = 1.
         loop
             exitwhen Pow(1.-DefenseArmor, c) <= r
             set c = c + 1.
         endloop
         return -c
     endif
endfunction

Где DefenseArmor = значение в Дополнительно=>Игровые константы=>Бой: прирост порчи брони при уроне

Вызов функции - GetUnitArmor(Боевая единица)
Если юнит неуязвимый, то возвратит -0.1
Если юнит в астрале, то возвратит -0.2

 

KartohaДата: Понедельник, 16 Мая 2011, 15:02:48 | Сообщение # 74
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Quote (Impregnable)
Для твоей системы придется все расписывать для каждого типа брони?

Нет.
Quote (Impregnable)
И ведь броня не только в целых значениях.

Это да, но изначально цель, для которой я писал эту систему, требовала именно целочисленное значение брони, поэтому моя система округляет до целых чисел.
Quote (Impregnable)
Kartoha какой ужас...

Quote (Impregnable)
Я вроде бы уже выкладывал карту с примером получения брони. Вот код:

Твой код безусловно лучше. Дело в том, что мне нужна была такая система для одной магии, но у кого бы я не спрашивал, (даже на XGM тему создавал) никто не знал как это сделать, в итоге я сам додумался вот до такого, хоть и громоздко, но зато работало и я был очень рад. Теперь вижу, что я вовсе не открыл Америку, а только повторил то что уже было, и то в худшайшем качестве.
 

SirNikolasДата: Понедельник, 16 Мая 2011, 15:05:54 | Сообщение # 75
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Impregnable, Эллесар делал это еще раньше. Суть, правда, та же - юнит наносит урон самому себе.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Jass: Полезные функции
Поиск:

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