Jump to content

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


Recommended Posts

И снова проблема :lol:

Есть вот такая функция на клиенте для показа всех игроков которые есть на сервере. И она работает, но только при первом запуске. В последующих показывает один и тот же результат даже если этих игроков уже нет. Как сделать, что бы она показывала то что есть сейчас, а не то что было?

function listPlayerInvait () 
    -- списко всех игроков 
    giuGroup6 = guiCreateWindow ( 400, 400, 300, 420, "Пригласить игрока", false ) 
    centerWindow ( giuGroup6 ) 
    guiSetAlpha ( giuGroup6, 1.0 ) 
    guiSetProperty ( giuGroup6 ) 
    guiWindowSetSizable ( giuGroup6, false ) 
    guiSetVisible ( giuGroup6, true ) 
    destroyElement ( row ) 
    destroyElement ( column ) 
    destroyElement ( playerList ) 
    local playerList = guiCreateGridList ( 20, 30, 260, 270, false, giuGroup6 ) 
    local column = guiGridListAddColumn( playerList, "Игроки", 0.94 ) 
    if ( column ) then 
        for id, player in ipairs(getElementsByType("player")) do 
            local row = guiGridListAddRow ( playerList ) 
            guiGridListSetItemText ( playerList, row, column, getPlayerName ( player ), false, false ) 
        end 
    end 
    giuButtomP2 = guiCreateButton ( 20, 315, 260, 35, "Пригласить", false, giuGroup6 ) 
    giuButtomP1 = guiCreateButton ( 20, 365, 260, 35, "Закрыть", false, giuGroup6 ) 
    addEventHandler ( "onClientGUIClick", giuButtomP1, openGui ) 
    addEventHandler ( "onClientGUIClick", giuButtomP2,  
    function () 
        local row, column = guiGridListGetSelectedItem ( playerList )   
        if ( row and column ) then 
            local pInvait = guiGridListGetItemText ( playerList, row, column ) 
            if pInvait ~= "" then 
                triggerServerEvent ( "ClientPlayerInvait", localPlayer, pInvait ) 
            else 
                outputChatBox ( "[Группа] Выберите игрока", 255, 0, 0, true ) 
            end 
        end 
    end, false ) 
end 

Link to comment

Если игрок вышел из сервера находишь в гридлисте и удаляешь, если игрок заходит то добавляешь строку.

События:

https://wiki.multitheftauto.com/wiki/OnClientPlayerJoin

https://wiki.multitheftauto.com/wiki/OnClientPlayerQuit

Также тебе стоит каждой строке и ячейке установить item data (через guiGridListSetItemData), чтобы искать по userdata, а не по нику игрока.

Вот функции для работы

guiGridListAddRow 
guiGridListRemoveRow 
guiGridListSetItemData 
guiGridListGetItemData 
  

Link to comment
  • 3 weeks later...

Еще такой вопрос. Хочется делать такую штуку. Создать ColCuboid и чтобы в нем все было так как есть, а за его пределами все было покрыто каким нибудь туманом. Такое возможно сделать?

Link to comment
  • 3 weeks later...

Доброго времени суток, есть у меня как у новичка пара вопросов, надеюсь, сильно не напрягу.

Суть такова: можно ли как-то задействовать в скриптах созданные через редактор карт элементы (которые, разумеется, сохранены в новую карту)?

Ну, допустим, расставил я в редакторе карт ботов в ночном клубе.

А можно ли, например, к этой карте добавить скрипт, который может присвоить им различные анимации?

Ну или как-то иначе их использовать - это не суть, главное, каким образом этого можно добиться и можно ли вообще? Хотя бы на примере одного простого элемента.

А, и ещё одно, могу ли я таким образом изменить уже записанные данные об элементе?

Ну, например, сделать ворота подвижными (менять их положение) или спрятать бота, переместив его в другое измерение.

Заранее спасибо. :)

Link to comment
  • 1 month later...

подскажите есть где мануальчики на русском по engineApplyShaderToWorldTexture ? есть желание наложить на тень под транспортом разноцветные текстурки типа неон и все такое, но ничего не понятно. есть где можно про это почитать или может кто накидает пример с комментариями?

Link to comment
  • 2 weeks later...

Привет. Есть некоторый отрезок(ось) в пространстве. Даны его начало, конец и повороты(на самом деле это ось обьекта, и есть его матрица). Нужно определить длину расстояния между центром отрезка и положением курсора на этом отрезке. В общем нужно спроецировать курсор на эту ось. Как решить?

Link to comment

2 MMK_033

Слабо разбираюсь в Lua, но данные из карты в скрипт перебрасываю следующим образом.

Интересным мне объектам в карте добавляю свой параметр. Напеример, animat. Строчка для педа может выглядеть так:

<ped id="ped (1)" model="281" animat="1" posX="2491.7" posY="-1667.5" posZ="13.34" rotX="0" rotY="0" rotZ="0" />  

Теперь переходим к скрипту. Например, в файл серверного скрипта прописываю такое:

local peds = {} -- задать ёмкость (простите мой Lua) 
addEventHandler("onResourceStart",resourceRoot, 
function() 
  peds = getElementsByType("ped") -- прочитать людей из карты .map 
  setTimer(function() 
    for i, object in ipairs(peds) do    -- сканировать все записи про людей 
      local anim = getElementData(object,"animat") -- на предмет наличия параметра animat 
      -- и выполнить действия согласно разнарядке 
      if anim == "1" then 
      setPedRotation(object,150) 
      setPedAnimation(object,"PAULNMAC","PnM_Argue2_A",-1,true,true,false) 
      elseif anim == "2" then 
      setPedRotation(object,270) 
      setPedAnimation(object,"DANCING","dance_loop",-1,true,true,true) 
      elseif anim == "3" then 
      setPedRotation(object,180) 
      setPedAnimation(object,"DANCING","dnce_M_b",-1,true,true,true) 
      end 
    end 
  end,4000,1) 
end)  

Link to comment

Вопрос о производительности. В дефолтной базе есть таблица с примерно 4000 записей. Сильно ли я сэкономлю ресурсы сервера если из 36 колонок 9 я объединю в одну с помощью JSON'а?

Link to comment
Вопрос о производительности. В дефолтной базе есть таблица с примерно 4000 записей. Сильно ли я сэкономлю ресурсы сервера если из 36 колонок 9 я объединю в одну с помощью JSON'а?

Скорее наоборот. Вообще зависит что за типы столбцов хотя бы. Если ты, например, объединишь 9 голонок smallint в JSON то от этого только хуже будет, потому что хранить ты их будешь в виде строки, например длиной 255 символов, что явно больше, да и выборка по этим ключам усложнит запрос.

Оптимизировать БД ты можешь разве что изменив тип данных на более лёгкий, к примеру если в поле хранится число от 0 до 4, то явно обычного int ему будет много.

В некоторых случаях будет лучше использовать enum или set, так как они работают на уровне битовой маски.

P.S. Да и вообще что за база? Если MySQL\PostgreSQL то всё это имеет смысл

Link to comment
Вообще зависит что за типы столбцов хотя бы.

P.S. Да и вообще что за база? Если MySQL\PostgreSQL то всё это имеет смысл

Стандартная база SQL (executeSQLQuery). Данные типа numeric, точнее double(несколько хэндлинг-настроек). Хотелось бы понять как повлияет на базу выборочные запросы нескольких столбцов, или всех сразу. Как я понял существенно скорость работы с базой не изменится?

Link to comment
  • 1 month later...
function loginHandler(username,password) 
    if source then 
        dbQuery(  
            function(qh) 
            -- результат в переменную result 
                local result = dbPoll( qh, -1, true ) 
                --если result имеет в себе что-то 
                if result then 
                    --считать колонки  
                    for column, value in pairs ( result ) do 
                        DBInf.DBuser = value["Username"]  
                        DBInf.DBpass = value["Password"] 
                        DBInf.DBuserID = value["UserID"] 
                    end 
                end 
                -- проверяем username и password на правильность 
                if (tostring(DBInf.DBuser) == tostring(username)) and (tostring(DBInf.DBpass) == tostring(password)) then 
                    -- игрок успешно залогинился, переходим к выбору персонажа 
                    triggerClientEvent("ChangeCharacters", getRootElement(), DBInf.DBuserID) 
                else 
                    -- если username или password неправильны, выводим игроку соответствующее сообщение 
                    triggerClientEvent("AuthERROR", getRootElement(), "Не верный Username или Password @2" ) 
                    triggerClientEvent("AuthView", getRootElement() ) 
                end 
            end, 
        SQL, "SELECT * FROM accounts WHERE  Username= ? and Password = ?", username, password ) 
    end          
end 

triggerClientEvent выводит всем игрокам на сервере. Как можно сделать так чтобы выводило лишь тому кто отправил запрос на функцию loginHandler?

Link to comment

https://wiki.multitheftauto.com/wiki/TriggerClientEvent

sendTo: The event will be sent to all players that are children of the specified element. By default this is the root element, and hence the event is sent to all players. If you specify a single player it will just be sent to that player. This argument can also be a table of player elements.

+

sourceElement: The element that is the source of the event.

На вики же все написано.

Link to comment

https://wiki.multitheftauto.com/wiki/TriggerClientEvent

sendTo: The event will be sent to all players that are children of the specified element. By default this is the root element, and hence the event is sent to all players. If you specify a single player it will just be sent to that player. This argument can also be a table of player elements.

+

sourceElement: The element that is the source of the event.

На вики же все написано.

Link to comment

Нажимаю на форму ввода (в любое место, даже на заголовок окна) т.е. не на кнопку, а событие onClientGUIClick все равно срабатывает. Как это отключить?

Решил проблему установив параметр getPropagated = false функции addEventHandler()

addEventHandler("onClientGUIClick", GUILogin.button[1], onClickBtnLogin, false)

было

addEventHandler("onClientGUIClick", GUILogin.button[1], onClickBtnLogin)

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...