Jump to content

¿Alguna idea? | Spawn de @50p


Alexs

Recommended Posts

Buenas tardes a todos,

Estaba editando el spawn de @50p (creo que era de él), pero me ha ocurrido algo realmente extraño. Montones de veces he realizado la misma edición, esto es, hacer que el menú aparezca en cuanto el jugador se loggee, pero esta vez el evento se gatilla hacia el cliente, sólo que el cliente, por algún motivo que no llego a comprender, no reacciona de ninguna manera.

Servidor (ver linea 117):

  
g_root = getRootElement( ); 
classGroups = { }; 
  
  
addEvent( "spawn_clientRequestSpawn", true ); 
addEventHandler( "spawn_clientRequestSpawn", g_root, 
    function( categoryIndex, classIndex, skinIndex ) 
        if skinIndex then 
            local class = classGroups[ categoryIndex ].classes[ classIndex ]; 
            local skin = class.skinMngr.skins[ skinIndex ]; 
            local spawn = true; 
            local spawned; 
            --[[if not classGroups[ cetegoryIndex ].owner then -- if there is NO owner of the clan/gang spawn player 
                spawn = true; 
            else -- if there IS owner of the clan/gang then check if he's member of the clan/gang 
                 
            end]] 
             
            if spawn then 
                if not class.team then 
                    class.team = createTeam( class.name, class.color.red, class.color.green, class.color.blue ); 
                end 
                 
                local plrTeam = getPlayerTeam( client ); 
                if ( ( plrTeam ) and ( plrTeam ~= class.team ) and ( countPlayersInTeam( plrTeam ) == 300 ) ) then 
                    destroyElement( plrTeam ); 
                end 
                 
                spawned = spawnPlayer( 
                    client, 
                    skin.spawnLoc.x, 
                    skin.spawnLoc.y, 
                    skin.spawnLoc.z, 
                    skin.spawnLoc.rot, 
                    skin.modelId, 
                    0, 0, 
                    class.team 
                ); 
            end 
             
            if spawned then 
                setElementData( client, "team", class.name ) 
                fadeCamera( client, true ); 
                setCameraTarget( client, client ); 
                setTimer( setCameraTarget, 200, 1, client, client ); 
                 
                triggerClientEvent( client, "spawn_SpawnedSuccessfully", client ); 
                 
                --setPlayerMoney( client, 500 ); 
                for _, weapon in ipairs( class.weaponMngr.weapons ) do 
                    giveWeapon( client, weapon.id, weapon.ammo, false ); 
                end 
                createBlipAttachedTo( client, 0, 2, class.color.red, class.color.green, class.color.blue ) 
            else 
                triggerClientEvent( client, "spawn_FailedToSpawn", client ); 
                if countPlayersInTeam( class.team ) == 0 then 
                    destroyElement( class.team ); 
                    class.team = nil; 
                end 
            end 
        end 
    end 
); 
  
addEventHandler( "onPlayerSpawn", g_root, 
    function ( ) 
     
    end 
); 
  
addEventHandler( "onPlayerWasted", g_root, 
    function( ) 
        fadeCamera( source, false, 4 ); 
        setTimer( requestMenu, 5000, 1, source ); 
        deleteAllPlayerBlips( source ) 
    end 
); 
  
function requestMenu( player ) 
    callClientFunc( player, "showSpawnMenu", true, true ); 
    callClientFunc( player, "classSelected" ); 
end 
  
  
addCommandHandler( "kill", 
    function( plr ) 
        killPed( plr ); 
    end 
) 
  
  
  
function preloadClassesInfo( ) 
    local groups = getElementsByType( "category" ); 
    for _, group in ipairs( groups ) do 
        table.insert( classGroups, Group:New( group ) ); 
    end 
end 
addEventHandler( "onResourceStart", getResourceRootElement(), preloadClassesInfo ) 
  
  
function deleteAllPlayerBlips(player) 
    local elements = getAttachedElements(player) 
    if (elements) then 
        for i, element in ipairs(elements) do 
            if (getElementType(element) == "blip") then 
                destroyElement(element) 
            end 
        end 
    end 
    print( "number of players in team: " .. tostring( countPlayersInTeam( getPlayerTeam( player ) ) ) ); 
end 
  
addEventHandler( "onPlayerQuit", g_root, function() deleteAllPlayerBlips(source) end ); 
  
--ESTO LO AÑADI YO 
addEventHandler( 'onPlayerLogin', root, 
    function( ) 
        triggerClientEvent( source, 'enableSpawn', source ) 
    end 
) 
  
------------------------------------------------------------------------------------------ 
------------------------------------------------------------------------------------------ 
function callClientFunc( player, funcName, ... ) 
    if #{ ... } ~= 0 then 
        triggerClientEvent( player, "_clientCallFunction", root, funcName, ... ) 
    else 
        triggerClientEvent( player, "_clientCallFunction", root, funcName ) 
    end 
end 
  
addEvent( "_serverCallFunction", true ) 
addEventHandler( "_serverCallFunction", root,  
    function( funcName, ... ) 
        _G[ funcName ](...) 
    end 
) 

Cliente (ver linea 130):

  
g_Me = getLocalPlayer( );
g_root = getRootElement( );
g_ResRoot = getResourceRootElement( );
 
screenSize = { guiGetScreenSize( ) };
 
--local stripHeight = .15 * (screenSize[ 2 ]*2);
 
letterBox = {
    stripHeight = screenSize[ 2 ] * .15,
    stripAlpha = .93, -- 0-1
    animLength = 01, -- seconds
    animStartTick = 0,
    animFinishTick = 0,
    keepAnimating = true,
   
    flyIn = function ( )
        letterBox.animStartTick = 0;
        addEventHandler( "onClientRender", g_root, animateLetterBox_flyIn );
        setTempPedRotating( true );
    end,
   
    flyOut = function ( )
        letterBox.animStartTick = 0;
        setTempPedRotating( false );
        removeEventHandler( "onClientRender", g_root, animateLetterBox_flyIn )
        addEventHandler( "onClientRender", g_root, animateLetterBox_flyOut );
    end,
}
 
local pedRot = 0;
 
 
allHUDElements = {
    "area_name",
    "radar",
    "vehicle_name",
}
 
iconWidths = {
[0] = 21,
[1] = 15,
[2] = 97,
[3] = 55,
[4] = 83,
[5] = 72,
[6] = 55,
[7] = 138,
[8] = 104,
[9] = 59,
[10] =40 ,
[11] =31 ,
[12] =41 ,
[14] =10 ,
[15] =71 ,
[16] =13 ,
[17] =10 ,
[18] =4 ,
[19] =17,
[22] =35 ,
[23] =50 ,
[24] =37 ,
[25] =75 ,
[26] =67 ,
[27] =66 ,
[28] =17 ,
[29] =35 ,
[30] =70 ,
[31] =71 ,
[32] =22 ,
[33] =75 ,
[34] =86 ,
[35] =74 ,
[36] =75 ,
[37] =19 ,
[38] =54 ,
[39] =8,
[42] = 14,
}
 
icons = {
[0] =  ":killmessages/icons/fist.png",
[1] =  ":killmessages/icons/brassknuckle.png",
[2] =  ":killmessages/icons/golfclub.png",
[3] =  ":killmessages/icons/nitestick.png",
[4] =  ":killmessages/icons/knifecur.png",
[5] =  ":killmessages/icons/bat.png",
[6] =  ":killmessages/icons/shovel.png",
[7] = ":killmessages/icons/poolcue.png",
[8] = ":killmessages/icons/katana.png",
[9] =  ":killmessages/icons/chnsaw.png",
[10] =  ":killmessages/icons/gun_dildo1.png",
[11] =  ":killmessages/icons/gun_dildo2.png",
[12] =  ":killmessages/icons/gun_vibe1.png",
[14] =  ":killmessages/icons/flowera.png",
[15] =  ":killmessages/icons/gun_cane.png",
[16] =  ":killmessages/icons/grenade.png",
[17] =  ":killmessages/icons/teargas.png",
[18] =  ":killmessages/icons/molotov.png",
[19] =  ":killmessages/icons/explosion.png",
[22] =  ":killmessages/icons/colt45.png",
[23] =  ":killmessages/icons/Silenced.png",
[24] =  ":killmessages/icons/desert_eagle.png",
[25] =  ":killmessages/icons/chromegun.png",
[26] =  ":killmessages/icons/sawnoff.png",
[27] =  ":killmessages/icons/shotgspa.png",
[28] =  ":killmessages/icons/micro_uzi.png",
[29] =  ":killmessages/icons/mp5lng.png",
[30] =  ":killmessages/icons/ak47.png",
[31] =  ":killmessages/icons/m4.png",
[32] =  ":killmessages/icons/tec9.png",
[33] =  ":killmessages/icons/cuntgun.png",
[34] =  ":killmessages/icons/sniper.png",
[35] =  ":killmessages/icons/rocketla.png",
[36] =  ":killmessages/icons/heatseek.png",
[37] =  ":killmessages/icons/flame.png",
[38] =  ":killmessages/icons/minigun.png",
[39] =  ":killmessages/icons/satchel.png",
[42] =  ":killmessages/icons/fireextinguisher.png",
};
 
 
classGroups = { };
 
classesInfo = { };
classesWeapons = { };
classesSkins = { };
 
--ESTO ERA EXACTAMENTE IGUAL, SOLO QUE UTILIZANDO 'onClientResourceStart'
addEvent( 'enableSpawn', true );
addEventHandler( 'enableSpawn', getResourceRootElement(),
    function ( )
        fadeCamera( true );
        setTimer( setCameraMatrix, 50, 1,
            1967.71, 1342.9, 26.63,
            2034.47, 1343.02, 20.01 );
           
        --letterBox.flyIn( );
       
        preloadClassesInfo( );
       
        createClassSelectionWnd( );
        createGroupSelectionWnd( );
        createClassDescriptionWnd( );
        createClassWeaponWnd( );
               
        --setTimer( createTempPed, 100, 1 );
       
        showCursor( true );
        showSpawnMenu( false, true );
        --showHUDComponents( allHUDElements );
    end
);
 
function createTempPed( model )
    -- 7474 - object id
    -- 8661
    local x, y, z = getWorldFromScreenPosition( screenSize[ 1 ] - gridList:Size(false) / 2 - 70, ( screenSize[ 2 ]/2) --[[/ 1.6 ) * .8]], 10 );
    local cX, cY, cZ = getCameraMatrix( );
    x, y, z = getWorldFromScreenPosition( screenSize[ 1 ] - gridList:Size(false) / 2 - 70, ( screenSize[ 2 ]/2 )--[[ / 1.6 ) * .8]], 10 )
    g_ground = createObject( 7474, x, y, z - 1.02, 0, 0, 90 );
    tempPed = createPed( 0 and model or 0, x, y, z );
    setPedRotation( tempPed, pedRot );
    setElementFrozen( tempPed, true );
    setPedAnimation( tempPed, "dancing", "dnce_m_b", -1, true, true, false )
    --setPedAnimation( tempPed, "cop_ambient", "Coplook_nod", -1, true, true, false )
   
    --setPedRotation( tempPed, 90 );
    setElementAlpha( g_ground, 0 );
    setTempPedRotating( true );
end
 
function destroyTempPed( )
    if tempPed then
        destroyElement( g_ground );
        destroyElement( tempPed );
        g_ground = nil;
        tempPed = nil;
    end
end
 
function setTempPedRotating( rotate )
    if ( ( rotate ) and ( not pedRotating ) ) then
        addEventHandler( "onClientRender", g_root, rotatePed );
        pedRotating = true;
    elseif ( not rotate ) then
        removeEventHandler( "onClientRender", g_root, rotatePed );
        pedRotating = nil;
    end
end
 
function rotatePed( )
    if tempPed then
        pedRot = pedRot + 1;
        setPedRotation( tempPed, pedRot );
    end
end
 
function preloadClassesInfo( )
    local groups = getElementsByType( "category" );
    for _, group in ipairs( groups ) do
        table.insert( classGroups, Group:New( group ) );
    end
end
 
 
function hideHUDComponents( components )
    for i, comp in pairs( components ) do
        showPlayerHudComponent( comp, false );
    end
    --showChat( false );
end
 
 
function showHUDComponents( components )
    for i, comp in pairs( components ) do
        showPlayerHudComponent( comp, true );
    end
    --showChat( true );
end
 
 
--addEventHandler( "onClientRender", getRootElement(),
    function animateLetterBox_flyIn ( )
       
        if letterBox.animStartTick == 0 then
            letterBox.animStartTick = getTickCount();
            letterBox.animFinishTick = letterBox.animStartTick + letterBox.animLength * 1000;
            letterBox.keepAnimating = true;
        end
       
        local stripH;
        local currentStripHeight = letterBox.stripHeight;
        if letterBox.keepAnimating then
            local currentTick = getTickCount();
           
            local percentage = ( ( letterBox.animLength * 1000 ) - ( letterBox.animFinishTick - currentTick ) ) / ( letterBox.animLength * 1000 );
                       
            currentStripHeight =  letterBox.stripHeight * percentage;
           
            if currentStripHeight > letterBox.stripHeight then
                currentStripHeight = letterBox.stripHeight;
                letterBox.keepAnimating = false;
            end
        end
       
        dxDrawRectangle( -1, -1, screenSize[ 1 ] + 1, currentStripHeight, tocolor( 0,0,0,255 * letterBox.stripAlpha ), false );
        dxDrawLine( -1, screenSize[ 2 ], screenSize[ 1 ] + 1, screenSize[ 2 ], tocolor( 0, 0, 0, 255 * letterBox.stripAlpha ), currentStripHeight*2, false );
       
    end
Link to comment
Cierto @MarkFlash, yo ya tuve un problema por poner solamente "root".

'root' es una definición mas resumida de getRootElement(), según Tomas.

Es una variable predefinida, yep.

Note: All resources have a predefined global variable called root that has the root element as value. The variable exists server side as well as client side.

Link to comment
  • Recently Browsing   0 members

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