Хелпаните пожалуйста

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Как сделать сохранение добавленной абилики после респавна героя?
Есть две абилки одна привязана к npc (ability_1) и вторая абилка (ability_2),
ability_1 присвоена npc и при активации даёт герою ability_2, далее есть скрипт для героя в котором расписаны абилки с помощью которых можно менять способности как у инвокера, соль в том что когда я присваиваю абилку герою то при респавне герой теряет её, как мне занести её в некую таблицу что бы абилка сохранялась
абилка 1 -
Код:
 local hero = player:GetAssignedHero()
 hero:AddAbility("ability_2")
и сам скрипт спавна героя
Код:
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) do - NO_MENU{aбилки}
		thisEntity:AddAbility(NO_MENU[i])
  end
	bred(thisEntity) - прописывает от 0 до 15 setlevel для ability_2
	InitAbil (thisEntity) – прописывает от 0 до 15 setlevel всех абилок кроме ability_2 
End
есть ли какая нибудь функция которая просматривает была ли данная способность присвоена героем
 
Последнее редактирование модератором:
Правильно ли я тебе понял:
После смерти кастера, его абилки возвращаются в исходное положение?

И зачем тебе куда-то сохранять "доп. абилку"? Герой что, может прокачивать доп абилки?


А пока можешь глянуть это, думаю у тебя что-то похожее. Это годовалой давности код одного из моего проекта с крафтом. Принцип тот же самый, только без прокачки доп способностей.
 
Последнее редактирование модератором:
Весь процесс как всё происходит на данный момент: использую каст абилки у npc который даёт гл. герою абилку, которая грубо говоря прописывает setlevel для нужной абилки, но когда герой умирает то добавленная абилка пропадает вместе с сетлевалом нужной абилкой
 
Тогда зачем тебе её куда-то сохранять, если ты её уровень тоже стираешь? То есть игроку придется заново качать её.
Просто удаляй её и возвращай стандартные, или что там у тебя.
 
Я сделал именно так потому что если я просто буду давать лвл абилке то при свапе абилок у меня лвл откатывается на 0
 
Что-то я похоже не понимаю:

1) Клацаешь героем у нпс на абилку
2) У героя появляется новая абилка
3) Клацая на новую абилку, увеличиваешь уровень другой абилки у нпс
4) Умерев героем с новой абилкой, новая абилка исчезает и уровень той другой абилки у нпс падает до нуля.

Все верно?
 
Сарян, за некорректный вопрос я просто не мастер задавать вопросы
1)клацаю на абилку у npc, гл герою даётся абилка
2)эта абилка пустышка она нужна только для проверки, если есть данная абилка у героя то он проверяет если да то выдает лвл - 1(максимум)
3)я использую систему свапа абилок с занесением их в таблицу то есть при спавне у меня есть ряд определённых абилок две из них свапают некоторые абилки тем самым выводят нужную таблицу с абилками (грубо говоря)
4)в одной из панели выведенных таблиц есть абилка которая имеет уровень 0 так как я для каждой таблицы делаю всем скилам уровень 1, кроме нужной мне абилки
5)всё работает как надо до тех пор, пока герой не респавнится если он реснится то добавленная абилка через npc главному герою пропадает и проверка соответственно не действует(хочу что бы при респавне данная абилка где то сохранялась если она хотя бы 1 раз была использована у локльного игрока), мб я как то не правильно мыслю и не так себе поставил алгоритм

Я просто хочу сделать как в варике 3 систему того как изучать способность тобишь у npc есть спелл который даёт главному герою setlvel 1 определённой абилке и если постройка была ещё раз возведена героем то способности не будет если она была изучена, на данный момент я знаю как удалить способность после того как сработал кастер но это уже другая история)
 
М, то есть ты хочешь сохранить уровень той абилки, которая изначально было нулевой? И при свапе у тебя ей уровень назначается как раз в зависимости от наличия у героя абилки-флага (пустышки)?

Я тебе предлагаю сделать просто у героя переменную, что будет отвечать за уровень этой абилки. То есть проверка будет осуществляться через эту переменную, а не через абилку-пустышку. А абилка пустышка будет отвечать лишь за "первое использование".

Либо где-то сделать подобную переменную.
 
Последнее редактирование модератором:
То есть переменная отвечает за лвл абилки если данным игроком была использована абилка пустышка, то переменная чекает если был каст (первое использование) значит лвл всегда будет апнут :? вот я себе ломал голову, никак не могу понять как это сделать "первое использование" всё время думаю о FindAbilityByName но это же не то, что то вроде типо этого хочу найти void SetFirstBloodActive(bool bool_1) - Устанавливает сработала ли Первая кровь.
 
Последнее редактирование модератором:
Первое использование - это у тебя когда абилка-пустышка впервые добавляется, то делаешь проверку у переменной на равенство нулю, например. Если её значение равно нулю, то игрок впервые получил эту абилку-пустышку. Даешь переменной значение 1 (т.к. первый уровень) и далее уже там как вздумаешь работаешь (увеличиваешь её значение).

Вот и выходит у тебя, что пока переменная равна нулю, то игрок еще не получал абилку-пустышку. Как только он её получит, то переменная уже не будет равна нулю.
 
В том коде, что у тебя дает абилку-пустышку и реализуешь эту логику с переменной. Можно по идеи вообще от абилки-пустышки отказаться, если она у тебя просто как флаг была.
 
Мдааа блин у меня всё под носом было и только спустя 2 дня я это понял как решить данную проблему, спасибо тебе за помощь, +rep но только не могу повысить так как там таймер на изменение статистики стоит потом поставлю
 
Правда я не много побыдлокодил использовал для каждой абилки кроме добавленной (нужной)
Код:
 thisEntity:RemoveAbility("  ")
и для кастера npc добавил значение not чтобы он не добавлял по 10000 абилок
за место вот этого кода
Код:
	for i=0, thisEntity:GetAbilityCount()-1 do
		if thisEntity:GetAbilityByIndex(i) ~= nil then
			thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())		
			
		 end
  end
так как у меня не получилось выставить приоритет для добавленной абилки в основном пробовал через условия, так же пробовал and GetName() == нужная абилка, пока что так пока не придумаю или не пойму как правильно условие сделать чтобы всё работало нормально без лишних строк
 
Последнее редактирование модератором:
Не очень понял, что ты имеешь в виду в последнем посту.

Что хочешь и что не так?
 
Кароч вот этот код удаляет все абилки с панели так как я использую таблицу которая всё время при респавне добавляет скилы, тоесть если герой реснулся то скилы не продублировались, надо преобразовать запрет для этого кода который бы не позволял удалять нужную абилку ("ability_2") при каждом респавне
Код:
	for i=0, thisEntity:GetAbilityCount()-1 do
		if thisEntity:GetAbilityByIndex(i) ~= nil then
			thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())		
			
		 end
  end
 
Последнее редактирование модератором:
Код:
if thisEntity:GetAbilityByIndex(i):GetName() ~= "ability_2" then ...
 
Последнее редактирование модератором:
[quote author=CryDeS link=topic=1357.msg8686#msg8686 date=1488570611]
Код:
if thisEntity:GetAbilityByIndex(i):GetName() ~= "ability_2" then ...
[/quote]
Так он будет удалять только один спелл который присвоен
 
Последнее редактирование модератором:
Код:
for i=0, thisEntity:GetAbilityCount()-1 do
	if thisEntity:GetAbilityByIndex(i) ~= nil and thisEntity:GetAbilityByIndex(i):GetName() ~="ability_2" then
		thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())		
			
	end
end
Либо если ты чутка не так сформулировал что тебе нужно то,
Код:
for i=0, thisEntity:GetAbilityCount()-1 do
	if thisEntity:GetAbilityByIndex(i) ~= nil and i ~= 2 then
		thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())		
			
	end
end
 
Последнее редактирование модератором:
Реклама: