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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...