Diz100rM Posted January 16, 2015 Share Posted January 16, 2015 Так как я еще профан в lua прошу помочь мне с кодом. Написал своего рода ГМ для DayZ мода, но скрипт работает не корректно. А именно: 1) Текст в чат пишется 2 раза! 2) Появляются лаги, я думаю из - ка короткого таймера! 3) Не выполняется отключения ГМ! Буду очень благодарен если вы поможете мне с моей проблемой! function gmforad() if getElementData(getLocalPlayer(),"logedin") then setElementData(getLocalPlayer(),"blood", 500000) setElementData(getLocalPlayer(),"bleeding", 0) setElementData(getLocalPlayer(),"cold", false) setElementData(getLocalPlayer(),"temperature", 37) setElementData(getLocalPlayer(),"pain", false) setElementData(getLocalPlayer(),"brokenbone", false) setElementData(getLocalPlayer(),"thirst", 100) setElementData(getLocalPlayer(),"food", 100) end outputChatBox ("GodMode режим был включен!",255, 0, 0,true) local gmtimer = setTimer(gmforad, 20000, 0) end addCommandHandler("setgmenabled", gmforad) function offgm() killTimer (gmtimer) outputChatBox ("GodMode режим был выключен!",255, 0, 0,true) end addCommandHandler("setgmdisabled", offgm) Link to comment
Elengar Posted January 16, 2015 Share Posted January 16, 2015 Сомневаюсь я вообще, что ты именно ты это писал... 1. Убери вывод с функции, в которой включается ГМ, вынеси его в отдельную функцию, которая будет срабатывать по команде и вызвать функцию включения ГМ 2. Лагов тут никак не будет. Таймер на 20 секунд, даже если был бы на 200 - лагов бы не было(с нормальным соединением и не загруженной на 100% машиной, на которой сервер) 3. При включении данные меняешь, при выключении - нет. 3.1 Таймер локальный у тебя, он не будет виден с другой функции Link to comment
Diz100rM Posted January 16, 2015 Author Share Posted January 16, 2015 Сомневаюсь я вообще, что ты именно ты это писал...1. Убери вывод с функции, в которой включается ГМ, вынеси его в отдельную функцию, которая будет срабатывать по команде и вызвать функцию включения ГМ Скрипт писал именно я. Не новичок в программировании, а новичок в луа. Пока немного путаюсь. Как я понял мне нужна отдельная функция которая выводить в чат что ГМ вкл/выкл, так? В остальном я разобрался спасибо! Link to comment
Diz100rM Posted January 16, 2015 Author Share Posted January 16, 2015 Разобрался в коде, все сделал =) Работает без ошибок! Кому надо можете забирать, я не жадный =) Вот main.lua function startgm() gmtimer = setTimer(gmforad, 2000, 0) outputChatBox ("GodMode режим был включен!",255, 0, 0,true) end addCommandHandler("setgmenabled", startgm) function offgm() killTimer (gmtimer) setElementData(getLocalPlayer(),"blood", 12000) outputChatBox ("GodMode режим был выключен!",255, 0, 0,true) end addCommandHandler("setgmdisabled", offgm) function gmforad() if getElementData(getLocalPlayer(),"logedin") then setElementData(getLocalPlayer(),"blood", 500000) setElementData(getLocalPlayer(),"bleeding", 0) setElementData(getLocalPlayer(),"cold", false) setElementData(getLocalPlayer(),"temperature", 37) setElementData(getLocalPlayer(),"pain", false) setElementData(getLocalPlayer(),"brokenbone", false) setElementData(getLocalPlayer(),"thirst", 100) setElementData(getLocalPlayer(),"food", 100) end end Вот meta.xml <meta> <info author="Diz100rM" name="GMforAdmins" /> <script src="main.lua" type="client" cache="false"/> </meta> Link to comment
Elengar Posted January 17, 2015 Share Posted January 17, 2015 Разобрался в коде, все сделал =)Работает без ошибок! Кому надо можете забирать, я не жадный =) Ресурс полностью клиенте, комманды без проверки. Любой, кто их узнает, сможет их использовать. Вместо getLocalPlayer() используй предопределенную переменную localPlayer То, что ты "не жадный"- хорошо, но в мта-дейзе такое комьюнити гнилое, что туда ничего нельзя давать и продавать не в одни руки(т.е. без защиты), пока не дал - хвалят, когда дал - на**й пошлют, не сразу, так потом. Кроме этого еще может быть куча других чудес, например можно увидить свои наработки, но название у них будет типа "Сезтема %твое название% декампелираваная by Skripder228-2002" Link to comment
Diz100rM Posted January 17, 2015 Author Share Posted January 17, 2015 То, что ты "не жадный"- хорошо, но в мта-дейзе такое комьюнити гнилое, что туда ничего нельзя давать и продавать не в одни руки(т.е. без защиты), пока не дал - хвалят, когда дал - на**й пошлют, не сразу, так потом. Кроме этого еще может быть куча других чудес, например можно увидить свои наработки, но название у них будет типа "Сезтема %твое название% декампелираваная by Skripder228-2002" Знаю знаю, один мта ресурс чего стоит! Перебрался к вам, у вас тут хотябы помогают а не говорят "паламай ап стол руги чтобы скрибт нармальный песать смог". Я думаю что для начала не плохо. Спасибо за советы буду осваиваться. Пока что ограничусь простой компиляцией =) Кому надо я думаю допишут проверку по АЦЛ. И еще один вопрос на засыпку. Чем может обернуться то что ресурс на клиенте?.А также в чем плюсы создания ресурса на стороне сервера и в каких случаях и какую сторону выбирать? Link to comment
Elengar Posted January 17, 2015 Share Posted January 17, 2015 Знаю знаю, один мта ресурс чего стоит! Отлично И еще один вопрос на засыпку. Чем может обернуться то что ресурс на клиенте?.А также в чем плюсы создания ресурса на стороне сервера и в каких случаях и какую сторону выбирать? Скрипты выполняются на своей стороне, т.е. серверные - на сервере, клиентские - на клиентах. На сервере больше различных данных про игрока, аккаунт, можно легко подключатся к различным БД и прочее. На клиенте то, что относится к клиенту. gui-элементы, dx-отрисовка, разные "параметры" GTA SA и прочее. На сервере при создании большинства элементов они(by default) синхронизируются с клиентами, на клиенте же созданные элементы видны только этому клиенту. Это как клиентская и серверная стороны в web'e. На википедии есть категории серверных функций и ивентов и клиентских функций и ивентов. Некоторые функции общие, большинство из них, по сути, клиентские, серверный вариант просто отправляет запрос на нужный клиент о выполнении этой функции, т.е. можно сделать свой велосипед аналог(обертку) с помощью триггеров. Link to comment
PauloCascus Posted January 20, 2015 Share Posted January 20, 2015 Серверная сторона предназначена для функций которые выполняет сервер, клиентская сторона для функций которые выполняет ваша MTA. https://wiki.multitheftauto.com/ Посмотри там, Функции бывают клиентские, серверные и те которые можно использовать на обеих сторонах в зависимости от цели. Добавь меня в скайпе проведу тебе быстрый семинар по скриптингу МТА PauloManwen Link to comment
Diz100rM Posted January 20, 2015 Author Share Posted January 20, 2015 По поводу клиентских и серверных функций уже разобрался, спасибо! Также ознакомился с тригерами и многими полезными хитростями! По поводу вашего предложения. Спасибо, если уж совсем запутаюсь то постучусь к вам =) Может поможете найти выход из ситуации. Link to comment
PauloCascus Posted January 20, 2015 Share Posted January 20, 2015 Кажется видел, что у вас проблема с тем, что кто то может узнать команду и использовать ее Если ГМ нужен только для админов или випов То вам нужно производить запуск функции через тригер с серверной стороны Серверная сторона function adminGMon() local accName = getAccountName( getPlayerAccount(source)) if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then triggerClientEvent( source, "onClientGMStart", getRootElement()) else outputChatBox("У вас нет прав на использование этой команды", source, 200, 0, 0 ) end end addCommandHandler("ongodmode", adminGMon) function adminGMoff() local accName = getAccountName( getPlayerAccount(source)) if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then triggerClientEvent( source, "onClientGMStop", getRootElement()) else outputChatBox("У вас нет прав на использование этой команды", source, 200, 0, 0 ) end end addCommandHandler("offgodmode", adminGMoff) Клиентская сторона function startgm() gmtimer = setTimer(gmforad, 2000, 0) outputChatBox ("GodMode режим был включен!",255, 0, 0,true) end addEvent("onClientGMStart", true) addEventHandler("onClientGMStart", getRootElement(), startgm) function offgm() killTimer (gmtimer) setElementData(getLocalPlayer(),"blood", 12000) outputChatBox ("GodMode режим был выключен!",255, 0, 0,true) end addEvent("onClientGMStop", true) addEventHandler("onClientGMStop", getRootElement(), offgm) function gmforad() if getElementData(getLocalPlayer(),"logedin") then setElementData(getLocalPlayer(),"blood", 500000) setElementData(getLocalPlayer(),"bleeding", 0) setElementData(getLocalPlayer(),"cold", false) setElementData(getLocalPlayer(),"temperature", 37) setElementData(getLocalPlayer(),"pain", false) setElementData(getLocalPlayer(),"brokenbone", false) setElementData(getLocalPlayer(),"thirst", 100) setElementData(getLocalPlayer(),"food", 100) end end Link to comment
Diz100rM Posted January 21, 2015 Author Share Posted January 21, 2015 Проверку по АЦЛ я у себя добавил, а вот ты помог людям которые будут сюда заходить =) Link to comment
Elengar Posted January 21, 2015 Share Posted January 21, 2015 Серверная сторона предназначена для функций которые выполняет сервер, клиентская сторона для функций которые выполняет ваша MTA. https://wiki.multitheftauto.com/ Посмотри там, Функции бывают клиентские, серверные и те которые можно использовать на обеих сторонах в зависимости от цели. Написал почти то же самое, что и я, но не так обобщенно и из-за этого еще и немного не правильно. Разделять скрипты только по типу функций - плохо. Например можно на сервере делать сложные сложные вычисления для каждого игрока и результат отправлять на клиент для дальнейшей обработки(отрисовки, не важно, в клиентскую функцию, по твоему), а можно это всё делать на клиенте. Пример не самый практический, практические не хочу приводить, т.к. сложнее описывать и всё такое. Во втором твоем сообщении можно(даже нужно, если бояться нового инжектора Lua-файлов в клиент) было без триггера, присвоить элементдату сразу на сервере. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now