Помогите со скриптом !!!!

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Скрипт вызывает срабатывание абилки если значение ~= 0 но для работы нужно прописать значение player которые вызывает CheckFood, проблема в том что когда я присваиваю
(менял keys на event и убирал его и применял в функции "spawn", эффект тот же)

Код:
local player = keys.caster:GetPlayerOwner()
	local pID = keys.player:GetPlayerID()
	local caster = keys.caster
	local ability = keys.ability

скрипт пишет ошибку в данной строке и не понимает откуда здесь caster пробовал его убирать и прописывать

Код:
local enough_food = thisEntity:GetPlayerID() / thisEntity:GetPlayerOwner()
Вот исходники, что делать ?

Код:
function Spawn( event )
	for i=0, thisEntity:GetAbilityCount()-1 do
		if thisEntity:GetAbilityByIndex(i) ~= nil then
			thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())
		end
  end

	for i=1, table.getn(NO_MENU_ABILITIES) do
		thisEntity:AddAbility(NO_MENU_ABILITIES[i])
  end
		ability = thisEntity:FindAbilityByName("hunger_aura_food")
		thisEntity:SetContextThink( "Abbitfood", Abbitfood , 1)

	
	InitAbilities(thisEntity)
end

Код:
function Abbitfood()

  local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1) 
	
	local enough_food

	if food_cost ~= nil and food_cost ~= 0 then
		enough_food = CheckFood(player, food_cost,true)
	else
		enough_food = true
	end
	
  if enough_food ~= 0 then
	if ability:IsFullyCastable() then
		thisEntity:CastAbilityNoTarget(ability, -1)
		SpendFood(player, food_cost)
	end
end
return 1
end

Хочу сделать так что бы абилка срабатывала когда кол-во еды = 0 (food)
на данный момент скрипт работает без проверки на кол-во еды, вызывает абилку и применяет её, но теперь как то надо сделать проверку на еду
Код:
function Spawn( event )
	for i=0, thisEntity:GetAbilityCount()-1 do
		if thisEntity:GetAbilityByIndex(i) ~= nil then
			thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())
		end
  end

	for i=1, table.getn(NO_MENU_ABILITIES) do
		thisEntity:AddAbility(NO_MENU_ABILITIES[i])
  end
		ability = thisEntity:FindAbilityByName("hunger_aura_food")
		thisEntity:SetContextThink( "Abbitfood", Abbitfood , 1)

	
	InitAbilities(thisEntity)
end

Код:
function Abbitfood()
  local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1) 
	
	local enough_food

	if food_cost ~= nil and food_cost ~= 0 then
		enough_food = CheckFood(player, food_cost,true)
	else
		enough_food = true
	end
	
	if enough_food ~= true then
		return
	else
	if ability:IsFullyCastable() then
		thisEntity:CastAbilityNoTarget(ability, -1)
	end
end
return 1
end
для function Abbitfood надо прописать SpendFood(player, food_cost) как я упомянул выше что скрипт ругается на player не видит его
 
Последнее редактирование модератором:
Попробуй
Код:
local caster = keys.caster
local ability = keys.ability
local player = keys.caster:GetPlayerOwner() или local player = keys.caster:GetOwner()
local pID = keys.player:GetPlayerID()
 
attempt to index local 'caster' (a nil value) ругается на local player = keys.caster:GetPlayerOwner() и function Abbitfood(keys) если убрать везде keys то только на local player = keys.caster:GetPlayerOwner() или GetOwner()
Код:
function Abbitfood(keys)
  local caster = keys.caster
  local ability = keys.ability
  local player = keys.caster:GetPlayerOwner()
  local pID = keys.player:GetPlayerID()
  local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1) 
	
	local enough_food

	if food_cost ~= nil and food_cost ~= 0 then
		enough_food = CheckFood(player, food_cost,true)
	else
		enough_food = true
	end
	
	if enough_food ~= true then
		return
	else
	if ability:IsFullyCastable() then
		thisEntity:CastAbilityNoTarget(ability, -1)
	end
end
return 1
end
 
Последнее редактирование модератором:
вот проверка на кол-во еды, игра просто не видит локальные переменные что делать как присвоить player
Код:
function CheckFood( player, food_amount, notification)
 if food_amount == 0 then return true end
 local enough = player.food + food_amount <= Clamp(player.maxFood,10,250)
 if enough ~= true and notification == true then 
  Notifications:Bottom(player:GetPlayerID(), {text="#need_more_food", duration=2, style={color="red", ["font-size"]="35px"}})
 end
 return enough
end

function SpendFood( player, food_amount )
 player.food = player.food + food_amount
 player.lastSpentFood = food_amount
end
 
Последнее редактирование модератором:
О боже... как же долго я над этим думал как исправить (можно тему закрыть или удалить)
 
den4iccc, А, лол, я только сейчас заметил. Кароч)
Код:
local caster = keys.caster
local ability = keys.ability
local player = caster:GetPlayerOwner() или local player = caster:GetOwner()
local pID = player:GetPlayerID()
 
[quote author=EnDronist link=topic=1247.msg7542#msg7542 date=1484608539]
den4iccc, А, лол, я только сейчас заметил. Кароч)
Код:
local caster = keys.caster
local ability = keys.ability
local player = caster:GetPlayerOwner() или local player = caster:GetOwner()
local pID = player:GetPlayerID()
[/quote]
Это было связано с абилкой я её переписал просто
 
den4iccc, лучше не делай всяких там player.food не надо в дату игрока записывать еду, сделай отдельную глобальную переменную resources[playerid][food] сможешь кроме еды в эту переменную что угодно добавлять, если хочешь узнать про это у меня, напиши
 
[quote author=I_GRIN_I link=topic=1247.msg7569#msg7569 date=1484665716]
den4iccc, лучше не делай всяких там player.food не надо в дату игрока записывать еду, сделай отдельную глобальную переменную resources[playerid][food] сможешь кроме еды в эту переменную что угодно добавлять, если хочешь узнать про это у меня, напиши
[/quote]
Записывать в информацию в hPlayer нельзя т.к он удаляется при дисконекте игрока, и заного создается при загрузке его обратно в игру. Хранить в hHero и прочих переменных можно, и тогда смысла в глобальных переменных типа resources довольно мало.
А еще лучше добавить к CDOTAPlayer или CDOTA_BaseNPC_Hero свои функции и использовать их как и валвовские.
 
Реклама: