e1mer 102 Report post Posted May 2, 2016 Что делает данная функция? Заменяет старую вещь в аппарели с форжем, на новую с сохранением форжа. Зачем? За бугром где-то, кем-то бурно обсуждалась эта тема, и однажды мне написали в скайп, с просьбой написать данную функцию., может и сейчас она кому-то пригодится. Файл 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 эту функцию. 1 Quote Share this post Link to post Share on other sites
Александр 3 Report post Posted October 6, 2016 Допустим: Добавил функцию вашу. А, если хочу свиток перефоржа сделать то что прописать? Quote Share this post Link to post Share on other sites
e1mer 102 Report post Posted November 4, 2016 В 07.10.2016 в 01:06, Александр сказал: Допустим: Добавил функцию вашу. А, если хочу свиток перефоржа сделать то что прописать? В коде есть комментарии, если не можешь ничего понять, почитай lua.ru. Нет желания уже одно и тоже во все времена всем твердить, что за вас никто ничего не напишет, мы даем вам пищу для размышления, и поможем в написании кода если есть вопросы по каким-то отдельным функциям, но целиком... Quote Share this post Link to post Share on other sites
Graf 210 Report post Posted November 12, 2019 @Александр К примеру пишешь эту функцию в function.lua и в MissionSDK добавляешь: elseif actions[i].func == Downgrade_Item then PRINT( "ActionProc:Downgrade_Item" ) Downgrade_Item( character, npc ) И можешь использовать в НПС: TriggerAction( 1, Downgrade_Item ) Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 18, 2019 @Graf Ты передаешь лишний параметр npc здесь: elseif actions[i].func == Downgrade_Item then PRINT( "ActionProc:Downgrade_Item" ) Downgrade_Item( character, npc ) Вот так будет правильно: Downgrade_Item(character) 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites