示例#1
0
        private static void EventSink_PlayerDeath(PlayerDeathEventArgs args)
        {
            Jogador     jogador = (Jogador)args.Mobile;
            MorteModule mm      = jogador.getSistemaMorte().getMorteModule();

            //mensagem
            jogador.PublicOverheadMessage(MessageType.Regular, 1, true, jogador.Name + " acaba de desmaiar.", true);

            if (mm != null)
            {
                //marca início de desmaio
                mm.Desmaiado     = true;
                mm.InicioDesmaio = DateTime.Now;

                //manda o jogador para a sala da morte
                jogador.getSistemaMorte().teleportarSalaDaMorte();

                //inicia o timer de morte
                int tempoDesmaiado = (mm.Desmaio * TempoDesmaio) + 1; // para cada ponto de desmaio, fica mais tempo desmaiado
                mm.TimerMorte = new TimerMorte(jogador, tempoDesmaiado);
                mm.TimerMorte.Start();

                jogador.SendMessage("voce acaba de desmaiar. Deve recobrar a conciencia em {0} minutos", tempoDesmaiado);
            }
            else
            {
                Console.WriteLine("{0} não possui o modulo de morte.", jogador.Name);
            }
        }
示例#2
0
        public void levantarMorte()
        {
            MorteModule mm = jogador.getSistemaMorte().getMorteModule();

            jogador.Corpse = null;

            //volta a vida
            voltarAVida();
        }
示例#3
0
        private void morreu()
        {
            MorteModule mm = jogador.getSistemaMorte().getMorteModule();

            mm.Morto = true;
            mm.Morte++;
            mm.InicioMorte = DateTime.Now;

            mm.Desmaio = MaxDesmaio;
        }
示例#4
0
        /**
         * Verifica se o jogador pode ser revivido depois da morte.
         */
        public bool podeReviver()
        {
            MorteModule mm = jogador.getSistemaMorte().getMorteModule();

            int tempoRecuperarMorte = mm.Morte * tempoRecuperarDesmaio;

            if (mm.Morto && DateTime.Now > mm.InicioMorte + TimeSpan.FromDays(tempoRecuperarMorte))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#5
0
        /*
         * Quando o jogador e curado por alquem, quando esta desmaiado
         */
        public void levantarDesmaiado()
        {
            MorteModule mm = jogador.getSistemaMorte().getMorteModule();

            //para o tempo de morte
            if (mm.TimerMorte != null)
            {
                mm.TimerMorte.Stop();
                mm.TimerMorte = null;
            }

            //volta a vida
            voltarAVida();
            tratarCorpo();
        }
示例#6
0
        /**
         * Envia o jogador para o local onde deve ser revivido.
         */
        private void teleportarLocalDeVolta()
        {
            //se tiver corpo, vai para o lugar do corpo
            if (jogador.Corpse != null)
            {
                jogador.MoveToWorld(jogador.Corpse.Location, jogador.Corpse.Map);
            }
            else
            {
                //se nao tiver corpo, vai para o lugar marcado
                MorteModule mm        = jogador.getSistemaMorte().getMorteModule();
                CityInfo    resultado = getLocalizacao(mm.LocalMaracado);

                jogador.MoveToWorld(resultado.Location, resultado.Map);
            }
        }
示例#7
0
        private void voltarAVida()
        {
            MorteModule mm = jogador.getSistemaMorte().getMorteModule();

            mm.Morto       = false;
            mm.InicioMorte = DateTime.MinValue;

            mm.Desmaiado     = false;
            mm.InicioDesmaio = DateTime.MinValue;

            teleportarLocalDeVolta();

            //reviver o jogador
            jogador.Resurrect();

            ajustarVidaManaStamina();
        }
示例#8
0
        void onTimerMorte()
        {
            MorteModule mm = jogador.getSistemaMorte().getMorteModule();

            //soma o desmaio
            mm.Desmaio++;

            if (mm.Desmaio > MaxDesmaio)
            {
                morreu();
                jogador.SendMessage("Voce acaba de morrer. Seu ponto de morte é {0}", mm.Morte);
            }
            else
            {
                voltarAVida();
                tratarCorpo();
                jogador.SendMessage("Voce acaba de acordar. Seu ponto de desmaio é {0}", mm.Desmaio);
            }
        }
示例#9
0
        private static void EventSink_PlayerLogingOn(LoginEventArgs args)
        {
            Jogador     jogador = (Jogador)args.Mobile;
            MorteModule mm      = jogador.getSistemaMorte().getMorteModule();

            DateTime dataUltimoPontoGanho = mm.InicioDesmaio > mm.DataPontoGanho ? mm.InicioDesmaio : mm.DataPontoGanho;

            //tenta recuperar ponto de morte
            if (!mm.Morto && mm.Morte > 0 && mm.Desmaio == 0 && DateTime.Now > dataUltimoPontoGanho + TimeSpan.FromDays(tempoRecuperarDesmaio))
            {
                //calcula quantos pontos de desmaio ele deve ganhar
                TimeSpan difTempoDesmaiado = DateTime.Now - dataUltimoPontoGanho;
                double   diasDesmaiado     = difTempoDesmaiado.TotalDays;

                int recuperar = (int)(diasDesmaiado / tempoRecuperarDesmaio);

                //subtrai o desmaio e marca a nova data de desmaio para hoje.
                mm.DataPontoGanho = DateTime.Now;
                mm.Morte         -= recuperar;
                jogador.SendMessage("Voce acaba de recuperar {0} pontos de morte.", recuperar);
            }
            //se ja passou o tempo de recuperar o tempo de desmaio
            else if (mm.Desmaio > 0 && DateTime.Now > dataUltimoPontoGanho + TimeSpan.FromDays(tempoRecuperarDesmaio))
            {
                //calcula quantos pontos de desmaio ele deve ganhar
                TimeSpan difTempoDesmaiado = DateTime.Now - dataUltimoPontoGanho;
                double   diasDesmaiado     = difTempoDesmaiado.TotalDays;

                int recuperar = (int)(diasDesmaiado / tempoRecuperarDesmaio);

                //subtrai o desmaio e marca a nova data de desmaio para hoje.
                mm.DataPontoGanho = DateTime.Now;
                mm.Desmaio       -= recuperar;
                jogador.SendMessage("Voce acaba de recuperar {0} pontos de desmaio.", recuperar);
            }
        }
示例#10
0
        /**
         * Recupera o modulo de talento
         */
        private MorteModule getMorteModule()
        {
            MorteModule tm = (MorteModule)CentralMemory.GetModule(jogador.Serial, typeof(MorteModule));

            return(tm);
        }