hitechworld Posted May 2, 2012 Share Posted May 2, 2012 salve, sono nuovo nel forum. Ho una base pittosto scarsa in programmazione e avrei una serie di problemi nella realizzazione di una funzione. Sto realizzando un controllo per l'afk per un server race. Il problema è che non riesco a rilevare se la gara è in svolgimento o se è finita (lato client). Allego il codice che ho scritto/modificato da una resource già esistente. La funzione isRaceStarted() è quella che devo creare. CLIENT local MaxAFKtime = 30 local warnTime = 20 local v = 0 local AFKtime = 0 local sx,sy = guiGetScreenSize() local wEvent = false function rWarn() dxDrawImage( sx/2 - 300, sy/2 - 100, 600, 200, 'warn.png' ) end function stopWarn() if(wEvent) then removeEventHandler("onClientRender", getRootElement(), rWarn) wEvent = false end end function checkMain() if isPedInVehicle ( getLocalPlayer() ) and isRaceStarted() then local v = getElementVelocity ( getPedOccupiedVehicle ( getLocalPlayer() ) ) outputChatBox ( "cacca") if(v == 0 or wEvent) then aTimeAdd() else aTimeClear() end end end function aTimeAdd() AFKtime = AFKtime + 0.1 if(AFKtime >= warnTime and AFKtime < MaxAFKtime) then triggerServerEvent("afkSlap",getLocalPlayer(), 2) addEventHandler("onClientRender", getRootElement(), rWarn) if(not wEvent) then wEvent = true end elseif(AFKtime >=MaxAFKtime) then --triggerServerEvent ( "afkSlap", getLocalPlayer(), 2) --triggerServerEvent ( "afkWarn", getLocalPlayer(), 1) end end function aTimeClear() AFKtime = 0 end function afkClear(key, keyState) if(wEvent)then stopWarn() aTimeClear() end end setTimer ( checkMain, 100, -1) function onClientLoaded(res) bindKey ("space", "down", afkClear) triggerServerEvent("onClientLoaded",getLocalPlayer()) end addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),onClientLoaded) function loadSettings(maxtime, wtime ) MaxAFKtime = tonumber(maxtime) warnTime = tonumber(wtime) end addEvent( "onSettingsReady", true ) addEventHandler( "onSettingsReady", getRootElement(), loadSettings ) SERVER local raceState = "" local enableMessages = true local messageColor = "#FF5555" function afkKill() if(getResourceState ( getResourceFromName("race") ) == "running") then local isFinished = call(getResourceFromName("race"), "isPlayerFinished", source) if(not isFinished and raceState == "Running") then setElementHealth(source, 0) end end end addEvent( "afkSlap", true ) addEventHandler( "afkSlap", getRootElement(), afkKill) function changeRaceState(newStateName) raceState = newStateName end addEvent("onRaceStateChanging", true) addEventHandler( "onRaceStateChanging", getRootElement(), changeRaceState) function clientLoaded() local msgenable = get( "msgenable" ) local msgcol = get( "msgcolor" ) if(msgenable) then if(msgenable == "true") then enableMessages = true else enableMessages = false end if(msgcol) then messageColor = msgcol end end local maxtime = get( "maxafktime" ) local wtime = get( "warnTime" ) triggerClientEvent ( "onSettingsReady", getRootElement(), maxtime, wtime) end addEvent("onClientLoaded", true) addEventHandler( "onClientLoaded", getRootElement(), clientLoaded) Se ci dovessero essere ottimizazzioni, saranno ben accettate. La resource sarà poi disponibile nella community Link to comment
HunT Posted May 2, 2012 Share Posted May 2, 2012 Nella community ci sono svariate risorse di questo genere,perchè ti complichi la vita . Link to comment
hitechworld Posted May 2, 2012 Author Share Posted May 2, 2012 perchè mi piace programmare, mi aiuti? inoltre le già esistenti non mi soddisfano Link to comment
HunT Posted May 2, 2012 Share Posted May 2, 2012 Certo,ma dovresti spiegare meglio il problema o l'erroe. /debugscript 3 cosa ti dice? Link to comment
hitechworld Posted May 2, 2012 Author Share Posted May 2, 2012 devo creare una funzione che restituisce lo stato del server (true per mappa in svolgimento altrimenti false) però deve essere lato client, lato server la ho già implementata Link to comment
HunT Posted May 2, 2012 Share Posted May 2, 2012 Non mi è chiaro cosa intendi o vuoi fare. Cmq puoi usare questo evento per lanciare funzioni quando una mappa parte. addEvent("onMapStarting",true) addEventHandler("onMapStarting",getRootElement(), function () -- qui la funzione che dici triggerClientEvent -- usa il trigger per il client end -- in caso di if o else è ovvio che devi aggiungere altri end,dipende dalal funzione ) Se non ti è di aiuto spiega cosa intendi fare. Link to comment
hitechworld Posted May 2, 2012 Author Share Posted May 2, 2012 è già qualche cosa, ma non so se la mappa è finita o sbaglio? Altrimenti chiamo la funzione dal server e faccio prima! Una seconda domanda, vorrei aggiungere un evento alla resource race. Nello specifico riguardo alla gostmode, sai in che file devo buttare l'occhio? Link to comment
HunT Posted May 2, 2012 Share Posted May 2, 2012 Il ghost mode usa sempre lo stesso evento che ti ho detto. Puoi editare questo se vuoi. Server Side : local isMapDM local isMapRace function gmActive( gmactv ) if gmactv==1 then for k,v in ipairs(getElementsByType("player")) do setElementData( v, "overrideCollide.uniqueblah", 0, false ) outputChatBox("Ghostmode Enabled",v,255,255,0,true) set("*ghostmode",true) end else for k,v in ipairs(getElementsByType("player")) do setElementData( v, "overrideCollide.uniqueblah", nil, false ) set("*ghostmode",false) outputChatBox("Ghostmode Disabled",v,255,0,0,true) end end end function onMapStarting(mapInfo, mapOptions, gameOptions) local isRace = 0 local isDM = 0 if #getElementsByType("checkpoint")>=1 then isRace=1 isMapDM=0 isMapRace=1 end if isRace==1 then gmActive(1) else for a,c in ipairs(getElementsByType("racepickup")) do if getElementData(c,"type")=="vehiclechange" then if tonumber(getElementData(c,"vehicle")) == 425 then isDM=1 isMapDM=1 isMapRace=0 end end end if isDM==1 then gmActive(1) else gmActive(0) end end end addEvent("onMapStarting",true) addEventHandler("onMapStarting",getRootElement(),onMapStarting) Link to comment
hitechworld Posted May 2, 2012 Author Share Posted May 2, 2012 in realtà vorrei rilevare se la gost mod è attiva o no Link to comment
HunT Posted May 3, 2012 Share Posted May 3, 2012 in realtà vorrei rilevare se la gost mod è attiva o no Per questo ti ho detto che puoi editarlo Basta mettere due trigger client sotto gli output chat e fare un client side con i relativi eventi. Sia testo che immagine ti consiglio le funzioni Dx. Gui elements è lo stesso ma causa piu lag. Non dimenticare il render per le dx,se vuoi un esempio te lo faccio ma credo sia abbastanza easy. Link to comment
hitechworld Posted May 3, 2012 Author Share Posted May 3, 2012 Ciao, ti ringrazio molto ma l'afk non sono riuscito a farlo funzionare... Se ti spiego che cosa ho bisogno mi dai un consiglio? inoltre ho pensato di leggere lo stato della gost mode con get("*ghostmode") è corretto? Link to comment
hitechworld Posted May 11, 2012 Author Share Posted May 11, 2012 Piccolo up? Le funzioni che chiedo sono queste: Chiamare un evento lato client se una persona entra in afk. Killare la persona se è in afk o se entra in afk (solo se la gara è iniziata e se è all' interno di un veicolo) Il tempo si conda durate i periodi della gara e non nel tempo di attesa della nuova mappa/morto/gara finita Se premo un tasto il tempo di afk si azzera (il mio problema è questo) e viene chiamato un secondo evento lato client. Tutto questo deve essere fatto lato server... Purtroppo sembra che non posso usare la funzione già implementata da mta quindi devo crearne una io (perchè non si può azzerare) Chi miaiuta quindi a crearne una? Link to comment
xShocKz Posted May 13, 2012 Share Posted May 13, 2012 ma perche vi complicate la vita ? comunque qui l'unico che ti potrebbe aiutare è anterics aka Hunterix Link to comment
hitechworld Posted May 15, 2012 Author Share Posted May 15, 2012 ma perche vi complicate la vita ? comunque qui l'unico che ti potrebbe aiutare è anterics aka Hunterix Perchè non esite uno script afk già pronto per quello che devo fare io, e chi abbia le caratteristiche che mi servono 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