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

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

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

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

Anti_Killer: LUA name"snake1" как минимум на это накричит. Насчет функций без параметров не пробывал на LUA , но так часто применяют. Пробуй

VIRUS: function user.Start() if levelid=="mapa1" then user.LoadLevel1() elseif levelid=="mapa2" then user.LoadLevel2() elseif levelid=="mapa3" then user.LoadLevel3() elseif levelid=="mapa4" then user.LoadLevel4() elseif levelid=="mapa5" then user.LoadLevel5() end end ---------------------------------------------- --функции игры-- function user.LoadLevel1() pushcmd( function() loadmap ("campaign/Snake/maps/Snake_1.map") end, 1) pushcmd( function() service ("player_local", {name="snake1", nick="Змея", class="user.Class"}) end, 1) end Никакой ошибки нет, но при нажатии на старт ничег не работает

Anti_Killer: Отлаживай. Проверяй через message до куда доходит и что выдает. Передается ли levelid, выполняется ли user.start() и т.д.


VIRUS: Доходит до user.start() а дальше гнет

Anti_Killer: проверяй дальше. У тебя levelid что выдает у тебя присваивается 1 2 3 4 5 , а проверяется на mapa1 mapa2 . просто цифрой везде пиши

VIRUS: Anti_Killer пишет: проверяй дальше. У тебя levelid что выдает у тебя присваивается 1 2 3 4 5 , а проверяется на mapa1 mapa2 . просто цифрой везде пиши С этим все нормально

slava98: А с картами всё нормально?

VIRUS: slava98 естественно

slava98: function pda() if user.pda == 1 then user.msg=Проверка КПК. Сообщение 1 elseif user.pda == 2 then user.msg=Проверка КПК. Сообщение 2 elseif user.pda == 3 then user.msg=Проверка КПК. Сообщение 3 end end end end Это моя попытка сделать ПДА, как в Doom 3. function user.pdabox(n) botreduce = botreduce or 0 if n==1 then botreduce=botreduce-1 elseif n==2 then botreduce=botreduce+1 end end pda() if botreduce==0 then botreduce=botreduce+1 elseif botreduce==1 then user.pda=1 elseif botreduce==2 then user.pda=2 elseif botreduce==3 then user.pda=3 elseif botreduce==4 then botreduce=botreduce-1 end service("msgbox", {text="[..user.msg..]",on_select="user.pdabox(n)",option1=">",option2="<",option3="Закрыть"}) Это тоже. Только другой отрывок. --*Мы загружаем PDA. Пока в тестовом режиме. user.pda=1 -- Нам нужно 1-ое сообщение... pda() -- ...и мы его загружаем.. user.pdabox() -- ...и высвечиваем. А это я пробую его вызывать. runtime error: data/campaign/War System/scripts/level1.lua:6: attempt to call global 'pda' (a nil value) А это ошибка. Объясните, что не так. И ещё: function user.shockin() kill("shoker1") pushcmd(function() message("Это электро-взрывчатка! Она поможет достать бустер!") end, 1) actor("user_sprite", 470, 695, { name="shocksprite", texture="user/ekivator", layer=11 }) actor("trigger", 480, 695, { name="shocktrig", on_enter="user.shockout()" }) end function user.shockout() kill("shocksprite") pset("shocktrig", "active", 0) actor("pu_shock", 470, 695, { name="shocker2" }) pushcmd(function() message("Через десять секунд взрывчатка взорвётся.") end, 1) pushcmd(function() message("5") end, 6) pushcmd(function() message("4") end, 7) pushcmd(function() message("3") end, 8) pushcmd(function() message("2") end, 9) pushcmd(function() message("1") end, 10) pushcmd(function() kill("shocker2") explosion(47, 69) explosion(47, 70) kill("k1_v1") kill("k2_v1") end, 12) end Тут всё правильно? И как сделать так, чтобы объект появился на 48, а не на 4,8 и не на 480?

Anti_Killer: А это ошибка. Объясните, что не так. функция у тебя user.pda() а зовешь просто pda() которой не существует. (это я тебе просто перевел сообщение ошибки. Внимательно читай еррор месаги, в них почти всегда вся соль) Тут всё правильно? И как сделать так, чтобы объект появился на 48, а не на 4,8 и не на 480? если лень каждый раз выщитывать то вместо числа - кординаты пиши get32(кордината) предварительно вставив в свой скрипт сверху функцию local function get32(num) return ((num-1) * 32) + 16; end она будет пересчитывать твои "клетки" из редактора в пиксели

slava98: если лень каждый раз выщитывать то вместо числа - кординаты пиши get32(кордината) предварительно вставив в свой скрипт сверху функцию СПС, попробую. А сеёчас у меня совсем другой скрипт. function user.mailbox(n) if n==nil then if n==1 then botreduce=botreduce-1 elseif n==2 then botreduce=botreduce+1 end end if botreduce==0 then botreduce=botreduce+1 elseif botreduce==1 then mailnum=1 elseif botreduce==2 then mailnum=2 elseif botreduce==3 then mailnum=3 elseif botreduce==4 then mailnum=4 elseif botreduce==5 then botreduce=botreduce-1 end mail(mailnum) service("msgbox", {text=user.msg,on_select="user.mailbox(n)",option1="Назад",option2="Вперёд",option3="Закрыть"}) end else if n==3 then end end function mail(message) if message == 1 then user.msg="Добро пожаловать в наше боевое поселение Экиваторов!" elseif message == 2 then user.msg="Проверка КПК. Сообщение 2" elseif message == 3 then user.msg="Проверка КПК. Сообщение 3" elseif message == 4 then user.msg="4" end end Всё работает, кроме кнопки "Закрыть". Ошибок нет. П.С. Я имел ввиду, что игра не ругается.

Anti_Killer: else if n==3 then end это вообще не обязательно было писать , а в on_select исправить on_select="if n ~= 3 then user.mailbox(n) end "

slava98: Спасибо, громадное! А то, не успел я изучить функцию, появился сервис. Теперь кампания поедет дальше .

slava98: function user.shockin() kill("shoker1") pushcmd(function() message("Это электро-взрывчатка! Она поможет достать бустер!") end, 1) actor("user_sprite", get32(47), get32(69.5), { name="shocksprite", texture="user/ekivator", layer=11 }) actor("trigger", get32(48), get32(69.6), { name="shocktrig", on_enter="user.shockout()" }) end function user.shockout() kill("shocksprite") pset("shocktrig", "active", 0) actor("pu_shock", get32(47), get32(69.5), { name="shocker2" }) pushcmd(function() message("Через десять секунд взрывчатка взорвётся.") end, 1) pushcmd(function() message("5") end, 6) pushcmd(function() message("4") end, 7) pushcmd(function() message("3") end, 8) pushcmd(function() message("2") end, 9) pushcmd(function() message("1") end, 10) pushcmd(function() kill("shocker2") explosion(47, 69) explosion(47, 70) kill("k1_v1") kill("k2_v1") end, 12) end Так можно.

VIRUS: Не работает :( function user.WaterFire() local lifeobj lifeobj = pget("obj_water", "health") if lifeobj == 2000 then pset("dec_water", "texture", "user/water1") elseif lifeobj == 1500 then pset("dec_water", "texture", "user/water2") elseif lifeobj == 1000 then pset("dec_water", "texture", "user/water3") elseif lifeobj == 500 then pset("dec_water", "texture", "user/water4") elseif lifeobj == 100 then pset("dec_water", "texture", "user/waterfinal") elseif lifeobj == 1 then kill("obj_water") elseif lifeobj == 1 then kill("dec_water") end end

slava98: lifeobj = nill И нечего не происходит! Он вообще не задаётся.

VIRUS: А как задать? хп объекта

Anti_Killer: А как задать? хп объекта pset и pget надо использовать редко. С тех пор как Insert ввел функцию object они ушли на второй план function user.WaterFire() local lifeobj lifeobj = pget("obj_water", "health") if lifeobj == 2000 then pset("dec_water", "texture", "user/water1") elseif lifeobj == 1500 then pset("dec_water", "texture", "user/water2") elseif lifeobj == 1000 then pset("dec_water", "texture", "user/water3") elseif lifeobj == 500 then pset("dec_water", "texture", "user/water4") elseif lifeobj == 100 then pset("dec_water", "texture", "user/waterfinal") elseif lifeobj == 1 then kill("obj_water") elseif lifeobj == 1 then kill("dec_water") end end можно записать как function user.WaterFire() local obj1=object("obj_water"),obj2=object("dec_water") if obj1.health == 2000 then obj2.texture="user/water1" elseif obj1.health == 1500 then obj2.texture="user/water2" elseif obj1.health == 1000 then obj2.texture="user/water3" elseif obj1.health == 500 then obj2.texture="user/water4" elseif obj1.health == 100 then obj2.texture="user/waterfinal" else then kill("obj_water") kill("dec_water") -- и вот это не правильно все равно. Если хочешь чтоб при смерти одного объекта умер и второй, добавь событие в on_die или в on_destroy объекта при убийстве которого надо убивать второй end end соответственно задать хп объекта можно просто приравняв obj1.health = 100

slava98: Anti_Killer спасибо. Но второй объект и не должен умирать. Но у меня есть тоже вопрос: - Как взять хп с помощью pget у сервиса player? Создаётся танк и сервис, а имя только у сервиса. А мне нужно взять хп у танка. (с помощью функции pget) И ещё один (мы с Вирусом закидываем вопросами , но это потому что я не знал новинки новой версии, и они в Танкопедии не записаны ): - Я знаю, что можно загрузить какой-нибудь файл в скриптах. Так игра сохранялась и загржалась в The Race. А можно сделать так, чтобы игра запускала файл lang.cfg с помощью скриптов из указанного места?

Anti_Killer: Как взять хп с помощью pget у сервиса player? vehname и есть объект танк. Проверяй хп у танка . вот и все. Создаётся танк и сервис, а имя только у сервиса. А мне нужно взять хп у танка. (с помощью функции pget) не вижу проблемы в задании параметра vehname у player_local - Я знаю, что можно загрузить какой-нибудь файл в скриптах. Так игра сохранялась и загржалась в The Race. А можно сделать так, чтобы игра запускала файл lang.cfg с помощью скриптов из указанного места? нет. Скрипты и игровые файлы вроде lang.cfg никак не связаны. lang.cfg обрабатывается при запуске игры



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