Jump to content

Как взять переменную в сервере, чтобы передать в клиент?


Recommended Posts

Ато nil пишет

Серверный:

function FSHUD() 
FSstatus = getPedFightingStyle ( thePlayer ) 
FSstatus = setPedFightingStyle ( thePlayer, 6 ) 
end 
addEventHandler ( "onPlayerJoin", getRootElement(), FSHUD ) 

Клиентский:

function FSvisible () 
    local sWidth,sHeight = guiGetScreenSize() 
    local weaponID = getPedWeapon ( getLocalPlayer() ) 
    local weaponSlot = getSlotFromWeapon ( weaponID ) 
    if ( weaponSlot == 0 ) then 
        dxDrawText(tostring (FSstatus), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(0,0,0,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
        dxDrawText(tostring (FSstatus), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(255,255,255,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
    end 
    if ( weaponSlot == 0 ) then 
        dxDrawText(tostring (FSstatus), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(0,0,0,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
        dxDrawText(tostring (FSstatus), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(255,255,255,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
    end 
    if ( weaponSlot == 0 ) then 
        dxDrawText(tostring (FSstatus), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(0,0,0,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
        dxDrawText(tostring (FSstatus), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(255,255,255,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
    end 
  
     
end  
addEventHandler ("onClientRender", root, FSvisible ) 

c5e565d5c2a9.png

Link to comment

1.Твой код не верный:

thePlayer = nil

Тебе нужно юзать переменную source( источник события т.е игрок в данном случае )

2.Лучше через element data

function FSHUD( ) 
    setPedFightingStyle ( source, 6 ) 
    local FSstatus = getPedFightingStyle ( source ) 
    setElementData( source,"style",FSstatus ) 
end 
addEventHandler ( "onPlayerJoin",root, FSHUD ) 

function FSvisible ( ) 
    local sWidth,sHeight = guiGetScreenSize( ) 
    local weaponID = getPedWeapon ( localPlayer ) 
    local weaponSlot = getSlotFromWeapon ( weaponID ) 
    if ( weaponSlot == 0 ) then 
        dxDrawText( tostring ( getElementData( localPlayer,"style" ) ), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(0,0,0,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
        dxDrawText( tostring ( getElementData( localPlayer,"style" ) ), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(255,255,255,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
    end 
    if ( weaponSlot == 0 ) then 
        dxDrawText( tostring ( getElementData( localPlayer,"style" ) ), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(0,0,0,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
        dxDrawText( tostring ( getElementData( localPlayer,"style" ) ), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(255,255,255,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
    end 
    if ( weaponSlot == 0 ) then 
        dxDrawText( tostring ( getElementData( localPlayer,"style" ) ), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(0,0,0,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
        dxDrawText( tostring ( getElementData( localPlayer,"style" ) ), (213.0/800)*sWidth, (509.0/600)*sHeight, (284.0/800)*sWidth, (528.0/600)*sHeight,tocolor(255,255,255,255), (1.0/800)*sWidth,"arial","right","center",false,false,false) 
    end 
end  
addEventHandler ("onClientRender", root, FSvisible ) 

Обновил код

Link to comment
Что-то этот скрипт не динамичный. Установил другой стиль боя(другим скриптом), а цифру ту-же кажет, хотя стиль боя сменился.

Я думаю нужно понимать что ты пишешь в коде.

Дата элемента 'style' делается для игрока когда он входит на сервер.

function FSHUD( ) 
    setPedFightingStyle ( source, 6 ) 
    local FSstatus = getPedFightingStyle ( source ) 
    setElementData( source,"style",FSstatus ) 
end 
addEventHandler ( "onPlayerJoin",root, FSHUD ) 

Дополнение к коду.

Установил другой стиль боя(другим скриптом)

Вызывай из другого ресурса функцию setPedFightingStyle.

addEvent( "onPedFightingStyleChange",true ) 
  
  
_setPedFightingStyle = setPedFightingStyle 
function setPedFightingStyle ( source, numb ) 
    if isElement( source ) and type( numb ) == 'number' then 
        local t = { [4] = true,[5] = true,[6] = true,[7] = true,[15] = true,[16] = true } 
        if t[ numb ] then 
            triggerEvent( "onPedFightingStyleChange",source,getPedFightingStyle( source ),numb ) 
            return _setPedFightingStyle( source,numb ) 
        end 
    end 
    return false 
end 
  
addEventHandler( "onPedFightingStyleChange",root, 
    function( old,new ) 
        if getElementType( source ) == 'player' then 
            setElementData( source,"style",new ) 
        end 
    end 
)    

Полный код.

addEvent( "onPedFightingStyleChange",true ) 
  
  
_setPedFightingStyle = setPedFightingStyle 
function setPedFightingStyle ( source, numb ) 
    if isElement( source ) and type( numb ) == 'number' then 
        local t = { [4] = true,[5] = true,[6] = true,[7] = true,[15] = true,[16] = true } 
        if t[ numb ] then 
            triggerEvent( "onPedFightingStyleChange",source,getPedFightingStyle( source ),numb ) 
            return _setPedFightingStyle( source,numb ) 
        end 
    end 
    return false 
end 
  
function FSHUD( ) 
    setPedFightingStyle ( source, 6 ) 
end 
addEventHandler ( "onPlayerJoin",root, FSHUD ) 
  
addEventHandler( "onPedFightingStyleChange",root, 
    function( old,new ) 
        if getElementType( source ) == 'player' then 
            setElementData( source,"style",new ) 
        end 
    end 
)    

Что тут трудного? :)

Link to comment

Я и вызывал c помощью этих - https://community.multitheftauto.com/index.php?p= ... ails&id=75 и https://community.multitheftauto.com/index.php?p= ... ls&id=3140 а я говорю к примеру юзаю ресурс Dynamic Fight(вторая ссылка) - скрипт меняет стиль боя, но на GUI это не показано.

Вот сам ресурс http://narod.ru/disk/39612441001/cw_hud.zip.html

Link to comment

Установил другой стиль боя(другим скриптом)

Вызывай из другого ресурса функцию setPedFightingStyle.

Через exports или call

Код .. ресурса.

addCommandHandler( "set_style", 
    function( source,_,num )  
        exports['cw_hud']:setPedFightingStyle ( source, tonumber( num ) ) 
    end 
)    

И ещё в твоём ресурсе ( cw_hud ) должен быть экспорт функции ( setPedFightingStyle ) в мете.

Я только-что проверил у меня всё работает ..

Link to comment

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

есть ли возможность записать значение переменной из getPedFightingStyle и передать в переменную клиентского скрипта.

Link to comment
И ещё в твоём ресурсе ( cw_hud ) должен быть экспорт функции ( setPedFightingStyle ) в мете.

Я только-что проверил у меня всё работает ..

так?

<export function="setPedFightingStyle" type="server"/> 

Вообще стиль не отображает

http://narod.ru/disk/39668692001/cw_hud.zip.html (еще и вантедлевел добавил до кучи :) )

Link to comment
Ты клиентские функции юзаешь на сервере и серверные на клиенте ...

Прочти эту тему

Путаю бывает и статью эту читал. а толку.

Вот смотри к примеру кусок из fstyle(в комьюнити есть):

function getPlayerFightStyle ( thePlayer, commandName ) 
  
        local playerstyle = getPlayerFightingStyle ( thePlayer )   -- store the fighting style in a variable 
        outputChatBox ( tostring(playerstyle), thePlayer )         -- output it to the player 
end 
addCommandHandler ( "style", getPlayerFightStyle ) 

Этот скрипт при команде style берет номер и выводит в консоль.

Так вот мне надо так чтобы эту цифру куда-нить записывало и чотбы ее можно было отобразить в клиенте. И чтобы обновлялся каждые 500 мс.

Link to comment
Установил другой стиль боя(другим скриптом
Вызывай из другого ресурса функцию setPedFightingStyle.

Через exports или call

Код .. ресурса.

addCommandHandler( "set_style", 
    function( source,_,num )  
        exports['cw_hud']:setPedFightingStyle ( source, tonumber( num ) ) 
    end 
)    

Ладно 3 раз ещё раз напишу.

addCommandHandler( "set_style", 
    function( source,_,num )  
        exports['cw_hud']:setPedFightingStyle ( source, tonumber( num ) ) 
    end 
)    

При вызове этой функции ( setPedFightingStyle) будет срабатывать событие , которое сделает игроку дату , которое ты ввёл в команде set_style .

Ну и естественно в твоём худе будет виден стиль борьбы.

Так что замени:

function getPlayerFightStyle ( thePlayer, commandName ) 
  
        local playerstyle = getPlayerFightingStyle ( thePlayer )   -- store the fighting style in a variable 
        outputChatBox ( tostring(playerstyle), thePlayer )         -- output it to the player 
end 
addCommandHandler ( "style", getPlayerFightStyle ) 

На это:

addCommandHandler( "set_style", 
    function( source,_,num )  
        exports['cw_hud']:setPedFightingStyle ( source, tonumber( num ) ) 
    end 
)    

Путаю бывает и статью эту читал. а толку.

В том то и дело , что статью ты не читал.

Link to comment

сервер

setTimer( 
    function() 
        local tPlayers = getElementsByType('player') 
        for _, uPlayer in ipairs(tPlayers) do 
            setElementData( uPlayer, 'fightingStyle', getPedFightingStyle(uPlayer), true ) 
        end 
    end, 
    500, 
    0 
) 

клиент

function FSvisible () 
    local FSstatus = getElementData( localPlayer, 'fightingStyle' ) or 4 
    -- ... 

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