Rockmaf, без всякого сарказма, по сравнению с тем что было раньше, это просто шикарно. Но есть добавлю критики:
Если сюда дописать then, то заклинание будет работать на 1.26+
Избавьтесь от привычки всюду лепить вэйты:
Процитирую комментатора выше, эти действия бессмысслены
Не забивайте значения вручную, используйте константу bj_MAX_PLAYER_SLOTS ибо ваш код могут использовать на патче 1.30+ где 24 игрока.
IsUnitType(n,UNIT_TYPE_DEAD) не очень корректно работает, лучше подтянуть нативку UnitAlive()
У способности три уровня, а урон наносится фиксированный
Коли уж используете JNGP, то почему чистый jass? Держите, переписал на zinc, можете публиковать без моего авторства.
//! nocjass
native UnitAlive takes unit u returns boolean
//! zinc
library SpellFire {
integer ABILITY_ID = 'A000';
real EXPLODE_RANGE = 400;
string EXPLODE_CENTER = "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl";
string EXPLODE_CIRCLE = "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl";
integer EXPLODE_CIRCLE_COUNT = 12;
integer DAMAGE = 100;
// ---
group g = CreateGroup();
function onInit() {
integer i;
trigger t = CreateTrigger();
TriggerAddCondition(t, Filter(function() -> boolean {
return GetSpellAbilityId() == ABILITY_ID;
}));
for (0 <= i < bj_MAX_PLAYER_SLOTS){
TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null);
}
TriggerAddAction(t, function(){
unit target, caster = GetSpellAbilityUnit(); // кастер
real a = bj_PI * 2 / EXPLODE_CIRCLE_COUNT , x = GetSpellTargetX(), y = GetSpellTargetY(); // координаты области каста
integer i;
real damage = GetUnitAbilityLevel(caster, ABILITY_ID) * DAMAGE;
DestroyEffect(AddSpecialEffect(EXPLODE_CENTER, x, y));
for (0 < i <= EXPLODE_CIRCLE_COUNT){
DestroyEffect(AddSpecialEffect(EXPLODE_CIRCLE, x + EXPLODE_RANGE * Cos(a*i), y + EXPLODE_RANGE * Sin(a*i)));
}
GroupEnumUnitsInRange(g, x, y , EXPLODE_RANGE, null);
while (true){
target = FirstOfGroup(g);
if (target == null) { break; }
if (IsUnitEnemy(target, GetOwningPlayer(caster)) && UnitAlive(target)){
UnitDamageTarget(caster, target, damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS); // наносим урон
}
GroupRemoveUnit(g, target);
}
caster = null;
target = null;
});
}
}
//! endzinc
//! endnocjass
я знаю функции, только которые конвертируются из ГУИ.
Все с конвертирования начинали, я тоже иногда малоиспользуемые вещи конвертацией узнаю))
А на последнем патче можно и на luaперейти. Можно набрать ключевые слова и IDE вам все варианты покажет)
TeX13, так в чём проблема, абилку можете получить с помощью GetSpellAbility(). Останется только выбрать событие, при котором можно изменить данные способности. Они срабатывают в таком порядке:
TeX13, что за странная любовь к BJ? Вы бы хоть посмотрели, во что они раскрываются:
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 GetItemOfTypeFromUnitBJ takes unit whichUnit, integer itemId returns item
local integer index = GetInventoryIndexOfItemTypeBJ(whichUnit, itemId)
if (index == 0) then
return null
else
return UnitItemInSlot(whichUnit, index - 1)
endif
endfunction
Это приказ использования предмета в слоте, а не способности
public constant integer useslot1=852008
public constant integer useslot2=852009
public constant integer useslot3=852010
public constant integer useslot4=852011
public constant integer useslot5=852012
public constant integer useslot6=852013
Это ты мне намекаешь уже на новое задание по гуи насчет снарядов?)
Это я к тому, что смерть героя обычно редкое событие при игре и лишние переборы никто не заметит. Но в случае снарядов, действия выполняются больше десяти раз в секунду и там лишние переборы могут серьёзно залагать карту.
Как всегда избыточные костыли GUI: периодический триггер, переборы и массивы. Потом придётся ещё костылить, чтоб работало с расставлеными на карте героями. Притом это ещё простая задача, хоть и популярная. А на движении снарядов количество костылей на GUI уже начнёт зашкаливать))
Неужели, там действительно таймеры создаются динамически?
Если не разбираться ни в чём, кроме кривого GUI, то нет. Я вообще непонимаю, зачем городить костыли на гуях если можно написать несколько строчек кода.
Только почему не работает для таймеров превышение Раз. непонятно.
Не смотрел на 1.26, но на последнем патче InitGlobals выглядит так.
function InitGlobals takes nothing returns nothing
local integer i= 0
set i=0
loop
exitwhen ( i > 3 )
set udg_TIMER[i]=CreateTimer()
set i=i + 1
endloop
endfunction
То это не размер массива, а количество установленных значений. Например для целлочисленного массива с размером 3 и значением 6 будет выглядеть так [6,6,6].
Ред. nazarpunk
» WarCraft 3 / Огненное Пламя
Если сюда дописать then, то заклинание будет работать на 1.26+
» Администрация XGM / Agren и компания
» WarCraft 3 / Set Ability Integer value
А на последнем патче можно и на lua перейти. Можно набрать ключевые слова и IDE вам все варианты покажет)
» WarCraft 3 / Какими способами может быть отменено прицеливание способностью?
» WarCraft 3 / Dark Сrypt 2
» WarCraft 3 / Set Ability Integer value
» WarCraft 3 / Set Ability Integer value
» WarCraft 3 / Как узнать ID приказа?
» WarCraft 3 / Как узнать ID приказа?
Ред. nazarpunk
» WarCraft 3 / Как узнать ID приказа?
» WarCraft 3 / Как узнать ID приказа?
» Администрация XGM / Agren и компания
» Администрация XGM / Agren и компания
» WarCraft 3 / Юниты не перестают появляться
» WarCraft 3 / Какими способами может быть отменено прицеливание способностью?
» WarCraft 3 / Приказ Группе jass
Ред. nazarpunk
» WarCraft 3 / Уровень моба
думатьпрограммировать не нужно.» WarCraft 3 / Knights & Rogues COMPLETE EDITION
» WarCraft 3 / Приказ Группе jass
» WarCraft 3 / Knights & Rogues COMPLETE EDITION
Ред. nazarpunk
» WarCraft 3 / Knights & Rogues COMPLETE EDITION
» WarCraft 3 / Knights & Rogues COMPLETE EDITION
Ред. nazarpunk
» WarCraft 3 / Knights & Rogues COMPLETE EDITION
кривогоGUI, то нет. Я вообще непонимаю, зачем городить костыли на гуях если можно написать несколько строчек кода.» WarCraft 3 / Knights & Rogues COMPLETE EDITION
Ред. nazarpunk
» WarCraft 3 / Knights & Rogues COMPLETE EDITION