CapY Posted August 25, 2011 Share Posted August 25, 2011 (edited) I got a lot of problems with scripts on my server when moved on 1.1 i was fixing it for 1-2hours , but nothing.. So here it is : Login_Panel -- Login handling function loginPlayer(username,password,enableKickPlayer,attemptedLogins,maxLoginAttempts) if not (username == "") then if not (password == "") then local account = getAccount ( username, password ) if ( account ~= false ) then logIn (source, account, password) outputChatBox ("#0000FF* #FFFFFFYou have sucessfully logged in!",source,255,255,255,true) triggerClientEvent (source,"hideLoginWindow",getRootElement()) else if enableKickPlayer == true then if (attemptedLogins >= maxLoginAttempts-1) then outputChatBox ("#0000FF* #FFFFFFError! Wrong username and/or password!",source,255,255,255,true) setTimer(outputChatBox,500,1,"#0000FF* #FFFFFFWarning! Maximum login attempts reached! [#008AFF"..attemptedLogins+1 .."/"..maxLoginAttempts.."#FFFFFF]",source,255,255,255,true) setTimer(outputChatBox,1000,1,"#0000FF* #FFFFFFYou will be kicked in 5 seconds!",source,255,255,255,true) setTimer(kickPlayer,5000,1,source,"Failed to login") else outputChatBox ("#0000FF* #FFFFFFError! Wrong username and/or password!",source,255,255,255,true) setTimer(outputChatBox,500,1,"#0000FF* #FFFFFFLogin attempts: [#008AFF"..attemptedLogins+1 .."/"..maxLoginAttempts.."#FFFFFF]",source,255,255,255,true) triggerClientEvent(source,"onRequestIncreaseAttempts",source) end else outputChatBox ("#0000FF* #FFFFFFError! Wrong username and/or password!",source,255,255,255,true) end end else outputChatBox ("#0000FF* #FFFFFFError! Please enter your password!",source,255,255,255,true) end else outputChatBox ("#0000FF* #FFFFFFError! Please enter your username!",source,255,255,255,true) end end -- Registration here function registerPlayer(username,password,passwordConfirm) if not (username == "") then if not (password == "") then if not (passwordConfirm == "") then if password == passwordConfirm then local account = getAccount (username,password) if (account == false) then local accountAdded = addAccount(tostring(username),tostring(password)) if (accountAdded) then triggerClientEvent(source,"hideRegisterWindow",getRootElement()) outputChatBox ("#0000FF* #FFFFFFYou have sucessfuly registered! [username: #ABCDEF" .. username .. " #FF0000| #FFFFFFPassword: #ABCDEF" .. password .. "#FFFFFF]",source,255,255,255,true ) setTimer(outputChatBox,800,1,"#0000FF* #FFFFFFYou can now login with your new account.",source,255,255,255,true ) else outputChatBox ("#0000FF* #FFFFFFAn unknown error has occured! Please choose a different username/password and try again.",source,255,255,255,true ) end else outputChatBox ("#0000FF* #FFFFFFError! An account with this username already exists!",source,255,255,255,true ) end else outputChatBox ("#0000FF* #FFFFFFError! Passwords do not match!",source,255,255,255,true) end else outputChatBox ("#0000FF* #FFFFFFError! Please confirm your password!",source,255,255,255,true) end else outputChatBox ("#0000FF* #FFFFFFError! Please enter a password!",source,255,255,255,true) end else outputChatBox ("#0000FF* #FFFFFFError! Please enter a username you would like to register with!",source,255,255,255,true) end end -- Auto-login handling function autologinPlayer(username,password) if not (username == "") then if not (password == "") then local account = getAccount ( username, password ) if not (account == false) then logIn (source, account, password) outputChatBox("#0000FF* #FFFFFFYou have been automatically logged in.",source,255,255,255,true) setTimer(outputChatBox,1000,1,"#0000FF* #FFFFFFTo disable auto-login, use #ABCDEF/disableauto.",source,255,255,255,true) triggerClientEvent ( source, "hideLoginWindow", getRootElement()) else outputChatBox ("#FF0000* #FFFFFFAuto-login error - Username & password do not match",source,255,255,255,true) end else outputChatBox ("#FF0000* #FFFFFFAuto-login error - Failed to retrieve password",source,255,255,255,true) end else outputChatBox ("#FF0000* #FFFFFFAuto-login error - Failed to retrieve username",source,255,255,255,true) end end -- When the player logs out, trigger the client event to check if the login panel will request them to login again function logoutHandler() triggerClientEvent(source,"onRequestDisplayPanel",source) end addEventHandler("onPlayerLogout",getRootElement(),logoutHandler) -- Get the server's name function getData() local sName = string.gsub(getServerName()," ","") triggerClientEvent(source,"onGetServerData",getRootElement(),sName) end addEvent("onRequestLogin",true) addEvent("onRequestRegister",true) addEvent("onRequestAutologin",true) addEvent("onClientLoginLoaded",true) addEventHandler("onRequestLogin",getRootElement(),loginPlayer) addEventHandler("onRequestRegister",getRootElement(),registerPlayer) addEventHandler("onRequestAutologin",getRootElement(),autologinPlayer) addEventHandler("onClientLoginLoaded",getRootElement(),getData) WARNING: login_panel\loginpanel_server.lua:49: Access denied @ 'addAccount Rocket Cars --[[Version 1.1 Changes 1. When a player leaves his vehicle while using boost the rocket is deactivated, meter closes, and resuming acceleration on a vehicle will not activate rocket automaticly 2. Smoke is now serverside --]] addEvent ( "kill", true ) addEventHandler ( "onClientResourceStart", getResourceRootElement ( getThisResource() ), function() if getLocalPlayer() then bindKey ( "lshift", "down", ignition ) bindKey ( "lshift", "up", kill ) local sx, sy = guiGetScreenSize() fuelGauge = guiCreateProgressBar ( sx/4, sy/24, sx/2, sy/42, false ) guiSetVisible ( fuelGauge, false ) guiProgressBarSetProgress ( fuelGauge, 100 ) outputChatBox ( "Keys bound", 255, 255, 255 ) end end ) function ignition ( player ) if isPedInVehicle ( getLocalPlayer() ) then if getVehicleController ( getPedOccupiedVehicle ( getLocalPlayer() ) ) == getLocalPlayer() then if isVehicleOnGround ( getPedOccupiedVehicle ( getLocalPlayer() ) ) == true then if getAnalogControlState ( "accelerate" ) == 1 then if fuelAmmount > 0 then initiate = addEventHandler ( "onClientRender", getRootElement(), rocketBoost, getLocalPlayer() ) if initiate then guiSetVisible ( fuelGauge, true ) if fuelAmmount > 0 then triggerServerEvent ( "createSmoke", getLocalPlayer() ) smokeGenerator = "true" else if smokeGenerator then triggerServerEvent ( "killSmoke", getLocalPlayer() ) smokeGenerator = nil end end end end end end end end end function kill ( player ) if isPedInVehicle ( getLocalPlayer() ) then if getVehicleController ( getPedOccupiedVehicle ( getLocalPlayer() ) ) == getLocalPlayer() then removeEventHandler ( "onClientRender", getRootElement(), rocketBoost, player ) guiSetVisible ( fuelGauge, false ) if smokeGenerator then triggerServerEvent ( "killSmoke", getLocalPlayer() ) smokeGenerator = nil if guiGetVisible ( fuelGauge ) == true then guiSetVisible ( fuelGauge, false ) end end end end end fuelAmmount = 9999999999999 boost = 1.01--default value subtractor = 3--default value function rocketBoost ( player ) if isPedInVehicle ( getLocalPlayer() ) then if getVehicleController ( getPedOccupiedVehicle ( getLocalPlayer() ) ) == getLocalPlayer() then if isVehicleOnGround ( getPedOccupiedVehicle ( getLocalPlayer() ) ) == true then if getAnalogControlState ( "accelerate" ) == 1 then if fuelAmmount > 0 then if dankSetting == "low" then boost = 1.01 subtractor = 3 elseif dankSetting == "medium" then boost = 1.03 subtractor = 6 elseif dankSetting == "high" then boost = 1.05 subtractor = 9 end local velX, velY, velZ = getElementVelocity ( getPedOccupiedVehicle ( getLocalPlayer() ) ) injectFuel = setElementVelocity ( getPedOccupiedVehicle ( getLocalPlayer() ), velX * boost, velY * boost, velZ ) fuelAmmount = fuelAmmount - subtractor guiProgressBarSetProgress ( fuelGauge, fuelAmmount/100 ) else local x, y = guiGetScreenSize() dxDrawText ( "Rocket Fuel Tank Empty", x/4, y/4 ) if smokeGenerator then triggerServerEvent ( "killSmoke", getLocalPlayer() ) smokeGenerator = nil end if getKeyState ( "lshift" ) == true then if fuelAmmount <= 0 then removeEventHandler ( "onClientRender", getRootElement(),rocketBoost, getLocalPlayer() ) unbindKey ( "lshift", "down", ignition ) setTimer ( restoreFuel, 10, 1 ) addEventHandler ( "onClientRender", getRootElement(), restoreFuelCheck ) end end end end end end end end addCommandHandler ( "rocket", function ( player, number ) if number == "1" then dankSetting = "low" outputChatBox ( "Rocket velocity set to #00FF00low", 255, 255, 255, true ) elseif number == "2" then dankSetting = "medium" outputChatBox ( "Rocket velocity set to #00FF00medium", 255, 255, 255, true ) elseif number == "3" then dankSetting = "high" outputChatBox ( "Rocket velocity set to #00FF00high", 255, 255, 255, true ) elseif number == nil then outputChatBox ( "You must specify either 1 2 or 3", 255, 255, 255 ) else outputChatBox ( "Invalid Number; use 1 2 or 3", 255, 255, 255 ) end end ) addEventHandler ( "onClientPlayerVehicleExit", getRootElement(), function() if getAnalogControlState ( "accelerate" ) == 1 then removeEventHandler ( "onClientRender", getRootElement(), rocketBoost, player ) guiSetVisible ( fuelGauge, false ) if smokeGenerator then triggerServerEvent ( "killSmoke", getLocalPlayer() ) smokeGenerator = nil end end end ) addEventHandler ( "kill", getRootElement(), kill ) WARNING: rocketcars\rocket_Client.lua:24: Bad argument @ ' addEventHandler ' [Expected bool at argument 4, got none] Local Chat chat_range=100 addEventHandler("onPlayerJoin",getRootElement(), function () bindKey(source,"y","down","chatbox","Local") end) addEventHandler("onResourceStart",getResourceRootElement(getThisResource()), function () for index, player in pairs(getElementsByType("player")) do bindKey(player,"y","down","chatbox","Local") end end) function isPlayerInRangeOfPoint(player,x,y,z,range) local px,py,pz=getElementPosition(player) return ((x-px)^2+(y-py)^2+(z-pz)^2)^0.5<=range end function onChat(player,_,...) local px,py,pz=getElementPosition(player) local msg = table.concat({...}, " ") local nick=getPlayerName(player) local r,g,b = getTeamColor(getPlayerTeam(player)) for _,v in ipairs(getElementsByType("player")) do if isPlayerInRangeOfPoint(v,px,py,pz,chat_range) then outputChatBox("(Local) "..nick..": "..msg,v,r,g,b,true) end end end addCommandHandler("Local",onChat) WARNING : near\local_chat.lua:24: Bad argument @ 'getTeamColor' Edited August 26, 2011 by Guest Link to comment
CapY Posted August 25, 2011 Author Share Posted August 25, 2011 And this : Rampveh local gRoot = getRootElement() local g_Root = gRoot local gMe = getLocalPlayer() local gResourceRoot = getResourceRootElement(getThisResource()) local theRamps = {} addEvent ( "vehicleramps_SpawnRamp", true ) addEventHandler ( "vehicleramps_SpawnRamp", gRoot, function ( mode, returnedData ) --outputChatBox ( "A RAMP WAS MADE BY " .. getPlayerName(source) ) if ( theRamps[source] ) then --outputChatBox ( "Destroying the ramps table" ) destroyElement(theRamps[source]) theRamps[source] = false end local parentUnit = createElement("myRamps" .. getPlayerID(source)) theRamps[source] = parentUnit if ( mode == "1" ) then if ( #returnedData == 6 ) then spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], returnedData[4], returnedData[5], returnedData[6], 1632 ) end elseif ( mode == "1s" ) then spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], 0, 0, 0, 1632 ) spawnRamp ( source, returnedData[4], returnedData[5], returnedData[6], 0, 0, 90, 1632 ) spawnRamp ( source, returnedData[7], returnedData[8], returnedData[9], 0, 0, 180, 1632 ) spawnRamp ( source, returnedData[10], returnedData[11], returnedData[12], 0, 0, 270, 1632 ) elseif ( mode == "2" ) then if ( #returnedData == 9 ) then spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], returnedData[7], returnedData[8], returnedData[9], 1632 ) spawnRamp ( source, returnedData[4], returnedData[5], returnedData[6], returnedData[7], returnedData[8], returnedData[9], 1632 ) end elseif ( mode == "3" ) then if ( #returnedData == 9 ) then local thisRamp = spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], returnedData[7], returnedData[8], returnedData[9], 1632 ) local rx, ry, rz = getElementRotation ( thisRamp ) spawnRamp ( source, returnedData[4], returnedData[5], returnedData[6], rx + 22, returnedData[8], returnedData[9], 1632 ) end elseif ( mode == "5" ) then if ( #returnedData == 6 ) then spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], 0, 0, returnedData[6], 13592 ) end elseif ( mode == "6" ) then if ( #returnedData == 6 ) then spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], 0, 0, returnedData[6], 13641 ) end elseif ( mode == "custom" ) then if ( #returnedData == 7 ) then spawnRamp ( source, returnedData[1], returnedData[2], returnedData[3], 0, 0, returnedData[6], returnedData[7] ) end end end ) addEventHandler ( "onClientResourceStart", gResourceRoot, function(name) --outputChatBox ( "Client Script Started" ) outputChatBox ( "Client Script Started" ) bindKey ( "1", "down", workOutRamps, 1 ) bindKey ( "2", "down", workOutRamps, 2 ) bindKey ( "3", "down", workOutRamps, 3 ) bindKey ( "5", "down", workOutRamps, 5 ) bindKey ( "6", "down", workOutRamps, 6 ) end) function workOutRamps(mode) local playerVehicle = getPedOccupiedVehicle(getLocalPlayer()) if ( playerVehicle ) then local PV = getVehicleController(playerVehicle) if ( PV ~= getLocalPlayer() ) then outputChatBox ( "Your not the driver!" ) return end if ( theRamps[gMe] ) then --outputChatBox ( "Destroying the ramps table" ) destroyElement(theRamps[gMe]) theRamps[gMe] = false end local parentUnit = createElement("myRamps" .. getPlayerID(gMe)) theRamps[gMe] = parentUnit local distance = 20 local returnedData = {} local vehX, vehY, vZ = getElementPosition(playerVehicle) local rotX, rotY, rotZ = getElementRotation(playerVehicle) if ( mode == "1" ) then if ( getKeyState("lshift") ) then local ramp1X, ramp1Y = vehX + distance*math.cos(math.rad(rotZ+90)), vehY + distance*math.sin(math.rad(rotZ+130)) local ramp1Z = getGroundForCoords(ramp1X, ramp1Y, vZ) local ramp2X, ramp2Y = ramp1X+5.5, ramp1Y --vehX + distance*math.cos(math.rad(rotZ+74.5)), vehY + distance*math.sin(math.rad(rotZ+90)) local ramp2Z = ramp1Z --getGroundForCoords(ramp2X, ramp2Y, vZ) local ramp3X, ramp3Y = ramp1X, ramp1Y+5.5 --vehX + distance*math.cos(math.rad(rotZ+90)), vehY + distance*math.sin(math.rad(rotZ+90)) + 5.5 local ramp3Z = ramp1Z --getGroundForCoords(ramp3X, ramp3Y, vZ) local ramp4X, ramp4Y = ramp1X-5.5, ramp1Y --vehX + distance*math.cos(math.rad(rotZ+90)) - 5.5, vehY + distance*math.sin(math.rad(rotZ+90)) local ramp4Z = ramp1Z --getGroundForCoords(ramp4X, ramp4Y, vZ) ramp1Y = ramp1Y - 5.5 returnedData[1] = ramp1X returnedData[2] = ramp1Y returnedData[3] = ramp1Z + 1 returnedData[4] = ramp2X returnedData[5] = ramp2Y returnedData[6] = ramp2Z + 1 returnedData[7] = ramp3X returnedData[8] = ramp3Y returnedData[9] = ramp3Z + 1 returnedData[10] = ramp4X returnedData[11] = ramp4Y returnedData[12] = ramp4Z + 1 spawnRamp ( gMe, returnedData[1], returnedData[2], returnedData[3], 0, 0, 0, 1632 ) spawnRamp ( gMe, returnedData[4], returnedData[5], returnedData[6], 0, 0, 90, 1632 ) spawnRamp ( gMe, returnedData[7], returnedData[8], returnedData[9], 0, 0, 180, 1632 ) spawnRamp ( gMe, returnedData[10], returnedData[11], returnedData[12], 0, 0, 270, 1632 ) triggerServerEvent ( "vehicleramps_PlayerSpawnedRamp", getLocalPlayer(), mode .. "s", returnedData ) setElementPosition ( playerVehicle, ramp1X, ramp1Y, ramp1Z+3 ) setElementRotation ( playerVehicle, 0, 0, 0 ) setElementVelocity ( playerVehicle, 0, 0, 0 ) setElementVelocity ( playerVehicle, 0, 0, 0 ) else local ramp1X, ramp1Y = vehX + distance*math.cos(math.rad(rotZ+90)), vehY + distance*math.sin(math.rad(rotZ+90)) local ramp1Z = getGroundForCoords(ramp1X, ramp1Y, vZ) if ( doneOnce ) then if ( lastx == ramp1X ) then if ( lasty == ramp1Y ) then ramp1Z = ramp1Z - 0.78579690039 end else doneOnce = false end else doneOnce = true end lastx = ramp1X lasty = ramp1Y returnedData[1] = ramp1X returnedData[2] = ramp1Y returnedData[3] = ramp1Z + 1 returnedData[4] = rotX returnedData[5] = rotY returnedData[6] = rotZ spawnRamp ( gMe, returnedData[1], returnedData[2], returnedData[3], returnedData[4], returnedData[5], returnedData[6], 1632 ) triggerServerEvent ( "vehicleramps_PlayerSpawnedRamp", getLocalPlayer(), mode, returnedData ) end elseif ( mode == "2" ) then local ramp1X, ramp1Y = vehX + distance*math.cos(math.rad(rotZ+83)), vehY + distance*math.sin(math.rad(rotZ+83)) local ramp2X, ramp2Y = vehX + distance*math.cos(math.rad(rotZ+95)), vehY + distance*math.sin(math.rad(rotZ+95)) local ramp1Z = getGroundForCoords(ramp1X, ramp1Y, vZ) local ramp2Z = getGroundForCoords(ramp1X, ramp1Y, vZ) if ( doneOnce ) then if ( lastx == ramp1X ) then if ( lasty == ramp1Y ) then ramp1Z = ramp1Z - 0.78579690039 end else doneOnce = false end else doneOnce = true end lastx = ramp1X lasty = ramp1Y returnedData[1] = ramp1X returnedData[2] = ramp1Y returnedData[3] = ramp1Z + 1 returnedData[4] = ramp2X returnedData[5] = ramp2Y returnedData[6] = ramp2Z + 1 returnedData[7] = rotX returnedData[8] = rotY returnedData[9] = rotZ spawnRamp ( gMe, returnedData[1], returnedData[2], returnedData[3], returnedData[7], returnedData[8], returnedData[9], 1632 ) spawnRamp ( gMe, returnedData[4], returnedData[5], returnedData[6], returnedData[7], returnedData[8], returnedData[9], 1632 ) triggerServerEvent ( "vehicleramps_PlayerSpawnedRamp", getLocalPlayer(), mode, returnedData ) elseif ( mode == "3" ) then local ramp1X, ramp1Y = vehX + distance*math.cos(math.rad(rotZ+90)), vehY + distance*math.sin(math.rad(rotZ+90)) local ramp2X, ramp2Y = vehX + (distance+5)*math.cos(math.rad(rotZ+90)), vehY + (distance+5)*math.sin(math.rad(rotZ+90)) local ramp1Z = getGroundForCoords(ramp1X, ramp1Y, vZ) local ramp2Z = getGroundForCoords(ramp1X, ramp1Y, vZ) if ( doneOnce ) then if ( lastx == ramp1X ) then if ( lasty == ramp1Y ) then ramp1Z = ramp1Z - 0.78579690039 end else doneOnce = false end else doneOnce = true end lastx = ramp1X lasty = ramp1Y returnedData[1] = ramp1X returnedData[2] = ramp1Y returnedData[3] = ramp1Z + 1 returnedData[4] = ramp2X returnedData[5] = ramp2Y returnedData[6] = ramp2Z + 4.5 returnedData[7] = rotX returnedData[8] = rotY returnedData[9] = rotZ local thisRamp = spawnRamp ( gMe, returnedData[1], returnedData[2], returnedData[3], returnedData[7], returnedData[8], returnedData[9], 1632 ) local rx, ry, rz = getElementRotation ( thisRamp ) spawnRamp ( gMe, returnedData[4], returnedData[5], returnedData[6], rx + 22, returnedData[8], returnedData[9], 1632 ) triggerServerEvent ( "vehicleramps_PlayerSpawnedRamp", getLocalPlayer(), mode, returnedData ) elseif ( mode == "5" ) then local ramp1X, ramp1Y = vehX + distance*math.cos(math.rad(rotZ+90)), vehY + distance*math.sin(math.rad(rotZ+115)) local ramp1Z = getGroundForCoords(ramp1X, ramp1Y, vZ) if ( doneOnce ) then if ( lastx == ramp1X ) then if ( lasty == ramp1Y ) then ramp1Z = ramp1Z - 0.78579690039 end else doneOnce = false end else doneOnce = true end lastx = ramp1X lasty = ramp1Y returnedData[1] = ramp1X returnedData[2] = ramp1Y returnedData[3] = ramp1Z + 9 returnedData[4] = rotX returnedData[5] = rotY returnedData[6] = rotZ - 90 spawnRamp ( gMe, returnedData[1], returnedData[2], returnedData[3], 0, 0, returnedData[6], 13592 ) triggerServerEvent ( "vehicleramps_PlayerSpawnedRamp", getLocalPlayer(), mode, returnedData ) elseif ( mode == "6" ) then local ramp1X, ramp1Y = vehX + distance*math.cos(math.rad(rotZ+90)), vehY + distance*math.sin(math.rad(rotZ+90)) local ramp1Z = getGroundForCoords(ramp1X, ramp1Y, vZ) if ( doneOnce ) then if ( lastx == ramp1X ) then if ( lasty == ramp1Y ) then ramp1Z = ramp1Z - 0.78579690039 end else doneOnce = false Link to comment
Oz. Posted August 26, 2011 Share Posted August 26, 2011 https://wiki.multitheftauto.com/wiki/Scr ... troduction You're asking for someone to debug your entire server for free...? Have you ever tried just sticking with something by yourself and working it out on your own, rather than spamming up the community forums and waiting for someone to do it for you? It's much more satisfying, and you might actually learn something. Link to comment
CapY Posted August 26, 2011 Author Share Posted August 26, 2011 Do you think im stupid or ? I dont need your lessons . Link to comment
Slayer Posted August 26, 2011 Share Posted August 26, 2011 SV has always output that error. Link to comment
Oz. Posted August 26, 2011 Share Posted August 26, 2011 Yes, I'm sorry, I do think you're stupid, but I'm trying to be polite about it. The fact that you've posted here with every single problem you've ever encountered instead of fixing them yourself, and then responding to valid criticism of that behaviour with "Do you think I'm stupid or ?" kind of supports my observation. The MTA Community is not your slave, it is not here to script your server for you or fix all of your scripting mistakes. I think everyone - including yourself - would be a lot happier if you used some initiative and learned how to script properly instead of incessantly spamming the forums. Fair enough? Link to comment
CapY Posted August 26, 2011 Author Share Posted August 26, 2011 You are just one lame modeler from DKR , you are happy, because you was find few good scripters to make your server better. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now