JeuxOnLineForumsPlusConnectés : 378 (sites) | 617 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Répondre
Partager Outils Rechercher
Avatar de BigBang
BigBang [EverL]
Roi
 
Avatar de BigBang
 

NoDrop

Voila voila... je script plus ou moin pour un module persistant...
Et j'ai du régler un problem lié au drop de certains objets: Les joueurs collectent des runes qui leur permettent de franchir certains portails (ils n'optiennent la rune que sil ne l'ont pas et sous certaines conditions) or en dropant les runes les joueurs peuvent les dupliquer et donc les fournir a d'autres joueurs qui ainsi esquivent les zones dures et certaines quétes...

G du aussi gérer le drop de certains objets dans des containers spécifiques...

Voici mes scripts :
(Sachant qu'il y a quelques bugs : on peu interrompre manuellement le reramassage-auto d'une rune, dropper la rune en l'ayant mi dans un sac magique, si on ramasse une rune qu'un autre perso a laissé par terre on se retrouve teleporté a sa position si il est encore online)

Code PHP:
/*
obe_fgetisnodrop
needed by obe_onacquire & obe_onunacquire

- Script avec redef de la fonction GetIsNoDrop.
(Il n'y a en effet pas de fonction permettant de mettre
un objet en NoDrop)

- Pour rajouter un objet a ne pas perdre mettre son tag
dans la condition du if sur le meme model ke ceux deja en place.
*/

int GetIsNoDrop(object oItem)
{

    
int iNoDrop;
    
string sItemTag GetTag(oItem);

    if (
        (
sItemTag == "Recall_0") ||
        (
sItemTag == "recall_1") ||
        (
sItemTag == "recall_2") ||
        (
sItemTag == "recall_3") ||
        (
sItemTag == "recall_4") ||
        (
sItemTag == "recall_5") ||
        (
sItemTag == "recall_6") ||
        (
sItemTag == "recall_7") ||
        (
sItemTag == "recall_8") ||
        (
sItemTag == "recall_9") ||
        (
sItemTag == "recall_10") ||
        (
sItemTag == "recall_11") ||
        (
sItemTag == "recall_evil00") ||
        (
sItemTag == "recall_evil02") ||
        (
sItemTag == "recall_evil03") ||
        (
sItemTag == "recall_evil05") ||
        (
sItemTag == "recall_evil06") ||
        (
sItemTag == "recall_evil07") ||
        (
sItemTag == "recall_evil08") ||
        (
sItemTag == "recall_evil09") ||
        (
sItemTag == "recall_evil10") ||
        (
sItemTag == "Elf1") ||
        (
sItemTag == "Elf2") ||
        (
sItemTag == "Elf3") ||
        (
sItemTag == "Elf4") ||
        (
sItemTag == "Elf5") ||
        (
sItemTag == "Elf6") ||
        (
sItemTag == "Antidote")
        )


    {
        
iNoDrop TRUE;
    }
    else
    {
        
iNoDrop FALSE;
    }

    return 
iNoDrop;


Code PHP:
/*
obe_onacquire
need obe_fgetisnodrop

- Ce script fait ke si on accepte une rune d'1 Pc on lui la rend direct.

- GoS: executer au debut de acquireditems apres les declarations de variables:
    ExecuteScript("obe_onacquire", oPC);
*/

#include "obe_fgetisnodrop"

void main()
{
    
object oItem GetModuleItemAcquired();

    if (
GetIsNoDrop(oItem))
    {
        
object oOwner GetLocalObject(oItem"ND_OWNER");
        
string sOwnerName GetName(oOwner);
        
object oPossessor GetItemPossessor(oItem);
        
string sPossessorName GetName(oPossessor);
        
string sItemName GetName(oItem);

        if (!
GetIsPC(oOwner))
        {
            if (
GetIsPC(oPossessor))
            {
                
SetLocalObject(oItem"ND_OWNER"oPossessor);
            }
            else
            {
                
DeleteLocalObject(oItem"ND_OWNER");
            }
       }
       else
       {
            if (
sOwnerName != sPossessorName)
            {
                if (
GetIsPC(oPossessor))
                {
                    
AssignCommand(oPossessorClearAllActions());
                    
AssignCommand(oPossessorActionJumpToObject(oOwner));
                    
AssignCommand(oPossessorActionGiveItem(oItemoOwner));
                    
SendMessageToPC(oPossessor"Vous avez rendu l'objet :" sItemName);
                }
                else
                {
                    
DeleteLocalObject(oItem"ND_OWNER");
                }
            }
            else
            {
                
/* On Ne Fait rien */
            
}
        }

    }


Code PHP:
/*
obe_onunacquire
need obe_fgetisnodrop

- A placer dans OnUnAquireItem

- Ce script force le joueur a rammasser les objets def en nodrop
dans obe_fgetisnodrop s'il les pose parterre

*/


#include "obe_fgetisnodrop"

void main()
{
    
object oItem GetModuleItemLost();

    if (
GetIsNoDrop(oItem))
    {
        
object oLostBy GetLocalObject(oItem"ND_OWNER");

        if (
GetIsPC(oLostBy))
        {
            
string sItemName GetName(oItem);
            
object oPossessor GetItemPossessor(oItem);

            switch (
GetObjectType(oPossessor))
            {

            case 
OBJECT_TYPE_STORE:
            
/*Traitement du cas des magazins
            (inutile car objets invendables mais identique au cas des coffres)
            mais mis au cas ou... doit buguer avec l'or)*/
                
AssignCommand(oLostByActionTakeItem(oItemoPossessor));
                
SendMessageToPC(oLostBy,"Vous avez recupere : " sItemName);
            break;
            case 
OBJECT_TYPE_PLACEABLE:
            
/*Traitement de la mise dans un coffre*/
                
if ( ! (
                    ( ( 
GetTag(oItem) == "Antidote" )    &&  ( GetTag(oPossessor) == "Gob_Roc" ) )
                ||  ( ( 
GetTag(oItem) == "Elf1" )        &&  ( GetTag(oPossessor) == "Elf1_A" ) )
                ||  ( ( 
GetTag(oItem) == "Elf2" )        &&  ( GetTag(oPossessor) == "Elf2_A" ) )
                ||  ( ( 
GetTag(oItem) == "Elf3" )        &&  ( GetTag(oPossessor) == "Elf3_A" ) )
                ||  ( ( 
GetTag(oItem) == "Elf4" )        &&  ( GetTag(oPossessor) == "Elf4_A" ) )
                ||  ( ( 
GetTag(oItem) == "Elf5" )        &&  ( GetTag(oPossessor) == "Elf5_A" ) )
                ||  ( ( 
GetTag(oItem) == "Elf6" )        &&  ( GetTag(oPossessor) == "Elf6_A" ) )
                ) )
                {
                    
AssignCommand(oLostByActionTakeItem(oItemoPossessor));
                    
SendMessageToPC(oLostBy,"Vous avez recupere : " sItemName);
                }
            break;

            default:
            
/*Traitement du cas general : on pose par terre*/
                
if (GetIsObjectValid(GetAreaFromLocation(GetLocation(oItem))))
                {
                    
AssignCommand(oLostByActionDoCommand(SetCommandable(FALSEoLostBy)));
                    
/* Blokage des actions du joueur */
                    
AssignCommand(oLostByActionSpeakString("Zut, j'ai perdu quelquechose !"));
                    
AssignCommand(oLostByActionMoveToObject(oItemTRUE));
                    
/* Mouvement Obligatoire ! ! ! */
                    
AssignCommand(oLostByActionPickUpItem(oItem));
                    
/* Rammassage de l'objet */
                    
SendMessageToPC(oLostBy,"Il ne faut pas perdre vos objets importants! ! !");
                    
AssignCommand(oLostByActionDoCommand(SetCommandable(TRUEoLostBy)));
                    
/* Deblokage des actions du joueur */
                
}
                else
                {
                
/* Cas restant: on donne a un autre joueur : traite dans obe_onacquire*/
                
}
            }
        }
    }


Cela marche mais peut etre que certains test negatif m'ont échapé...
Merci pour toutes vos idées, commentaires, améliorations, informations....
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
euh, j'ai pas sais i exactement, la. Tu veux faire quoi : un DestroyObject sur le OnUnaquired ?
Lien direct vers le message - Vieux
Avatar de Iridian
Iridian
Roi
 
Avatar de Iridian
 
En fait, le problème, c'est que lorsque le joueur as la rune, et qu'il la pose a terre, il peu en obtenir une 2e.

Il te suffi de flagger le joueur comme quoi il a déjà eu la rune et de ne plus lui redonner ensuite

Comme ca s'il la donne a un autre ... tant pis pour lui, il ne pourra plus passer le portail.
Lien direct vers le message - Vieux
Avatar de BigBang
BigBang [EverL]
Roi
 
Avatar de BigBang
 
Le problème... c'est que malheureusement notre serveur n'est pas un serveur pro (plantage...plantage) et que le mod n'en étant pas a sa version définitive (évolution constante en fait...)

Les joueurs se retrouvent déflaggé a chaque redémarrage du serveur (sinon je pense qu'on aurais eu seulement une rune et des droits de passage en flag)

Donc voila... si vous avez une solution ou simplement une amélioration de mes scripts originaux.... Merci D'avance ! ! !
Lien direct vers le message - Vieux
Avatar de Eldarion Tarent
Eldarion Tarent
Roi
 
Avatar de Eldarion Tarent
 
Vive le PUMA
Lien direct vers le message - Vieux
Avatar de Iridian
Iridian
Roi
 
Avatar de Iridian
 
Citation:
Provient du message de Florin
Vive le PUMA
J'allais le dire !
Lien direct vers le message - Vieux
Avatar de BigBang
BigBang [EverL]
Roi
 
Avatar de BigBang
 
Ok je vais faire en sorte que l'on utilise le "ptit chat" sur notre serveur... (j'avais même pas vu ce super travail....)

Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > NoDrop
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 09h15.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite