Domanda Come far determinare alla quest che il pg è morto..

Stato
Discussione chiusa ad ulteriori risposte.

Fr4ncy93

Utente Electrum
12 Febbraio 2010
157
13
53
126
Salve a tutti, il mio problema è che mi serve tipo un "when dead begin" in modo che quando il pg muore deve fare determinate cose..
Ho provato già con "when pc.get_hp <= 0 begin" ma da errori..
ho provato invece a mettere nel questlib

function dead
pc.get_hp <= 0
end

In quel caso con when dead begin la compila senza errori.. ma in game non funziona worka ne lui ne gli altri when..
Come potrei risolvere?
 
Gentile Fr4ncy93,

che versione del game usi ?
Nella 2089m non mi risulta esserci un trigger per la morte del pg.
Una soluzione rudimentale che mi viene in mente se usi quella versione é di fare un loop timer e controllare gli hp del personaggio.

Altrimenti ti consiglio di passare alla versione del file game piú recente elaborata da Vanilla dato che possiede molte migliorie e include il tipo di trigger che cerchi.
Ovviamente dovrai anche ricorrere ad un adattamento del client perché non potrai usare piú un coient vecchio ma dovrai passare a una versione piú recente.

Invito come sempre chi sa qualcosa in piú sull'argomento a correggermi senza alcun problema.

Cordiali saluti,
Misterioso
 
Hai provato a creare la funzione utilizzando i qf? Altrimenti come l'hai fatta tu non ha senso
Perchè?
Semplice,hai detto solo pc.get_hp ( ) <= 0.
Potresti almeno dire if pc.get_hp ( ) <= 0 then e stabilisci una condizione.
Suggerisco di rifarla utilizzando i qf,magari settando (ad esempio) il qf "morte" ad 1 quando i tuoi hp sono minori o uguali a zero e poi stabilisci nella quest che se il qf è attivo (uguale a 1 ) e stabilisci la condizione... ti faccio l'esempio...
Codice:
 function dead
                 if pc.get_hp ( ) <= 0 then
                            pc.setqf("morte",1)
                        return
                end --** If
          end --** Function
E poi nella quest aggiungi...
Codice:
quest prova begin
          state start begin
--** Funzioni
                 function dead ( )
                 function pc.get_hp ( )
--** Fine funzioni.
                 when login begin
                         if pc.getqf("morte") == 1 then
                                  notice_all(" ".. pc.get_name .. " è morto ! ")
                                  syschat("Sei morto !")
                         end --** If
                 end --** When
          end --** State
end --** Quest
Prova e fammi sapere !
Aspetto tue notizie,
Riky.
 
Ultima modifica:
@Misterioso: Si il file game è 2089m, per il loop ho provato così:
Codice:
        when login begin
            timer("sonovivo", 2)
            syschat("timer sonovivo on")
        end
        when sonovivo.timer begin
            syschat("timer start")
            if pc.get_hp <= 0 then
                syschat("sei morto")
            else
                syschat("sei vivo")
            end
            timer("sonovivo2", 2)
        end
        when sonovivo2.timer begin
            syschat("timer2 start")
            if pc.get_hp <= 0 then
                syschat("sei morto")
            else
                syschat("sei vivo")
            end
            timer("sonovivo", 2)
        end
ma esce questo al login..
http://puu.sh/a0lQf/50ad77a4af.jpg
Non capisco dov'è l'errore per il loop <.<
E ho provato anche a rilloggare da morto avendo tipo -10k hp ma al login anche con il timer attivo non rileva che è "morto"
@GF GodOfWhy : Niente mi da errore quando la compilo, l'errore è nel Function dead().. Premetto che avevo aggiunto la funzione nel questlib.lua.. e comunque il controllo non mi serve al login ma sempre.
@ShOcKKK: Mi serve che la quest deve rilevare quando il pg muore così in modo da poter azzerare un qf
 
prova a sostituire la funzione timer con
Codice:
[COLOR=#333333]server_timer("nometimer",tempotimer)[/COLOR]
al posto di nometimer ci metti il nome (ad es. sonovivo)
al posto di tempotimer ci metti il tempo in secondi (nel caso tu lo voglia in minuti basta che fai *60)
e poi scrivi tipo

Codice:
[COLOR=#333333]                 if pc.gethp <= 0 then
syschat("morto")
else
syschat("vivo")
end
nometimer.clear_server_timer
[/COLOR][COLOR=#333333]server_timer("nometimer",tempotimer)[/COLOR][COLOR=#333333]
[/COLOR]

ovviamente manca tutto il resto che non sono stato a fare copia e incolla, pero prova e dimmi se ti funziona cosi
 
[MENTION=98813]Fr4ncy93[/MENTION] prova così.
Ricordo: il looptimer se i pg sono molti potrebbe appesantire il gioco, quindi occhio
Codice:
	when login begin
		cleartimer("sonovivo")
		loop_timer("sonovivo", 2)


		syschat("timer sonovivo on")
	end


	when sonovivo.timer begin
		syschat("sono entrato nel timer")
		if pc.get_hp() <= 0 then
			syschat("sei morto")
		else
			syschat("sei vivo")
		end
	end
 
Volete sapere qual'è la cosa bella?
Avevo sloggato alla fine di un duello, con tipo -10k hp, e al login anche se si attivava il timer non mi contava che in teoria ero morto <.<"
ne con pc.gethp ne con pc.get_hp ...

Ho deciso di abbandonare l'idea di metterla alla morte, che si fucca.
Se trovate altre soluzioni scrivete pure, preferirei implementarla nel quest lib in modo da mettere "when dead", in modo che si attiva quando muore.. senza usare timer che appesantiscono il server..
il game è 2089m.
Grazie in anticipo a chi mi troverà una soluzione e grazie a chi già ci ha provato
 
Se hai le capacità di poter modificare la source, ti consiglio di utilizzare quella e creare una nuove funzione, in alternativa come detto da [MENTION=34225]Misterioso[/MENTION] utilizzare il game di vanilla dato che contiene questa funzione e molte altre.
 
Stato
Discussione chiusa ad ulteriori risposte.

DISCUSSIONI SIMILI

Indietro
Top Bottom