[ВАЖНО] 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, Эллесар делал это еще раньше. Суть, правда, та же - юнит наносит урон самому себе.
|
|
|
|