Отправлено: 18.08.10 12:28. Заголовок: Да там лучше даже не..
Да там лучше даже не "фтыкать". От рекурсивных вызовов непонятных функций у любого парсера крыша съедет. И вообще весь этот код вызовет жгучую зависть у любого индуса.
Попробуй как-нибудь так (луа у меня нету, за правильность не отвечаю, наверняка где-нибудь слажал, но идея должна быть ясна):
function user.ChangeDiff() local botdiff = 2 local levelname = ["Easy","Normal","Advanced","Hard","Impossible"]
while (button != 3) service("msgbox", {---Черт вас в душу разберет что тут теперь писать надо---}) if ((button==1)and(botdiff > 1)) then botdiff -= 1 end if ((button==2)and(botdiff < 5)) then botdiff += 1 end end user.Diff(botdiff) end
Отправлено: 18.08.10 13:09. Заголовок: У тебя в скрипте так..
цитата:
У тебя в скрипте также, тоже создает каждый раз новое. Попробую разобраться
ну ненадо же все подчистую слизывать с меня у меня там в скрипте идет вполне логичное исключение "if n ~= 3 then" т.е. 3 вариант ответа исключен и продолжения при нем нет.
user.menuservice.on_select="user.MenuOpt(n)" надо user.menuservice.on_select="user.Options(n)"
А я смотрю смотрю и не замечаю --- Вот нашел ошибку как исправить не знаю. Когда нажимаю на кнопку меню, нажатие как бы дублируется в открывшемся меню. --- А можно ли создать локальную переменную в одной функции, а использовать её в другой. Пример: function primer() local nyk if not exits "eto" then nyk="1" end end
function primer2() if nyk=="1" then actor("water"{name="eto"}) end end
Отправлено: 19.08.10 10:41. Заголовок: slava98 Я пробую. У ..
slava98 Я пробую. У меня бот едет к точке а потом куда хочет.
VIRUS пишет:
цитата:
Вот нашел ошибку как исправить не знаю. Когда нажимаю на кнопку меню, нажатие как бы дублируется в открывшемся меню. --- А можно ли создать локальную переменную в одной функции, а использовать её в другой. Пример: function primer() local nyk if not exits "eto" then nyk="1" end end
function primer2() if nyk=="1" then actor("water"{name="eto"}) end end
Отправлено: 19.08.10 11:09. Заголовок: Дам еще один мини ур..
Дам еще один мини урок. смотри мою последнюю версию скрипта The Race (от 18 числа) , я там очень сильно все переделал в плане переменных, фактически все заново переписал . Глобальных там теперь почти нет , практически все и сплошь локальное как функции так и переменные. Основное правило Все глобальные переменные нужно помещать в табличку user, иначе будут проблемы с загрузкой/сохранением. То же самое касается функций, например function new() - неправильно Надо писать чтобы ф-ция была доступна для обработчиков событий объектов (on_select, on_damage, on_die и т.д.) function user.new() либо если нигде объектом не обрабатывается то local function new()
Локальные переменные работают в рамках своего end'a в твоем примере так работать не будет , надо делать глобальную user.nyk либо в самом начале скрипта (вообще до начала публикаций функций и т.д. её задать) написать local nyk т.е. сработает только так
цитата:
local nyk
function primer() if not exits "eto" then nyk="1" end end
function primer2() if nyk=="1" then actor("water"{name="eto"}) end end
с локальными функциями также, Если одна локальная ф-ция используется другой, то локальная функция должна быть обязательно задана вышей той что её вызывает
Ну и надо не забывать что по умолчанию все переменные являются глобальными и надо приписывать везде либо user. либо делать local , ну у тебя вроде в этом плане нормально
про меню это нужен весь код. Но возможно у тебя все в одной функции идет и ты где то что то случайно повторно вызываешь или еще чего.
function user.Menu(n) if n == 1 then user.Game(n) elseif n == 2 then user.Options(n) elseif n == 3 then user.About() end end
function user.About() service("msgbox", {text="Кампания Snake созданна как модификация танков\nКампания создавалась на основе неофициальной версии\n(c)\n Автор VIRUS\n Версия 1.0"}) end
function user.Rm() service("msgbox", {text="К сожалению эта функция еще не реализована\n Ждите релиза в следующих версиях"}) end
function user.Refresh() if exists(user.menuservice.name)==true then --фактически пересоздаем меню если нам надо посмотреть изменения user.menuservice.open=1 user.menuservice.open=1 end end
function user.Options(n) user.menuservice.names="Сложность|Режим|Назад" user.menuservice.on_select="user.Options(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
function user.Game(n) user.menuservice.names="Старт|Карта|Назад" user.menuservice.on_select="user.Game(n)" user.Refresh() if n == nil then return end if n == 1 then user.Start() elseif n == 2 then user.ChangeMap() else user.menuservice.names="Игра|Настройки|О кампании" user.menuservice.on_select="user.Menu(n)" user.Refresh() end end
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 if n ~= 3 then service("msgbox", {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 end
local levelid
function user.ChangeMap(n) botreduce = botreduce or 1 if n==1 then botreduce=botreduce-1 elseif n==2 then botreduce=botreduce+1 end local levelname if botreduce==0 then botreduce=botreduce+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 end if n ~= 3 then service("msgbox", {text="Выбор карты для игры\n Карта: \n\n\n\n ["..levelname.."]\n\n\n\n",on_select="user.ChangeMap(n)",option1="Предыдущая",option2="Следующая",option3="Закрыть"}) if levelname=="Без лабиринта" then levelid="1" elseif levelname=="Квадрат" then levelid="2" elseif levelname=="Квадрат внутри" then levelid="3" elseif levelname=="Паралели и перпендекуляр" then levelid="4" elseif levelname=="Комнаты" then levelid="5" end end end
function user.Start() if levelid=="1" then user.LoadLevel1() elseif levelid=="2" then user.LoadLevel2() elseif levelid=="3" then user.LoadLevel3() elseif levelid=="4" then user.LoadLevel4() elseif levelid=="5" then user.LoadLevel5() end end
Отправлено: 20.08.10 08:53. Заголовок: Похоже я Anti_Killer..
Похоже я Anti_Killerа уже достал. Но вот как сделать ПРАВИЛЬНО не пойму.
local levelid
function user.ChangeMap(n) botreduce = botreduce or 1 if n==1 then botreduce=botreduce-1 elseif n==2 then botreduce=botreduce+1 end local levelname if botreduce==0 then botreduce=botreduce+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 end if n ~= 3 then service("msgbox", {text="Выбор карты для игры\n Карта: \n\n\n\n ["..levelname.."]\n\n\n\n",on_select="user.ChangeMap(n)",option1="Предыдущая",option2="Следующая",option3="Закрыть"}) if levelname=="Без лабиринта" then levelid="1" elseif levelname=="Квадрат" then levelid="2" elseif levelname=="Квадрат внутри" then levelid="3" elseif levelname=="Паралели и перпендекуляр" then levelid="4" elseif levelname=="Комнаты" then levelid="5" end end end
function user.Start() if levelid=="1" then user.LoadLevel1() elseif levelid=="2" then user.LoadLevel2() elseif levelid=="3" then user.LoadLevel3() elseif levelid=="4" then user.LoadLevel4() elseif levelid=="5" then user.LoadLevel5() end end
Отправлено: 20.08.10 09:38. Заголовок: Да помогу пока настр..
Да помогу пока настроение есть 1. не ставь числа в ковычки вроде "1" 2. end не там где надо поставил . Ставь до if levelname=="Без лабиринта" then levelid="1" и убирай один снизу. 3. функция user.Start() у тебя нигде не прописана. Т.е. ее не что не вызывает
Отправлено: 20.08.10 10:39. Заголовок: А можно ли писать та..
А можно ли писать так pushcmd( function() service ("player_local", {name"snake1", nick="Змея", class="user.Class"}) end, 1) ------------------------------------------------------------------------------------------------------------↑ это функция
Все даты в формате GMT
3 час. Хитов сегодня: 13
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет