XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Gold D Dragon

offline
Опыт: 904
Активность:
UnitMissSystem

Unit Miss System

Представляю вашему взгляду единственную в своём роде (оригинальная система отлова урона) систему промахов для всех юнитов.
Даже то что система написана на джасс, не останавливает её использование новичками, т.к. она лёгкая в освоение и нужные значения легко найти с помощью внутритриггерных подсказок!
Система задаёт процент промаха по всем юнитам равный ??%. Также вы можете задать любой процент для нужного вам типа юнитов, ведь не может мясник бить с той же проворностью что и иллидан!
Также система полностью оптимизирована и подфиксина на предмет утечек. Система в коем-то виде идентична обычному промаху - также при промахе появляется красная надпись, и плавно исчезает (выглядит красивей чем обычный промах).
Я уверен что эта система будет незаменимой частью любой хорошей РПГ или любой другой карты, от melee до defence.
Жду ваших комментариев, и заранее спасибо за то что опробовали мою систему.
Добавление в систему своего юнита совершаетса одной строкой.
И главное пишите только реальные баги, а не пишите как бы вы сами сделали. Опытный джассер в своей карте может это выразить в 1-2 функции, я это знаю, так как в своих картах так делаю.
» Реализация
Основа шанс промаха:
unction death takes nothing returns nothing
    local integer i = 1
    local integer i2 = udg_MS_count
    local unit u = GetDyingUnit()
    loop
        exitwhen i > i2
        if udg_MS_unit[i] == u then
            set i2 = i
        endif
        set i = i + 1
    endloop
    call TriggerClearActions(udg_Ms_trigs[i2])    // еще нету в коде, будет добавлено по совету Elisar
    call DestroyTrigger(udg_Ms_trigs[i2])
    set u = null
    set udg_MS_unit[i2] = null
    set udg_MS_count = udg_MS_count - 1
    call TriggerClearActions(udg_MS_death[i2])     // еще нету в коде, будет добавлено по совету Elisar
    call DestroyTrigger(udg_MS_death[i2])
endfunction
function miss_5 takes nothing returns nothing
    local unit u = GetEventDamageSource()
    local unit u2 = GetTriggerUnit()
    local real r = GetEventDamage()
    local real r2 = GetUnitState(u2, UNIT_STATE_LIFE)
    if GetRandomReal(0.00, 1.00) > 0.95 then
        call SetUnitState(u2, UNIT_STATE_LIFE, (r2 + r))
        call FloatingMiss(u)
    endif
    set u = null
    set u2 = null
endfunction
Регистрацыя шансу:
function trigmiss_5 takes nothing returns nothing
    local unit u = udg_LastUnit
    local integer i = 1
    if IsUnitType(u, UNIT_TYPE_STRUCTURE) == false then
        loop
           exitwhen udg_MS_unit[i] == null
           set i = i +1
        endloop
        set udg_MS_count = udg_MS_count + 1
        set udg_MS_unit[i] = u
        set udg_Ms_trigs[i] = CreateTrigger(  )
        call TriggerRegisterUnitEvent(udg_Ms_trigs[i], udg_MS_unit[i], EVENT_UNIT_DAMAGED)
        call TriggerAddAction(udg_Ms_trigs[i], function miss_5)
        set udg_MS_death[i] = CreateTrigger(  )
        call TriggerRegisterUnitEvent(udg_MS_death[i], udg_MS_unit[i], EVENT_UNIT_DEATH)
        call TriggerAddAction(udg_MS_death[i], function death)
        set u = null
    endif
endfunction
function Trig_missbase_Actions takes nothing returns nothing
    local integer i = 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_5)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_10)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_15)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_20)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_25)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_30)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_35)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_40)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_45)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_50)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_55)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_60)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_65)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_70)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_75)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_80)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_85)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_90)
    set i = i + 5
    set udg_MS_trigm[i] = CreateTrigger(  )
    call TriggerAddAction(udg_MS_trigm[i], function trigmiss_95)
    call TriggerExecute(gg_trg_loading)
endfunction
пример добавленных в систему юнитов:
function Trig_loading_Actions takes nothing returns nothing
    call special('hfoo', 25)
    call special('hrif', 50)
    call special('hkni', 25)
    call special('hspt', 30)
    call special('hgry', 40)
    call special('ogru', 50)
    call special('orai', 35)
    call special('otau', 40)
    call special('ohun', 60)
    call special('owyv', 10)
    call special('ugho', 70)
    call special('uabo', 65)
    call special('ucry', 55)
    call special('ugar', 20)
    call special('ufro', 80)
    call special('earc', 15)
    call special('esen', 20)
    call special('edry', 15)
    call special('ehpr', 25)
    call special('emtg', 65)
    call TriggerExecute(gg_trg_missstart)
endfunction
ищо функции:
function special takes integer i2, integer i returns nothing
    local integer s = udg_MS_specialcount3 + 1
    set udg_MS_specialcount[s] = i2
    set udg_MS_specialcount2[s] = i
    set udg_MS_specialcount3 = s
endfunction

function getspecial takes integer i returns integer
    local integer i2 = 1
    local integer s
    loop
        exitwhen i2 > udg_MS_specialcount3
        if udg_MS_specialcount[i2] == i then
            set s = udg_MS_specialcount2[i2]
            set i2 = udg_MS_specialcount3
        else
            set s = 5
        endif
        set i2 = i2 + 1
    endloop
    return s
endfunction
в общем эти функции создают удобство добавления шанса и хорошую работу системы.
Система на моих личных бета - тестах не вызывает глюков при битве 100 на 100 и больше.
» Изменения в v1.1
-добавил плавающий текст.
-добавил описания.
-добавил вариацию с абилками.
-другие мелкие изменения.
» Изменения в v1.11
-Прочитал код системы и нашел глупый баг дающий всем(без исключений) 100% шанс промаха.
-Пофиксил, но если вы уже качали мою систему то луче дождитесь обновления до v1.2
» Изменения в v1.2
-Сделал систему независимой от кол-во типов юнитов. Правда немного усложнив порядок добавления своих юнитов в систему.
-Сделал большой пример для битвы 30х30х30х30 юнитов, результат можно посмотреть на краю карты.
-Убрал некоторые ненужности.
-Написал полный FAQ для версии 1.2. Если вам что не ясно, задавайте вопросы в теме, буду апрейдить FAQ.
» Изменения в v1.3
-Сделал систему добавления очень удобной.
-Сделал систему более стойкой.
-Сделал missmiss.optimal где собрано только самое нужное из оригинала.
» Будущее в v1.4
-Нормальный плавающий текст.
-Фикс бага о котором сообщил елисар.
-Создание нормальной формулы для рандома так как стандартный в движке вара3 работает как то странно.
-Дописание списка стандартных ID (равкодов)
Прикрепленные файлы
Тип файла: w3x missmiss.w3x (18.5 Кбайт, 21 просмотров )
Тип файла: w3x missmiss.v1.1.w3x (23.1 Кбайт, 19 просмотров )
Тип файла: w3x missmiss.v1.11.w3x (23.3 Кбайт, 17 просмотров )
Тип файла: w3x missmiss.v1.2.w3x (39.6 Кбайт, 30 просмотров )
Тип файла: zip missmiss.v1.3.zip (80.9 Кбайт, 49 просмотров )

Отредактировано Gold D Dragon, 24.12.2009 в 23:21.
Старый 18.12.2009, 19:49
Lord Vampire
В больнице -_-
offline
Опыт: 2,211
Активность:
Цитата:
Сообщение от Gold D Dragon
К сожалению версия без плавающего текста над юнитами, только сообщение "miss"

всё ручками делается, ручками)) ну да ладно кому надо тот сделает ;D
Старый 18.12.2009, 20:30
Gold D Dragon

offline
Опыт: 904
Активность:
Lord_Vampire:
всё ручками делается, ручками)) ну да ладно кому надо тот сделает ;D
Я просто когда переводил плавающий текст с гуи то увидел там до... bj функций... в общем желания разбираться как это делать без bj нету.
вампир єто версия с уже добавлением триггерно сделаные юниты.
Старый 18.12.2009, 20:46
Gold D Dragon

offline
Опыт: 904
Активность:
Заметил одну опечатку в коде=) вместо "else" я взял "elseif i != 'hfoo' and (i != 'hrif') then"
все исправил и карту новую прикрепил.
Старый 20.12.2009, 00:45
XOR

offline
Опыт: 38,159
Активность:
Это системой и даже наработкой не назовешь, пару функций
Старый 20.12.2009, 00:48
Gold D Dragon

offline
Опыт: 904
Активность:
XiMiKs, в ней 5 функций, но зато все что нужно и ничего лишнего... Может кому пригодиться как основа чего то + я делал для Lord_Vampire, промахи всем юнитам и у каждого свой шанс.
Старый 20.12.2009, 00:56
DARK_SYLTAN
Скромный Повелитель
offline
Опыт: 5,045
Активность:
Ой да.....Вроде нормально, делает, что должна, но не мог бы ты её слегка переработать до полноценной наработки:
пояснить весь Jass код, а лучше вообще сделать на гуи;
Изменить принцип, какие юниты промахиваются: чтобы тип промахивающихся юнитов был установлен триггерно/джассово или это задавалось бы пассивной способностью. Чтобы люди видели, какой юнит как часто промахивается, но чтобы не делать способность-пустышку.
Далее: убери это отвратительное мисс пожалуйста, а в идеале сделай надпись промах красную над юнитом, всё по-человечески. Мисс ужасен и если и годится, то для маленькой такой однопользовательской рпг. Не понятно-кто мисс, кому мисс, куда мисс:-)):-)).
Тогда вообще, я думаю отлично бы было. Не возьмёшься?? Я бы с удовольствием поиспользовал такую в своей карте.
Старый 20.12.2009, 09:47
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Gold D Dragon, создавать тригер для каждого юнита? это както лагово будет при войске более чем 300
Старый 20.12.2009, 10:04
Gold D Dragon

offline
Опыт: 904
Активность:
DARK_SYLTAN, сделаю, как бы наработка продвигаться.... сделаю мис нормальный... сделаю как бы вторую функцию этого всего с пассивной способностью и на плане сделать спел типу "проклятие, на некоторое время по ней будет попадать каждый". "ужасные мисы" для того чтобы игрок видел что юнит промахиваться.
King_Ksel, у меня не лагово, тестировал 200 стрелков против 200 стрелков, а в общем надо еще собрать битву в 300 юнитов, то что они хранятся в памяти на саму игру не влияет... Я тестировал с помощь
local unit u
local integer i = 1
loop
	exitwhen i >= 200
	set u = CreateUnit(Player(0), 'hfoo', 130, 220, 0)
        call trigmiss(u)
        set u = CreateUnit(Player(1), 'hfoo', 120, 210, 0)
        call trigmiss(u)
        set i = i + 1
endloop
set u = null
Gold D Dragon добавил:
выпустил версию 1.1
Старый 20.12.2009, 18:10
Alibek
Choops
offline
Опыт: 12,699
Активность:
Gold_D_Dragon, хз создание для каждого юнита отдельный триггер вроде так норм если пара героев
а вдруг мы захотим использовать для +-100 юнитов?
хз я точно незнаю но помоему можно просто использовать массив
т е использовать один триггер который отслеживает получение урона и тд т е отследить кого бьют из него выгрузить данные о шансах на промах
ну примерно так
хз может бред я просто предложил
Старый 20.12.2009, 20:12
Gold D Dragon

offline
Опыт: 904
Активность:
Alibek, Я не очень понял что вы написали... Кол-во нанесенного урона можно выследить только так или делаю огромную бд у кого какая атака и защита. Так как EVENT_UNIT_DAMAGED работает только для 1 определенного юнита. А это единственный евент которые позволяет выследить кол-во нанесенного урона. И не один раз писал что сильных лагов не создает при 100, если у вас все таки создает то можно удалить все данные о плавающем тексте. Ну реально как у кого, у меня не лагает.
Старый 20.12.2009, 22:28
DARK_SYLTAN
Скромный Повелитель
offline
Опыт: 5,045
Активность:
Супер просто, что проект продолжается, +10000..... и т. д., ща заценим.

DARK_SYLTAN добавил:
хм. Ты наверное уже считаешь меня идиотом и дуболомом, но: 1) Где прописывать, какой шанс промаха, для обоих способов;
2) Где задаётся, какой текст пишется над юнитом;
3) Ещё не везде пояснения в коде.
В остальном здорово, сейчас попробую со способностью.
Хочу на своём компьютере потестить в боевых условиях, кину результаты.

DARK_SYLTAN добавил:
Что-то у меня не пашет со способностью.
Старый 20.12.2009, 23:11
Gold D Dragon

offline
Опыт: 904
Активность:
DARK_SYLTAN, 1. В триггерах нажмешь на название карты и появиться нестандартный код. Там можно найти текст который появляется, стандартно "miss"
  1. Тамже можно найти функцию miss... в ней if i == 'hfoo' and (GetRandomReal(1.00, 10.00) >= 8) then
отвечает за кто атаковал и шанс на промах изменением последней цифры в смысле 8 влияет на шанс 8 это как бы 30% шанса, 7.5 это 35%, 7 это 40% и тд... в лапках это кто атаковал 'hfoo' код пехотинца, хммм коды разных юнитов можно узнать методом создания любого триггера на гуи для юнита и делая действие "конвертировать в текст".
  1. Со способностью это надо заменить функцию мис на ту что в примере, в смысле мис удалить, пример переместить в нестандартный код и переименовать в мис.
Все что в нестандартном коде предельно ясно написано.
PS еще добавлю скрин в первый пост.

Отредактировано Gold D Dragon, 20.12.2009 в 23:48.
Старый 20.12.2009, 23:35
Lord Vampire
В больнице -_-
offline
Опыт: 2,211
Активность:
Gold_D_Dragon, вижу ты уже далеко ушёл с системой промахов.
Прости что тогда резко вышел, инет отключили и до сих пор вырублен, сижу от друга. Карта почти готова. На днях кину.
Старый 21.12.2009, 07:52
Gold D Dragon

offline
Опыт: 904
Активность:
Такс, понял что умели введу King_Ksel, Alibek, - если сделано 10 или более типов юнитов то будут лаги...
Всю ноч сидел думал как решить проблему... Вроде решил... после школы протестирую, напишу описания и выложу.
Старый 21.12.2009, 09:00
Gold D Dragon

offline
Опыт: 904
Активность:
Все вышла версия 1.2 подробности в "Изменения v1.2"
Старый 21.12.2009, 17:03
DARK_SYLTAN
Скромный Повелитель
offline
Опыт: 5,045
Активность:
Блин, хорошая наработка, но хзнаешь, чего не хватает?? Красоты и удобства!! Нельзя ли сделать, например, так: даётся юниту способность, этот юнит промахивается с вероятностью, заданной в, допустим, суффиксе редактора или каком-нибудь параметре. Не важен тип юнита. Было бы удобно и приятно, а так геморроя столько, что и заморачиваться лень.
Старый 22.12.2009, 14:54
Gold D Dragon

offline
Опыт: 904
Активность:
DARK_SYLTAN, поэтому развитие системы не стоит, я всегда думаю как сделать систему приятнее...
Дожидаемся версии 1.3 может что нахимичу сегодня - завтра наверно будет. Но ничего не гарантирую.
Старый 22.12.2009, 15:51
Elisar

offline
Опыт: 2,031
Активность:
не проще сделать 100лвл змеиной ловкости и выставлять уровень?
Старый 22.12.2009, 16:23
Gold D Dragon

offline
Опыт: 904
Активность:
Elisar, Не проще потому что змеиная ловкость - шанс УКЛОНИТСА. То есть не зависимо кто атаковал будет один и тот же шанс промаха.
Моя система делает - шанс ПРОМАЗАТЬ. То есть например у "пехотинец" всегда шанс промаха 25%. Кого бы он не атаковал.

Отредактировано Gold D Dragon, 22.12.2009 в 19:28.
Старый 22.12.2009, 19:21
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:28.