View Full Version: [Resurrect

RunUO.FR Support > System > [Resurrect


Title: [Resurrect
Description: tout bêtement


Injall - April 20, 2004 12:32 PM (GMT)
voila la commande [resurrect permettant a vos joueurs de ressuciter quand bon leur semble... a ne pas utiliser n importe comment :D

resurrect.cs
CODE

using System;
using Server;
using Server.Network;

namespace Server.Scripts.Commands
{
public class Renaitre
{
 public static void Initialize()
 {
  Server.Commands.Register( "resurrect", AccessLevel.Player, new CommandEventHandler( Renaitre_OnCommand ) );
 }

 private static void Renaitre_OnCommand( CommandEventArgs e )
 {
  Mobile mob = e.Mobile;
  mob.Resurrect();
 }
}
}

Enola - April 20, 2004 04:08 PM (GMT)
de base dans runuo il y a deja la commande [res sauf qu'elle n'est pas de level player

Injall - April 20, 2004 08:39 PM (GMT)
oui je sais mais je ne l'ai pas trouvée et puis là on peut remplacer par ce que l'on veux comme commande. oui oui je sais pas terrible...

zedar - April 21, 2004 09:49 AM (GMT)
sa aurrai ete mieux de le mettre dans l help est le limite a un certain nombre de fois par semaine

Injall - April 21, 2004 10:16 AM (GMT)
le limiter c'est une superbe idée oui, mais c'est pas un peu compliqué? Quand j'aurais le temps je regarderais le script des BODs pour voir si c'est faisable

slade15 - April 21, 2004 03:56 PM (GMT)
c tres fesable , il soufi d'ajouter une varible au pj qui retien de derniere fois qu'il a a utilisé la commande

Injall - April 22, 2004 10:23 AM (GMT)
oui mais moi je sais pas trop comment on fait tout ca ^^
cet aprés midi je part chez mes grds parents 1 semaine à 800 bornes, j'aurais pas internet mais tous mes scripts donc j'aurais le temps de m'y mettre vraiment :D

slade15 - April 22, 2004 04:40 PM (GMT)
voici une des solution pour faire cela

CODE


using System;
using Server;
using Server.Network;
using Server.Mobiles;

namespace Server.Scripts.Commands
{
public class Renaitre
{
public static void Initialize()
{
 Server.Commands.Register( "Renaitre", AccessLevel.Player, new CommandEventHandler( Renaitre_OnCommand ) );
}

private static void Renaitre_OnCommand( CommandEventArgs e )
{
 Mobile mob = e.Mobile;
 int MAX = 10; //10 fois par jour
 PlayerMobile player = (PlayerMobile) mob;
 if(player.nbResurect>= MAX)
  player.SendMessage(  "Desolé vous ne pouvez plus utiliser cette commande pour aujourd'hui" );
 else
 {
  player.Resurrect();
  player.nbResurect++;
  player.SendMessage(  "nombre d'utilisation restant : {0}",MAX-player.nbResurect );  
  if(player.nbResurect== MAX)
  {
    player.tempEnMin=0;
      TimerResurect timerResurect = new TimerResurect(player);
     timerResurect.Start();
  }
       //mob.Resurrect();
 
 }

 
}
}

public class TimerResurect : Timer
{

private PlayerMobile m_player;

public TimerResurect(PlayerMobile player) : base
( TimeSpan.FromMinutes (1.0), TimeSpan.FromMinutes (1.0) )
{
m_player = player;
m_player.tempEnMin++;
}
//appres 1 minute
protected override void OnTick()
{
   m_player.tempEnMin++;
if(m_player.tempEnMin>=1440) //1440 min = 24h
{
   m_player.tempEnMin=0;
   m_player.nbResurect=0;
   Stop();
}
//tout les 1min le onTick s'executera
//pourquoi pas avoir fait un timer de 24h directement , car si reboot le timer s'arrete
//avec cette metode j'enregistre dans le joueur le temp pour le reprendre au reboot et on perd qu'une min
}


}

}



modification a fait au playerMobile

CODE

commencez par ajouter

using Server.Scripts.Commands;

ajoute de 2 nouvelles variables

 private int m_nbResurect;
 private int m_tempEnMin;

 [CommandProperty( AccessLevel.GameMaster )]
 public int nbResurect
 {
  get{ return m_nbResurect;}
  set{ m_nbResurect = value;}
 }
 [CommandProperty( AccessLevel.GameMaster )]
 public int tempEnMin
 {
  get{ return m_tempEnMin;}
  set{ m_tempEnMin = value;}
 }

a la fin de Onlogin ajoutez

// si le timer etais pas fini je le relance
  PlayerMobile player = (PlayerMobile) from;
  if(player.tempEnMin > 0)
   {
TimerResurect timerResurect = new TimerResurect(player);
 timerResurect.Start();
   }

dans Deserialize ajoutez

               m_nbResurect = reader.ReadInt();
               m_tempEnMin = reader.ReadInt();

et sans oublier le Serialize

               writer.Write( (int) m_nbResurect );
writer.Write( (int) m_tempEnMin );

slade15 - April 23, 2004 10:50 AM (GMT)
ATTENTION j vien de me rendre compte que le scritpe tel que je l'ai posté , le temp de 24h c'est 24h in game

peut etre quelque pourrais l'ameliorer en remplasent mon tempEnMin qui est un int , par un type DATE ou TIME quelque chose du genre

Injall - May 30, 2004 01:53 PM (GMT)
Voila je pense avoir inclu le timer IRL, sans même avoir a modifier le playermobile, mais je n'arrive pas a créer la condition du style "if Res = !Stop" qui reperrerais si le timer est finis :unsure:

voici ce que j'ai fait :/
CODE

using System;
using Server;
using Server.Network;
using Server.Mobiles;

namespace Server.Scripts.Commands
{
public class Renaitre
{
 public static void Initialize()
 {
  Server.Commands.Register( "resurrect", AccessLevel.Player, new CommandEventHandler( Renaitre_OnCommand ) );
 }

 private static void Renaitre_OnCommand( CommandEventArgs e )
 {
  Mobile mob = e.Mobile;
  mob.Resurrect();
  Res timer = new Res(mob);
  timer.Start();
 }
}
public class Res : Timer
{
 private Mobile mob;

 public Res(Mobile from ) : base
 ( TimeSpan.FromHours (2.0), TimeSpan.FromHours (2.0) ) // On indique le temps que durera le script aux deux endroits.
 {
  mob = from; // on précise que la varibale mob sera finalewment le mobile from
  mob.SendMessage( "Vous revenez à la vie!" ); // on précise a celui qui a activer le Timer que celui-ci démare
 }

 protected override void OnTick() //Ici c'est la fin du timer.
 {
  Stop(); // On précise que le timer ne recommance pas.
 }
}
}

slade15 - May 30, 2004 08:00 PM (GMT)
QUOTE (Injall @ May 30 2004, 02:53 PM)
mais je n'arrive pas a créer la condition du style "if Res = !Stop" qui reperrerais si le timer est finis :unsure:


j pas compris quesque tu veux comme condition , le script tel que tu a cree le mobile resucite et lance un timer qui fait rien a part afficher "Vous revenez à la vie!" et qui s'arretera apres 2 heure , il n'empeche pas le mobile de re utiliser la commande avant la fin des 2 heure

Injall - May 30, 2004 08:10 PM (GMT)
bien justement je veux que pendant le timer, le joueur ne puisse pas ressuciter.

en gros les joueurs ne pourront se ressusciter qu'une fois toutes les 2 heures




Hosted for free by InvisionFree