Md a la porte

Répondre
Partager Rechercher
bonjour a tous j'ai besoin de vos lumière, sur mon module on est saturé de joueurs assez souvent, mais les MDs ne peuvent plus entrer. alors ma question peux t-on obliger au module de prendre que les Mds quand le maxi de joueurs est atteint? merci de votre aide.
__________________
La paix c'est toi qui la constuis




Site de MYSTERIA
Je ne sais pas comment ça marche, mais il existe un script pour ça. Si tu as 32 places et que tu veux en garder 4 pour les MD, tout joueur qui se connectera alors qu'il y en a déjà 28 (ce sera donc le 29ème) entrera en jeu mais se fera éjecter dans les secondes qui suivent (n'oublie pas le petit message explicatif).

Un tel script était utilisé sur Althea. En plus de ça, il était couplé avec un autre script qui bloquait la clé des joueurs trop insistants. Je ne sais plus comment c'était, mais je crois qu'il fallait espacer ses essais de 20 minutes, et au 3ème essais un peu trop pressant (moins de 20 minutes), la clé se faisait bloquer et le joueur ne pouvais plus entrer.

Bon ok, ça t'aide sans doute pas trop, mais au moins tu sais que ce que tu cherches existe
oui on peu faire cela simplement dans le on enter :

Code PHP:


// regarde s'il y a suffisament de place pour le joueur...
    
int DMRESERVE 59// nombre de places joueurs sur le total

    
if (DMRESERVE != 0)
    {
        
int nC;
        
object oPlayers=GetFirstPC();
        if(!
nDM)
        {
            while(
GetIsObjectValid(oPlayers))
            {
                if(!
GetIsDM(oPlayers)) nC++;
                
oPlayers=GetNextPC();
            }
        }
        if(
nC DMRESERVE
        
&& nDM==FALSE
        
&& GetDeity(oPlayers)!="PCMOD")
        {
            
HCRBoot(oPC,"Plus de place sur ce serveur.");
            return;
        }
    } 
en espérant avoir rendu service.

Tykem.
__________________
www.Kaegys.com
KaegysTV ma chaine YouTube
Un Dragon ne Meurt Jamais Seul.

TyKeM , Après les GBs réunis sur NWN, avoir fait du gros dps sur WoW, après avoir squatté le platine dans SC2 après le théory crafting de Diablo 3 je me lance sur KaegysTV YouTube
C'est le script de reservation du HCR
bon pour faire marcher ce script il te manque juste une petite fonction

Code PHP:

void HCRBoot(object oPCstring sReason)
{
    
SendMessageToPC(oPCsReason);
    
DelayCommand(10.0BootPC(oPC));

tu la declares avant ton main et ca devrait etre bon
ouai j'ai zapé une partie du code ^^

Code PHP:


void HCRBoot
(object oPCstring sReason)
{
    
SendMessageToPC(oPC,sReason);
    
DelayCommand(3.0,BootPC(oPC));

je suis allée trop vite pour répondre au plus vite :/

edit : oups me suis fait griller lol
__________________
www.Kaegys.com
KaegysTV ma chaine YouTube
Un Dragon ne Meurt Jamais Seul.

TyKeM , Après les GBs réunis sur NWN, avoir fait du gros dps sur WoW, après avoir squatté le platine dans SC2 après le théory crafting de Diablo 3 je me lance sur KaegysTV YouTube
Citation :
Publié par IXXI Squalthor IXXI
Heu j'obtient pour moi il se compresse pas :s je sait pas si c'est une erreur ou si ca vient de moi ^^ une quiche se refait rarement

Bien bien ca etais copié je ne sais plus ou et je ne sais pas si il marche dans l'état actuel je sais que pour ma part on me la recorigé dans le Onclient enter car j'ai aussi le cnr avec.
je vais voir le concepteur pour savoir sq'il peux le faire pour que ca marche pour tous
Citation :
Publié par raistlin
Bien bien ca etais copié je ne sais plus ou et je ne sais pas si il marche dans l'état actuel je sais que pour ma part on me la recorigé dans le Onclient enter car j'ai aussi le cnr avec.
je vais voir le concepteur pour savoir sq'il peux le faire pour que ca marche pour tous
Bon ben, le voilà tel qu'il fonctionne sur Mystéria avec le OnClientEnter du CNR :

Code PHP:

/////////////////////////////////////////////////////////
//
//  Craftable Natural Resources (CNR) by Festyx
//
//  Name:  cnr_module_oce
//
//  Desc:  This script must be run by the module's
//         OnClientEnter event handler.
//
//  Author: David Bobeck 22Feb03
//  réécrit par Azmathiel le 28/06/2004
//  pour la partie réservation de places MD
//
/////////////////////////////////////////////////////////
#include "cnr_recipe_utils"



// Calcule et renvoie le nombre de joueurs connectés à l'arrivée du dernier
int AzTestNBPC();

int AzTestNBPC()
{
    
object oPC GetFirstPC();
    
int NBPC;
    while (
GetIsObjectValid(oPC))
    {
        
NBPC++;
        
oPC GetNextPC();
    }
    return 
NBPC;
}




void main()
{

  
// ici le scrypt CNR

  
object oPC GetEnteringObject();
  
//==========================================================
  // Parametres et script de limitation du nombre de joueurs
  // compris entre les ==
  
int nPCmax 20;  // Nombre maximum de joueurs non MD
                    // Il faut ensuite ajuster le nombre max de slots disponibles

  
int nPCin AzTestNBPC();
  if ((
nPCin >= nPCmax)&& !GetIsDM(oPC)) // Si ce n'est pas un MD et 20 places sont prises
  // on le jette gentiment avec un message d'excuses apres 30 secondes
  
{
    
SendMessageToPC(oPC"Nous sommes désolés, le serveur est complet et nous réservons des places pour les MD. Merci de votre compréhension");
    
DelayCommand(30.0BootPC(oPC)); // 30 secondes avant le boot pour qu'il ait le temps de lire le message
   
}
   
// ========================================================

  
if (!GetIsPC(oPC)) return;

  
///////////////////////////////////////////////////////////
  // Make sure all players carry the new Tradeskill Journal.
  ///////////////////////////////////////////////////////////

  // First, check if they have either journal, new or old.
  
object oJournal CnrGetItemByResRef("cnrtradejournal"oPC);
  if (
oJournal == OBJECT_INVALID)
  {
    
//////////////////////////
    // First time in module....
    //////////////////////////

    // Strip player of all default game items here.

    //object oItem = GetFirstItemInInventory(oPC);
    //while (oItem != OBJECT_INVALID)
    //{
    //  DestroyObject(oItem);
    //  oItem = GetNextItemInInventory(oPC);
    //}

    // create a journal for the player
    
oJournal CreateItemOnObject("cnrtradejournal"oPC);
  }
  else
  {
    
// The player has a journal. Now determine what type it is, new or old

    
if (GetTag(oJournal) != "cnrTradeJournal")
    {
      
// Player has the old type journal. We need to convert the XP stored in its tag
      // to the new format, then we can destroy the old journal and create a new journal.

      
CnrConvertOldJournalXPToNewFormat(oJournaloPC);
      
DestroyObject(oJournal);
      
CreateItemOnObject("cnrtradejournal"oPC);
    }
    
//else
    //{
      // Player has the new type journal. nothing needs to be done!
    //}

  
}


  
// Allow the builder to set the trade level caps for this PC.
  // execute hook script
  
ExecuteScript("hook_set_lev_cap"oPC);

  
int bInitRecipesOnModuleLoad CnrGetPersistentInt(OBJECT_SELF"CnrBoolInitRecipesOnModuleLoad");
  
bInitRecipesOnModuleLoad bInitRecipesOnModuleLoad || CNR_BOOL_INIT_RECIPES_ON_MODULE_LOAD;
  if (
bInitRecipesOnModuleLoad == TRUE)
  {
    
int nRecipeCount GetLocalInt(GetModule(), "CnrRecipeCount");
    
SendMessageToPC(oPC"Total CNR recipe count = " IntToString(nRecipeCount));
  }

    
//ici le tiens pour anti deco reco


  // Get the entering object.
object oPlayer GetEnteringObject();

// If it's a player extract their information.
if ( GetIsPCoPlayer ) == TRUE )
{
     
string sCle   GetPCPublicCDKey(oPlayer);
     
string pperso GetName(oPlayer);
     
object oModule=GetModule();
     
//memo de la cle CD
     
SetLocalString(oModule,pperso,sCle);
     
string  sID=sCle+pperso+"HP";
     
//Gestion des Points de Vie
     
int pcHP=GetCampaignInt("MYSTERIA1HP",sID);
     
//

     
{
      
int blessures GetMaxHitPointsoPlayer) - pcHP;
      
effect eff =  EffectDamage(blessures);
       
ApplyEffectToObject(DURATION_TYPE_INSTANTeffoPlayer);
     }
     
//
     
string message "Bienvenue sur Mysteria : " sID//...  //... MESSAGE D'INTRO ...
     
SendMessageToPCoPlayermessage );

    }

édité pour rajouter le n à PCMax. Merci de l'avoir remarqué.
Cette version est celle que j'ai envoyé à Raistlin et que nous avons testé ensemble, car je n'ai pas CNR non plus et lui a corrigé, mais pas moi dans mon listing . Je répondrais plus bas pour la version sans CNR.
if ((nPCin >= PCmax)&& !GetIsDM(oPC))
il manque pas un n dans nPCmax ?

Le script ne semble pas fonctionner chez moi (meme en rajoutant le n) ... ça doit venir de CNR que j'utilise pas - il n'exite aucune version sans please ?
Bien vu pour le n. J'ai corrigé dans le script au dessus.
Voici la version sans CNR:

Code PHP:

/////////////////////////////////////////////////////////
//  script az_reservemd
//  reserve de place pour MD
//  par Azmathiel le 28/06/2004
//  A Mettre sur le OnClientEnter du module
//  Editer/Proprietes Module/Evenements
/////////////////////////////////////////////////////////

// Fonction speciale. Pas de parametres a passer
// Calcule et renvoie le nombre de joueurs connectés à l'arrivée du dernier
int AzTestNBPC();

int AzTestNBPC()
{
    
object oPC GetFirstPC();
    
int NBPC;
    while (
GetIsObjectValid(oPC))
    {
        
NBPC++;
        
oPC GetNextPC();
    }
    return 
NBPC;
}




void main()
{
    
object oPC GetEnteringObject();
    if (!
GetIsPC(oPC)) return;
    
// je ne vois pas ce que ca pourrait etre d'autre, mais bon
    // On ne sait jamais ce qu'ils peuvent inventer

    //==========================================================
    // Parametres et script de limitation du nombre de joueurs
    // compris entre les ==
    
int nPCmax 20;  // Nombre maximum de joueurs non MD
                    // Il faut ensuite ajuster le nombre max de slots disponibles

    
int nPCin AzTestNBPC();
    if ((
nPCin >= nPCmax)&& !GetIsDM(oPC)) // Si ce n'est pas un MD et 20 places sont prises
      // on le jette gentiment avec un message d'excuses apres 30 secondes
    
{
        
SendMessageToPC(oPC"Nous sommes désolés, le serveur est complet et nous réservons des places pour les MD. Merci de votre compréhension");
        
DelayCommand(30.0BootPC(oPC)); // 30 secondes avant le boot pour qu'il ait le temps de lire le message
    
}
// ========================================================

/*
    NOTE:
    ATTENTION ! Pour que ca fonctionne correctement, il faut allouer nPCMax + le nombre de MD
    places possibles sur le serveur.
    Exemple : si 3 MD et 20 joueurs, il faut allouer 23 places sur le serveur
    dans ses parametres de lancement.
*/


Pas testé en live. Merci de dire ici si ça fonctionne.
Afin d'éviter le re-calcul du nombre de PC à chaque entrée, il me paraîtrait utile de le stocker dans une variable locale du module, et de faire +1 / -1 en fonction des entrées / sorties. Je pense que cela doit être plus rapide.
ça fonctionne mais par contre qd je test en mettant "2" ds le script => il ne me laisse entrer qu'une seule personne (au lieu de 2) et la seconde a le msg lui disant que c full.

Merci pr le script
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés