Форум » Вопросы и ответы » Вопросы по скриптам » Ответить

Вопросы по скриптам

Киллер: Задавайте вопросы по скриптовому языку ЗОД и ждите скорейшего ответа на них!

Ответов - 285, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

VIRUS: Anti_Killer у меня классы как их вставить. Я это не понимаю

slava98: Ставь функции. К примеру я так пробую.Одна функция определённые классы запускает.

Anti_Killer: Anti_Killer у меня классы как их вставить. Я это не понимаю у меня все классы в самом начале скрипта идут , там где написано МОИ КЛАССЫ. А потом я их уже применяю когда хочу и где хочу


VIRUS: У меня тоже. Но как их в скрипт вставить? Чтобы просто у всех игроков был класс в состоянии от левела. А как сделать что бы танк постоянно ехал, а игрок только поворачивал?

slava98: VIRUS пишет: У меня тоже. Но как их в скрипт вставить? Чтобы просто у всех игроков был класс в состоянии от левела. Честно говоря я тебе это и говорил. Я писал скрипт, но не дописал. function user.LevelChangeBox(n) botreduce = botreduce or 3 -- По умолчанию Нормальная сложность if n==1 then botreduce=botreduce-1 -- Если нажали "Понизить"- понижается elseif n==2 then botreduce=botreduce+1 --Аналогично)) end -- Честно, не знаю, сколько надо эндов end local levelname -- levelname локальный, а не глобальный if botreduce==0 then botreduce=botreduce+1 -- Если сложность ниже 1 возвращается на 1 elseif botreduce==1 then levelname="Кошмар" elseif botreduce==2 then levelname="Сложный" elseif botreduce==3 then levelname="Нормальный" elseif botreduce==4 then levelname="Лёгкий" elseif botreduce==5 then botreduce=botreduce-1 -- Если выше, то на 5 end service("msgbox", {text="Настройка уровня сложности\n Уровень сложности: \n\n\n\n ["..levelname.."]\n\n\n\n",on_select="user.LevelChangeBox(n)",option1="Повысить",option2="Понизить",option3="Закрыть"}) -- Ну тут разбираться не обязательно, наверное)) if levelname=="Лёгкий" then user.easy() -- Если сложнось лёгкая переходит на user.easy() Там хранятся классы для лёгкого режима elseif levelname=="Нормальный" then user.normal() elseif levelname=="Сложный" then user.hard() elseif levelname=="Кошмар" then user.nichtmare() -- =) end

VIRUS: slava98 Понял

slava98: Хорошо, только скрипт, кажется, не работает. Anti_Killer, если что-то не так скажи, пожалуйста.

Anti_Killer: У меня тоже. Но как их в скрипт вставить? Чтобы просто у всех игроков был класс в состоянии от левела для нужного бота если при создании то задаешь свой класс в параметре class для ai \ player_local а если потом то какой то ф-цией то вылавливаешь его как объект и меняеш что надо local bot = object("name_of_ai_service") bot.class="название_твоего_класса" А как сделать что бы танк постоянно ехал, а игрок только поворачивал? похоже что никак, но нет ничего невозможного, нужно просто найти подходящий модуль. http://lua-users.org/wiki/LibrariesAndBindings Здесь есть всякие например [libkeybinder] (5.1) - Global keyboard shortcuts for GTK+ Applications. похоже подойдет, похоже можно с помощью него "зажать" любую клавишу, но я не пробовал добавлять дополнительные модули и не знаю работают ли они в танке.

Anti_Killer: function user.LevelChangeBox(n) botreduce = botreduce or 3 if n==1 then botreduce=botreduce-1 -- Если нажали "Понизить"- понижается elseif n==2 then botreduce=botreduce+1 --Аналогично)) end -- Честно, не знаю, сколько надо эндов end --лишний end закрываем только конструкцию if then elseif then end, если бы было if then else if then end end то было бы 2 end'a local levelname -- levelname локальный, а не глобальный if botreduce==0 then botreduce=botreduce+1 -- Если сложность ниже 1 возвращается на 1 elseif botreduce==1 then levelname="Кошмар" elseif botreduce==2 then levelname="Сложный" elseif botreduce==3 then levelname="Нормальный" elseif botreduce==4 then levelname="Лёгкий" elseif botreduce==5 then botreduce=botreduce-1 -- Если выше, то на 5 end service("msgbox", {text="Настройка уровня сложности\n Уровень сложности: \n\n\n\n ["..levelname.."]\n\n\n\n",on_select="user.LevelChangeBox(n)",option1="Повысить",option2="Понизить",option3="Закрыть"}) -- Ну тут разбираться не обязательно, наверное)) if levelname=="Лёгкий" then user.easy() -- Если сложнось лёгкая переходит на user.easy() Там хранятся классы для лёгкого режима elseif levelname=="Нормальный" then user.normal() elseif levelname=="Сложный" then user.hard() elseif levelname=="Кошмар" then user.nichtmare() -- =) end end -- и нужно добавить этот end

slava98: Anti_Killer пишет: похоже что никак, но нет ничего невозможного, нужно просто найти подходящий модуль. http://lua-users.org/wiki/LibrariesAndBindings Здесь есть всякие например [libkeybinder] (5.1) - Global keyboard shortcuts for GTK+ Applications. похоже подойдет, похоже можно с помощью него "зажать" любую клавишу, но я не пробовал добавлять дополнительные модули и не знаю работают ли они в танке. Это надо в коде рыться или в файле луа? Кто-нибудь объясните мне, зачем нужны pget и position . А то в Танкопедии ничего непонятно. Как они работают, мне понятно, но непонятно зачем.

Anti_Killer: Это надо в коде рыться или в файле луа? Сам пока незнаю как модули подключать. Но когда подключ так там и так в примерах все приведено , врятли можно лучше объяснить. pget раньше (да и сейчас при необходимости) использовался для получения параметра объекта (health, class, on_die и т.д. все параметры которые видны в редакторе при редактировании объекта) вот как получали параметр объекта раньше actor("pu_booster", 42, 128, {name="boo", respawn_time=10}) print( pget("boo", "respawn_time") ) а вот как можно получить сейчас user.object=actor("pu_booster", 42, 128, {respawn_time=10}) print(user.object.respawn_time) в обоих случаях выведет 10 position выдает координаты объекта. На этом принципе основано перемещение объекта. Берем старые координаты-> прибавляем к ним шаг и получаем новые координаты-> двигаем объект на новые координаты-> получаем движение

VIRUS: Anti_Killer пишет: function user.LevelChangeBox(n) botreduce = botreduce or 3 if n==1 then botreduce=botreduce-1 -- Если нажали "Понизить"- понижается elseif n==2 then botreduce=botreduce+1 --Аналогично)) end -- Честно, не знаю, сколько надо эндов end --лишний end закрываем только конструкцию if then elseif then end, если бы было if then else if then end end то было бы 2 end'a local levelname -- levelname локальный, а не глобальный if botreduce==0 then botreduce=botreduce+1 -- Если сложность ниже 1 возвращается на 1 elseif botreduce==1 then levelname="Кошмар" elseif botreduce==2 then levelname="Сложный" elseif botreduce==3 then levelname="Нормальный" elseif botreduce==4 then levelname="Лёгкий" elseif botreduce==5 then botreduce=botreduce-1 -- Если выше, то на 5 end service("msgbox", {text="Настройка уровня сложности\n Уровень сложности: \n\n\n\n ["..levelname.."]\n\n\n\n",on_select="user.LevelChangeBox(n)",option1="Повысить",option2="Понизить",option3="Закрыть"}) -- Ну тут разбираться не обязательно, наверное)) if levelname=="Лёгкий" then user.easy() -- Если сложнось лёгкая переходит на user.easy() Там хранятся классы для лёгкого режима elseif levelname=="Нормальный" then user.normal() elseif levelname=="Сложный" then user.hard() elseif levelname=="Кошмар" then user.nichtmare() -- =) end end -- и нужно добавить этот end Тоесть это должно работать.

VIRUS: Вот. Все что я вписал работает, но есть проблема с менюшкой. Вот я делаю функцию менюшки: function user.Menu(n) if n==1 then user.Game() elseif n==2 then user.Options() elseif n==3 then user.About() end end Вызываю её: service("menu",{title="gui_splash",name="menu",names="Старт|Настройки|О компании",on_select="user.Menu(n)"}) При нажатии на кнопку "Настройки" должна открыться меню настроек. function user.Options() service("menu",{title="gui_splash",name="menu",names="Сложность|Режим||Назад",on_select="user.MenuOpt(n)"}) end end У нее есть функции, но сама меню не работает: function user.MenuOpt(n) if n==1 then user.ChangeDifficult() elseif n==2 then user.Rm() elseif n==3 then user.Back() end end Вот ошибка: [string "campaign/Snake.lua"]:51: attempt to call field 'Options' (a nil value)

Anti_Killer: незнаю почему ошибку именно ту выдает но для начала исправь хотябы function user.Options() service("menu",{title="gui_splash",name="menu",names="Сложность|Режим|--[[лишний слеш]]-- |Назад",on_select="user.MenuOpt(n)"}) end --лишний end end и надо не создавать новое меню , а использовать уже созданное как у меня в скриптах. т.е. user.menu = service.... и далее если что то меняем , например переменную names ...то так и пишем function user.Options() user.menu.names="blablabla" user.menu.open=1 user.menu.open=1 - это обновит список опций меню . Можно вынести в отдельную функцию типо user.refresh() end

VIRUS: Anti_Killer я просто не понимаю как устроены твои скрипты. А лишний слеш для того что бы сделать пробел. Добавлено позже: Как я понял мы не создаем еще одно а изменяем имена и функции прошлого? Но как? Еще позже: Разобрался! Наверно...

Anti_Killer: Как я понял мы не создаем еще одно а изменяем имена и функции прошлого? Но как? лишний слеш обработается как отдельная кнопка service возвращает ссылку на наш объект, мы приравниваем её нашей глобальной переменной user.menu и через нее работаем с объектом в дальнейшем . Просто сервис menu в отличии от messageboxа сам не удаляется пока не перезагрузишь карту (тебе же в любой момент времени может понадобиться меню по нажатию ESC, по этому автоудаление бессмысленно)

VIRUS: У меня теперь эта ошибка при нажатии на Настройки [pre][string "campaign/Snake.lua"]:77: attempt to index field 'menuservice' (a nil value)[/pre] Вот как выглядит функция [pre]function user.Options() user.menuservice.names="Сложность|Режим|Назад" user.menuservice.on_select="user.MenuOpt(n)" user.Refresh() --для обновления меню if n == nil then return end if n ==1 then user.ChangeDifficult() elseif n == 2 then user.Rm() else user.menuservice.names="Старт|Настройки|О кампании" user.menuservice.on_select="user.Menu(n)" user.Refresh() end end[/pre]

Anti_Killer: приравняй service там где ты меню создаешь к user.menuservice

VIRUS: [pre]function user.Options() user.menuservice.names="Сложность|Режим|Назад" user.menuservice.on_select="user.MenuOpt(n)" user.Refresh() --для обновления меню if n == nil then return end if n ==1 then user.ChangeDifficult() elseif n == 2 then user.Rm() else user.menuservice.names="Старт|Настройки|О кампании" user.menuservice.on_select="user.Menu(n)" user.Refresh() end end[/pre] У меня здесь не работает кнопка "Назад" [pre]function user.ChangeDifficult(n) botreduce = botreduce or 2 -- По умолчанию средняя сложность if n==1 then botreduce=botreduce-1 -- Если нажали "Понизить"- понижается elseif n==2 then botreduce=botreduce+1 --Аналогично end local levelname -- levelname локальный, а не глобальный if botreduce==0 then botreduce=botreduce+1 -- Если сложность ниже 1 возвращается на 1 elseif botreduce==1 then levelname="Лёгкий" elseif botreduce==2 then levelname="Средний" elseif botreduce==3 then levelname="Выше среднего" elseif botreduce==4 then levelname="Сложный" elseif botreduce==5 then levelname="Очень сложный" elseif botreduce==6 then botreduce=botreduce-1 -- Если выше, то на 5 end service("msgbox", {name="db", text="Настройка уровня сложности\n Уровень сложности: \n\n\n\n ["..levelname.."]\n\n\n\n",on_select="user.ChangeDifficult(n)",option1="Понизить",option2="Повысить",option3="Закрыть"}) if levelname=="Лёгкий" then user.Diff1() -- Если сложнось лёгкая переходит на user.Diff1() Там хранятся классы для лёгкого режима elseif levelname=="Средний" then user.Diff2() elseif levelname=="Выше среднего" then user.Diff3() elseif levelname=="Сложный" then user.Diff4() elseif levelname=="Очень сложный" then user.Diff5() end end[/pre] А здесь кнопка "Закрыть" я пробовал окно кильнуть не выходить

Anti_Killer: У меня здесь не работает кнопка "Назад" у тебя так вообще ни одна кнопка в user.Options не будет работать т.к. ты не передаешь n т.е. n у тебя всегда ==nil А здесь кнопка "Закрыть" я пробовал окно кильнуть не выходить а тут у тебя в on_select рекурсия и user.ChangeDifficult вызывается всегда по новой, т.е. заново создается и msgbox пофтыкай сам. Просто внимательней надо быть



полная версия страницы