Jump to content

Funzione ogni volta che si mira.


Dadex

Recommended Posts

Salve a tutti,

devo creare uno script che produca un suono ogni volta che miro (ad esempio con il cecchino). Qualcuno può dirmi l'evento da utilizzare per fare ciò ?

P.S. = ho già provato con onClientPlayerTarget ma riproduce un suono solo quando trova un elemento valido.

Grazie in anticipo,

saluti.

Link to comment

Altre informazioni ?

Cmq visto che devi usare il mouse destro per mirare io inizierei da qui.

Poi fai il controllo Dell arma e se hai ad esempio il cecchino ti parte il suono,se hai un altra arma non suona.

Se inizi la script posso aiutarti,ma se devo fartela io puoi scordartelo :/

Ho dei brutti precedenti.

Tipo un frocio di merda dal nome monty o stolka.

Mi fece fare una script ed ora la sta vendendo.

Vendendo per modo di dire.

Link to comment

Ciao,

grazie della risposta.

Comunque, in pratica volevo creare uno script che, appena il giocatore mirava con il cecchino, riproduceva il battito del cuore. (Sì, mi sono ispirato a C.O.D. :lol: )

Allora ho deciso di controllare nella Wiki gli eventi Client-Side ma ho trovato solo un evento che è in grado di svolgere una funzione solo quando trovava un elemento valido (veicoli, pedoni, giocatori, ecc.) che è "OnClientPlayerTarget".

Ho seguito il tuo consiglio, Hunterix. Direi che sono riuscito a fare ciò che volevo:

battito = playSound("heartbeat.wav", true) -- Il suono che deve essere riprodotto 
setSoundPaused(battito, true) -- Lo mette in pausa all'inizio 
setSoundSpeed(battito, 0.85) -- Lo rallenta di un po' 
local giocatore = getLocalPlayer() 
function controllo() 
    local arma = getPedWeapon(giocatore) -- Ricava l'arma che sta usando il giocatore 
    local stato = getControlState ("aim_weapon") -- Ricava lo stato del giocatore 
    if (arma==34) then -- Se è uno Sniper Rifle 
    if (stato) then -- Se lo stato è "true" (se sta mirando) 
         
        if (isSoundPaused(battito)) then -- Se il suono è in pausa 
        setSoundPaused(battito, false) -- Lo riproduce 
        end 
         
         
     
    else 
    setSoundPaused(battito, true) -- Se non sta mirando il suono rimane in pausa 
    end 
    else 
    setSoundPaused(battito, true) -- Se l'arma non è uno Sniper Rifle il suono rimane in pausa 
    end 
     
     
end 
  
setTimer(controllo, 500, 0) -- Timer che controlla lo stato del giocatore 

In poche parole c'è un Timer che controlla sia se l'arma è uno Sniper Rifle e sia se il giocatore sta mirando. Se si verificano entrambe le condizioni allora riproduce il suono altrimenti lo rimane in pausa.

So che è un po' un pasticcio ma almeno riesce a riprodurre il suono quando voglio.

Saluti. :fadein:

Link to comment

Giusto.

La tua soluzione è un po' scontata.

Con il setTimer la funzione circola sempre e questo può causare lag,invece con il bindkey la funzione parte solo se premi il tasto.

Quindi io ti consiglierei di fare per prima cosa le due funzioni enableSound disableSound

Poi fai la funzione funzione principale.

Quindi se hai l arma specifica bindkey enableSound unbindkey disableSound.

Però se proprio vuoi imitare call of duty fallo per bene ;D

Ovvero,se premi il tasto destro si mette a mirare e fai partire un suono di fondo + fai muovere la camera,se premi maiuscolo si ferma la camera e parte il battito.

Se ti serve una mano basta dirlo.

Link to comment

Bene,

anche se è la seconda volta che uso la funzione "bindKey" credo che stia procedendo bene:

function attiva(key, keyState) 
    battito = playSound("heartbeat.wav", true) -- Il suono viene riprodotto quando c'è il click destro del mouse 
end 
  
function disattiva(key, keyState) 
    stopSound(battito) -- Quando lascio il click destro del mouse si ferma il suono 
end 
bindKey("mouse2","down",attiva) -- Lega il click destro del mouse alla funzione che riproduce il suono 
bindKey("mouse2","up",disattiva) -- Lega il rilascio del click destro del mouse alla funzione che ferma il suono 

È tutto OK, per ora ?

Se è così procedo e aggiungo un paio di condizioni per vedere se l'arma è il cecchino che desidero e se il giocatore in quel momento sta mirando.

EDIT: Ok, credo di avere un piccolo problema.

Mi spiego:

1) Ho legato il click del mouse alle funzioni;

2) Ho messo la condizione dell'arma (ovvero controlla se è uno Sniper Rifle);

3) Ho messo la condizione dello stato del giocatore (se sta mirando o no);

3) Entro su MTA e provo se funziona e mi accorgo che il controllo dello stato avviene prima che io mirassi, per questo risulta "false" e non accade nulla;

4) Decido quindi di utilizzare la funzione "isPedOnGround" in modo da evitare la riproduzione del suono quando il giocatore è in aria, nuota, cade, vola, guida, ecc. (Sì lo so sono un perfettino, ma quando "programmo" per me deve essere tutto al suo posto);

5) Controllo di nuovo il tutto e mi accorgo che, dopo una caduta, quando il giocatore tenta di rialzarsi e preme il click destro del mouse, il suono viene riprodotto prima che mira.

Quindi, c'è un modo definitivo per risolvere questo stupido dilemma ? :|

Beh, se non c'è rimedio posso anche rimanere tutto così. Chi è che pensa a mirare con il cecchino mentre cade dal cielo ? :lol:

Link to comment

Anche se non ti conosco mi piaci ragazzo :wink:

Comunque, ecco tutto quello che ho fatto fino ad ora:

local giocatore = getLocalPlayer() 
function attiva(key, keyState) 
    local arma = getPedWeapon(giocatore) -- Ricava l'arma in uso 
    if (arma==34) then -- Se è uno Sniper Rifle 
        if (isPedOnGround(giocatore)) then 
            battito = playSound("heartbeat.wav", true) -- Il suono che deve essere riprodotto 
            setSoundSpeed(battito, 0.85) 
        end 
    end 
  
end 
  
function disattiva(key, keyState) 
    stopSound(battito) 
end 
bindKey("mouse2","down",attiva) 
bindKey("mouse2","up",disattiva) 

Secondo te si può migliorare o abbellire ?

Link to comment

Ovviamente :mrgreen:

  
function sniperSound ( _, keyState ) 
local giocatore = getLocalPlayer() 
local arma = getPedWeapon(giocatore) 
if (isPedOnGround(giocatore)) and arma == 34 then 
if ( keyState == "down" ) then 
battito = playSound("heartbeat.wav", true)   
elseif ( keyState == "up" ) then 
stopSound ( battito )        
end 
end 
end 
bindKey ( "mouse2", "both", sniperSound) 
  

Link to comment
Sono qui per questo,anzi mi fa molto piacere aiutarti visto che sei quasi l'unico a scrivere le funzioni da solo (a parte me :D ).

ç_ç

Cosa?

Se mi trovi un post contenente una funzione scritta da te ti chiedo scusa.

Sinceramente ne dubito :D

Link to comment
  • 3 months later...
  • 2 months later...
Mi servirebbe anche a me uno script così, potreste fornirmelo? Grazie

Scusate un po' per il necropost, ma ci tenevo a postare questo piccolo lavoretto perchè ho intenzione di migliorarlo ancora di più un giorno. È una community, no? Finchè si può ci si aiuta.

Ho fatto l'upload dello script: https://community.multitheftauto.com/in ... ls&id=7816 (ovviamente con il permesso di Hunterix, ho messo anche i ringraziamenti dappertutto <.<, se qualcosa non va ti prego di contattarmi)

Buon snippaggio a tutti quelli che lo voglio provare. :)

Link to comment

Cmq se proprio vuoi trasformare questa resource in qualcosa di unico io ho in mente delle idee che nessuno ha mai fatto.

Gia sto creando qualcosa di simile con le skin e weapon.

In pratica dai la possibilità al player di personalizzare tutto tramite fetchremote (link immagine e suoni)

Se vuoi farlo fammi sapere.

Link to comment

Pensandoci bene :/ non vedo come potresti aiutarmi,perche la script lo faccio io,immagini e suoni non ce ne vogliono perche li seleziona il player tramite url.

Alla fine quando la finisco in community metto hunterix,dadex.

Cmq ci sentiamo su steam stasera e ne parliamo.

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