RedMAN

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

10 posts in this topic

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

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

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

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

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

Edited by RedMAN

Share this post


Link to post
Share on other sites

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

1 person likes this

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) -- хз есть ли такое или нет, нужно пробовать. 
потом все понятно

1 person likes this

Share this post


Link to post
Share on other sites

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

1 person likes this

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
1 person likes this

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)

1 person likes this

Share this post


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

 

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

 

local item_lv =  GetItemAttr(Item, ITEMATTR_VAL_LEVEL)

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

1 person likes this

Share this post


Link to post
Share on other sites

Спасибо большое Stinger!

Всё сделали

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

 

1 person likes this

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