Простые вопросы #3

9essential_

Пользователь
15 Ноя 2020
42
1
steamcommunity.com
Проект
Pudge Wars Reborn
добавь юниту модификатор "modifier_fear"
я сделаль
function Nightmare( event ) local caster = event.caster local target = event.target -- find enemy fountain local buildings = FindUnitsInRadius( caster:GetTeamNumber(), -- int, your team number Vector(150,150,0), -- point, center point nil, -- handle, cacheUnit. (not known) FIND_UNITS_EVERYWHERE, -- float, radius. or use FIND_UNITS_EVERYWHERE DOTA_UNIT_TARGET_TEAM_FRIENDLY, -- int, team filter DOTA_UNIT_TARGET_BUILDING, -- int, type filter DOTA_UNIT_TARGET_FLAG_INVULNERABLE, -- int, flag filter 0, -- int, order filter false -- bool, can grow cache ) local fountain = nil for _,building in pairs(buildings) do if building:GetClassname()=="ent_dota_fountain" then fountain = building break end end -- if no fountain, just don't do anything if not fountain then return end -- for lane creep, MoveToPosition won't work, so use this if target:IsCreep() then target:SetForceAttackTargetAlly( fountain ) -- for creeps end -- for others, order to run to fountain target:MoveToPosition( fountain:GetOrigin() ) end
 
20 Дек 2016
892
170
Есть ли возможность отправить команду в консоль из js клиента?
(CreateCustomKeyBind не подходит. Мне нужно чтоб это срабатывало при нажатии на элемент худа)
 

SniperX

Друзья CG
26 Фев 2018
539
100
Проект
Dota 2x4

logica

Пользователь
27 Июн 2021
56
7
Проект
DotaRoyale
Ребят подскажите в чем проблема.
Есть крч вот такой вот код, но когда запускаешь кастомку он ругается на Dynamic_Wrap

function GameMode:InitGameMode()
ListenToGameEvent("entity_killed", Dynamic_Wrap(CustomGameMode, "OnEntityKilled"), self)
end

function GameMode:OnEntityKilled( keys )

local killed_unit = EntIndexToHScript( keys.entindex_killed )
local killer = EntIndexToHScript( keys.entindex_attacker )

if killed_unit:GetUnitName() == "unit_name1" then
GameRules:SetGameWinner(killer:GetTeam())
end

if killed_unit:GetUnitName() == "unit_name2" then
GameRules:SetGameWinner(killer:GetTeam())
end
end
 

stranger568

Активный
7 Сен 2015
113
28
bmemov.ru
Проект
Birzha Memov
Ребят подскажите в чем проблема.
Есть крч вот такой вот код, но когда запускаешь кастомку он ругается на Dynamic_Wrap

function GameMode:InitGameMode()
ListenToGameEvent("entity_killed", Dynamic_Wrap(CustomGameMode, "OnEntityKilled"), self)
end

function GameMode:OnEntityKilled( keys )

local killed_unit = EntIndexToHScript( keys.entindex_killed )
local killer = EntIndexToHScript( keys.entindex_attacker )

if killed_unit:GetUnitName() == "unit_name1" then
GameRules:SetGameWinner(killer:GetTeam())
end

if killed_unit:GetUnitName() == "unit_name2" then
GameRules:SetGameWinner(killer:GetTeam())
end
end
Зачем подключать CustomGameMode ? Если у тебя GameMode
 
  • Вооу
Реакции: vulkantsk

logica

Пользователь
27 Июн 2021
56
7
Проект
DotaRoyale
подскажите плех, как сделать книгу (item) которая при использовании будет сравнить припасов в определенной точке и отправлять их на waypoint
 

DeFughIv

Новичок
10 Сен 2021
3
1
При использовании скилла, что выполнен на подобии Чаржа бары, выдает ошибку Screenshot_1.png

Самостоятельно решить проблему не удалось, поэтому пишу на форум

modifier_TaisonCharge = class({})

function modifier_TaisonCharge:IsHidden()
return false
end

function modifier_TaisonCharge:IsDebuff()
return false
end

function modifier_TaisonCharge:IsPurgable()
return false
end

function modifier_TaisonCharge:OnCreated( kv )

if not IsServer() then return end

self.caster = self:GetCaster()
self.parent = self:GetParent()
self.bonus_ms = self:GetAbility():GetSpecialValueFor( "movement_speed" )
self.radius = self:GetAbility():GetSpecialValueFor( "bash_radius" )
self.duration = self:GetAbility():GetSpecialValueFor( "stun_duration" )

self.target = EntIndexToHScript( kv.target )
self.direction = self.caster:GetForwardVector()
self.targets = {}

self.search_radius = 4000
self.tree_radius = 150
self.min_dist = 150
self.offset = 20
self.interrupted = false

self.mod = self.parent:FindModifierByName( "modifier_none")
if self.mod and self.mod:GetAbility():GetLevel()<1 then
self.mod = nil
end


if not self:ApplyHorizontalMotionController() then
self.interrupted = true
self:Destroy()
end

self:SetTarget( self.target )

self:GetAbility():SetActivated( false )

local sound_cast = "Hero_Spirit_Breaker.ChargeOfDarkness"
EmitSoundOn( sound_cast, self.parent )
end

function modifier_TaisonCharge:OnRefresh( kv )
end

function modifier_TaisonCharge:OnRemoved()
end

function modifier_TaisonCharge:OnDestroy()
if not IsServer() then return end

GridNav:DestroyTreesAroundPoint( self:GetParent():GetOrigin(), self.tree_radius, true )

self:GetParent():RemoveHorizontalMotionController( self )

if self.debuff and (not self.debuff:IsNull()) then
self.debuff:Destroy()
end

self:GetAbility():SetActivated( true )

self:GetAbility():UseResources( false, false, true)

if self.interrupted then return end

self.target:AddNewModifier(
self.parent,
self:GetAbility(),
"modifier_memes_stunned",
{ duration = self.duration }
)
if self.target:IsAlive() then
local order = {
UnitIndex = self.parent:entindex(),
OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET,
TargetIndex = self.target:entindex(),
}
ExecuteOrderFromTable( order )
self.parent:SetAttacking( self.target )
end

local sound_cast = "Hero_Spirit_Breaker.Charge.Impact"
EmitSoundOn( sound_cast, self.target )
end

function modifier_TaisonCharge:DeclareFunctions()
local funcs = {
MODIFIER_EVENT_ON_ORDER,
MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT,
MODIFIER_PROPERTY_IGNORE_MOVESPEED_LIMIT,
}
return funcs
end

function modifier_TaisonCharge:OnOrder( params )
if params.unit~=self.parent then return end

if
params.order_type==DOTA_UNIT_ORDER_MOVE_TO_POSITION or
params.order_type==DOTA_UNIT_ORDER_MOVE_TO_TARGET or
params.order_type==DOTA_UNIT_ORDER_ATTACK_TARGET or
params.order_type==DOTA_UNIT_ORDER_STOP or
params.order_type==DOTA_UNIT_ORDER_HOLD_POSITION or
params.order_type==DOTA_UNIT_ORDER_CAST_POSITION or
params.order_type==DOTA_UNIT_ORDER_CAST_TARGET or
params.order_type==DOTA_UNIT_ORDER_CAST_TARGET_TREE or
params.order_type==DOTA_UNIT_ORDER_CAST_RUNE or
params.order_type==DOTA_UNIT_ORDER_VECTOR_TARGET_POSITION

then
self.interrupted = true
self:Destroy()
end
end

function modifier_TaisonCharge:GetModifierMoveSpeedBonus_Constant()
return self.bonus_ms
end

function modifier_TaisonCharge:GetModifierIgnoreMovespeedLimit()
return 1
end

function modifier_TaisonCharge:UpdateHorizontalMotion( me, dt )

self:CancelLogic()

local direction = self.target:GetOrigin()-me:GetOrigin()
local dist = direction:Length2D()
direction.z = 0
direction = direction:Normalized()

if dist<self.min_dist then
self:Destroy()
return
end

local pos = me:GetOrigin() + direction * me:GetIdealSpeed() * dt
pos = GetGroundPosition( pos,me )

me:SetOrigin( pos )
self.direction = direction

self.parent:FaceTowards( self.target:GetOrigin() )
end

function modifier_TaisonCharge:OnHorizontalMotionInterrupted()
self.interrupted = true
self:Destroy()
end

function modifier_TaisonCharge:BashLogic()

if (not self.mod) or self.mod:IsNull() then return end

local loc = self.parent:GetOrigin() + self.direction * self.offset

local enemies = FindUnitsInRadius(
self.parent:GetTeamNumber(),
loc,
nil,
self.radius,
DOTA_UNIT_TARGET_TEAM_ENEMY,
DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES,
0,
false
)

for _,enemy in pairs(enemies) do
if not self.targets[enemy] then
self.targets[enemy] = true

self.mod:Bash( enemy, 0, false )
end
end
end

function modifier_TaisonCharge:CancelLogic()

local check = self.parent:IsHexed() or self.parent:IsStunned() or self.parent:IsRooted()
if check then
self.interrupted = true
self:Destroy()
end

if not self.target:IsAlive() then

local enemies = FindUnitsInRadius(
self.parent:GetTeamNumber(),
self.target:GetOrigin(),
nil,
self.search_radius,
DOTA_UNIT_TARGET_TEAM_ENEMY,
DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_NO_INVIS,
FIND_CLOSEST,
false
)

if #enemies<1 then
self.interrupted = true
self:Destroy()
return

else
self:SetTarget( enemies[1] )
end
end
end

function modifier_TaisonCharge:SetTarget( target )

if self.debuff and (not self.debuff:IsNull()) then
self.debuff:Destroy()
end

self.debuff = target:AddNewModifier(
self.parent,
self:GetAbility(),
"modifier_TaisonCharge_debuff",
{}
)

self.target = target

self.targets[target] = true
end

function modifier_TaisonCharge:GetEffectName()
return "particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge.vpcf"
end

function modifier_TaisonCharge:GetEffectAttachType()
return PATTACH_ABSORIGIN_FOLLOW
end
 

logica

Пользователь
27 Июн 2021
56
7
Проект
DotaRoyale
Подскажите как сделать что б придмет после использования пропал
 

SniperX

Друзья CG
26 Фев 2018
539
100
Проект
Dota 2x4
Подскажите как сделать что б придмет после использования пропал
Даёшь предмету заряды, скрываешь эти заряды, после использования расходуешь заряды
KV:
"ItemStackable"                 "0"
"ItemInitialCharges"            "1"
"ItemHideCharges"               "1"

Lua:
function item_enchanted_mango_lua:OnSpellStart()
    self:SpendCharge()
end
или
KV:
"OnSpellStart"
{
    "SpendCharge"
    {}
}
 

logica

Пользователь
27 Июн 2021
56
7
Проект
DotaRoyale
Даёшь предмету заряды, скрываешь эти заряды, после использования расходуешь заряды
KV:
"ItemStackable"                 "0"
"ItemInitialCharges"            "1"
"ItemHideCharges"               "1"

Lua:
function item_enchanted_mango_lua:OnSpellStart()
    self:SpendCharge()
end
или
KV:
"OnSpellStart"
{
    "SpendCharge"
    {}
}
спасибо, но уже нашел все. не подскажешь как сделать пик как в сингл драфт?
 

DeFughIv

Новичок
10 Сен 2021
3
1
При использовании скилла, что выполнен на подобии Чаржа бары, выдает ошибку Посмотреть вложение 1408

Самостоятельно решить проблему не удалось, поэтому пишу на форум

modifier_TaisonCharge = class({})

function modifier_TaisonCharge:IsHidden()
return false
end

function modifier_TaisonCharge:IsDebuff()
return false
end

function modifier_TaisonCharge:IsPurgable()
return false
end

function modifier_TaisonCharge:OnCreated( kv )

if not IsServer() then return end

self.caster = self:GetCaster()
self.parent = self:GetParent()
self.bonus_ms = self:GetAbility():GetSpecialValueFor( "movement_speed" )
self.radius = self:GetAbility():GetSpecialValueFor( "bash_radius" )
self.duration = self:GetAbility():GetSpecialValueFor( "stun_duration" )

self.target = EntIndexToHScript( kv.target )
self.direction = self.caster:GetForwardVector()
self.targets = {}

self.search_radius = 4000
self.tree_radius = 150
self.min_dist = 150
self.offset = 20
self.interrupted = false

self.mod = self.parent:FindModifierByName( "modifier_none")
if self.mod and self.mod:GetAbility():GetLevel()<1 then
self.mod = nil
end


if not self:ApplyHorizontalMotionController() then
self.interrupted = true
self:Destroy()
end

self:SetTarget( self.target )

self:GetAbility():SetActivated( false )

local sound_cast = "Hero_Spirit_Breaker.ChargeOfDarkness"
EmitSoundOn( sound_cast, self.parent )
end

function modifier_TaisonCharge:OnRefresh( kv )
end

function modifier_TaisonCharge:OnRemoved()
end

function modifier_TaisonCharge:OnDestroy()
if not IsServer() then return end

GridNav:DestroyTreesAroundPoint( self:GetParent():GetOrigin(), self.tree_radius, true )

self:GetParent():RemoveHorizontalMotionController( self )

if self.debuff and (not self.debuff:IsNull()) then
self.debuff:Destroy()
end

self:GetAbility():SetActivated( true )

self:GetAbility():UseResources( false, false, true)

if self.interrupted then return end

self.target:AddNewModifier(
self.parent,
self:GetAbility(),
"modifier_memes_stunned",
{ duration = self.duration }
)
if self.target:IsAlive() then
local order = {
UnitIndex = self.parent:entindex(),
OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET,
TargetIndex = self.target:entindex(),
}
ExecuteOrderFromTable( order )
self.parent:SetAttacking( self.target )
end

local sound_cast = "Hero_Spirit_Breaker.Charge.Impact"
EmitSoundOn( sound_cast, self.target )
end

function modifier_TaisonCharge:DeclareFunctions()
local funcs = {
MODIFIER_EVENT_ON_ORDER,
MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT,
MODIFIER_PROPERTY_IGNORE_MOVESPEED_LIMIT,
}
return funcs
end

function modifier_TaisonCharge:OnOrder( params )
if params.unit~=self.parent then return end

if
params.order_type==DOTA_UNIT_ORDER_MOVE_TO_POSITION or
params.order_type==DOTA_UNIT_ORDER_MOVE_TO_TARGET or
params.order_type==DOTA_UNIT_ORDER_ATTACK_TARGET or
params.order_type==DOTA_UNIT_ORDER_STOP or
params.order_type==DOTA_UNIT_ORDER_HOLD_POSITION or
params.order_type==DOTA_UNIT_ORDER_CAST_POSITION or
params.order_type==DOTA_UNIT_ORDER_CAST_TARGET or
params.order_type==DOTA_UNIT_ORDER_CAST_TARGET_TREE or
params.order_type==DOTA_UNIT_ORDER_CAST_RUNE or
params.order_type==DOTA_UNIT_ORDER_VECTOR_TARGET_POSITION

then
self.interrupted = true
self:Destroy()
end
end

function modifier_TaisonCharge:GetModifierMoveSpeedBonus_Constant()
return self.bonus_ms
end

function modifier_TaisonCharge:GetModifierIgnoreMovespeedLimit()
return 1
end

function modifier_TaisonCharge:UpdateHorizontalMotion( me, dt )

self:CancelLogic()

local direction = self.target:GetOrigin()-me:GetOrigin()
local dist = direction:Length2D()
direction.z = 0
direction = direction:Normalized()

if dist<self.min_dist then
self:Destroy()
return
end

local pos = me:GetOrigin() + direction * me:GetIdealSpeed() * dt
pos = GetGroundPosition( pos,me )

me:SetOrigin( pos )
self.direction = direction

self.parent:FaceTowards( self.target:GetOrigin() )
end

function modifier_TaisonCharge:OnHorizontalMotionInterrupted()
self.interrupted = true
self:Destroy()
end

function modifier_TaisonCharge:BashLogic()

if (not self.mod) or self.mod:IsNull() then return end

local loc = self.parent:GetOrigin() + self.direction * self.offset

local enemies = FindUnitsInRadius(
self.parent:GetTeamNumber(),
loc,
nil,
self.radius,
DOTA_UNIT_TARGET_TEAM_ENEMY,
DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES,
0,
false
)

for _,enemy in pairs(enemies) do
if not self.targets[enemy] then
self.targets[enemy] = true

self.mod:Bash( enemy, 0, false )
end
end
end

function modifier_TaisonCharge:CancelLogic()

local check = self.parent:IsHexed() or self.parent:IsStunned() or self.parent:IsRooted()
if check then
self.interrupted = true
self:Destroy()
end

if not self.target:IsAlive() then

local enemies = FindUnitsInRadius(
self.parent:GetTeamNumber(),
self.target:GetOrigin(),
nil,
self.search_radius,
DOTA_UNIT_TARGET_TEAM_ENEMY,
DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_NO_INVIS,
FIND_CLOSEST,
false
)

if #enemies<1 then
self.interrupted = true
self:Destroy()
return

else
self:SetTarget( enemies[1] )
end
end
end

function modifier_TaisonCharge:SetTarget( target )

if self.debuff and (not self.debuff:IsNull()) then
self.debuff:Destroy()
end

self.debuff = target:AddNewModifier(
self.parent,
self:GetAbility(),
"modifier_TaisonCharge_debuff",
{}
)

self.target = target

self.targets[target] = true
end

function modifier_TaisonCharge:GetEffectName()
return "particles/units/heroes/hero_spirit_breaker/spirit_breaker_charge.vpcf"
end

function modifier_TaisonCharge:GetEffectAttachType()
return PATTACH_ABSORIGIN_FOLLOW
end

Проблему спустя несколько дней решил. Просто недоглядел. Для всех, кто столкнется с такой же проблемой напишу способ решения:
Чтоб решить эту проблему, в луа коде, где вы привязываете к скиллу модификатор через LinkLuaModifier пропишите в конце LUA_MODIFIER_MOTION_HORIZONTAL (ну или какой вам там надо)
Пример:
LinkLuaModifier("modifier_*название модификатора", "путь к модификатору*", LUA_MODIFIER_MOTION_HORIZONTAL )
 

N1vaga

Новичок
17 Сен 2021
1
0
Проект
Дота 2 кастомка
Скажите как убрать колесо чата. После обновления с компендиумом появилось. Некоторые уже убрали, а я не знаю как

123.jpg
 

DeFughIv

Новичок
10 Сен 2021
3
1
Как удалить у персонажа аганим шард?
Проблема такая: есть персонаж Dark Seer и у него есть аганим шард на доп способность. Однако этот аганим шард привязан к самому персонажу, а не к скиллу, как обычно, бывает. Мне не удалось найти строчку кода, которая отвечала бы за этот шард. За помощь буду благодарен
 

DDSuper

Друзья CG
31 Май 2019
405
57
Как удалить у персонажа аганим шард?
Проблема такая: есть персонаж Dark Seer и у него есть аганим шард на доп способность. Однако этот аганим шард привязан к самому персонажу, а не к скиллу, как обычно, бывает. Мне не удалось найти строчку кода, которая отвечала бы за этот шард. За помощь буду благодарен
Переписать с нуля
 

CTNZ

Новичок
27 Сен 2021
2
0
создал button в xml, расположил на loading screen - все появилось, хотел сделать анимацию через :hover c параматером transform scale3d, но ракции ни какой на псевдокласс, в чем может быть проблема ?
 

stranger568

Активный
7 Сен 2015
113
28
bmemov.ru
Проект
Birzha Memov
Как удалить у персонажа аганим шард?
Проблема такая: есть персонаж Dark Seer и у него есть аганим шард на доп способность. Однако этот аганим шард привязан к самому персонажу, а не к скиллу, как обычно, бывает. Мне не удалось найти строчку кода, которая отвечала бы за этот шард. За помощь буду благодарен
Почему бы тебе просто не убрать способность? Аганим шарды встроены в код доты и изменить их нельзя
 

stranger568

Активный
7 Сен 2015
113
28
bmemov.ru
Проект
Birzha Memov
создал button в xml, расположил на loading screen - все появилось, хотел сделать анимацию через :hover c параматером transform scale3d, но ракции ни какой на псевдокласс, в чем может быть проблема ?
Не уверен, но у меня было такое что какие-то скрытые панели валв мешали отображению на загрузочном экране.
Пропиши в xml файле

Lua:
<script>
    $.GetContextPanel().GetParent().GetParent().FindChildTraverse("LoadingScreenBattleCupWinnerContainer").style.visibility = "collapse";
    $.GetContextPanel().GetParent().GetParent().FindChildTraverse("SidebarAndBattleCupLayoutContainer").style.visibility = "collapse";
    </script>
 

CTNZ

Новичок
27 Сен 2021
2
0
Не уверен, но у меня было такое что какие-то скрытые панели валв мешали отображению на загрузочном экране.
Пропиши в xml файле

Lua:
<script>
    $.GetContextPanel().GetParent().GetParent().FindChildTraverse("LoadingScreenBattleCupWinnerContainer").style.visibility = "collapse";
    $.GetContextPanel().GetParent().GetParent().FindChildTraverse("SidebarAndBattleCupLayoutContainer").style.visibility = "collapse";
    </script>
спасибо заработало)
 
Реклама: