Если вы хотели бы использовать в своей карте нестандартное, оригинальное заклинание или наработку, но у вас не хватает знаний для реализации, то эта тема специально для вас. В данной теме вы можете, в определённом правилами формате, оставить заявку на создание необходимого вам заклинания или системы.
Если вы считаете, что у вас есть возможность выполнить какую-либо из имеющихся заявок, то вы можете оставить сообщение в определённом правилами формате, в котором указать какую из заявок собираетесь исполнить.

Правила темы

  • Запрещается дублирование заявок.
  • Любая заявка, написанная непонятным языком (обилие орфографических ошибок, орфоарт, отсутствие знаков препинания, использование рядов восклицательных и вопросительных знаков) будет удалена.
  • Обсуждение технических нюансов исполнения спелла или багов просьба вести через систему личных сообщений.
  • Для составления заявок используйте формы.
Заявки, не удовлетворяющие правилам, будут удалены !

Как составить заявку

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Желаемое название заказа
  • Желаемый метод исполнения (GUI/Jass/cJass/vJass)
  • Требуется ли возможность использовать спелл несколькими юнитами одновременно (MUI)
  • Цель применения способности
  • Количество уровней
  • Описание (Смысловое, а не художественное)
  • Технические характеристики (кол-во маны, параметры урона, перезарядки, время действия и т.п.) для каждого из уровней
Форма для составления заявки
# Заказ
**Название:** Название способности (или системы)
**Метод:** GUI/Jass/cJass/vJass/lua/angelscript
**MUI:** Обязательно/Не обязательно
**Цели:** Другой юнит / Сам юнит / Точка/ Область/Нет цели/Прочее (указать что именно)
**Количество уровней:** Целое число
**Описание:** Ваше описание. Можно слить со следующим.
**Технические характеристики:** Ваше описание. Можно слить с предыдущим.

Как принимать заказ

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Никнейм заказчика
  • Название выбранного вами заказа
  • Примерные сроки исполнения (конечно, их соблюдение не критично, но желательно)
Форма для принятия заявки
# Заказ принят
**Заказчик:** Никнейм заказчика
**Заказ:** Название способности/алгоритма
((центр
**Спелл будет завершен к [дата в формате дд.мм.гггг. без скобок]**
))
[ дата принятия заявки в формате дд.мм.гггг / дата, к которой спелл предположительно будет готов в формате дд.мм.гггг ]

Как сообщить о не/выполнении заказа

Необходимо, используя форму составить сообщение в данной теме, где указать:
  • Никнейм заказчика
  • Название выбранного вами заказа
  • Выполнен ли заказ
  • В случае, если заказ невыполним/не выполнен полностью, рекомендуется описать, что именно вам удалось/не удалось сделать.

  • Предоставить карту
Форма для не/выполненного заказа
Заклинание готово! [Если заказ выполнен успешно] / Не удалось выполнить заклинание [Если по каким-либо причинам вы не способны его выполнить] (1 из 2)
=
Заказчик: Никнейм заказчика
Заказ: Название способности
Выполнено: Да/Нет
-
[Сюда добавить инструкцию по импорту, или описать что у вас не/получилось, если не удалось выполнить заказ]
За качественно выполненный заказ вы получите дополнительно 200 единиц опыта.

Дополнительно: как приобрести спелл, не прибегая к этой теме

0. Пройдитесь по базе способностей xgm.guru/p/wc3/tag/ability или алгоритмов xgm.guru/p/wc3/tag/algorithm
A. Для начала загляните в Архив готовых спеллов. Возможно, спелл, аналогичный вашему, уже был сделан.
B. Проверьте, нет-ли нужного спелла в Библиотеке заклинаний. Проверенные спелл-мейкеры изготавливали заклинания специально для общественного использования.
C. Поищите общедоступные для открытия карты - там тоже бывают полезные вещи.
D. Если ничего не помогает, пройдитесь поиском по Академии - вероятно, что такие спеллы уже пытались делать и спрашивали как.
E. Если поиски не помогли, попробуй сделать его сам:
  • Осваиваем триггеры в Базе статей, F.A.Q., если не имеем понятия о них.
  • Существуют специальные статьи по созданию спеллов и баффов: 1, 2, 3, 4, 5
  • Поскольку ваши спеллы будут неоптимизированы, и более того, с кучей утечек - настоятельно рекомендуется читать статьи\темы про JASS. Тяжело читать? Легко делать!
  • Если ну никак не выходит сделать то что требуется, заходим в Академию и используем ее по основному назначению - задаем вопросы.

Разумные поиски и тщательное изучение помогут вам добиться результата.
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Roy Mustang, нужно немного больше информации. Ешка морды по линии притягивает, а тебе нужно именно в радиусе от точки? Если в точке больше трёх целей, то кому отдавать приоритет? Раненным, самым ближним, самым дальним, у кого больше хп? Урон и замедление наносятся в начале притягивания или по его завершению? По поводу способности я хз что ИИ может там юзать)
28
rsfghd:
Roy Mustang, нужно немного больше информации. Ешка морды по линии притягивает, а тебе нужно именно в радиусе от точки? Если в точке больше трёх целей, то кому отдавать приоритет? Раненным, самым ближним, самым дальним, у кого больше хп? Урон и замедление наносятся в начале притягивания или по его завершению? По поводу способности я хз что ИИ может там юзать)
По ИИ способности - можно любой спел который кастует на цель наверное вместо точки (тот же Finger of Death)
На счет приоритета - желательно тех у кого больше хп (но я не против что бы притягивал всех кто рядом с целю)
(еще возможно что по зоне стяжки будут вражеские крипы - желательно их расталкивать крипов в стороны пока цели стяжки будут стягиватся к Боссу)
Урон и замедление по завершению стяжки
(И на счет спецеффекта что ни будь придумать бы - какойнить спец еффект который появится в точке и тоже будет двигатся к Боссу как на гифке - например волна воды)
28

Заказ принят

Заказчик: Roy Mustang
Способность: Come over here
Примерный срок выполнения: завтра 28.06
28

Заклинание готово!

Заказчик: Roy Mustang
Способность: Come over here
Выполнено: Да

Инструкция по импорту:
Копируешь библиотеку mylib (в шапке карты) куда угодно и переименовываешь если нужно. Копируешь первые 3 триггера - каст абилки, регистрация получения юнитом урона и реагирование на получение урона (2 последних для своих действий, если ты не планируешь ничего добавлять (спецэффекты к примеру), то можешь удалить эти триггеры). По коду, в самом верху mylib, нужно вписать равкоды ауры и её заклинания, выбрать свободную ячейку хэш-таблицы для юнита и указать периодичность таймера истечения ауры, так же указать равкод неиспользуемого предмета. Если у тебя уже есть хэш-таблица с названием H, можешь стереть строку с инициализацией хэш-таблицы. Если нужна будет дополнительная помощь или что-то не работает/работает не так, как хотел - пиши
Текущие настройки:
  1. Периодичность
  2. Скорость эффекта от точки каста
  3. Скорость эффекта к точке каста (притяжение)
  4. Задержка появления притягивания
  5. Дистанция прохождения эффекта от кастера
  6. Радиус
  7. Урон
  8. Дистанция начала эффекта от кастера
  9. Сила расталкивания
  10. Точка начала притягивания от кастера
  11. Дистанция прохождения эффекта к кастеру
  12. Время замедления
  13. Тип атаки
  14. Тип урона
  15. Кол-во притягиваемых юнитов
  16. Значение переменной TF для своих действий
  17. Эффекты (дамми)
  18. Кого притягивать
  19. Кого расталкивать
  20. Отдавать ли приказ "стоп"
Код:
library mylib initializer init
    globals
        private constant hashtable H = InitHashtable()
        private constant group TempG = CreateGroup()
        private constant group TempG1 = CreateGroup()
        private constant integer ItemID = 'spsh' // любой нигде не использующийся предмет (для проверки проходимости точки)
        private constant integer UnitH = 0 // свободная ячейка юнита для ауры
        private constant integer AbilityID = 'A001'// равкод ауры
        private constant integer AbilityID1 = 'BOae'// равкод заклинания ауры
        private constant real TimerPeriodic = 1.00 // периодичность таймера для ауры
        private boolean TempB
        private integer TempI
        private attacktype At
        private damagetype Dt
        private group TempG2
        private group TempG3
        private item TempIt
        private unit CUEX
        private real TempR
        private real TempR1
        private real MaxX
        private real MinX
        private real MaxY
        private real MinY
    endglobals

    private function DBC takes real x, real y, real x1, real y1 returns real
       return SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)) 
    endfunction 
    
    private function SetUnitPositionEx1 takes unit u, real x, real y returns nothing
        if x < MinX then
            set x = MinX
        elseif x > MaxX then
            set x = MaxX
        endif
        if y < MinY then
            set y = MinY
        elseif y > MaxY then
            set y = MaxY
        endif
        
        call SetUnitX(u,x)
        call SetUnitY(u,y)
    endfunction
    
    private function SetUnitPositionEx takes unit u, real x, real y returns nothing
        call SetItemPosition(TempIt,x,y)
        call SetItemVisible(TempIt,false)
        if DBC(x,y,GetItemX(TempIt),GetItemY(TempIt)) > 10 then
            set x = GetItemX(TempIt)
            set y = GetItemY(TempIt)
        endif
        call SetUnitX(u,x)
        call SetUnitY(u,y)
    endfunction

    private function CreateUnitEx takes player id, integer unitid, real x, real y, real face returns unit
        set CUEX = CreateUnit(id,unitid,x,y,face*bj_RADTODEG)
        call UnitAddAbility(CUEX,'Arav')
        call SetUnitPathing(CUEX,false)
        call SetUnitPositionEx1(CUEX,x,y)
        return CUEX
    endfunction
    
    function CopyGroup takes group g returns group
        set bj_groupAddGroupDest = CreateGroup()
        call ForGroup(g, function GroupAddGroupEnum)
        return bj_groupAddGroupDest
    endfunction
    
    private function GetDirection takes unit u, unit targ returns boolean
        local real alpha = GetUnitFacing(u)
        local real gamma = bj_RADTODEG * Atan2(GetUnitY(targ)-GetUnitY(u), GetUnitX(targ)-GetUnitX(u))
        if gamma < 0 then
            set gamma = 360. + gamma
        endif
        if (alpha < 180. and not(gamma > alpha and gamma < alpha + 180.)) or (alpha > 180. and gamma > alpha - 180. and gamma < alpha) then
            return false
        else
            return true
        endif
    endfunction
    
    private struct First
        unit dummy
        real a
        real x
        real y
        real speed
        real dist
    endstruct
    
    private struct ComeOverHereInfo
        unit caster
        unit dummy
        real a
        real x
        real y
        real dist
        real periodic
        boolean on
        boolean b2
        boolexpr b
        boolexpr b1
        group g
        
        real radius
        real damage
        integer AttackType
        integer DamageType
        
        integer count
        integer count1 = 0
        
        integer tf
        integer tf1
        integer tf2
        integer tf3
        
        real speed
        real speed1
        
        real time
    endstruct
    
    private function FirstMove takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local First A = LoadInteger(H,GetHandleId(t),0)
        
        set A.dist = A.dist-A.speed
        set A.x = A.x+A.speed*Cos(A.a)
        set A.y = A.y+A.speed*Sin(A.a)
        call SetUnitPositionEx1(A.dummy,A.x,A.y)
        
        if A.dist <= 0 then
            call FlushChildHashtable(H,GetHandleId(t))
            call PauseTimer(t)
            call DestroyTimer(t)
            call KillUnit(A.dummy)
            set A.dummy = null
            call A.destroy()
        endif
        
        set t = null
    endfunction
    
    private function mycond takes nothing returns boolean
        return not IsUnitInGroup(GetFilterUnit(),TempG2)
    endfunction

    private function MoveSide takes nothing returns nothing
        local unit u = GetEnumUnit()
        local real x = GetUnitX(u)
        local real y = GetUnitY(u)
        local real a
        if GetDirection(CUEX,u) then
            set a = TempR+(90*bj_DEGTORAD)
        else
            set a = TempR-(90*bj_DEGTORAD)
        endif
        call SetUnitPositionEx(u,x+TempR1*Cos(a),y+TempR1*Sin(a))
        if TempB then
            call IssueImmediateOrder(u,"stop")
        endif
        call UnitDamageTarget(bj_lastCreatedUnit,u,0,false,false,null,null,null)
        set u = null
    endfunction
    
    private function Move takes nothing returns nothing
        local unit u = GetEnumUnit()
        call SetUnitPositionEx(u,GetUnitX(u)+TempR1*Cos(TempR),GetUnitY(u)+TempR1*Sin(TempR))
        if TempB then
            call IssueImmediateOrder(u,"stop")
        endif
        call UnitDamageTarget(bj_lastCreatedUnit,u,0,false,false,null,null,null)
        set u = null
    endfunction
    
    private function RemoveAura takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local unit u = LoadUnitHandle(H,GetHandleId(t),0)
        local integer i = GetHandleId(u)
        local real a = LoadReal(H,i,UnitH)-TimerPeriodic
        
        if a <= 0 then
            call FlushChildHashtable(H,GetHandleId(t))
            call RemoveSavedReal(H,i,UnitH)
            call PauseTimer(t)
            call DestroyTimer(t)
            call UnitRemoveAbility(u,AbilityID)
            call UnitRemoveAbility(u,AbilityID1)
        else
            call SaveReal(H,i,UnitH,a)
        endif
        
        set u = null
        set t = null
    endfunction
    
    private function End takes nothing returns nothing
        local unit u = GetEnumUnit()
        local integer i = GetHandleId(u)
        local timer t
        call UnitDamageTarget(bj_lastCreatedUnit,u,TempR,false,false,At,Dt,null)
        if LoadReal(H,i,UnitH) <= 0 then
            set t = CreateTimer()
            call UnitAddAbility(u,AbilityID)
            call SaveUnitHandle(H,GetHandleId(t),0,u)
            call TimerStart(t,TimerPeriodic,true,function RemoveAura)
            set t = null
        endif
        call SaveReal(H,i,UnitH,TempR1)
        set u = null
    endfunction
    
    private function sp takes nothing returns nothing
        if IsUnitInGroup(GetEnumUnit(),TempG2) or IsUnitInGroup(GetEnumUnit(),TempG1) then
            call GroupRemoveUnit(TempG,GetEnumUnit())
        endif
    endfunction
    
    private function ComeOverHereMove takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local unit u
        local unit u1 = null
        local ComeOverHereInfo A = LoadInteger(H,GetHandleId(t),0)
        
        set A.dist = A.dist-A.speed
        set A.x = A.x+A.speed*Cos(A.a)
        set A.y = A.y+A.speed*Sin(A.a)
        call SetUnitPositionEx1(A.dummy,A.x,A.y)
        
        if A.on then
            set A.on = false
            call ShowUnit(A.dummy,true)
            call UnitRemoveAbility(A.dummy,'Aloc')
            call UnitAddAbility(A.dummy,'Aloc')
            call TimerStart(t,A.periodic,true,function ComeOverHereMove)
        endif
        
        set TempB = A.b2
        set bj_lastCreatedUnit = A.caster
        call GroupEnumUnitsInRange(TempG1,A.x,A.y,A.radius,A.b1)
        if A.count > 0 then
            set TempG2 = A.g
            call GroupEnumUnitsInRange(TempG,A.x,A.y,A.radius,A.b)
            call ForGroup(TempG,function sp)
            loop
                exitwhen FirstOfGroup(TempG) == null or A.count < 1
                set TempG3 = CopyGroup(TempG)
                set TempR = 0.
                loop
                    set u = FirstOfGroup(TempG3)
                    if u == null then
                        if u1 != null then
                            call GroupRemoveUnit(TempG,u1)
                            call GroupAddUnit(A.g,u1)
                            set A.count = A.count-1
                            set u1 = null
                        endif
                        exitwhen true
                    endif
                    if IsUnitInGroup(u,TempG) and GetWidgetLife(u) > TempR then
                        set TempR = GetWidgetLife(u)
                        set u1 = u
                    endif
                    call GroupRemoveUnit(TempG3,u)
                endloop
                call DestroyGroup(TempG3)
            endloop
            set u = null
            set u1 = null
            call GroupClear(TempG)
        endif
        set CUEX = A.dummy
        set TempR = A.a
        set TempR1 = A.speed1
        set udg_TF = A.tf2
        call ForGroup(TempG1,function MoveSide)
        call GroupClear(TempG1)
        set TempR1 = A.speed
        set udg_TF = A.tf1
        call ForGroup(A.g,function Move)
        
        if A.dist <= 0 then
            call FlushChildHashtable(H,GetHandleId(t))
            call PauseTimer(t)
            call DestroyTimer(t)
            call KillUnit(A.dummy)
            set udg_TF = A.tf
            set TempR = A.damage
            set TempR1 = A.time
            set At = ConvertAttackType(A.AttackType)
            set Dt = ConvertDamageType(A.DamageType)
            call ForGroup(A.g,function End)
            call GroupClear(A.g)
            call DestroyGroup(A.g)
            set A.dummy = null
            set A.caster = null
            set A.g = null
            set A.b = null
            set A.b1 = null
            call A.destroy()
        endif
        set udg_TF = A.tf3
        set t = null
    endfunction
    
    function ComeOverHere takes nothing returns nothing
        local timer t = CreateTimer()
        local ComeOverHereInfo A = ComeOverHereInfo.create()
        local First A1 = First.create()
        local real x = GetSpellTargetX()
        local real y = GetSpellTargetY()
        
        set A.caster = GetTriggerUnit()
        set A.periodic = udg_Real[0]
        set A.x = GetUnitX(A.caster)
        set A.y = GetUnitY(A.caster)
        set A.a = Atan2(A.y-y,A.x-x)
        set A.g = CreateGroup()
        set A.radius = udg_Real[5]
        set A.damage = udg_Real[6]
        set A.AttackType = GetHandleId(udg_AttackType)
        set A.DamageType = GetHandleId(udg_DamageType)
        set A.speed = udg_Real[2]
        set A.speed1 = udg_Real[8]
        set A.dist = udg_Real[10]
        set A.on = true
        set A.b = udg_Bool[0]
        set A.b1 = udg_Bool[1]
        set A.b2 = udg_Boolean
        set A.count = udg_Int[0]
        set A.tf = udg_Int[1]
        set A.tf1 = udg_Int[2]
        set A.tf2 = udg_Int[3]
        set A.tf3 = udg_Int[4]
        set A.time = udg_Real[11]
        
        call SaveInteger(H,GetHandleId(t),0,A)
        call TimerStart(t,udg_Real[3],false,function ComeOverHereMove)
        
        set t = CreateTimer()
        set A1.a = Atan2(y-A.y,x-A.x)
        set A1.x = A.x+udg_Real[7]*Cos(A1.a)
        set A1.y = A.y+udg_Real[7]*Sin(A1.a)
        set A1.dummy = CreateUnitEx(GetOwningPlayer(A.caster),udg_DummyID[1],A1.x,A1.y,A1.a)
        set A1.speed = udg_Real[1]
        set A1.dist = udg_Real[4]
        call SaveInteger(H,GetHandleId(t),0,A1)
        call TimerStart(t,udg_Real[0],true,function FirstMove)
        
        set A.x = A.x+udg_Real[9]*Cos(A1.a)
        set A.y = A.y+udg_Real[9]*Sin(A1.a)
        set A.dummy = CreateUnitEx(GetOwningPlayer(A.caster),udg_DummyID[0],A.x,A.y,A.a)
        call ShowUnit(A.dummy,false)
        
        set t = null
    endfunction
    
    private function init takes nothing returns nothing
        set TempIt = CreateItem(ItemID,0,0)
        call SetItemVisible(TempIt,false)
        set MaxX = GetRectMaxX(GetWorldBounds())
        set MinX = GetRectMinX(GetWorldBounds())
        set MaxY = GetRectMaxY(GetWorldBounds())
        set MinY = GetRectMinY(GetWorldBounds())
    endfunction
endlibrary




















library HC initializer init
    globals
    private leaderboard HB
    endglobals
    private function HCU takes nothing returns nothing
        local integer i = 0
        local integer id
        local location array P
        local real result = 0
        loop
            exitwhen i >= 50
            set i = i+1
            set P[i] = Location(0,0)
            set id = GetHandleId(P[i])
            set result = result+(id-0x100000)
        endloop
        set result = result/i-i/2
        loop
            call RemoveLocation(P[i])
            set P[i] = null
            exitwhen i <= 1
            set i = i-1
        endloop
        call LeaderboardSetItemValue(HB,0,R2I(result))
    endfunction

    private function HCA takes nothing returns nothing
        set HB = CreateLeaderboard()
        call LeaderboardSetLabel(HB,"Handle Counter")
        call PlayerSetLeaderboard(GetLocalPlayer(),HB)
        call LeaderboardDisplay(HB,true)
        call LeaderboardAddItem(HB,"Handles",0,Player(0))
        call LeaderboardSetSizeByItemCount(HB,1)
        call HCU()
        call TimerStart(GetExpiredTimer(),.05,true,function HCU)
    endfunction

    private function init takes nothing returns nothing
        call TimerStart(CreateTimer(),0,false,function HCA)
    endfunction
endlibrary
Если по пути попадётся юнит у которого больше хп, оно не начнёт его притягивать, если достигнуто макс кол-во, а так же оно не заменит самого раненого юнита из притягиваемых на нового

Загруженные файлы
1

Заказ

Название: Summon Limit
Метод: GUI
MUI: Обязательно
Цель: Точка
Количество уровней: 2
Описание: В выбраной точке вызывается Вард который просто наблюдает за областью пока его не убьют враги. Максимальноe количество Вардов 4 (Level 1), 6 (Level 2). Если максимальное количество Вардов было достигнуто и при этом героем вызывается очередной Вард, старейший Вард удаляется из игры.
Технические характеристики: Мне нужна эта система лимита саммонов чтобы подстроить к своим спеллам в мапе, я работать умею только с GUI! Спасибо и кредит в Мапе будет оствален в форме: Programming and Code: CreatorName (XGM.GURU)
7

Заказ

Название: Продажа предметов союзникам
Метод: GUI/Jass
MUI: Обязательно (будут использовать разные игроки)
**Версия* 1.26 classica
Цель: Другой юнит / Прочее (магазин\лавка союзников)
Количество уровней: 1
Описание: При продаже в союзную лавку предмета, союзник получает 50% золота за предмет.
Технические характеристики: Нужна система, когда в лавку союзника продается предмет, неважно какой, чтоб союзник получил 50% от стоимости. В стандарте 50% пропадают просто (налог) и 50% вы получаете обратно. Нужно сделать так, чтоб союзнику возвращались эти 50% и вам тоже 50%.
p.s. сам ковыряюсь уже третий день в тригерах... нужна ваша помощь. хочу заставлять игроков в игре не просто продавать в нейтральные лавки предметы, но и восстанавливать экономику союзника при необходимости, совершать более выгодные действия.
Очень надеюсь что кто-то поможет с этим.
28
mistwood, ты типо привязываешься к союзнику и за каждый проданный тобой предмет он получает 50%? Или это только для его лавки, когда туда продают предмет он получает голду? Или нужно привязаться к нему и продать в его лавку?
21
mistwood:
Может я чего-то не понял, но можно же просто выдать половину стоимости предмета владельцу лавки, ведь так?
Ну и проверить, является ли он союзником
7
ofeerist:
mistwood:
Может я чего-то не понял, но можно же просто выдать половину стоимости предмета владельцу лавки, ведь так?
Ну и проверить, является ли он союзником
Вот это примерно я и хочу, да. Только Не могу тригер склепать правильно. У меня анг. редактор.
Если сможешь такое сделать буду очень благодарен, хочу глянуть где я застрял и что не так делаю...

rsfghd:
mistwood, ты типо привязываешься к союзнику и за каждый проданный тобой предмет он получает 50%? Или это только для его лавки, когда туда продают предмет он получает голду? Или нужно привязаться к нему и продать в его лавку?
Типа если ты продаешь в лавку союзника предмет, то он лутает 50% от его стоимости. Если в нейтральную лавку, то никто нечего не лутает.
21
mistwood:
У меня нет ни варкрафта, ни редактора, так что, тебе придется ждать помощь от rsfghd
*Передал эстафету*
28
mistwood, держи
Тут 2 версии, одна на гуи и другая на джассе, используй удобную для себя. Отличие версии на джассе в том, что она само собой оптимизированнее

тут придётся через ифы ибо для обычных смертных не завезли функцию узнать стоимость предмета
Загруженные файлы
7
rsfghd:
mistwood, держи
Тут 2 версии, одна на гуи и другая на джассе, используй удобную для себя. Отличие версии на джассе в том, что она само собой оптимизированнее

тут придётся через ифы ибо для обычных смертных не завезли функцию узнать стоимость предмета
Спасибо большое. Понял что я тупой, и можно даже на гуи сделать проще чем я хотел... И за код спасибо, попробую в него все шмотки занести и настроить. Респект тебе еще раз!
7
rsfghd:
mistwood, держи
Тут 2 версии, одна на гуи и другая на джассе, используй удобную для себя. Отличие версии на джассе в том, что она само собой оптимизированнее

тут придётся через ифы ибо для обычных смертных не завезли функцию узнать стоимость предмета
Слушай, я тут своего рода Баг/абуз нашел. Есть предметы с зарядами, при их использовании цена предмета падает. Следовательно тебе при продаже возвращается 50% от этой самой цены предмета. А в твоих версиях возвращается фиксированная цена за предмет. Можно ли как-то возвращать именно 50% от стоимости предмета? Именно половину? У меня зарядов может быть и по 10 и по 40. Следовательно цена за продажу может быть высокой.
Грубо говоря суть абуза, что имея предмет с зарядами, ты можешь его использовать и оставить 1 ед. заряда, а потом продать его и вернуть союзнику 50% стоимости всей шмотки (как со всеми зарядами).
28
mistwood, к, я добавлю условие с учётом стаков, если ты юзаешь джасс версию

Завтра пришлю, кстати, стоимость дерева не добавлял, добавить?
28
В общем вот. Добавил стоимость дерева, точнее если тебе нужно будет - разблокируешь функции (убрать //) local integer lumber и в самом низу call SetPlayerState. Добавил учёт стаков, можешь либо формулой воспользоваться (стоимость стака*колво), либо другим примером, который я добавил, если он тоже не нужен, то можешь стереть его

в принципе тебе достаточно лишь пару строчек скопировать и закинуть себе в код, если ты уже много написал и не хочешь заново переписывать
Загруженные файлы
7
rsfghd:
В общем вот. Добавил стоимость дерева, точнее если тебе нужно будет - разблокируешь функции (убрать //) local integer lumber и в самом низу call SetPlayerState. Добавил учёт стаков, можешь либо формулой воспользоваться (стоимость стака*колво), либо другим примером, который я добавил, если он тоже не нужен, то можешь стереть его

в принципе тебе достаточно лишь пару строчек скопировать и закинуть себе в код, если ты уже много написал и не хочешь заново переписывать
Спасибо, я посмотрю все завтра обязательно. Мне впринципе только по зарядам главное. Но если что не пойму черкану тебе друг! Еще раз снимаю шляпу.
28

Заказ

Добрый день всем , не совсем заклинение - скорее всего мини система , нужна под система для моего базового ИИ , (Карта 300 Спартанцев)
Описание : По сути нужна система которая бы заставляла героев ИИ (Спартанцев отступать немного назад когда у них мало хп и во круг них много врагов а так же есть путь отсупления (тоесть есть возможность отсупить немного) - но только на небольшое растоянние - что то вроде кайта)
В моей карте уже есть базовые действия ИИ (Атака - отсупление на фонтан - регруп у Леонида после хила и постоянное патрулирование рядом с Леонидом , мне нужно что бы при нужном мне моменте (скажем когда у ИИ 50% хп то заставить его выполнить данный кайт - с перезарядкой в N секунд)
Хотелось бы в Переменных иметь возможность настроить
  • Время для ИИ между кайтом
  • Выбрать каких юнитов можно добавить в ИИ отряды (в основном это только герои)
  • Дальность отступление
  • Процент хп для реагирования
  • Процент мп для реагированния
Название: Retreat , Regroup , Attack.
Метод: GUI (можно и Jass но переменные на гуи с возможностю настроить под себя)
MUI: Обязательно
Цель: Нет
Количество уровней: Нет
Ниже скриншот где в основном происходит битва (у костра повышенное лечение , и когда там происходит битва то ИИ не отсупат уже - в основном система нужна для того что бы даже под костром ИИ кайтил назад в нужные моменты)
Загруженные файлы
28

Заклинание готово!

Заказчик: Roy Mustang
Способность: Retreat/Regroup/Attack.
Выполнено: Да

инструкция по импорту
закидываешь все триггеры к себе в карту, если я не ошибаюсь ты работаешь на рефе, а там есть встроенное событие "юнит получает урон" и регистрировать на каждого юнита такое событие не нужно, добавишь условие только что получивший урон юнит принадлежит боту и это юнит, который должен кайтить, триггер "а" не нужен будет, триггер b отвечает за кайт, там можешь найти настройки периодичности кайта (сейчас чем меньше хп, тем чаще кайтит), настройки когда возвращать юнита в группу патрулирования и настройки дистанции кайта (сейчас там есть базовая дистанция, дополнительная дистанция если у юнита меньше 15% хп и дополнительная дистанция если юнита окружили противники у которых больше хп)
если юниты находятся у костра, они будут кайтить к палаткам, так же загляни в шапку карты, скопируй оттуда код к себе, если у тебя уже создана хэш-таблица с названием "H", то можешь удалить globals...endglobals, реагирование на ману я не добавил, за это сорян, но думаю ты сможешь настроить, там всё на гуи
Загруженные файлы
11

Заказ

Название: Мир снов
Метод исполнения: vJass
MUI: да
Цель: боевая единица
Уровни: 1
Описание: указанная боевая единица погружается в сон (так видят все игроки, кроме владельца цели). Для владельца цели мир меняется (цвет неба становится зелёным, и всё становится полупрозрачным. Вокруг Цели начинают появляться четыре стража мира снов, которые атакуют цель (стражей видит только владелец цели) и наносят ей по 100 урона за атаку.
Технические характеристики: 100 маны, 60 секунд перезарядки, время действия 10 секунд.

Заказ 2

Название: Слепота
Метод исполнения: vJass
MUI: да
Цель: боевая единица
Уровни: 1
Описание: указанная боевая единица слепнет и перестаёт видеть миникарту и на экране сплошная чернота, спустя 5 секунд слепота начинает проходить и втечении оставшихся 5 секунд юниты с полностью прозрачных станут нормальными.
Технические характеристики: 50 маны, 30 секунд перезарядки, время действия 10 секунд.
14
Имя: Опыт боя
Метод исполнения: GUI/JASS
MUI: Да
Цель: нет
Уровни: 5
Описание: получивший эту способность героя получает доп. Силу атака в размере 10/15/20/25/30% от своих характеристик
11
Гуванч:
Имя: Опыт боя
Метод исполнения: GUI/JASS
MUI: Да
Цель: нет
Уровни: 5
Описание: получивший эту способность героя получает доп. Силу атака в размере 10/15/20/25/30% от своих характеристик
На мемхаке могу сделать
14
ArhiMEN:
Гуванч:
Имя: Опыт боя
Метод исполнения: GUI/JASS
MUI: Да
Цель: нет
Уровни: 5
Описание: получивший эту способность героя получает доп. Силу атака в размере 10/15/20/25/30% от своих характеристик
На мемхаке могу сделать
спасибо канеш но я против мемхака абсолютно лучше без него

Extremator:
Гуванч, на днях буду дома, сделаю на GUI.
было бы круто
26
Гуванч:
Extremator:
Гуванч, на днях буду дома, сделаю на GUI.
было бы круто
Держи.
Загруженные файлы
14
Extremator:
Гуванч:
Extremator:
Гуванч, на днях буду дома, сделаю на GUI.
было бы круто
Держи.
жеееесть, очееень круто спаибо!!!!!

можно поставить таймер на 0.50? а то надо ждать 2 секунды
Чтобы оставить комментарий, пожалуйста, войдите на сайт.