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