Краш доты при покупке предмета

Adam Smith

Друзья CG
4 Окт 2014
473
2
Может вы увидите. При покупке предметы вылетает игра, только в лобби с живыми людьми. С ботами не вылетит. Помогите найти проблему)
Код:
	"item_recipe_high_frequency_blade"
	{
		// General
		//-------------------------------------------------------------------------------------------------------------
		"ID"							"6227"													
		"Model"							"models/props_gameplay/recipe.vmdl"
		"BaseClass"						"item_datadriven"
		// Item Info
		//-------------------------------------------------------------------------------------------------------------
		"ItemCost"						"225"	
		"ItemShopTags"					""
		
		// Recipe
		//-------------------------------------------------------------------------------------------------------------
		"ItemRecipe"					"1"
		"ItemResult"					"item_high_frequency_blade"
		"ItemRequirements"
		{
			"01"						"item_demon_shard;item_echo_sabre"
		}
	}
	
	//=================================================================================================================
	// High frequency blade
	//=================================================================================================================
	"item_high_frequency_blade"
	{
		"ID"							"600654600456"		
		"BaseClass"						"item_lua"								
		"AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_PASSIVE"
		"AbilityTextureName"      "high_frequency_blade"			
		"FightRecapLevel"				"1"
		"AbilityCooldown"				"15.0"
		"AbilityCastPoint"				"0.0"
		"ScriptFile"					"items/item_high_frequency_blade.lua"

		"ItemCost"						"12800"
		"ItemShopTags"					"int;attack_speed"
		"ItemQuality"					"epic"
		"ItemAliases"					"blade"

		// Special	
		//-------------------------------------------------------------------------------------------------------------
		"AbilitySpecial"
		{
			"01"
			{
				"var_type"				"FIELD_INTEGER"
				"bonus_all_stats"		"50"
			}
			"02"
			{
				"var_type"				"FIELD_INTEGER"
				"bonus_attack_speed"	"35"
			}
			"03"
			{
				"var_type"				"FIELD_INTEGER"
				"bonus_damage"			"60"
			}
			"04"
			{
				"var_type"				"FIELD_INTEGER"
				"bonus_mana_regen"		"175"
			}
			"05"
			{
				"var_type"				"FIELD_INTEGER"
				"crit_chance"			"10"
			}
			"06"
			{
				"var_type"				"FIELD_INTEGER"
				"crit_damage"			"875"
			}
		}
	}

LUA

Код:
LinkLuaModifier ("modifier_item_high_frequency_blade", "items/item_high_frequency_blade.lua", LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier ("modifier_item_high_frequency_blade_echoe", "items/item_high_frequency_blade.lua", LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier ("modifier_item_high_frequency_blade_crit", "items/item_high_frequency_blade.lua", LUA_MODIFIER_MOTION_NONE)

if item_high_frequency_blade == nil then
  item_high_frequency_blade = class ( {})
end

function item_high_frequency_blade:GetBehavior ()
  local behav = DOTA_ABILITY_BEHAVIOR_PASSIVE
  return behav
end

function item_high_frequency_blade:GetIntrinsicModifierName ()
  return "modifier_item_high_frequency_blade"
end

if modifier_item_high_frequency_blade == nil then
  modifier_item_high_frequency_blade = class ( {})
end

function modifier_item_high_frequency_blade:IsHidden()
  return true
end



function modifier_item_high_frequency_blade:DeclareFunctions()
  local funcs = {
    MODIFIER_PROPERTY_MANA_REGEN_PERCENTAGE,
    MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
    MODIFIER_PROPERTY_STATS_AGILITY_BONUS,
    MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
    MODIFIER_PROPERTY_STATS_STRENGTH_BONUS,
    MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE,
    MODIFIER_EVENT_ON_ATTACK_START
  }

  return funcs
end

function modifier_item_high_frequency_blade:GetModifierBaseAttack_BonusDamage (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("bonus_damage")
end
function modifier_item_high_frequency_blade:GetModifierBonusStats_Strength (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("bonus_all_stats")
end
function modifier_item_high_frequency_blade:GetModifierBonusStats_Intellect (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("bonus_all_stats")
end
function modifier_item_high_frequency_blade:GetModifierBonusStats_Agility (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("bonus_all_stats")
end
function modifier_item_high_frequency_blade:GetModifierAttackSpeedBonus_Constant (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("bonus_attack_speed")
end
function modifier_item_high_frequency_blade:GetModifierPercentageManaRegen(params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("bonus_mana_regen")
end
function modifier_item_high_frequency_blade:OnAttackStart ( params )
  if IsServer() then
    if params.attacker == self:GetParent() then
      local hAbility = self:GetAbility ()
      local chance = hAbility:GetSpecialValueFor ("crit_chance")
      local random = math.random (100)
      if hAbility:IsCooldownReady() then
        self:GetParent ():AddNewModifier (self:GetCaster (), self:GetAbility (), "modifier_item_high_frequency_blade_echoe", nil)
        hAbility:StartCooldown(hAbility:GetCooldown(hAbility:GetLevel()))
        return 0
      elseif random <= chance then
        self:GetParent ():AddNewModifier (self:GetCaster (), self:GetAbility (), "modifier_item_high_frequency_blade_crit", nil)
      end
    end
  end

  return 0
end


if modifier_item_high_frequency_blade_echoe == nil then
  modifier_item_high_frequency_blade_echoe = class ( {})
end

function modifier_item_high_frequency_blade_echoe:IsHidden ()
  return true
end


function modifier_item_high_frequency_blade_echoe:RemoveOnDeath ()
  return true
end


function modifier_item_high_frequency_blade_echoe:DeclareFunctions ()
  local funcs = {
    MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE,
    MODIFIER_PROPERTY_ATTACK_POINT_CONSTANT,
    MODIFIER_EVENT_ON_ATTACK_LANDED
  }

  return funcs
end

function modifier_item_high_frequency_blade_echoe:GetModifierPreAttack_CriticalStrike (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("crit_damage")
end

function modifier_item_high_frequency_blade_echoe:GetModifierAttackPointConstant (params)
  return 0.1
end

function modifier_item_high_frequency_blade_echoe:OnAttackLanded (params)
  if IsServer () then
    if params.attacker == self:GetParent() then
      if self:GetParent ():HasModifier ("modifier_item_high_frequency_blade_echoe") then
        self:Destroy()
      end
    end
  end

  return 0
end

if modifier_item_high_frequency_blade_crit == nil then
  modifier_item_high_frequency_blade_crit = class({})
end


function modifier_item_high_frequency_blade_crit:IsHidden ()
  return true
end


function modifier_item_high_frequency_blade_crit:RemoveOnDeath ()
  return true
end


function modifier_item_high_frequency_blade_crit:DeclareFunctions ()
  local funcs = {
    MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE,
    MODIFIER_EVENT_ON_ATTACK_LANDED
  }

  return funcs
end

function modifier_item_high_frequency_blade_crit:GetModifierPreAttack_CriticalStrike (params)
  local hAbility = self:GetAbility ()
  return hAbility:GetSpecialValueFor ("crit_damage")
end


function modifier_item_high_frequency_blade_crit:OnAttackLanded (params)
  if IsServer () then
    if params.attacker == self:GetParent () then
      if self:GetParent ():HasModifier ("modifier_item_high_frequency_blade_crit") then
        self:Destroy ()
      end
    end
  end

  return 0
end
 
Последнее редактирование модератором:
Я начал читать, но потом увидел масштаб файла и решил, что гляну завтра :D

А так пока на глаза бросился ток id = 600654600456. Но я без понятия, можно ли вообще какой угодно указывать или есть диапазон определенный.

И не очень понятно, зачем модификаторы определять как класс:
if modifier_item_high_frequency_blade == nil then
modifier_item_high_frequency_blade = class ( {})
end

Они же подключаются как библиотечка итак. Ну, по крайней мере я пока ни разу так не делал - не нужно было.
 
Я начал читать, но потом увидел масштаб файла и решил, что гляну завтра :D

А так пока на глаза бросился ток id = 600654600456. Но я без понятия, можно ли вообще какой угодно указывать или есть диапазон определенный.

И не очень понятно, зачем модификаторы определять как класс:
if modifier_item_high_frequency_blade == nil then
modifier_item_high_frequency_blade = class ( {})
end

Они же подключаются как библиотечка итак. Ну, по крайней мере я пока ни разу так не делал - не нужно было.
Раньше ID был 6230, все равно вылетало.
Если класса нету, то краш.
 
Последнее редактирование модератором:
Модификатор должен быть классом, тут все норм.
Попробуй повырубать модификаторы некоторые и потестить. У меня глаз не зацепился ни за что :c
 
Модификатор должен быть классом, тут все норм.
Попробуй повырубать модификаторы некоторые и потестить. У меня глаз не зацепился ни за что :c
Вылет в момент покупки, тут либо с кв, либо с пассивным иодификатором
 
Последнее редактирование модератором:
Вылет в момент покупки, тут либо с кв, либо с пассивным иодификатором
Я недавно столкнулся с тем что при создании бейскласса = echo_sabre у меня крашит при покупке, но у тебя везде переделанные. Странно крч.
 
Последнее редактирование модератором:
Я недавно столкнулся с тем что при создании бейскласса = echo_sabre у меня крашит при покупке, но у тебя везде переделанные. Странно крч.
Кв сделаны на основе echo sabre тоже, хммм
 
Последнее редактирование модератором:
Во, ща заметил. В рецепте используется echo sabre, убери и не будет вылетов. (Я переписал, хоть и криво даже первую саблю, тогда краши прекратились)
 
Во, ща заметил. В рецепте используется echo sabre, убери и не будет вылетов. (Я переписал, хоть и криво даже первую саблю, тогда краши прекратились)
Ща попробую
 
Последнее редактирование модератором:
Adam Smith, можешь показать свою кастомку (ссылкой в мастерскую)?
 
Реклама: