Alko Posted February 11, 2014 Share Posted February 11, 2014 И еще один вопрос: Можно ли сделать проверку на выполненность функции? Типо: function () if (PlayerRegister (Так называется функция регистрации)) and (PlayerLogin) then *что-то сделать* Link to comment
Other Languages Moderators Disinterpreter Posted February 11, 2014 Other Languages Moderators Share Posted February 11, 2014 И еще один вопрос:Можно ли сделать проверку на выполненность функции? Типо: function () if (PlayerRegister (Так называется функция регистрации)) and (PlayerLogin) then *что-то сделать* Функция должна возвращать что либо (например boolean), с чем это можно сверить. Link to comment
TheNormalnij Posted February 11, 2014 Share Posted February 11, 2014 if PlayerRegister( player ) then -- вызовет функцию и если она возвращает не nil и не false, -- то продолжится выполнение кода здесь end В твоем случае можно взять акк у игрока( getPlayerAccount ) и проверить не гостевой ли он ( isGuestAccount ) Минуту опоздал Link to comment
VCXZ Posted February 12, 2014 Share Posted February 12, 2014 Блин, что-то вообще туплю.. Как в строковую переменную уместить и текст и числовую переменную, то есть: если BB = 80, то AA должно быть "текст 80" Link to comment
Elengar Posted February 12, 2014 Share Posted February 12, 2014 Блин, что-то вообще туплю..Как в строковую переменную уместить и текст и числовую переменную, то есть: если BB = 80, то AA должно быть "текст 80" Что за BB и AA ? Переменные ? AA = 'текст' BB = 80 ? Тогда просто AA = AA..' '..BB и будет у тебя AA "текст 80" Link to comment
VCXZ Posted February 12, 2014 Share Posted February 12, 2014 Блин, что-то вообще туплю..Как в строковую переменную уместить и текст и числовую переменную, то есть: если BB = 80, то AA должно быть "текст 80" Что за BB и AA ? Переменные ? AA = 'текст' BB = 80 ? Тогда просто AA = AA..' '..BB и будет у тебя AA "текст 80" Да, переменные. Благодарю, Elengar. Подскажите еще пожалуйста, "насколько глобальны" переменные (таблицы в том числе)? Просто сейчас на клиентской стороне пытаюсь использовать данные из глобальной таблицы, созданной на серверной стороне, и не получается. А trigger вроде не для этого создан. Не совсем понимаю, что делать в данном случае. Link to comment
Elengar Posted February 12, 2014 Share Posted February 12, 2014 Да, переменные. Благодарю, Elengar. Подскажите еще пожалуйста, "насколько глобальны" переменные (таблицы в том числе)? Просто сейчас на клиентской стороне пытаюсь использовать данные из глобальной таблицы, созданной на серверной стороне, и не получается. А trigger вроде не для этого создан. Не совсем понимаю, что делать в данном случае. Глобальные они на той строне и в том ресурсе, где были созданы. Link to comment
VCXZ Posted February 12, 2014 Share Posted February 12, 2014 Всё никак не получается в клиенте использовать серверное значение. Финальный мой вариант был такой: в клиенте ставим triggerServerEvent; в сервере из функции, обрабатывающей этот event ставим triggerClientEvent, передавая в аргументе нужное значение, но дальше, как его принять, я не понимаю. И примера похожего найти не могу. Не могли бы вы помочь?(что и за чем нужно делать) Заранее большое спасибо. Link to comment
Memory Posted February 12, 2014 Share Posted February 12, 2014 но дальше, как его принять, я не понимаю. Создай переменные на клиенте и функцию, которую сервер триггерит. local value1 = nil; local value2 = nil; local value3 = nil; ... function setValue (val1, val2, val3, ...) value1 = val1; value2 = val2; YourFunctionName() ---вызывай следующую функцию, которая испольщует значения value1, ... ---Или добавь сюда код end addEvent( "sendValues", true ) addEventHandler( "sendValues", root, setValue) Если не понятно или не то имел ввиду, кидай свои функции. Link to comment
Elengar Posted February 12, 2014 Share Posted February 12, 2014 Всё никак не получается в клиенте использовать серверное значение. Финальный мой вариант был такой: в клиенте ставим triggerServerEvent; в сервере из функции, обрабатывающей этот event ставим triggerClientEvent, передавая в аргументе нужное значение, но дальше, как его принять, я не понимаю.И примера похожего найти не могу. Не могли бы вы помочь?(что и за чем нужно делать) Заранее большое спасибо. Сервер: local serverVar = 'переменная, которую ты хочешь использовать на клиенте' function transferVar() triggerClientEvent('getTransferVar',source,serverVar) end addEvent('transferVar',true) addEventHandler('transferVar',root,transferVar) Клиент local myVar -- это уже клиентская переменная, которую ты хотел где-то использовать function getTransferVar(serverVar) if not serverVar then triggerClientEvent('transferVar',localPlayer) else myVar = serverVar end end addEvent('getTransferVar',true) addEventHandler('getTransferVar',root,getTransferVar) Если тебе нужно получить переменную с сервера в нужном месте на клиенте вызывай функцию getTransferVar() и потом используй myVar. Код писал прямо здесь, табуляция никакая, я его не проверял. Link to comment
VCXZ Posted February 12, 2014 Share Posted February 12, 2014 Спасибо ребят!! У меня получилось, и знаете, я сразу сделал все правильно за исключением одной нубской ошибки: я когда принимал на клиенте переменную, еще и в eventhandler в аргумент эту переменную включал. Ну как бы "чтоб цепочка не потерялась" Link to comment
VCXZ Posted February 13, 2014 Share Posted February 13, 2014 Существует ли какая-то функция, которая сделает из строки "abvgd" просто abvgd без кавычек? (мне это нужно для того, чтобы не создавать 100 функций для приема в клиентскую часть каждого значения с серверной части, а создать одну f(...), но чтобы передать через такую функцию название нужной переменной, его нужно передать строкой) Во, нашел то, что нужно (только в PHP ) Иногда бывает удобно иметь переменными имена переменных. То есть, имя переменной, которое может быть определено и изменено динамически. Обычная переменная определяется примерно таким выражением:<?php $a = 'hello'; ?> Переменная переменной берет значение переменной и рассматривает его как имя переменной. В вышеприведенном примере hello может быть использовано как имя переменной при помощи двух знаков доллара. То есть: <?php $$a = 'world'; ?> Теперь в дереве символов PHP определены и содержатся две переменные: $a, содержащая "hello", и $hello, содержащая "world". Link to comment
Elengar Posted February 13, 2014 Share Posted February 13, 2014 Существует ли какая-то функция, которая сделает из строки "abvgd" просто abvgd без кавычек? (мне это нужно для того, чтобы не создавать 100 функций для приема в клиентскую часть каждого значения с серверной части, а создать одну f(...), но чтобы передать через такую функцию название нужной переменной, его нужно передать строкой)Во, нашел то, что нужно (только в PHP ) local nameFunc = "abvgd"-- твоя строковая переменная local f = loadstring(nameFunc..' = function() end')-- конкатируем строку из перменной nameFunc с строкой создания функции. Получается abvgd = function() end f()-- вызываем создание функции abvgd abvgd() Link to comment
TheNormalnij Posted February 13, 2014 Share Posted February 13, 2014 Более легкий и менее костыльный вариант - заносить функции в таблицу. t = {} function t.foo() -- что-то делается end -- вызываем по переменной local s = 'foo' t[s]() -- сам вызов Link to comment
Kernell Posted February 13, 2014 Share Posted February 13, 2014 Более легкий и менее костыльный вариант - заносить функции в таблицу. t = {} function t.foo() -- что-то делается end -- вызываем по переменной local s = 'foo' t[s]() -- сам вызов Может быть я чего-то н понимаю.. Но зачем дополнительно заносить функцию в таблицу, если все функции и так находятся в глобальной таблице _G? Аналогиночно можно получить или вызвать функцию через _G (вместо t): function foo() -- ... end local s = "foo"; _G[ s ](); А пример из PHP можно расписать так: a = 'hello'; _G[ a ] = 'world'; Link to comment
VCXZ Posted February 13, 2014 Share Posted February 13, 2014 Блин, ребят, что-то я совсем запутался Я и так, и сяк пытался применить ваши варианты - у меня ничего не выходит. Может быть я неправильно задал вопрос. Я в клиентской части пытаюсь создать функцию, которая будет принимать с сервера на клиент нужные значения переменных. То есть в аргумент этой функции мы передаем нужное название серверной переменной(переменных), она "находит" их в серверной части и передает в клиентскую. Потому я и спрашивал, как из "abv" сделать просто abv, в примере Elengar строка превращается в функцию, не получается "найти" нужное значение на сервере. Или я чересчур криворук. Link to comment
TheNormalnij Posted February 13, 2014 Share Posted February 13, 2014 Может быть я чего-то н понимаю.. Но зачем дополнительно заносить функцию в таблицу, если все функции и так находятся в глобальной таблице _G?Аналогиночно можно получить или вызвать функцию через _G (вместо t): Спасибо, что-то я это сразу не припомнил. addEvent addEventHandler triggerClientEvent triggerServerEvent В доке все расписано. --cient addEvent( 'onClientGetSpecialValues', true ) local key = false -- пускай будет стандартное значение addEventHandler( 'onClientResourceStart', resourceRoot, function() triggerServerEvent( 'getSpecialValues', root ) end ) addEventHandler( 'onClientGetSpecialValues', root, function( _key ) key = _key end ) -- хардкор вариант, не рекомендую addEventHandler( 'onClientGetSpecialValues', root, function( keys ) for key, value in pairs( keys ) do _G[key] = value end end ) --server addEvent( 'getSpecialValues', true ) local key = true addEventHandler( 'getSpecialValues', root, function() triggerClientEvent( client, 'onClientGetSpecialValues', root, key ) end ) -- хардкор вариант local keys = { key = true; key2 = true; } addEventHandler( 'getSpecialValues', root, function() triggerClientEvent( client, 'onClientGetSpecialValues', root, keys ) end ) Link to comment
Elengar Posted February 13, 2014 Share Posted February 13, 2014 Блин, ребят, что-то я совсем запутался Я и так, и сяк пытался применить ваши варианты - у меня ничего не выходит. Может быть я неправильно задал вопрос. Я в клиентской части пытаюсь создать функцию, которая будет принимать с сервера на клиент нужные значения переменных. То есть в аргумент этой функции мы передаем нужное название серверной переменной(переменных), она "находит" их в серверной части и передает в клиентскую. Потому я и спрашивал, как из "abv" сделать просто abv, в примере Elengar строка превращается в функцию, не получается "найти" нужное значение на сервере. Или я чересчур криворук. Ну так тем же превращением с помощью loadstring , только вместо обьявления функции делай что-то такое 'varToServer = '..nameVar и потом уже varToServer отправляй на сервере. Link to comment
Kernell Posted February 13, 2014 Share Posted February 13, 2014 Я в клиентской части пытаюсь создать функцию, которая будет принимать с сервера на клиент нужные значения переменных.То есть в аргумент этой функции мы передаем нужное название серверной переменной(переменных), она "находит" их в серверной части и передает в клиентскую. Боюсь представить, что будет с вашим сервером когда клиентскую часть взломают.. Особенно с использованием loadstring, можно будет сделать не хитрую инъекцию и выполнить произвольный код, что даст полный доступ к серверу (можно будет выдать себе админку, скачать серверные скрипты и потом удалить их с сервера.. перечислять можно бесконечно) Link to comment
VCXZ Posted February 14, 2014 Share Posted February 14, 2014 Ну так тем же превращением с помощью loadstring , только вместо обьявления функции делай что-то такое 'varToServer = '..nameVar и потом уже varToServer отправляй на сервере. Да, получилось! Спасибо! Боюсь представить, что будет с вашим сервером когда клиентскую часть взломают.. Особенно с использованием loadstring, можно будет сделать не хитрую инъекцию и выполнить произвольный код, что даст полный доступ к серверу (можно будет выдать себе админку, скачать серверные скрипты и потом удалить их с сервера.. перечислять можно бесконечно) Спасибо за предупреждение, обязательно учту это в дальнейшем! Благодарю всех за помощь! Link to comment
Memory Posted February 14, 2014 Share Posted February 14, 2014 Боюсь представить, что будет с вашим сервером когда клиентскую часть взломают.. Особенно с использованием loadstring, можно будет сделать не хитрую инъекцию и выполнить произвольный код, что даст полный доступ к серверу (можно будет выдать себе админку, скачать серверные скрипты и потом удалить их с сервера.. перечислять можно бесконечно) Можно ли как-нибудь защититься от этого? Link to comment
Kernell Posted February 14, 2014 Share Posted February 14, 2014 Боюсь представить, что будет с вашим сервером когда клиентскую часть взломают.. Особенно с использованием loadstring, можно будет сделать не хитрую инъекцию и выполнить произвольный код, что даст полный доступ к серверу (можно будет выдать себе админку, скачать серверные скрипты и потом удалить их с сервера.. перечислять можно бесконечно) Можно ли как-нибудь защититься от этого? От чего? От своих ошибок? Не нужно просто делать такие вещи которые позволяют клиенту как-то манипулировать сервером, в том числе использовать ElementData только для передачи данных клиенту, но не обратно. А если хочется наказать тех кто меняет ElementData, то достаточно повесить на сервере событие onElementDataChange, если клиент меняет ElementData то в это событие передаётся указатель client по которой можно выдать бан. Как по вашему живут web-сайты? Уже в любом нормальном браузере есть всякие инструменты разработки которые позволяют редактировать HTML код, писать скрипты на JS, и посылать любой HTTP запрос серверу. Link to comment
AMARANT Posted February 14, 2014 Share Posted February 14, 2014 От чего? От своих ошибок? Не нужно просто делать такие вещи которые позволяют клиенту как-то манипулировать сервером, в том числе использовать ElementData только для передачи данных клиенту, но не обратно. А если хочется наказать тех кто меняет ElementData, то достаточно повесить на сервере событие onElementDataChange, если клиент меняет ElementData то в это событие передаётся указатель client по которой можно выдать бан. Можешь пожалуйста объяснить поподробнее, как клиент может изменить себе сам элемент дату? Link to comment
TheNormalnij Posted February 14, 2014 Share Posted February 14, 2014 Чит программами. 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