Здесь будут размещены готовые и проверенные APIшки, которые вы сможете подключить к своему моду и не париться за них, так как они 100% рабочие.
API - какая-нибудь функция, которая расширяет ваши возможности.
Допустим в стандартном API от Valve нет функции ResetAllAbilityCooldowns() которая бы перезарядила полностью кулдауны героя на предметах и способностях. Или допустим нет такой функции, которая перед дуэлью сохраняла его позицию, хп, ману, кулдауны, а затем после дуэли возвращала эти значение.
Авторские права соблюдены, я выкладываю только те API, которые нам предоставили на GitHub'e или свои лично.
Предупреждение: это не тема для вопросов "как вставить их к себе?", поскольку если вы не умеете вставлять эти функции, то лучше сначала научиться их писать. Этот топик для экономии времени.
ResetAllAbilitiesCooldown(unit, refresh_items) - перезаряжает способности героя и все его предметы.
Если вторым параметром стоит true, то будут перезаряжены и предметы.
AddRandomAttribute(hero, amount) - повышает случайный аттрибут у героя на указанную величину.
hero - герой
amount - насколько повысить
CheckRuneModifiersAndRemove(hero) - удаляет эффекты рун с героя. Функция написана дедовским способом, зато никаких проверок.
IsExpSkill(abilityname) - у меня на карте некоторые способности при касте дают опыт. Так вот именно эта функция может быть простеньким примером проверки того, та ли эта способность, которая дает опыт.
Можно переписать под проверку чего угодно - определенного предмета, способности, названия юнитов и прочее.
И еще если вам нужно проверить таблицу на наличие в ней определенного значения - тоже сюда.
abilityname - название способности.
function AddExp(hero,amount) - простая функция добавления опыта. Чтобы не запариваться с этими true, false и писать быстрее.
Связка функций function SaveAbout(hero) и function RestorePos(hero)
function SaveAbout(hero) - сохраняет местоположение, хп, кулдауны на скиллах, ману
function RestorePos(hero) - возвращает старые значение хп, кулдауны на скиллах, ману
Нужно, например, перед дуэлью сохранить все. Потом допустим сделать героя фулловым, перезарядить скиллы. Далее герой дерётся и потом вы возвращается его на старое место откуда взяли, вместе с кулдаунами хп и маной.
HeroHasItemsFromList(hero) - проверяет есть ли у героя предмет из списка (можете прописать, например, зелья)
не забудьте внести в таблицу itemz список предметов, которые будете проверять. У меня важно делить слоты на оружия, зелья и т.п. поэтому и была написана эта апишка
Связка функция ItemDrop + ReleaseItem. Первая отвечает за дроп с шансом, вторая за выброс его как лут.
Здесь у меня 3 параметра hero (убийца героя), boss (умирающий юнит), chance (шанс) Не ошибитесь.
Если надо дропнуть другое с другим шансом, либо дублируете функцию, либо дописываете прямо здесь с новой таблицей и новым списком. Допустим кинжалы дропаются с 5% шансом, а зелья с 90%.
API - какая-нибудь функция, которая расширяет ваши возможности.
Допустим в стандартном API от Valve нет функции ResetAllAbilityCooldowns() которая бы перезарядила полностью кулдауны героя на предметах и способностях. Или допустим нет такой функции, которая перед дуэлью сохраняла его позицию, хп, ману, кулдауны, а затем после дуэли возвращала эти значение.
Авторские права соблюдены, я выкладываю только те API, которые нам предоставили на GitHub'e или свои лично.
Предупреждение: это не тема для вопросов "как вставить их к себе?", поскольку если вы не умеете вставлять эти функции, то лучше сначала научиться их писать. Этот топик для экономии времени.
ResetAllAbilitiesCooldown(unit, refresh_items) - перезаряжает способности героя и все его предметы.
Если вторым параметром стоит true, то будут перезаряжены и предметы.
Код:
function ResetAllAbilitiesCooldown(table unit, bool refresh_items)
local abilities = unit:GetAbilityCount()
for i = 0, abilities-1 do
local ability = unit:GetAbilityByIndex(i)
if ability and not ability:IsCooldownReady() then
ability:EndCooldown()
end
end
if unit:HasInventory() and refresh_items then
for i = 0, 5 do
local item = unit:GetItemInSlot(i)
if item and not item:IsCooldownReady() then
item:EndCooldown()
end
end
end
end
AddRandomAttribute(hero, amount) - повышает случайный аттрибут у героя на указанную величину.
hero - герой
amount - насколько повысить
Код:
function AddRandomAttribute(hero,amount)
local atr = 0
local rnd = math.random(1,3)
if rnd == 1
then
atr = hero:GetStrength()
hero:ModifyStrength(amount)
end
if rnd == 2
then
atr = hero:GetAgility()
hero:ModifyAgility(amount)
end
if rnd == 3
then
atr = hero:GetIntellect()
hero:ModifyIntellect(amount)
end
hero:CalculateStatBonus()
end
CheckRuneModifiersAndRemove(hero) - удаляет эффекты рун с героя. Функция написана дедовским способом, зато никаких проверок.
Код:
function CheckRuneModifiersAndRemove(hero)
hero:RemoveModifierByName("modifier_rune_doubledamage")
hero:RemoveModifierByName("modifier_rune_haste")
hero:RemoveModifierByName("modifier_rune_invis")
hero:RemoveModifierByName("modifier_rune_regen")
end
IsExpSkill(abilityname) - у меня на карте некоторые способности при касте дают опыт. Так вот именно эта функция может быть простеньким примером проверки того, та ли эта способность, которая дает опыт.
Можно переписать под проверку чего угодно - определенного предмета, способности, названия юнитов и прочее.
И еще если вам нужно проверить таблицу на наличие в ней определенного значения - тоже сюда.
abilityname - название способности.
Код:
function IsExpSkill(abilityname)
local SS = {
"omni_bless_datadriven",
"omni_incagi_datadriven",
"omni_anaphema_datadriven",
"omni_holylight_datadriven",
"invoker_alacrity",
"invoker_coldsnap",
"satir_marionet"
}
for _,v in pairs(SS) do
if v == abilityname then return true end
end
return false
end
function AddExp(hero,amount) - простая функция добавления опыта. Чтобы не запариваться с этими true, false и писать быстрее.
Код:
function AddExp(hero,amount)
hero:AddExperience(amount, false, false)
end
Связка функций function SaveAbout(hero) и function RestorePos(hero)
function SaveAbout(hero) - сохраняет местоположение, хп, кулдауны на скиллах, ману
function RestorePos(hero) - возвращает старые значение хп, кулдауны на скиллах, ману
Нужно, например, перед дуэлью сохранить все. Потом допустим сделать героя фулловым, перезарядить скиллы. Далее герой дерётся и потом вы возвращается его на старое место откуда взяли, вместе с кулдаунами хп и маной.
Код:
function SaveAbout(hero)
hero.position = hero:GetAbsOrigin()
hero.mana = hero:GetMana()
hero.hp = hero:GetHealth()
hero.saved = true
local count = hero:GetAbilityCount()
--GetCooldownTimeRemaining()
for i = 0, count do
local ability = hero:GetAbilityByIndex(i)
if ability:GetLevel() == 0 then hero.ability[i] = nil
else
if ability and not ability:IsCooldownReady() then
hero.ability[i] = ability:GetCooldownTimeRemaining()
end
end
end
DeepPrintTable(hero)
print("saved")
end
function RestorePos(hero) --восстановить кдшки, хп, ману и позиция героя после дуэли
if hero.saved then
local position = hero.position
local hp = hero.hp
local mana = hero.mana
hero.saved = false
hero:SetHealth(hp)
local count = hero:GetAbilityCount()
FindClearSpaceForUnit(hero, position, false)
for i = 0, count do
if hero.ability[i] ~= nil then
hero:GetAbilityByIndex(i):StartCooldown(hero.ability[i])
end
end
hero.position = nil
hero.hp = nil
hero.mana = nil
for i = 0,5 do
hero.ability[i] = nil
end
end
end
HeroHasItemsFromList(hero) - проверяет есть ли у героя предмет из списка (можете прописать, например, зелья)
не забудьте внести в таблицу itemz список предметов, которые будете проверять. У меня важно делить слоты на оружия, зелья и т.п. поэтому и была написана эта апишка
Код:
function IsHeroHasItemsFromList(hero)
local itemz = {"item_tetragrammaton", "item_seven"}
for _,v in pairs(armor) do
if hero:HasItemInInventory(v) then return true end
end
return false
end
Связка функция ItemDrop + ReleaseItem. Первая отвечает за дроп с шансом, вторая за выброс его как лут.
Здесь у меня 3 параметра hero (убийца героя), boss (умирающий юнит), chance (шанс) Не ошибитесь.
Если надо дропнуть другое с другим шансом, либо дублируете функцию, либо дописываете прямо здесь с новой таблицей и новым списком. Допустим кинжалы дропаются с 5% шансом, а зелья с 90%.
Код:
function ItemDrop(hero,boss,chance)
local point = boss:GetAbsOrigin()
local name = boss:GetUnitName()
local drop = {} --список предметов для дропа тут, пишете все предметы.
drop[1] = "item_cursed_gloves"
drop[2] = "item_big_axe"
drop[3] = "item_ring_of_decrease"
drop[4] = "item_armor_plate"
drop[5] = "item_amulet_of_life"
drop[6] = "item_evasion_wings"
drop[7] = "item_cat_figure_of_resistance"
drop[8] = "item_rosary"
drop[9] = "item_circlet_of_majesty"
drop[10] = "item_helm_of_strength"
drop[11] = "item_platinum_cutter"
if RollPercentage(chance) then
local itemz = drop[math.random(#drop)]
local item = CreateItem(itemz, hero,hero)
ReleaseItem(point,item)
end
end
function ReleaseItem(point,item)
CreateItemOnPositionSync( point, item )
item:LaunchLoot(false, 300, 0.75, point+RandomVector(50))
end
Последнее редактирование модератором: