Jump to content
RedMAN

Запрет на вставку самоцвета

Recommended Posts

Здравствуйте, интересует такая тема - можно ли создать запрет для определенного самоцвета в определенную вещь?

Пример: Самоцвет Ярости можно вставить в меч 55,65,75 лвл, но в 85,95 его уже вставить нельзя.

Точнее интересует реверсия этого примера - нужно чтобы самоцвет +8 нельзя было вставить в снаряжение ниже 75ур (типа такого)

Это возможно? Пытался вспомнить, кажется такое было со сломанными самоцветами на офе, их нельзя было вставить в шмотки выше 55 уровня, но могу ошибаться. По крайней мере в сборке, приближенной к офу, отыскал только строки запрещающие комбинировать самоцвет выше 3 уровня.

Прошу помощи, спасибо:)

Edited by RedMAN

Share this post


Link to post
Share on other sites

в forge.lua очень легко делает в функции там где вставка. Там уже есть проверки слотов формы, просто свои условия дописать и всё

  • Like 1

Share this post


Link to post
Share on other sites
8 часов назад, BETEP/macs509 сказал:

в forge.lua очень легко делает в функции там где вставка. Там уже есть проверки слотов формы, просто свои условия дописать и всё

Что-то никак не могу допереть, как передать уровень предмета,который собираемся форжить. Подскажи поподробнее пожалуйста

function can_forge_item_main ( Table )
	local role = 0
	local ItemBag = {}
	local ItemCount = {}
	local ItemBagCount = {}
	local Get_Count = 4
	local ItemReadCount = 0
	local ItemReadNow = 1
	local ItemReadNext = 0
	local ItemBag_Now = 0
	local ItemCount_Now = 0
	local ItemBagCount_Num = 0

	role , ItemBag , ItemCount , ItemBagCount , ItemBag_Now , ItemCount_Now , ItemBagCount_Num = Read_Table ( Table )

	local ItemBagCount_Jinglian = ItemBagCount [0]
	local ItemBag_Jinglian = ItemBag [0]
	local ItemNum_Jinglian = ItemCount [0]
	local Item_Jinglian = GetChaItem ( role , 2 , ItemBag_Jinglian )
	local Check = 0

	if ItemBagCount_Jinglian ~= 1 then
		SystemNotice( role , "\202\238\226\234\224 \239\240\229\228\236\229\242\224 \241\226\255\231\224\237\224\255 \241 \239\235\224\226\235\229\237\232\229\236 \237\238\226\238\227\238 \241\235\238\242\224 \237\229\231\224\234\238\237\224")
		--SystemNotice( role , "Ковка предмета связаная с плавлением нового слота незаконна")
		return 0
	end
	
	if ItemNum_Jinglian ~= 1 then
		SystemNotice( role , "\202\238\235\232\247\229\241\242\226\238 \234\243\254\249\232\245\241\255 \239\240\229\228\236\229\242\238\226 \237\229\231\224\234\238\237\238")
		--SystemNotice( role , "Количество кующихся предметов незаконно")
		return 0
	end

	Check = CheckItem_CanJinglian ( Item_Jinglian )

	if Check == 0 then
		SystemNotice( role ,"\205\229\226\238\231\236\238\230\237\238 \242\238\247\232\242\252 \239\240\229\228\236\229\242")
		--SystemNotice( role ,"Невозможно точить предмет")
		return 0
	end
	

	
	if ItemCount [1] ~= 1 or ItemCount [2] ~= 1 or ItemBagCount [1] ~= 1 or ItemBagCount [2] ~= 1 then
		SystemNotice ( role ,"\205\229\231\224\234\238\237\237\238\229 \234\238\235\232\247\229\241\242\226\238 \241\224\236\238\246\226\229\242\238\226")
		--SystemNotice ( role ,"Незаконное количество самоцветов")
		return 0
	end

	local Item_Stone1 = GetChaItem ( role , 2 , ItemBag [1] )
	local Item_Stone2 = GetChaItem ( role , 2 , ItemBag [2] )

	local Check_Hole = 0

	Check_Hole = CheckItem_HaveHole ( Item_Jinglian , Item_Stone1 , Item_Stone2)

	if Check_Hole == 0 then
		SystemNotice( role ,"\205\229\228\238\241\242\224\242\238\247\237\238 \241\235\238\242\238\226 \226 \239\240\229\228\236\229\242\229" )
		--SystemNotice( role ,"Недостаточно слотов в предмете" )
		return 0
	end
	

	local Check_Stone = 0

	Check_Stone = Check_StoneLv ( Item_Jinglian , Item_Stone1 , Item_Stone2 )

	if Check_Stone == 0 then
		SystemNotice ( role , "\209\224\236\238\246\226\229\242 \232\235\232 \243\240\238\226\229\237\252 \241\224\236\238\246\226\229\242\224 \237\229 \241\238\238\242\226\229\242\241\242\226\243\229\242" )
		--SystemNotice ( role , "Самоцвет или уровень самоцвета не соответствует" )
		return 0
	end

	local Check_StoneItem = 0

	Check_StoneItem = Check_StoneItemType ( Item_Jinglian , Item_Stone1 , Item_Stone2 )

	if Check_StoneItem == 0 then
		SystemNotice ( role , "\210\232\239 \209\224\236\238\246\226\229\242\224 \232 \242\232\239 \239\240\229\228\236\229\242\224 \237\229 \241\238\238\242\226\229\242\241\242\226\243\254\242" )
		--SystemNotice ( role , "Тип Самоцвета и тип предмета не соответствуют" )
		return 0
	end

	
	local Money_Need = getforge_money_main ( Table )
	local Money_Have = GetChaAttr ( role , ATTR_GD )
	if Money_Need > Money_Have then
		SystemNotice( role ,"\205\229\228\238\241\242\224\242\238\247\237\238 \231\238\235\238\242\224. \209\238\247\229\242\224\237\232\229 \237\229\226\238\231\236\238\230\237\238.")
		--SystemNotice( role ,"Недостаточно золота. Сочетание невозможно.")
		return 0
	end

	
--SystemNotice(role ,"determination completed ")
	return 1
end

Сам не справлюсь

Share this post


Link to post
Share on other sites
12 часа назад, RedMAN сказал:

 

Смотри у тебя есть функция получения предмета :  local Item_Jinglian = GetChaItem ( role , 2 , ItemBag_Jinglian )
ItemBag_Jinglian  - твой предмет.
Далее берем - local lvl_item= GetItemAttr ( ItemBag_Jinglian , ITEMATTR_LV) -- хз есть ли такое или нет, нужно пробовать. 
потом все понятно

  • Like 1

Share this post


Link to post
Share on other sites

Не помню как там в старых файлах было сделано, но можно если не найдешь проверку по лвл шмотки (а она должна вроде как быть), можно просто указать в какие id шмоток можно плавить, только нужно будет не забыть сделать проверку на шмоток в апе по аналогии с бд бонусом (когда id считывает самой шмотки и базовой шмотки в апе).

  • Like 1

Share this post


Link to post
Share on other sites

На всякий случай подписал , что и как.

 

Весь код ниже нужно делать в Forge.lua

 

local original_item_id = GetItemAttr(Item, ITEMATTR_VAL_FUSIONID)
local apparel_item_id = GetItemID(Item)
  
if original_item_id ~= 0 then -- Если вещь в аппареле

  		for i = 1 , 3 , 1 do -- 3 (кол-во предметов в которые нельзя вставлять гем)
      
		if original_item_id ~= item_not_appareled_id[i] then
			return 1 -- Вставляем
		else
			return 0 -- Не Вставляем
		end
         
    	end 

else - Если вещь не в аппареле
  
		for i = 1 , 3 , 1 do -- 3 (кол-во предметов в которые нельзя вставлять гем)
      
		if apparel_item_id ~= item_not_appareled_id[i] then
			return 1 -- Вставляем
		else
			return 0 -- Не Вставляем
		end
         
     	end 

end

 

Это в Variable.lua

 

item_not_appareled_id = {}
item_not_appareled_id [1] = id предмета в который нельзя вставить гем
item_not_appareled_id [2] = id предмета в который нельзя вставить гем
item_not_appareled_id [3] = id предмета в который нельзя вставить гем

P.S Я не тестировал, но гарантирую будет работать, если всё правильно сделаешь, надеюсь самоцветы сам прикрутишь, нету времени.

Edited by Stinger
  • Like 1

Share this post


Link to post
Share on other sites
В 27.01.2018 в 13:08, NMS3RR сказал:

 

Смотри у тебя есть функция получения предмета :  local Item_Jinglian = GetChaItem ( role , 2 , ItemBag_Jinglian )
ItemBag_Jinglian  - твой предмет.
Далее берем - local lvl_item= GetItemAttr ( ItemBag_Jinglian , ITEMATTR_LV) -- хз есть ли такое или нет, нужно пробовать. 
потом все понятно

 

Такой нету, но есть такая:

 

local item_lv =  GetItemAttr(Item, ITEMATTR_VAL_LEVEL)

  • Like 1

Share this post


Link to post
Share on other sites
1 час назад, Stinger сказал:

 

Такой нету, но есть такая:

 

local item_lv =  GetItemAttr(Item, ITEMATTR_VAL_LEVEL)

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

  • Like 1

Share this post


Link to post
Share on other sites

Из темы про самоцветы на МД:

 

Цитата

а как сделать чтобы гемы ковались в вещи не выше 55 лвл?

Файл forge.lua (.\resource\script\calculate). В функцию can_forge_item_main()
После (сообщение может отличаться)

    if Check_StoneItem == 0 then
        SystemNotice ( role , "Этот самоцвет нельзя вставить в этот тип оружия." )
        return 0
    end

добавить

    local GemID = GetItemID(Item_Stone1)
    local Itemlvl = GetItemLv(Item_Jinglian)
        if GemID >= 6817 and GemID <= 6831 then
            if Itemlvl > 55 then
                SystemNotice(role, "Этот самоцвет можно вковать в оружие для персонажей не выше 55 уровня.")
                return 0
            end
        end

 

Чтобы самоцветы можно было соединять только до 3-го уровня, в файл forge.lua в функцию can_unite_item_main() после

    local BagItem1 = ItemBag [0]
    local BagItem2 = ItemBag [1]
    local BagItem3 = ItemBag [2]
 
    local Item1 = GetChaItem ( role , 2 , BagItem1 )
    local Item2 = GetChaItem ( role , 2 , BagItem2 )
    local Item3 = GetChaItem ( role , 2 , BagItem3 )
   
    local ItemID1 = GetItemID ( Item1 )
    local ItemID2 = GetItemID ( Item2 )
    local ItemID3 = GetItemID ( Item3 )
 
    local ItemType1 = GetItemType ( Item1 )
    local ItemType2 = GetItemType ( Item2 )
    local ItemType3 = GetItemType ( Item3 )
 
    if ItemType1 ~= 47 then
       
        SystemNotice( role ,"This is not a combining scroll")
        return 0
    end
 
    if ItemType2 ~= 49 or ItemType3 ~= 49 then
        if ItemType2 ~= 50 or ItemType3 ~= 50 then
            SystemNotice( role , "Это не самоцвет!")
            return 0
        end
    end

Добавить:

 if ItemID2 == 6718 or ItemID2 == 6717 then
        if Item2_Lv>=2 or Item3_Lv >= 2 then
            SystemNotice ( role , "Максимальный уровень этого самоцвета 2.")
            return 0
        end
    end
    if ItemID2 >= 6817 and ItemID2 <= 6831 then
        if Item2_Lv>=3 or Item3_Lv >= 3 then
            SystemNotice ( role , "Максимальный уровень этого самоцвета 3.")
            return 0
        end
    end

 

  • Like 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

×