Jump to content
Sign in to follow this  
e1mer

Функция Downgrade_Item()

Recommended Posts

Что делает данная функция?

Заменяет старую вещь в аппарели с форжем, на новую с сохранением форжа.

 

Зачем?

За бугром где-то, кем-то бурно обсуждалась эта тема, и однажды мне написали в скайп, с просьбой написать данную функцию., может и сейчас она кому-то пригодится.

 

Файл functions.lua (resource\script\calculate), добавим нашу функцию:

function Downgrade_Item ( role )
--[[
	@function Downgrade equipment (save forge)
	@Author: e1mer (Project: ZEST-Online)
	@Version: 1.0
	@release special for PkoDev.NET
]]
	local Item_One = GetChaItem ( role , 2 , 0  )			-- Получаем ID форженой шмотки
	local Item_Two = GetChaItem ( role , 2 , 1  )			-- Получаем ID пустой шмотки
	local NumOne = GetItemForgeParam ( Item_One , 1 )		-- Получаем параметры форженой шмотки
	local NumTwo = GetItemForgeParam ( Item_Two , 1 )		-- Получаем параметры пустой шмотки
	local Apparel_ID = GetItemID ( Item_One )				-- Получаем ID шмотки (заапареленная)
	local Original_ID = GetItemAttr ( Item_One, 184 )		-- Получаем оригинальный ID вещи
	local Apparel_Type_Item = GetItemType ( Item_One )		-- Получаем тип первого предмета
	local Item_CanGet = GetChaFreeBagGridNum ( role )		-- Получаем кол-во свободных мест в рюкзаке

	if Item_CanGet < 2 then
		SystemNotice(role, "\207\238\230\224\235\243\233\241\242\224, \238\241\226\238\225\238\228\232\242\229 \239\229\240\226\251\229 \228\226\224 \241\235\238\242\224 \226 \240\254\234\231\224\234\229!")
		--SystemNotice(role, "Пожалуйста, освободите первые два слота в рюкзаке!")
	elseif Apparel_ID == 0 then
		SystemNotice(role, "\207\238\236\229\241\242\232\242\229 \237\229\238\225\245\238\228\232\236\251\233 \239\240\229\228\236\229\242 \226 \239\229\240\226\251\233 \241\235\238\242 \240\254\234\231\224\234\224!")
		--SystemNotice(role, "Поместите необходимый предмет в первый слот рюкзака!")
	elseif NumTwo < 0 then
		SystemNotice(role, "\207\238\230\224\235\243\233\241\242\224, \238\241\226\238\225\238\228\232\242\229 \226\242\238\240\238\233 \241\235\238\242 \226 \240\254\234\231\224\234\229!")
		--SystemNotice(role, "Пожалуйста, освободите второй слот в рюкзаке!")
	elseif Apparel_ID < 0 or Original_ID == 0 then
		SystemNotice(role, "\196\229\233\241\242\226\232\229 \237\229\226\238\231\236\238\230\237\238, \253\242\238\242 \239\240\229\228\236\229\242 \237\229 \226 \224\239\239\224\240\229\235\232 \232\235\232 \253\242\238 \239\243\241\242\224\255 \224\239\239\224\240\229\235\252!")
		--SystemNotice(role, "Действие невозможно, этот предмет не в аппарели или это пустая аппарель!")
	elseif Apparel_Type_Item ~= 1 and Apparel_Type_Item ~= 2 and Apparel_Type_Item ~= 3 and Apparel_Type_Item ~= 4 and Apparel_Type_Item ~= 7 and Apparel_Type_Item ~= 9 and Apparel_Type_Item ~= 11 and Apparel_Type_Item ~= 20 and Apparel_Type_Item ~= 22 and Apparel_Type_Item ~= 23 and Apparel_Type_Item ~= 24 and Apparel_Type_Item ~= 25 and Apparel_Type_Item ~= 27 then
		SystemNotice(role, "\205\229\226\229\240\237\251\233 \242\232\239 \239\240\229\228\236\229\242\224! \200\241\239\238\235\252\231\238\226\224\242\252 \236\238\230\237\238 \242\238\235\252\234\238 \239\240\229\228\236\229\242\251 \226 \224\239\239\224\240\229\235\232!")
		--SystemNotice(role, "Неверный тип предмета! Использовать можно только предметы в аппарели!")
	else
		r1 = 0
		r2 = 0
		r1,r2 = MakeItem(role, Original_ID, 1, 12)		-- Выдаем шмотку
		
		local Equip = GetChaItem(role, 2, r2)
		GiveItem ( role , 0 , Apparel_ID , 1 , 4 )		-- Выдаем аппарель
		DelBagItem ( role, Apparel_ID, 1 )				-- Удаляем старую шмотку
		
		local i = 0
		NumOne = TansferNum ( NumOne )
		NumOne = SetNum_Part1 ( NumOne , 3 )
		i = SetItemForgeParam ( Item_One , 1 , NumOne )
		
		NumTwo = TansferNum ( NumTwo )
		NumTwo = SetNum_Part1 ( NumTwo , 3 )
		i = SetItemForgeParam ( Item_Two , 1 , NumTwo )

		-- Регистрируем массивы
		local ItemOne_Stone = {}
		local ItemOne_StoneLv = {}
		local ItemOne_StoneID = {}
		
		-- Получаем информацию о форже
		ItemOne_Stone[0] = GetNum_Part2 ( NumOne )
		ItemOne_Stone[1] = GetNum_Part4 ( NumOne )
		ItemOne_Stone[2] = GetNum_Part6 ( NumOne )
		ItemOne_StoneLv[0] = GetNum_Part3 ( NumOne )
		ItemOne_StoneLv[1] = GetNum_Part5 ( NumOne )
		ItemOne_StoneLv[2] = GetNum_Part7 ( NumOne )
		ItemOne_StoneID[0] = StoneTpye_ID[ItemOne_Stone[0]]
		ItemOne_StoneID[1] = StoneTpye_ID[ItemOne_Stone[1]]
		ItemOne_StoneID[2] = StoneTpye_ID[ItemOne_Stone[2]]
		
		-- Форжим вторую шмотку
		NumTwo = SetNum_Part2 ( NumTwo , ItemOne_Stone[0] )
		NumTwo = SetNum_Part3 ( NumTwo , ItemOne_StoneLv[0] )
		NumTwo = SetNum_Part4 ( NumTwo , ItemOne_Stone[1] )
		NumTwo = SetNum_Part5 ( NumTwo , ItemOne_StoneLv[1] )
		NumTwo = SetNum_Part6 ( NumTwo , ItemOne_Stone[2] )
		NumTwo = SetNum_Part7 ( NumTwo , ItemOne_StoneLv[2] )
		SetItemForgeParam( Equip, 1, NumTwo )					-- Натягиваем форж на новую пустую вещь
		RefreshCha(role)										-- Обновляем хар-ки персонажа
	end
end

Далее уже зависит от вас, как вы её будете эксплуатировать, если через NPC, то нужно обязательно зарегистрировать в sdk эту функцию.

 

  • Like 1

Share this post


Link to post
Share on other sites
В 07.10.2016 в 01:06, Александр сказал:

Допустим:
Добавил функцию вашу.
А, если хочу свиток перефоржа сделать то что прописать?

В коде есть комментарии, если не можешь ничего понять, почитай lua.ru.

Нет желания уже одно и тоже во все времена всем твердить, что за вас никто ничего не напишет, мы даем вам пищу для размышления, и поможем в написании кода если есть вопросы по каким-то отдельным функциям, но целиком...

Share this post


Link to post
Share on other sites

@Александр

К примеру пишешь эту функцию в function.lua и в MissionSDK добавляешь:

elseif actions[i].func == Downgrade_Item then
			PRINT( "ActionProc:Downgrade_Item" )
			Downgrade_Item( character, npc )

И можешь использовать в НПС:

TriggerAction( 1, Downgrade_Item )

 

Share this post


Link to post
Share on other sites

@Graf

 

Ты передаешь лишний параметр npc здесь:

elseif actions[i].func == Downgrade_Item then
			PRINT( "ActionProc:Downgrade_Item" )
			Downgrade_Item( character, npc )

Вот так будет правильно:

Downgrade_Item(character)

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×