Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Привет всем) Если не против, я вас заваливаю тупыми вопросами, тк как я только начал ставить ЭЭЭЭЭЭЭЭксперементы, потому что мне это стало интересно, и вот мой..1 тупой вопрос)

addEventHandler( 'onClientResourceStart',resourceRoot, 
    function( ) 
        local x, y, z = getElementPosition ( thePlayer ) 
        local sound = playSound3D( 'http://www.181.fm/asx.php?station=181-uktop40&style=&description=',x ,y ,z )  
        setSoundMaxDistance( sound, 50 ) 
    end 
) 

Почему это не работает) Такой лёгкий..а пишет какую то лабуду...и не работает, не говорите что я нуб и тд) Я знаю это)

Link to comment

Переменную 'thePlayer' в вашем коде не вижу. Почему вы написали именно ее? Возможно, раз скрипт у вас клиентский, вы подразумевали localPlayer (переменная, содержащая элемент локального игрока).

Link to comment
local x, y, z = getElementPosition ( thePlayer ) 

Откуда ты взял переменную thePlayer? Чтобы получить локального игрока используй функцию getLocalPlayer:

local x, y, z = getElementPosition(getLocalPlayer()) 

Большое спасибо, запомню!)

Link to comment
-- Car Locks ( client ) 
  
-- local player 
localPlayer = getLocalPlayer ( ) 
  
-- playSoundNearElement 
addEvent ( "onPlaySoundNearElement", true ) 
function playSoundNearElement ( theElement, sound ) 
--  local sound = 5 
    local maxdist = 15.0 
    -- valid element 
    if ( theElement ) then 
        local x,y,z = getElementPosition ( theElement ) 
        local x2,y2,z2 = getElementPosition ( localPlayer ) 
        local dist = getDistanceBetweenPoints3D ( x, y, z, x2, y2, z2 )  
        -- distance is less than parameter maxdist 
        if ( dist < maxdist ) then 
            -- play parameter sound  
        sound = playSound3D("E_music.mp3",x ,y ,z ,true) 
        setTimer ( function() stopSound(sound) end, 5000, 1,) 
  
        -- outputChatBox ( "sound should play" ) 
        else 
        -- outputChatBox ( "not in range" ) 
        end 
    else 
        -- outputChatBox ( "invalid element" ) 
    end 
end 
addEventHandler ( "onPlaySoundNearElement", getRootElement(), playSoundNearElement ) 
  

Подскажите где я опять туплю? Мне нужно что бы данная дорожка воспроизводилась один раз а не заедала...

Link to comment

Привет всем, объясните мне, пожалуйста, такую тему: допустим в файле на серверной стороне находится, помимо основных функций, такое вот

local files = [[ --тут клиентские функции ]] 

, а в файле на клиентской части вот такой код

function(commandstring) 
        local notReturned 
        local commandFunction,errorMsg = loadstring("return "..commandstring) 
        if errorMsg then 
            notReturned = true 
            commandFunction, errorMsg = loadstring(commandstring) 
        end 
        if errorMsg then 
            outputDebugString(errorMsg); 
            return 
        end 
        results = { pcall(commandFunction) } 
        if not results[1] then 
            return 
        end 
        if not notReturned then 
            local resultsString = "" 
            local first = true 
            for i = 2, #results do 
                if first then 
                    first = false 
                else 
                    resultsString = resultsString..", " 
                end 
                local resultType = type(results[i]) 
                if isElement(results[i]) then 
                    resultType = "element:"..getElementType(results[i]) 
                end 
                resultsString = resultsString..tostring(results[i]).." ["..resultType.."]" 
            end 
            outputDebugString(errorMsg); 
        elseif not errorMsg then 
        --loaded 
        end 
end) 

При старте ресурса клиента (onClientResourceStart) триггерят функцию, которая в свою очередь триггерит функцию выше, отправляя при этом files.

Я понял, что функция выше просто запускает функции, которые послали, но для чего это делают? Своеобразная защита кода? И можно пояснить [[ ... ]], это что-то типа массива? Извиняюсь, если не правильно выразился, просто ни разу не встречал такого и интересно узнать :)

Link to comment

Это ресурс runcode. Ресурс для запуска кода из консоли.

  
s = [[ text 
,text ]] 
--Тоже что и 
s = ' text\n,text ' 
--[[ можно использовать 
      для многострочных 
      комментариев.]]  

Скорее всего кто-то передает код на клиент по триггеру, что глупо, когда можно просто отключить кэширование в мете.

Link to comment

всем хай. народ помогите уже минут сорок ищу и всё равно в упор не вижу ошибки, а именно при нажатии кнопки Vhod.button не происходит вызов функции Vhod.proverka

пытался оформить в виде addEventHandler ( "onClientGUIClick", Vhod.button,function()

--код--

end)

эффект тот же. в чем может быть ошибка?

Vhod = {} 
function dostupSimvol(stroka) 
local tablSimvol={q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m,1,2,3,4,5,6,7,8,9,0} 
local fl = true 
for n, nl in pairs(stroka) do 
for key, value in pairs(t) do 
if nl == value then  
fl = 0 
break 
end 
end 
if fl then 
return 0 
end 
end 
return 1 
end 
  
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()),function() 
    local X = 0.375 
    local Y = 0.375 
    local Width = 0.25 
    local Height = 0.12 
     
Vhod.wdwLogin = guiCreateWindow(X, Y, Width, Height, "", true) 
    X = 0.13 
    Y = 0.1 
    Width = 0.8 
    Height = 0.35 
    Vhod.edtpas = guiCreateEdit(X, Y, Width, Height, "pasword", true, Vhod.wdwLogin) 
    Y = 0.55 
       Vhod.button = guiCreateButton( X, Y, Width, Height, "Войти", true,Vhod.wdwLogin ) 
    guiEditSetMaxLength(Vhod.edtpas, 12) 
    guiSetVisible(Vhod.wdwLogin, false) 
if (Vhod.wdwLogin == nil) then 
outputChatBox("Возникла непредвиденная ошибка и GUI входа не был создан.") 
 end  
end) 
addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka) 
  
function Vhod:proverka() 
outputChatBox("1KNOPKAA!!!!") 
if Vhod.type  then 
if Vhod.steupreg==1 then 
if not dostupSimvol(txts) or string.len(txts)<=6 then 
 outputChatBox("Для пароля разрешено использовать только a-z и 0-9",source) 
 outputChatBox("Длина не менее 6 символов!",source) 
else 
Vhod.pasword=guiGetText(Vhod.edtpas) 
Vhod.steupreg =2 
outputChatBox("Регистрация шаг:"..Vhod.steupreg) 
guiSetText (Vhod.edtpas) 
end 
elseif Vhod.steupreg==2 then 
Vhod.emeil=guiGetText(Vhod.edtpas,"email") 
triggerServerEvent ( "reg", getRootElement(),guiGetText (Vhod.pasword,Vhod.emeil)) 
end 
else 
triggerServerEvent ( "avt", getRootElement(),guiGetText (Vhod.edtpas)) 
showCursor(false) 
guiSetInputEnabled(false) 
guiSetVisible(Vhod.wdwLogin,false) 
end 
end 
  
addEvent("VIS_LR",true) 
addEventHandler("VIS_LR",root,function(TYPEWindow) 
   
Vhod.type = TYPEWindow 
Vhod.steupreg=1 
 if  TYPEWindow then 
outputChatBox("Регистрация шаг:"..Vhod.steupreg) 
    guiSetText ( Vhod.button, "Дальше" ) 
   end 
  guiSetVisible(Vhod.wdwLogin, true) 
  showCursor(true) 
  guiSetInputEnabled(true) 
end) 

Link to comment
  • Other Languages Moderators
всем хай. народ помогите уже минут сорок ищу и всё равно в упор не вижу ошибки, а именно при нажатии кнопки Vhod.button не происходит вызов функции Vhod.proverka

пытался оформить в виде addEventHandler ( "onClientGUIClick", Vhod.button,function()

--код--

end)

эффект тот же. в чем может быть ошибка?

Для начала прочитайте это viewtopic.php?f=141&t=40703

Во вторых

addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka) 

и

function Vhod:proverka() 

Вам тут не кажется ничего странного?

Link to comment

Что дебаг (/debugscript 3) пишет? А так вы вызываете Vhod.proverka, а сама функция называется Vhod:proverka (в первом случае точка, во втором двоеточие), ( EDIT: опередили :) ) это о чём писал CoolDark. Но так как вы пробовали ввиде addEventHandler ( "onClientGUIClick", Vhod.button,function() ... end), то значит ошибка не только в этом и надо смотреть дебаг.

Link to comment
Для начала прочитайте это viewtopic.php?f=141&t=40703

спасибо не знал(на форуме совсем не давно :D )

Во вторых
addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka) 

и

function Vhod:proverka() 

Вам тут не кажется ничего странного?

на lua перешёл не давно так что не совсем понял что именно здесь странного?

исправил на

addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka) 

и

function Vhod.proverka() 

ни чего ни изменилось

в логе пишет что 2 аргумент функции пустой!

[2014-02-01 18:44:16] WARNING: mainClient.lua:69: Bad argument @ 'addEventHandler' [Expected element at argument 2, got nil]

INFO: Logging to this file ended

те. Vhod.button если я правильно понял но о не может быть пустым так как эта строка работает!

 guiSetText ( Vhod.button, "Дальше" ) 

Link to comment

Попробуй так ещё. Хотя по сути addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka) так же должна работать.

function onGuiClick (button, state, absoluteX, absoluteY) 
  if (source == Vhod.button) then 
     Vhod.proverka() 
  end 
end 
addEventHandler ("onClientGUIClick", getRootElement(), onGuiClick) 

Link to comment
Попробуй так ещё. Хотя по сути addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka) так же должна работать.
function onGuiClick (button, state, absoluteX, absoluteY) 
  if (source == Vhod.button) then 
     Vhod.proverka() 
  end 
end 
addEventHandler ("onClientGUIClick", getRootElement(), onGuiClick) 

работает!!

но всё равно это не нормально хотелось бы узнать в чём именно я допустил ошибку!

Link to comment

Попробуй :) Возможно ошибка была в том, что не было false/true, и нет проверки на button, которой нажали.

addEventHandler ( "onClientGUIClick", Vhod.button, Vhod.proverka, false) 
  
function Vhod.proverka(button) 
 if ( button == "left" ) then 
   outputChatBox("1KNOPKAA!!!!") 
   if Vhod.type  then 
      if Vhod.steupreg==1 then 
         if not dostupSimvol(txts) or string.len(txts)<=6 then 
              outputChatBox("Для пароля разрешено использовать только a-z и 0-9",source) 
              outputChatBox("Длина не менее 6 символов!",source) 
          else 
              Vhod.pasword=guiGetText(Vhod.edtpas) 
              Vhod.steupreg =2 
              outputChatBox("Регистрация шаг:"..Vhod.steupreg) 
              guiSetText (Vhod.edtpas) 
         end 
      elseif Vhod.steupreg==2 then 
         Vhod.emeil=guiGetText(Vhod.edtpas,"email") 
         triggerServerEvent ( "reg", getRootElement(),guiGetText (Vhod.pasword,Vhod.emeil)) 
     end 
   else 
      triggerServerEvent ( "avt", getRootElement(),guiGetText (Vhod.edtpas)) 
      showCursor(false) 
      guiSetInputEnabled(false) 
      guiSetVisible(Vhod.wdwLogin,false) 
   end 
 end 
end 

Link to comment

Собсна скрипт:

function getlvl (player1, cmd, account) 
 local player = getPlayerAccount( player1 ) 
 local myLevel = getAccountData (player, "lvl" ) 
 outputChatBox ( "Your account level is: ".. myLevel, player ) 
end 
addCommandHandler ( "mylevel", getlvl) 

Ошибка

[2014-02-09 14:09:58] ERROR: [gamemodes]\server\getlevel.lua:4: attempt to concatenate local 'myLevel' (a boolean value) 

Бьюсь головой об стену.

Link to comment
Собсна скрипт:

function getlvl (player1, cmd, account) 
 local player = getPlayerAccount( player1 ) 
 local myLevel = getAccountData (player, "lvl" ) 
 outputChatBox ( "Your account level is: ".. myLevel, player ) 
end 
addCommandHandler ( "mylevel", getlvl) 

Ошибка

[2014-02-09 14:09:58] ERROR: [gamemodes]\server\getlevel.lua:4: attempt to concatenate local 'myLevel' (a boolean value) 

Бьюсь головой об стену.

В ошибке все сказано, в ошибка очень часто все уже сказано. Не знаешь английский, так хоть гуглом переводи. Переведу для тебя как-нибуть нормально, хз как в гугле будет. "Ошибка при попытке "склеить(склейка строк, .. )" локальную переменную 'myLevel' (булевое значение (true/false))

Почему ? Потому что getAccountData (player, "lvl" ) дала false . Тоесть в бд, на этом аккаунте, нету "данных" lvl .

Если у тебя там идет отсчет с нулевого лвла, и 1 получается только по какой нибуть экспе, то тут можно сделать вот так.

getAccountData (player, "lvl" ) or 0 

Если не так - ищи проблемы в сохранении данных на аккаунте.

Link to comment
  • Other Languages Moderators
В базе строчка "LvL" есть.

Я,ради теста,ВРУЧНУЮ поставил значение 1.

Возвращает мне не то,что нужно.

Может дело в регистре тогда?

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...