28

» WarCraft 3 / Как узнать на джассе есть ли у героя предмет или нет?

Кидаешь одну из версий UnitHasItemOfType в шапку, когда нужно будет использовать пишешь
if UnitHasItemOfType(caster,'Item') then
    // Нужные действия.
endif
28

» WarCraft 3 / Триггерный автокаст?

По второму пункту.
globals
    real Mana = 0.
    unit BadUnit = null
    real Range = 700.
    group CastGroup = CreateGroup()
endglobals

function Conditions takes nothing returns boolean
    local real mana = GetUnitState(GetFilterUnit(), UNIT_STATE_MANA)
    if inRange and mana > Mana then // Чтобы отсеять с наибольшей маной.
    // Чтобы отсеять с наименьшей, нужно написать mana < Mana и начальное значение Mana должно быть 999999.
    // Это значение также должно восстанавливаться после каста.
    // Аналогично и с расстоянием до феи.
        set Mana = mana
        set BadUnit = GetFilterUnit()
    endif
    return true
endfunction

function Trig_Cast_Actions takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local real x = GetUnitX(caster)
    local real y = GetUnitY(caster)
    call GroupEnumUnitsInRange(CastGroup, x, y, Range, function Conditions)
    call GroupRemoveUnit(CastGroup, BadUnit)
    // Другие действия.
    call GroupClear(CastGroup)
    set caster = null
endfunction

// Функция для расстояния:
function GetDistancePoints takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
endfunction

function GetDistanceUnitPoint takes unit u, real x, real y returns real
    local real dx = GetUnitX(u) - x
    local real dy = GetUnitY(u) - y
    return SquareRoot(dx * dx + dy * dy)
endfunction

function GetDistanceUnits takes unit u1, unit u2 returns real
    local real dx = GetUnitX(u1) - GetUnitX(u2)
    local real dy = GetUnitY(u1) - GetUnitY(u2)
    return SquareRoot(dx * dx + dy * dy)
endfunction
28

» WarCraft 3 / Как узнать на джассе есть ли у героя предмет или нет?

native UnitHasItem takes unit whichUnit, item whichItem returns boolean
function UnitHasItemOfTypeBJ takes unit whichUnit, integer itemId returns boolean
    return GetInventoryIndexOfItemTypeBJ(whichUnit, itemId) > 0
endfunction

// Данная функция утечна, так как indexItem не обнуляется
function GetInventoryIndexOfItemTypeBJ takes unit whichUnit, integer itemId returns integer
    local integer index
    local item    indexItem

    set index = 0
    loop
        set indexItem = UnitItemInSlot(whichUnit, index)
        if (indexItem != null) and (GetItemTypeId(indexItem) == itemId) then
            return index + 1
        endif

        set index = index + 1
        exitwhen index >= bj_MAX_INVENTORY
    endloop
    return 0
endfunction
function UnitHasItemOfType takes unit whichUnit, integer itemId returns boolean
    local integer index = 0
    loop
        if GetItemTypeId(UnitItemInSlot(whichUnit, index)) == itemId then
            return true
        endif
        set index = index + 1
        exitwhen index == bj_MAX_INVENTORY
    endloop
    return false
endfunction

// Можно ещё так написать
function UnitHasItemOfType takes unit whichUnit, integer itemId returns boolean
    local integer index = 0
    loop
        exitwhen GetItemTypeId(UnitItemInSlot(whichUnit, index)) == itemId
        set index = index + 1
        exitwhen index == bj_MAX_INVENTORY
    endloop
    return index < bj_MAX_INVENTORY
endfunction
28

» WarCraft 3 / Преобразовать подстроку в реальное

Какое сообщение должно бы введено? Если "t 6", то тогда должно быть Подстрока(Строка чата, 3, 3) или Подстрока(Строка чата, 3, ДлинаСтроки(Строка чата)).
Символы в нашей строке: 't', ' ', '6'.
't' находится между 0 и 1, ' ' между 1 и 2, '6' находится между 2 и 3. Нам нужно вытащить '6', то есть нужно передать 2 и 3 как начало и конец подстроки соответственно, но из-за SubStringBJ, нужно передать 3 как начало подстроки.
function SubStringBJ takes string source, integer start, integer end returns string
    return SubString(source, start-1, end)
endfunction
28

» WarCraft 3 / Нахождение атаки героя

Сделать БД.
Был занят, не дописал. Можно определить, если сделать свою систему бонусов к урону и БД со стандартными значениями крона. Либо как сказал quq_CCCP.
28

» WarCraft 3 / Добавление способности в спеллбук тригером

8gabriel8:
PT153, а нельзя в спеллбуке поменять способность с помощью способности Техника?
Вот чего не знаю, того не знаю. Туториал, что я кинул, содержит далеко на все хитрости, потому многое нужно найти самому.
28

» WarCraft 3 / Добавление способности в спеллбук тригером

Естественно, я сначала прочел все что смог и только потом задал вопрос, так как мне ничего не подошло)
Создать 40 спелбуков - не проблема, на самом деле. Более того, так ты можешь отсеять ненужные заклинания, которые нельзя копировать. Минус в том, что лимит на копирование будет 11 способностей, если не удалять старые.
28

» WarCraft 3 / Добавление способности в спеллбук тригером

Нельзя добавить триггерно способность прямо в спелбук.
Читайте тут в пункте 1.24 как добавить в спелбук способность.
28

» WarCraft 3 / Исходный код MdlVis

bpl файлами
Что это за файлы такие? Я знаю только .blp. MdlVis работает только с моделями, да и то только с теми, которые имеют точки.
28

» WarCraft 3 / Лава

мне вот интересно, почему аж два дизлайка поймал в том посте о тупости BJ функций? Я же сказал как есть и это чистая правда.
Просто есть способность "Влияние", а почему кто-то поставил диз, не знаю, так-то написал ты всё верно. Поставил лайк)~Fakov:
гуй обеспечил низкий порог вхождения в мапмейкинг, а джасс придал этому мапмейкингу качества. Имхо.
Полностью согласен.
28

» WarCraft 3 / Лава

ты сейчас это просто из воздуха придумал чтобы "защитить GUI"?
И всё же это так. С этого всё началось, а потом...
28

» WarCraft 3 / Насчет ландшафта

Прикреплю торренты для нормального WC3. Также скачай JNPG:R с XGM, обнови pjass.exe и TESH.

Решение твое проблемы:
Ты делаешь кратер в точке X шириной Y и глубиной Z. Чтобы после его убрать, нужно сделать кратер в точке Х шириной Y и глубиной -Z.
28

» WarCraft 3 / Насчет ландшафта

Понял, у меня были проблемы с обновлением файла, потому такое возможно.
Кидаю снова.
Загруженные файлы
28

» WarCraft 3 / Вопрос по Jass

Расставил отступы, вдруг поможет.
scope SPELLSHAR initializer init{
    globals
        private group temp_group = CreateGroup()	
    endglobals
    
    OneTimerStruct(SPELL){
        unit a,b	
        real dist,ang	
        group g
        
        boolean Update(){
            real x = GetUnitX(b)	
            real y = GetUnitY(b)
            unit c	
            if (dist > 0){
                GroupEnumUnitsInRange(temp_group,x,y,200,null)	
                loop{
                    c = FirstOfGroup(temp_group)	
                    exitwhen (c == null)	
                    if GetWidgetLife(c) > 0.405 && IsUnitEnemy(c,GetOwningPlayer(a)) && !IsUnitInGroup(c,g){
                        UnitDamageTarget(a,c,50*GetUnitAbilityLevel(a,'A000'),false,false,null,null,null)	
                        if (GetWidgetLife(c) > 0.405){
                            GroupAddUnit(g,c)	
                        }
                    }
                    GroupRemoveUnit(temp_group,c)	
                }
                SetUnitX(b,x+50*Cos(ang)	
                SetUnitY(b,y+50*Sin(ang)
                dist -= 50	
                GroupClear(g)	
                RemoveUnit(b)	
                return false 
            }
            return true	
        }

        static void Add(){
            real x,y
            thistype this = thistype.create()	
            this.a = GetSpellAbilityUnit()	
            this.dist = 1000	
            if (this.g == null){ 
                this.g = CreateGroup() 
            }
            x = GetUnitX(this.a)	
            y = GetUnitY(this.a)
            this.ang = 57.296*Atan2(GetSpellTargetY()-y,GetSpellTargetX()-x)	
            this.b = CreateUnit(GetOwningPlayer(this.a),'h000',x,y,this.ang)	
            this.ang *= 0.0174	
            OneTimerAdd(this)	
        }
    }
    
    private nothing act(){
        if (GetSpellAbilityId() == 'A000'){
            SPELL.Add()	
        }
    }

    private nothing init(){
        trigger t = CreateTrigger()
        integer i = 0
        while(i < 12){
            TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
            i++
        }
        TriggerAddAction(t,function act)
    }
}
28

» WarCraft 3 / Насчет ландшафта

Plague Doctor:
PT153, тьфу, я хотел написать "не запускается".
Что не запускается? Карту открыть надо редактором и посмотреть, что я сделал.
28

» WarCraft 3 / Вопрос по Jass

Отступы сделай, чтобы было ясно, к чему какая скобка относится.
28

» WarCraft 3 / Редактор обьектов

Сделал объект башня, модель - магическая башня....
Карту скинь, тогда может и помогут.
28

» WarCraft 3 / Насчет ландшафта

Plague Doctor:
PT153, у меня запускается, видать, из-за того, что у меня пиратская 1.26 версия.
Так проблем с запуском нет, смотри внутренности карты. Я выгнул назад созданный ранее кратер новым кратером.