Нужна помощь, честно говоря даже не представляю как это реализовать.
Нужно что-то типо скрипта магазина, у меня есть скрипт который делает так :
подходишь к юниту появляются функции взаимодействия их несколько(это предметы которые можно купить)
допустим их 5
я покупаю их и они мне даются.
А мне желательно сделать так :
подходишь к нему появляется одна функция, допустим "Buy weapon"
после нажатия открывается меню с выбором оружия и тд.
как это правильнее реализовать?
скрипт магазина
#1 OFFLINE
Posted 11 July 2014 - 12:13
#2 OFFLINE
Posted 12 July 2014 - 21:21
Создаёте в папке с миссией файл с названием, например
menuTrade.sqf
и копируете в него код
menuname_menu = [ ["MENU",true], ["WEAPONS", [-1], "#USER:menuname_weapons_0", -5, [["expression", ""]], "1", "1"], ["MAGAZINES", [-1], "#USER:menuname_magazines_0", -5, [["expression", ""]], "1", "1"], ["ITEMS", [-1], "#USER:menuname_items_0", -5, [["expression", ""]], "1", "1"], ["BACKPACKS", [-1], "#USER:menuname_backpacks_0", -5, [["expression", ""]], "1", "1"], ["", actionKeys "menuback", "", -5, [["expression", ""]], "1", "1"] ]; menuname_weapons_0 = [ ["WEAPONS",true], // Вот в этом месте вы и будете развлекаться, я уверен сообразите. ["MXC", [], "", -5, [["expression", "player addWeapon 'arifle_MXC_F';"]], "1", "1"], ["MX_SW", [], "", -5, [["expression", "player addWeapon 'arifle_MX_SW_F';"]], "1", "1"], // пушка 3 // ... ["", [-1], "", -5, [["expression", ""]], "1", "0"], ["--- Next ---", [-1], "#USER:menuname_weapons_1", -5, [["expression", ""]], "1", "1"], ["--- Back ---", [-1], "", -4, [["expression", ""]], "1", "1"], ["--- Menu ---", [-1], "#USER:menuname_menu", -5, [["expression", ""]], "1", "1"], ["", actionKeys "menuback", "", -5, [["expression", ""]], "1", "1"] ]; menuname_magazines_0 = [ ["MAGAZINES",true], ["30Rnd_556x45_Stanag", [], "", -5, [["expression", "player addMagazine '30Rnd_556x45_Stanag';"]], "1", "1"], ["", [-1], "", -5, [["expression", ""]], "1", "0"], ["--- Next ---", [-1], "#USER:menuname_magazines_1", -5, [["expression", ""]], "1", "1"], ["--- Back ---", [-1], "", -4, [["expression", ""]], "1", "1"], ["--- Menu ---", [-1], "#USER:menuname_menu", -5, [["expression", ""]], "1", "1"], ["", actionKeys "menuback", "", -5, [["expression", ""]], "1", "1"] ]; menuname_items_0 = [ ["ITEMS",true], ["NVGoggles", [], "", -5, [["expression", "player addItem 'NVGoggles';"]], "1", "1"], ["", [-1], "", -5, [["expression", ""]], "1", "0"], ["--- Next ---", [-1], "#USER:menuname_items_1", -5, [["expression", ""]], "1", "1"], ["--- Back ---", [-1], "", -4, [["expression", ""]], "1", "1"], ["--- Menu ---", [-1], "#USER:menuname_menu", -5, [["expression", ""]], "1", "1"], ["", actionKeys "menuback", "", -5, [["expression", ""]], "1", "1"] ]; menuname_backpacks_0 = [ ["BACKPACKS",true], ["B_Carryall_oli", [], "", -5, [["expression", "player addBackpack 'B_Carryall_oli';"]], "1", "1"], ["", [-1], "", -5, [["expression", ""]], "1", "0"], ["--- Next ---", [-1], "#USER:menuname_backpacks_1", -5, [["expression", ""]], "1", "1"], ["--- Back ---", [-1], "", -4, [["expression", ""]], "1", "1"], ["--- Menu ---", [-1], "#USER:menuname_menu", -5, [["expression", ""]], "1", "1"], ["", actionKeys "menuback", "", -5, [["expression", ""]], "1", "1"] ]; showCommandingMenu "#USER:menuname_menu";
Редактируете его так как вам надо, и будет вам счастье.
Edited by SteelRat, 12 July 2014 - 21:23.
#3 OFFLINE
Posted 12 July 2014 - 21:29
Ещё есть БИСовская функция которая создаёт меню, так сказать, на лету, во время миссии. В общих чертах я с ней разобрался, но запариваться не буду, кому надо сами разберётесь.
scriptName "Functions\misc\fn_createmenu.sqf"; /* File: fn_createMenu.sqf Author: Karel Moricky Description: Create custom commanding menu (with multiple pages if necessary). Parameter(s): _this select 0 - STRING or ARRAY - Name of menu or [Name, Context sensitive] _this select 1 - STRING - Variable in which will be menu params stored (as variable_0, variable_1, ...) _this select 2 - ARRAY - Array with menu items (can be either [items] or [[items],[itemNames],[itemEnable]] if you want to set custom params (names, enable values)) _this select 3 - STRING - Name of submenu which will open when item is activated. Name of selected item is passed to string as %1 _this select 4 - STRING - Expression which is executed when item is activated. Name of selected item is passed to string as %1, ID is %2. _this select 5 - ANYTHING (Optional) - params passed to expression. Whole argument is passed as %3 _this select 6 - BOOLEAN - False to hide number shortcuts Returned value(s): True Example: c = ["first","second"]; ["Menu", "b", c, "","hint 'ahoj'"] call BIS_FNC_createmenu; showCommandingMenu "#USER:b_0" c = [["firstData","secondData"],["First","Second"]]; ["Menu", "b", c, "","hint (str '%1' + str '%2' + str '%3')"] call BIS_FNC_createmenu; showCommandingMenu "#USER:b_0"; see news:g7p3po$gik$1@new-server.localdomain */
Edited by SteelRat, 12 July 2014 - 21:29.
#4 OFFLINE
Posted 14 July 2014 - 13:17
#5 OFFLINE
Posted 14 July 2014 - 13:22
Примеры SteelRat будут поинтереснее я думаю. Но может и мой пригодится.
#6 OFFLINE
Posted 14 July 2014 - 19:53
С экшенами тоже вариант, но когда их совсем не много.
А вообще из комбинации мною предложеного скрипта и БИСовской функции можно построить весьма привлекательную тему)
#7 OFFLINE
Posted 14 July 2014 - 20:56
Edited by vlad333000, 14 July 2014 - 20:59.
#8 OFFLINE
Posted 14 July 2014 - 22:09
С экшенами тоже вариант, но когда их совсем не много.
А вообще из комбинации мною предложеного скрипта и БИСовской ф⑃нкции можно построить весьма привлекательную тему)
А почему не много? Имеете введу, что список будет длинный и не удобный? Так я описал, что категории будут открываться а при переходе допустим в "пистолеты" все что есть удаляется и появляется список пистолетов и внизу "назад". Я делил продавцов по типам, чтобы избежать длинных списков экшенов, то есть один оружейник, другой шмотки, третий тачки и т.д. Конечно есть определенные неудобства, когда допустим у игрока пистолет, автомат, РПГ и мины еще в снаряге, то пред всеми этими экшенами вылазиет список такой как "Оружие пистолет", "оружие РПГ", "Установить мину" и эти экшены в магазине как то не смотрятся мягко говоря))) Но вот запара возникла не с покупкой а с продажей, точнее с определением типов предметов не носящих имени, чтобы допустим в ящик выложить предмет который удаляется, определяется по типу и начисляет соответствующее количество денег. Трудность короче именно в том, как определить по типу предмета, что его нужно удалить и сколько начислить денег. Конечно можно каждому предмету дать имя в километровом скрипте))) Но я верю, что есть и другой выход)
P.S.
Не знаю как автор темы, но я обязательно покавыряю предложенную вами тему по поводу бисовской функции, к сожалению сейчас не имею возможности тестить. Но все новое очень привлекательно))) И к тому же хочется сделать нормальное меню покупки и продажи. Тогда его можно будет выпустить в свет)
Edited by Djon, 14 July 2014 - 22:59.
#9 OFFLINE
Posted 14 July 2014 - 22:20
С экшонами круто будет, можнобудет прям как в кс закупаться, за секунду полную экипировку натыкать. Авто-бай и покупку предыдущего только незабыть бы
Ну каждый кует своё)))) Я хотел сделать масштабную миссию с не линейным сюжетом, но не рассчитал и перенаселил остров а может скрипт какой то не корректный накалякал, короче фпс упал до 5-10 и при том, что мало мальски создал атмосферу игры и работы еще оставалось очень много. Короче зарубил свою идею на корню) Стелс миссии и линейные не большие сюжеты проблем не приносят особых, там и нагрузка меньше и население по секторам разбить можно а вот при использовании всей территории Алтиса, проблем с нагрузкой как на железо так и на движок становится больше)))
#10 OFFLINE
Posted 14 July 2014 - 22:59
Модуль "симуляция" скрывает все обьекты и останавливает все юниты если игрок ушел от них дальше чем на назначеное растояние, соответственно снижая нагрузку на цп - это самый легкодоступный способ, можно еще в самих скриптахНу каждый кует своё)))) Я хотел сделать масштабную миссию с не линейным сюжетом, но не рассчитал и перенаселил остров а может скрипт какой то не корректный накалякал, короче фпс упал до 5-10 и при том, что мало мальски создал атмосферу игры и работы еще оставалось очень много. Короче зарубил свою идею на корню) Стелс миссии и линейные не большие сюжеты проблем не приносят особых, там и нагрузка меньше и население по секторам разбить можно а вот при использовании всей территории Алтиса, проблем с нагрузкой как на железо так и на движок становится больше)))С экшонами круто будет, можнобудет прям как в кс закупаться, за секунду полную экипировку натыкать. Авто-бай и покупку предыдущего только незабыть бы
#11 OFFLINE
Posted 14 July 2014 - 23:07
Модуль "симуляция" скрывает все обьекты и останавливает все юниты если игрок ушел от них дальше чем на назначеное растояние, соответственно снижая нагрузку на цп - это самый легкодоступный способ, можно еще в самих скриптах
Ну каждый кует своё)))) Я хотел сделать масштабную миссию с не линейным сюжетом, но не рассчитал и перенаселил остров а может скрипт какой то не корректный накалякал, короче фпс упал до 5-10 и при том, что мало мальски создал атмосферу игры и работы еще оставалось очень много. Короче зарубил свою идею на корню) Стелс миссии и линейные не большие сюжеты проблем не приносят особых, там и нагрузка меньше и население по секторам разбить можно а вот при использовании всей территории Алтиса, проблем с нагрузкой как на железо так и на движок становится больше)))С экшонами круто будет, можнобудет прям как в кс закупаться, за секунду полную экипировку натыкать. Авто-бай и покупку предыдущего только незабыть бы
Пробовал, почему и написал о возможно не корректно написанном скрипте, модуль не помог. Так же и скрипт ошибки не вызвал. Такое может быть? И еще по обработчикам событий, EventHandler работает по той же системе что и триггер? Проверяет каждую секунду условие или срабатывает только при выполнении условия? Просто я понимаю, что обработчики событий вещь хорошая, но когда их много, то проблем с потреблением ими рессурсов не избежать.
#12 OFFLINE
Posted 14 July 2014 - 23:17
С экшонами круто будет, можнобудет прям как в кс закупаться, за секунду полную экипировку натыкать. Авто-бай и покупку предыдущего только незабыть бы
С мною предложенным вариантом, можете реализовать что угодно, хоть интернет магазин)
РПГ и мины еще в снаряге, то пред всеми этими экшенами вылазиет список такой как "Оружие пистолет", "оружие РПГ", "Установить мину" и эти экшены в магазине как то не смотрятся мягко говоря)))
Вот от этих радостей в случае с экшенами вы и не избавитесь
Но вот запара возникла не с покупкой а с продажей, точнее с определением типов предметов не носящих имени, чтобы допустим в ящик выложить предмет который удаляется, определяется по типу и начисляет соответствующее количество денег. Трудность короче именно в том, как определить по типу предмета, что его нужно удалить и сколько начислить денег. Конечно можно каждому предмету дать имя в километровом скрипте))) Но я верю, что есть и другой выход)
Применительно к арме 3 другие ID.
Но главное поймите суть команды
gearSlotData
#13 OFFLINE
Posted 14 July 2014 - 23:21
С экшонами круто будет, можнобудет прям как в кс закупаться, за секунду полную экипировку натыкать. Авто-бай и покупку предыдущего только незабыть бы
С мною предложенным вариантом, можете реализовать что угодно, хоть интернет магазин)
РПГ и мины еще в снаряге, то пред всеми этими экшенами вылазиет список такой как "Оружие пистолет", "оружие РПГ", "Установить мину" и эти экшены в магазине как то не смотрятся мягко говоря)))
Вот от этих радостей в случае с экшенами вы и не избавитесь
Но вот запара возникла не с покупкой а с продажей, точнее с определением типов предметов не носящих имени, чтобы допустим в ящик выложить предмет который удаляется, определяется по типу и начисляет соответствующее количество денег. Трудность короче именно в том, как определить по типу предмета, что его нужно удалить и сколько начислить денег. Конечно можно каждому предмету дать имя в километровом скрипте))) Но я верю, что есть и другой выход)
Применительно к арме 3 другие ID.
Но главное поймите суть команды
gearSlotData
Понял, спасибо за наводку) Ну а на счет радостей неизбавимых я уже понял)))
#14 OFFLINE
Posted 14 July 2014 - 23:22
С экшонами круто будет, можнобудет прям как в кс закупаться, за секунду полную экипировку натыкать. Авто-бай и покупку предыдущего только незабыть бы
Ну каждый кует своё)))) Я хотел сделать масштабную миссию с не линейным сюжетом, но не рассчитал и перенаселил остров а может скрипт какой то не корректный накалякал, короче фпс упал до 5-10 и при том, что мало мальски создал атмосферу игры и работы еще оставалось очень много. Короче зарубил свою идею на корню) Стелс миссии и линейные не большие сюжеты проблем не приносят особых, там и нагрузка меньше и население по секторам разбить можно а вот при использовании всей территории Алтиса, проблем с нагрузкой как на железо так и на движок становится больше)))
кинь миссию посмотрю, просто если ты создаёшь во время миссии много объектов, да если они ещё с физикой, это даёт большую нагрузку на движёк. За не надобностью те объекты которые не нужны , желательно удалять.
И главное, конечно же оптимизация исполняемого кода, особенно того, который крутится в циклах.
Edited by SteelRat, 14 July 2014 - 23:22.
#15 OFFLINE
Posted 14 July 2014 - 23:30
Вообще, такие материи желательно оформлять в графическом интерфейсе, за одно и попрактикуетесь в изготовлении междумордий)
Здесь весьма доходчиво описано как
http://arma3.ru/foru...kriptopisaniiu/
#16 OFFLINE
Posted 14 July 2014 - 23:42
Там очень много проверять, около 500 ботов с маршрутными точками и условиями удаления в случае смерти и спавном новых, 40 единиц такой же техники и примерно 100 ботов в анимациях, а еще около десятка магазинов))) Скрипты просто по 5000 строчек есть))) А как именно оптимизируется исполняемый код? если не сложно на примитивном примере покажите пожалуйста. Крутится в циклах я так понимаю в моем случае это каждый бот, смерть которого отслеживается, он удаляется и появляется новый, это и есть цикл? Как только возможность появится я скину, но думаю желания проверять их не будет) Ну а если по ссылке это все есть, то не объясняйте. В тайге нахожусь с 2G инетом, просто жесть по ссылкам переходить, позже обязательно все это изучу.
#17 OFFLINE
Posted 15 July 2014 - 00:15
Там очень много проверять, около 500 ботов с маршрутными точками и условиями удаления в случае смерти и спавном новых, 40 единиц такой же техники и примерно 100 ботов в анимациях, а еще около десятка магазинов))) Скрипты просто по 5000 строчек есть))) А как именно оптимизируется исполняемый код? если не сложно на примитивном примере покажите пожалуйста. Крутится в циклах я так понимаю в моем случае это каждый бот, смерть которого отслеживается, он удаляется и появляется новый, это и есть цикл? Как только возможность появится я скину, но думаю желания проверять их не будет) Ну а если по ссылке это все есть, то не объясняйте. В тайге нахожусь с 2G инетом, просто жесть по ссылкам переходить, позже обязательно все это изучу.
500+ ботов в одном месте? Спавни ботов только рядом с игроком (воюющие где нить на 1 км, эмбиент-боты метров 10) и затем удаляй
Edited by vlad333000, 15 July 2014 - 00:24.
#18 OFFLINE
Posted 15 July 2014 - 16:34
Понял) Короче это явный перегруз))) А как говоришь установить условие спавна ботов при появлении игрока на определенной дистанции?
#19 OFFLINE
Posted 15 July 2014 - 19:12
Там очень много проверять, около 500 ботов с маршрутными точками и условиями удаления в случае смерти и спавном новых, 40 единиц такой же техники и примерно 100 ботов в анимациях, а еще около десятка магазинов))) Скрипты просто по 5000 строчек есть))) А как именно оптимизируется исполняемый код? если не сложно на примитивном примере покажите пожалуйста. Крутится в циклах я так понимаю в моем случае это каждый бот, смерть которого отслеживается, он удаляется и появляется новый, это и есть цикл? Как только возможность появится я скину, но думаю желания проверять их не будет) Ну а если по ссылке это все есть, то не объясняйте. В тайге нахожусь с 2G инетом, просто жесть по ссылкам переходить, позже обязательно все это изучу.
Вы знаете, похоже у меня даже при всём моём желании такое просмотреть, тупо времени на себя любимого неостанется)
Скажу одно и верное, для одного компа вы реально погорячились), такое поднимается на Headless клиентах, то есть, это тот же клиент, только без графического интерфейса, которому и поручают всю эту жуть вычислений, а серверу оставляют серверово, а клиенту клиентово, тоесть это второй комп рядом с сервером.
Понял) Короче это явный перегруз))) А как говоришь установить условие спавна ботов при появлении игрока на определенной дистанции?
Попробуйте реализовать своё отталкиваясь от моей реализации, главное попытайтесь уловить суть, как это работает, и тогда легко замутите то что вам надо
fn_ObjectsInBuildingSpawner.sqf
Эта функция и есть тот цикл который крутится всю миссию, инициализирует спавн объектов и производит очистку отработанного материала
fn_spawnObjectsInBuilding.sqf
Эта функция собственно и спавнит объекты
#20 OFFLINE
Posted 16 July 2014 - 19:46
Вот, почти готовый магазин, БИСам респект ). А от читаков, так вообще, низкий поклон, даже заморачивться с писаниной кода не надо)
/* scriptFile: a3\functions_f_bootcamp\Inventory\fn_arsenal.sqf Author: Karel Moricky Description: Splendid arsenal viewer Parameter(s): 0: STRING - mode 1: ANY - params (see below) Modes: "Open" - Open the Arsenal 0 (Optional): BOOL - true to open full Arsenal, with all categories and items available (default: false) "Preload" - Preload the Arsenal (without preloading, they will load when Arsenal is opened for the first time, which can take some time) No params "AmmoboxInit" - Add virtual ammobox 0: OBJECT - ammobox 1 (Optional): BOOL - true to make all weapons and items in the game available in the box (default: false) "AmmoboxExit" - Remove virtual ammobox 0: OBJECT - ammobox Returns: NOTHING */
Вызов
["Open",[true]] call BIS_fnc_arsenal;
Все что остаётся доделать, это отслюнявить денежку.
Если кто то решит заморочиться, буду благодарен увидеть результат.
Edited by SteelRat, 16 July 2014 - 19:48.