LUA-скрипт

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
Помогите найти проблему:
Код:
function mana_cost_f(keys)
	local caster = keys.caster
	local ability = keys.ability
	local mana_cost = ability:GetLevelSpecialValueFor("mana_cost", (ability:GetLevel() - 1))
	local caster_current_mana = caster:GetMana()
	if caster_current_mana >= mana_cost then
		caster:ReduceMana(mana_cost)
		caster:ApplyDataDrivenModifier("modifier_coup_de_grace_crit_2")
	else caster:RemoveModifierByName("modifier_coup_de_grace_crit_2")
	end
end

function modifier_coup_de_grace_1_f(keys)
	local caster = keys.caster
	local ability = keys.ability
	local mana_cost = ability:GetLevelSpecialValueFor("mana_cost", (ability:GetLevel() - 1))
	local caster_current_mana = caster:GetMana()
	if caster_current_mana < mana_cost then
		ability:ToggleAbility()
	end
end
7l88jWK.png

05Z9XxL.png

Код:
	//=================================================================================================================
	// Ability: Phantom Coup de Grace
	//=================================================================================================================
	"phantom_assassin_coup_de_grace_1"
{
	// General
	//-------------------------------------------------------------------------------------------------------------
	"BaseClass"				"ability_datadriven"
	"AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE | DOTA_ABILITY_BEHAVIOR_IMMEDIATE"
	"AbilityType"					"DOTA_ABILITY_TYPE_ULTIMATE"
	"AbilityTextureName"			"phantom_assassin_coup_de_grace"
	
	// Cost
	//-------------------------------------------------------------------------------------------------------------
	"AbilityManaCost"				"0"

	// Precache
	//-------------------------------------------------------------------------------------------------------------
	"precache"
	{
		"soundfile"			"soundevents/game_sounds_heroes/game_sounds_phantom_assassin.vsndevts"
		"particle"			"particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf"
	}

	// Special
	//-------------------------------------------------------------------------------------------------------------
	"AbilitySpecial"
	{
		"01"
		{
			"var_type"					"FIELD_INTEGER"
			"crit_bonus"				"230 340 450"
		}
		"02"
		{
			"var_type"					"FIELD_INTEGER"
			"crit_chance"				"50 60 70"
		}
		"03"
		{
			"var_type"					"FIELD_INTEGER"
			"mana_cost"				"20 25 30"
		}
	}


	"OnToggleOn"
	{
		"ApplyModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_1"
			"Target" 		"CASTER"
		}
		"RunScript"
		{
			"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
			"Function"	"modifier_coup_de_grace_1_f"
		}
	}


	"OnToggleOff"
	{
		"RemoveModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_1"
			"Target" 		"CASTER"
		}
	}


	"Modifiers"
	{
		"modifier_coup_de_grace_1"
		{
			"Passive"	"1"
			"IsHidden"	"0"

			"OnAttackStart"
			{
				"RemoveModifier"
				{
					"ModifierName"	"modifier_coup_de_grace_crit_1"
					"Target"		"CASTER"
				}

				"Random"
				{
					"Chance"		"%crit_chance"
					"PseudoRandom"	"DOTA_PSEUDO_RANDOM_PHANTOMASSASSIN_CRIT"

					"OnSuccess"
					{
						"ApplyModifier"
						{
							"ModifierName"	"modifier_coup_de_grace_crit_1"
							"Target"		"CASTER"
						}
					}
				}
			}
		}


		"modifier_coup_de_grace_crit_1"
		{
			"IsHidden"	"0"

			"OnAttackLanded"
			{
				"RunScript"
				{
					"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
					"Function"	"mana_cost_f"
				}
				"RemoveModifier"
				{
					"ModifierName"	"modifier_coup_de_grace_crit_1"
					"Target"		"CASTER"
				}
			}
		}


		"modifier_coup_de_grace_crit_2"
		{
			"IsHidden"	"0"

			"Properties"
			{
				"MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE" "%crit_bonus"
			}
			"OnAttackLanded"
			{

				"RemoveModifier"
				{
					"ModifierName"	"modifier_coup_de_grace_crit_2"
					"Target"		"CASTER"
				}
				"FireEffect"
				{
					"EffectName"	"particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf"
					"EffectAttachType"	"start_at_customorigin"
					
					"ControlPointEntities"
					{
						"TARGET"	"follow_origin"
						"TARGET"	"follow_origin"
					}
				}

				"FireSound"
				{
					"EffectName"	"Hero_PhantomAssassin.CoupDeGrace"
					"Target"		"TARGET"
				}
			}
		}
	}
}
 
Последнее редактирование модератором:
[quote author=EnDronist link=topic=869.msg4037#msg4037 date=1462263375]
Помогите найти проблему:
Код:
function mana_cost_f(keys)
	local caster = keys.caster
	local ability = keys.ability
	local mana_cost = ability:GetLevelSpecialValueFor("mana_cost", (ability:GetLevel() - 1))
	local caster_current_mana = caster:GetMana()
	if caster_current_mana >= mana_cost then
		caster:ReduceMana(mana_cost)
		caster:ApplyDataDrivenModifier("modifier_coup_de_grace_crit_2")
	else caster:RemoveModifierByName("modifier_coup_de_grace_crit_2")
	end
end

function modifier_coup_de_grace_1_f(keys)
	local caster = keys.caster
	local ability = keys.ability
	local mana_cost = ability:GetLevelSpecialValueFor("mana_cost", (ability:GetLevel() - 1))
	local caster_current_mana = caster:GetMana()
	if caster_current_mana < mana_cost then
		ability:ToggleAbility()
	end
end
7l88jWK.png

05Z9XxL.png

Код:
	//=================================================================================================================
	// Ability: Phantom Coup de Grace
	//=================================================================================================================
	"phantom_assassin_coup_de_grace_1"
{
	// General
	//-------------------------------------------------------------------------------------------------------------
	"BaseClass"				"ability_datadriven"
	"AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE | DOTA_ABILITY_BEHAVIOR_IMMEDIATE"
	"AbilityType"					"DOTA_ABILITY_TYPE_ULTIMATE"
	"AbilityTextureName"			"phantom_assassin_coup_de_grace"
	
	// Cost
	//-------------------------------------------------------------------------------------------------------------
	"AbilityManaCost"				"40 80 120"

	// Precache
	//-------------------------------------------------------------------------------------------------------------
	"precache"
	{
		"soundfile"			"soundevents/game_sounds_heroes/game_sounds_phantom_assassin.vsndevts"
		"particle"			"particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf"
	}

	// Special
	//-------------------------------------------------------------------------------------------------------------
	"AbilitySpecial"
	{
		"01"
		{
			"var_type"					"FIELD_INTEGER"
			"crit_bonus"				"230 340 450"
		}
		"02"
		{
			"var_type"					"FIELD_INTEGER"
			"crit_chance"				"50 60 70"
		}
		"03"
		{
			"var_type"					"FIELD_INTEGER"
			"mana_cost"				"20 25 30"
		}
	}


	"OnToggleOn"
	{
		"ApplyModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_1"
			"Target" 		"CASTER"
		}
		"RunScript"
		{
			"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
			"Function"	"modifier_coup_de_grace_1_f"
		}
	}


	"OnToggleOff"
	{
		"RemoveModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_1"
			"Target" 		"CASTER"
		}
	}


	"Modifiers"
	{
		"modifier_coup_de_grace_1"
		{
			"Passive"	"1"
			"IsHidden"	"0"

			"OnAttackStart"
			{
				"RemoveModifier"
				{
					"ModifierName"	"modifier_coup_de_grace_crit_1"
					"Target"		"CASTER"
				}

				"Random"
				{
					"Chance"		"%crit_chance"
					"PseudoRandom"	"DOTA_PSEUDO_RANDOM_PHANTOMASSASSIN_CRIT"

					"OnSuccess"
					{
						"ApplyModifier"
						{
							"ModifierName"	"modifier_coup_de_grace_crit_1"
							"Target"		"CASTER"
						}
					}
				}
			}
		}


		"modifier_coup_de_grace_crit_1"
		{
			"IsHidden"	"0"

			"OnAttackLanded"
			{
				"RunScript"
				{
					"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
					"Function"	"mana_cost_f"
				}
				"RemoveModifier"
				{
					"ModifierName"	"modifier_coup_de_grace_crit_1"
					"Target"		"CASTER"
				}
			}
		}


		"modifier_coup_de_grace_crit_2"
		{
			"IsHidden"	"0"

			"Properties"
			{
				"MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE" "%crit_bonus"
			}
			"OnAttackLanded"
			{

				"RemoveModifier"
				{
					"ModifierName"	"modifier_coup_de_grace_crit_2"
					"Target"		"CASTER"
				}
				"FireEffect"
				{
					"EffectName"	"particles/units/heroes/hero_phantom_assassin/phantom_assassin_crit_impact.vpcf"
					"EffectAttachType"	"start_at_customorigin"
					
					"ControlPointEntities"
					{
						"TARGET"	"follow_origin"
						"TARGET"	"follow_origin"
					}
				}

				"FireSound"
				{
					"EffectName"	"Hero_PhantomAssassin.CoupDeGrace"
					"Target"		"TARGET"
				}
			}
		}
	}
}
[/quote]
Код:
ability:ApplyDataDrivenModifier(hCaster, hTarger, sModifier, {args})
 
Последнее редактирование модератором:
Adam Smith, Почему ability, а не caster и что означают параметры в скобках?
 
[quote author=EnDronist link=topic=869.msg4040#msg4040 date=1462264067]
Adam Smith, Почему ability, а не caster и что означают параметры в скобках?
[/quote]
Потому что так требуют c++, если это классовый модифаер луа, то будет hTarget:AddNewModifier, если неклассовый модифаер то ability,
Код:
{duration = int}
 
Код:
else caster:RemoveModifierByName("modifier_coup_de_grace_crit_2")
	end
Так нельзя писать
 
Последнее редактирование модератором:
Adam Smith, Пока что тогда я не понимаю логики во всём этом. (А что значит h?)
 
[quote author=EnDronist link=topic=869.msg4046#msg4046 date=1462265245]
Adam Smith, Пока что тогда я не понимаю логики во всём этом. (А что значит h?)
[/quote]
int - число
string - писменное название
bool - true, false
hscript - обьект кастер таргет и тд, это используется для того, что бы сразу можно было понять что хранит переменная
Код:
iZerno --- Сразу ясно это эта переменная хранит число
Рано ты полез в луа, синтаксис подучи
 
[quote author=Adam Smith link=topic=869.msg4047#msg4047 date=1462266044]
int - число
string - писменное название
bool - true, false
hscript - обьект кастер таргет и тд, это используется для того, что бы сразу можно было понять что хранит переменная
Код:
iZerno --- Сразу ясно это эта переменная хранит число
Рано ты полез в луа, синтаксис подучи
[/quote]
Не буду лезть - не выучу
 
Ты очень странно задаешь вопрос: кидаешь код, а места ошибки там нет.
На скрине у тебя жалуется на

ApplyModifierByName, а в коде у тебя нет этого, есть только ApplyDataDrivenModifier. Как ты скидывал так?))
 
Илья, Что писать в скобках по-очереди?
Код:
	if caster_current_mana >= mana_cost then
		caster:ReduceMana(mana_cost)
		ability:ApplyDataDrivenModifier(caster,"modifier_coup_de_grace_crit_2", {{duration = -1}})
	else ability:RemoveModifierByName(caster,"modifier_coup_de_grace_crit_2", {{duration = -1}})
	end
- так пишет [ W VScript ]: Script Runtime Error: ...st1\scripts\vscripts\heroes\modifier_coup_de_grace_1.lua:8: ApplyDataDrivenModifier called with 4 arguments - expected 5
Код:
	if caster_current_mana >= mana_cost then
		caster:ReduceMana(mana_cost)
		ability:ApplyDataDrivenModifier(hCaster,hTarget,"modifier_coup_de_grace_crit_2", {{duration = -1}})
	else ability:RemoveModifierByName(hCaster,hTarget,"modifier_coup_de_grace_crit_2", {{duration = -1}})
	end
- так не даётся модификатор
 
Последнее редактирование модератором:
ApplyDataDrivenModifier(handle hCaster, handle hTarget, string pszModifierName, handle hModifierTable)

Видишь, четыре аргумента. А у тебя 3.
Сначала кастера, затем цель, затем имя модификатора, затем таблицу с параметрами для модификатора.
Точные имена параметров никто из наших не знает, где взять, но duration - этот параметр есть во всех таблицах.


Что у тебя здесь за hTarget? Где ты его объявлял? Скидывай полный код.
ability:ApplyDataDrivenModifier(hCaster,hTarget,"modifier_coup_de_grace_crit_2", {{duration = -1}})
 
Последнее редактирование модератором:
ApplyDataDrivenModifier(handle hCaster, handle hTarget, string pszModifierName, handle hModifierTable)

Видишь, четыре аргумента. А у тебя 3.
Сначала кастера, затем цель, затем имя модификатора, затем таблицу с параметрами для модификатора.
Точные имена параметров никто из наших не знает, где взять, но duration - этот параметр есть во всех таблицах.


Что у тебя здесь за hTarget? Где ты его объявлял? Скидывай полный код.
ability:ApplyDataDrivenModifier(hCaster,hTarget,"modifier_coup_de_grace_crit_2", {{duration = -1}})
Код:
function mana_cost_f(keys)
	local caster = keys.caster
	local ability = keys.ability
	local mana_cost = ability:GetLevelSpecialValueFor("mana_cost", (ability:GetLevel() - 1))
	local caster_current_mana = caster:GetMana()
	if caster_current_mana >= mana_cost then
		caster:ReduceMana(mana_cost)
		ability:ApplyDataDrivenModifier(caster,hTarget,"modifier_coup_de_grace_crit_2", {{duration = -1}})
	else caster:RemoveModifierByName("modifier_coup_de_grace_crit_1")
	end
end

function modifier_coup_de_grace_1_f(keys)
	local caster = keys.caster
	local ability = keys.ability
	local mana_cost = ability:GetLevelSpecialValueFor("mana_cost", (ability:GetLevel() - 1))
	local caster_current_mana = caster:GetMana()
	if caster_current_mana < mana_cost then
		ability:ToggleAbility()
	end
end
 
Последнее редактирование модератором:
Вот, откуда я взял hTarget
[quote author=Adam Smith link=topic=869.msg4039#msg4039 date=1462263905]
Код:
ability:ApplyDataDrivenModifier(hCaster, hTarger, sModifier, {args})
[/quote]
 
[quote author=Adam Smith link=topic=869.msg4043#msg4043 date=1462264299]
Код:
else caster:RemoveModifierByName("modifier_coup_de_grace_crit_2")
	end
Так нельзя писать
[/quote]
Код:
--[[
	Author: Ractidous
	Date: 28.01.2015.
	Start cooldown.
]]
function StartCooldown( event )
	local caster = event.caster
	local ability = event.ability
	local cooldown = ability:GetCooldown( ability:GetLevel() - 1 )
	local modifierName = "modifier_liquid_fire_orb_datadriven"

	-- Start cooldown
	ability:EndCooldown()
	ability:StartCooldown( cooldown )

	-- Disable orb modifier
	caster:RemoveModifierByName( "modifier_liquid_fire_orb_datadriven" )

	-- Re-enable orb modifier after for the duration
	ability:SetContextThink( DoUniqueString("activateLiquidFire"), function ()
		-- Here's a magic
		-- Reset the ability level in order to restore a passive modifier
		ability.liquid_fire_forceEnableOrb = true
		ability:SetLevel( ability:GetLevel() )	
	end, cooldown + 0.05 )
end

--[[
	Author: Ractidous
	Dage: 28.01.2015.
	Check orb modifer state on upgrading.
]]
function CheckOrbModifier( event )
	local ability = event.ability
	local caster = event.caster

	if ability.liquid_fire_forceEnableOrb then
		ability.liquid_fire_forceEnableOrb = nil
		return
	end

	if ability:IsCooldownReady() then
		return
	end

	caster:RemoveModifierByName( "modifier_liquid_fire_orb_datadriven" )
end
Код:
	caster:RemoveModifierByName( "modifier_liquid_fire_orb_datadriven" )
 
Последнее редактирование модератором:
Ура, получилось в таком виде:
Код:
		ability:ApplyDataDrivenModifier(caster,caster,"modifier_coup_de_grace_crit_2", {{duration = -1}})
kUblyKa.jpg
 
Последнее редактирование модератором:
Хорошо, что получилось. Но ты не понял моего вопроса:

hTarger - это просто переменная. Можно хоть так написать:
Код:
ApplyDataDrivenModifier(labyteni,oxyitelnie_wtani,"modifier_coup_de_grace_crit_2", {{duration = -1}})

Но, тебе надо определить эти две переменные: "labyteni" и "oxyitelnie_wtani"

Например, кастера своего ты определил вот так:
local caster = event.caster --ты присвоил новой локальной переменной "caster" значение, что лежит в event.caster.


А втом коде у тебя hTarget определен не было и ясен фиг что работать не будет.
 
Последнее редактирование модератором:
Последнее редактирование модератором:
Реклама: