La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/11/2024 21:58:25


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 26/11/2005 01:38:57 Sujet du message : [resolu]Un probleme avec un script anti duplique

Pour faire cours, comme vous le savez sur certain module, la duplication via le systeme d'artisanat de nwn est chose courante, j'aimerai pour ma part l'interdire, pour cela en recherchant sur le forum j'ai trouver ceci


Seth de Sombrelune a écrit :
Bon voici ce que je vous propose, je l'ai tester sur mon dodule, ça marche assez bien.
Cela necessite de revisiter le dialogue de crafting, créer 2 nouveaux scripts et de modifier 2 scripts importants de votre module.

1 :Créer le script d'ouverture du dialogue.
Ce script place sur le pj une balise qui signal que dialogue d'artisanat a été ouvert.
NWScript :
//:Confused///////////////////////// /////////////////////
//:: Name ac_openartisanat
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*
      Balise d'ouverture du dialogue Artisanat
*/

//:Confused///////////////////////// ////////////////////
///:: Created By: Seth de Sombrelune
//:: Created On: 08/07/2005
//:Confused///////////////////////// ////////////////////
void main()
{
object oPC=GetLastSpeaker(); // on definit le joueur
SetCampaignInt("BDDModule", "menu_artisanat", 1, oPC);// on affecte la valeur 1 dans la BDD

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

(BDDModule est un nom de base de donnée, choisisez le votre).


2 :Créer le script de fermeture du dialogue
NWScript :
//:Confused///////////////////////// /////////////////////
//:: Name ac_closartisanat
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*

*/

//:Confused///////////////////////// ////////////////////
///:: Created By: Seth de Sombrelune
//:: Created On: 08/07/2005
//:Confused///////////////////////// ////////////////////
void main()
{
object oPC=GetLastSpeaker(); // on definit le joueur
SetCampaignInt("BDDModule", "menu_artisanat", 0, oPC);// on affecte la valeur 0 dans la BDD

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


3 :Modifier le fichier de dialogue d'artisanat : x0_skill_ctrap

Mon dialogue signale que l'ouverture du menu artisanat impose qu'il soit refermer en utilisant la branche de dialogue "fermer le menu artisanat"
Code :


Racine
   |
   |__ Prop :Impossible d'utiliser vos compétences Artisanat en ce moment.
   |         ---> Condition d'Execution :x2_im_polymorphd
   |         ---> Action Conséquente :
   |
   |__ Prop :Ouverture du Menu Artisanat <StartAction>[Atention, si vous choisissez 
       d'activer le menu Artisana, vous devez absolument quiter ce menu par la
       fonction "Fermer le menu Artisanat" sinon votre personnage sera bloqué jusqu'a
       l'intervention d'un MD !]</Start>
        |     --->CE :
        |     --->AC :
        * Ouvrir le menu Artisanat
        |  |   --->CE:
        |  |   --->AC:ac_openartisanat
        |  |
        |  |_Prop :Menu compétences Artisanat
        |      |   --->CE:
        |      |   --->AC:
        |      |
        |      * (ici se place le menu normal : modifier armure, casque, robe, arme et
        |         bouclier)
        |
        * Quiter le menu Artisanat [Fin du Dialogue]
              --->CE:
              --->AC: ac_closartisanat


Atention ! Chaque branche de dialogue qui normalement termine le dialogue doit avoir comme action conséquente le script ac_closartisanat. Vous serez sans doute amener a modifier legerement la structure du dialogue pour que cela soi possible (j'ai personnellement fait en sorte que toute fin d'action reviene à la seconde branche de ma racine).
Lors de la modification de votre fichier dialogue, faite tres atention, certaine branche qui existait en tant que "copie en tant que lien" risque de disparaitre. Conservez toujour une copie du dialogue original !

4 : je modifie le script de l'evenement module OnClientEnter

(ce code ne possede pas de fonction void main car ce n'est qu'une partie a ajouter à votre propre code. C'est la premiere condition qu'il regardera, votre script vient ensuite, pensez à refermer avec un } ! ).
NWScript :
////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////
///  Bloquage des tricheurs avec le menu Artisanat              ///
////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////

   
int iArtisanat = GetCampaignInt("BDDModule", "menu_artisanat", oPC);

if(iArtisanat == 1)
{
    DelayCommand(15.0,AssignCommand(oPC, JumpToLocation(GetLocation(GetWaypointByTag("WP_TRICHEUR")))));
    DelayCommand(17.0,PlayVoiceChat(VOICE_CHAT_DEATH, oPC));
    DelayCommand(17.5,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPC));
    DelayCommand(17.5,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(FALSE, FALSE), oPC));
    DelayCommand(18.0,SendMessageToPC(oPC,""));
    SendMessageToAllDMs("");
}
else
{
////////////////////////////// ////////////////////////////// /////////
////////////////////////////// ////////////////////////////// /////////
/* warning: 1 unclosed block {} */
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


5 : je modifie le script de l'evenement module OnPlayerRespawn
(ce code ne possede pas de fonction void main car ce n'est qu'une partie a ajouter à votre propre code de respawn juste apres la declaration de la fonction void main et du pj ayant cliquer sur respawn. C'est la premiere condition qu'il regardera, votre script vient ensuite, pensez à refermer avec un } ! ).


NWScript :
////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////
///  Bloquage des tricheurs avec le menu Artisanat              ///
////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////

   
int iArtisanat = GetCampaignInt("BDDModule", "menu_artisanat", oPC);

if(iArtisanat == 1)
{
    DelayCommand( 6.0,SendMessageToPC(oPC,""));
    SendMessageToAllDMs("");
}
else
{
////////////////////////////// ////////////////////////////// /////////
////////////////////////////// ////////////////////////////// /////////
/* warning: 1 unclosed block {} */
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



J'espère être assez clair dans mes explication. voilà !
tous va bien sauf que je trouve des erreur de compilation (avec des copier/coller propre)

Voici les messages d'erreur :

OnClientEnter

Citation :

////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////
/// Bloquage des tricheurs avec le menu Artisanat ///
////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////

// On récupère dans la BDD la valeur de la variable Artisanat
int iArtisanat = GetCampaignInt("BDDModule", "menu_artisanat", oPC);

if(iArtisanat == 1) // Si la variable = 1, c'est que le menu n'a pas été fermé convenablement (triche ?)
{
DelayCommand(15.0,AssignCommand(oPC, JumpToLocation(GetLocation(GetWaypointByTag("WP_TRICHEUR")))));
DelayCommand(17.0,PlayVoiceChat(VOICE_CHAT_DEATH, oPC));
DelayCommand(17.5,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPC));
DelayCommand(17.5,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(FALSE, FALSE), oPC));
DelayCommand(18.0,SendMessageToPC(oPC,"Vous etes mort car votre personnage a quiter le jeu avec un menu artisanat ouvert. Seul un MD pourra vous ramener à la vie."));
SendMessageToAllDMs("Un personnage s'est connecté apres avoir deco avec son menu artisanat ouvert !");
}
else
{
////////////////////////////// ////////////////////////////// /////////
////////////////////////////// ////////////////////////////// /////////
/* warning: 1 unclosed block {} */


26/11/2005 01:32:29 : Erreur. 'oncliententer' n'est pas compilé.
oncliententer.nss(10): ERREUR : INVALID DECLARATION TYPE

Dans le onplayerrespawn

Citation :

////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////
/// Bloquage des tricheurs avec le menu Artisanat ///
////////////////////////////// ////////////////////////////// ////////
////////////////////////////// ////////////////////////////// ////////

// On récupère dans la BDD la valeur de la variable Artisanat
int iArtisanat = GetCampaignInt("BDDModule", "menu_artisanat", oPC);

if(iArtisanat == 1) // Si la variable = 1, c'est que le menu n'a pas été fermé convenablement (triche ?)
{
DelayCommand( 6.0,SendMessageToPC(oPC,"Vous etes mort car votre personnage a quiter le jeu avec un menu artisanat ouvert. Seul un MD pourra vous ramener à la vie."));
SendMessageToAllDMs("Un personnage s'est connecté apres avoir deco avec son menu artisanat ouvert et souhaite revenir à la vie. ");
}
else
{
////////////////////////////// ////////////////////////////// /////////
////////////////////////////// ////////////////////////////// /////////
/* warning: 1 unclosed block {} */



26/11/2005 01:35:23 : Erreur. 'nw_o0_respawn' n'est pas compilé.
nw_o0_respawn.nss(51): ERREUR : INVALID DECLARATION TYPE
Voila j'espere que vous pourrez m'aider, merci d'avance
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
Dernière édition par darkheaven le 05/12/2005 11:53:24; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 26/11/2005 07:51:37 Sujet du message :

T'es sur que tu les a bien collée à l'interieur d'un void main() ? C'est une erreur toute bête dans ton copier coller le texte doit être hors des balises { et } je pense.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 26/11/2005 19:26:17 Sujet du message :

oui le void main est bien mis, en fait, j'introduis se script dans celui qu'il ya deja.
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ecuyer paumé
Acolyte
Inscrit le: 15 Nov 2005
Messages: 27
Répondre en citant
Posté le : 29/11/2005 13:03:26 Sujet du message :

Je n'ai pas de solution à proposer, mais plutot une question vis-à-vis de ce script. En fait je me demandais si il etait possible de simplifier la chose en "empechant" le joueur de passer par la deconnection NWN lors de l'utilisation du menu artisanat, et donc de cette façon d'eviter la duplication. Possible ou pas?Confused
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Yoyo
Seigneur
Inscrit le: 31 Aoû 2003
Messages: 223
Répondre en citant
Posté le : 29/11/2005 18:22:33 Sujet du message :

Pas possible et même si c'était possible il suffirait de quitter NWn a "l'arrache" (Crtl+Alt+Supr, reset...)
_________________
BOUH! (je vous ai fait peur ??) désolé

Vive moi
Pas vive Securom
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 29/11/2005 19:43:11 Sujet du message :

Ji avais penser aussi mais voila, impossible Very Happy
Donc le script est incontournable, si une solution est trouver il aidera pas mal de concepteur de module je pense vu que le probleme de la duplique est general
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 29/11/2005 20:37:03 Sujet du message :

Les solutions a base de balise fonctionnent. Le seul pb est que si il y a une déco serveur , le pj en plein dial d'artisanat est pénalisé.
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 29/11/2005 21:14:31 Sujet du message :

Bein heu je sais pas mais au debut de ton dialogue tu met toute les variable et tout et tout a 0, puis voila et donc si le joueur deco reco il aura aucune tricheri puisque il devra tout refaire, si il y a un bug de serveur il aura aucun probleme... Bon apres c'est mon avis, enfin je vois pas comment un joueur peut tricher la dedans j'ai jms eu de probleme moi Very Happy
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 29/11/2005 21:41:37 Sujet du message :

le principe est simple

le dialogue s'ouvre , là on met la balise int " balise_anti_triche " à TRUE de maniére PERMANENTE sur le PJ !

Quand le dialogue se ferme de maniére correcte , on modifie la valeur de la balise à FALSE de maniére PERMANENTE !

Si je joueur se barre en faisant une déco sauvage , sa balise reste a TRUE même aprés un reboot , là a l'entrée du mod tu vérifie les balises sur chaque PJ , et celui qui à une balise à TRUE , il va en tôle , il se fait kiker , les MJ sont avertis , ou ce que tu veux ! Very Happy

Ma solution consiste a l'envoyer en exil sur un autre mod " prison " via une paserelle IP , comme ça , ça libére une place sur le mod et le mec est bien en tôle ! Laughing
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 30/11/2005 13:52:46 Sujet du message :

Mouai je vois pas l'interet car si on deco sauvegement et q'uon peut faire de la triche, c'est que ton script est assé mal fait... Normalement meme si il y a un deco sauvage tu devrais pas avoir de probleme, il est bizzar ton script oO
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 30/11/2005 19:22:18 Sujet du message :

Il n'y a PAS de problême ! Ca marche je l'ai fait sur mon mod !

L'intêret c'est que ça détecte les tricheurs qui dupliquent et qui veulent se reconecter au mod pour revendre les objets dupliqués.

Je t'explique :

Dans le dial d'artisanat , sur le texte : " Menu compétences artisanat " , tu met en " actions conséquentes " le script :

NWScript :

void main()
{
object oPC = GetPCSpeaker();
SetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",TRUE,oPC);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ensuite , dans " fichier actuel " il y a un script dans " normal " , dans ce script tu rajoute la ligne

NWScript :


    SetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",FALSE,oPC);

Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Là ce qu'on a fait est simple , le mec qui entre dans le dial d'artisanat reçoit une balise TRUE , quand il sort cette balise passe à FALSE.

Si tu rentre dans le mod avec une balise à FALSE c'est que tu es sorti proprement du dial d'artisanat , si tu as une balise a TRUE , c'est que tu t'es déco comme un sauvage pendant que tu étais dans le dial d'artisanat.

Ensuite , on surveille les balises de celui qui entre sur le mod :

dans le " oncliententer " tu rajoute les lignes :

NWScript :

////////////////////////////// ////////////////////////////// /////////////
/////  Script anti-triche
////////////////////////////// ////////////////////////////// /////////////

int balise_anti_triche = GetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",oPC);

  if ( balise_anti_triche == TRUE )
  if(!GetIsDM(oPC))
  {

  DelayCommand(10.0,AssignCommand(oPC,JumpToLocation(GetLocation(GetWaypointByTag("WP_TRICHEURS"))))); // Pour l'envoyer dans la prison des tricheurs

  WriteTimestampedLogEntry(" ");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(" TRICHEUR");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(sPlayerName+" Vient d'aller en tole pour TRICHE ! ");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(" ");
  WriteTimestampedLogEntry(" TRICHEUR");
  WriteTimestampedLogEntry("_______________________________________________");

  SendMessageToAllDMs(sPlayerName+"");
  }
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


qui servent a envoyer en tôle sur le waypoint qui va bien le porteur de la balise qui est a TRUE , et en même temps tous les MD sont avertis , et tant qu'on y est , on marque l'événement dans les fichiers log !

Et ça marche ! Very Happy

Une variante consiste a faire perdre au tricheur tous es objets , tous ses XP et toutes ses PO , lui mettre un poid indropable de 500000 livres dans son inventaire , et lui tomber toutes ses caractéristiques à 3 points de maniére bien sûr permanente ! Very Happy
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 02/12/2005 16:30:08 Sujet du message :

Ca ma l'air simpa ton systeme semcatala, cependant quand je vais dans fichier actuel, je n'ai pas de script dans normal, que faire?
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 02/12/2005 17:39:30 Sujet du message :

moi j'avais un script de base que j'ai modifié :

NWScript :

////////////////////////////// ////////////////////////////
/*
  Item Appearance Modification Conversation
  Finish Conversation Script
*/

// created/updated 2003-06-24 Georg Zoeller, Bioware Corp
////////////////////////////// ////////////////////////////
#include "x2_inc_craft"
void main()
{
    object oPC = GetPCSpeaker();
    SetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",FALSE,oPC);

    if (CIGetCurrentModMode(GetPCSpeaker()) != X2_CI_MODMODE_INVALID )
    {
        object oBackup = CIGetCurrentModBackup(oPC);

        int nCost = GetLocalInt(oPC,"X2_TAILOR_CURRENT_COST");
        int nDC = GetLocalInt(oPC,"X2_TAILOR_CURRENT_DC");

        if (GetGold(oPC) >= nCost)
        {
            TakeGoldFromCreature(nCost,oPC,TRUE);
        }
        else
        {
            FloatingTextStrRefOnCreature(83447,oPC);
            ExecuteScript ("x2_im_cancel", OBJECT_SELF);
            return;
        }
        int bSuccess = FALSE;
        if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR)
        {
            if ( GetIsSkillSuccessful(oPC,SKILL_CRAFT_ARMOR,nDC))
            {
                  //FloatingTextStrRefOnCreature (83449,oPC);
                  bSuccess = TRUE;
            }
        }
        else
        {
            if ( GetIsSkillSuccessful(oPC,SKILL_CRAFT_WEAPON,nDC))
            {
                  bSuccess = TRUE;
                  //FloatingTextStrRefOnCreature (83449,oPC);
            }
        }

        if (!bSuccess)
        {
            FloatingTextStrRefOnCreature(83448,oPC);
            // run the cleanup script
            ExecuteScript ("x2_im_cancel", OBJECT_SELF);
            return;
        }

        object oNew = CIGetCurrentModItem(oPC);
        AssignCommand(oPC,ClearAllActions(TRUE));
        if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR)
        {
            AssignCommand(oPC, ActionEquipItem(oNew,INVENTORY_SLOT_CHEST));
        }
        else if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_WEAPON)
        {
              AssignCommand(oPC, ActionEquipItem(oNew,INVENTORY_SLOT_RIGHTHAND));
        }
        //---------------------------- ------------------------------ ------------
        // This is to work around a problem with temporary item properties
        // sometimes staying around when they are on a cloned item.
        //---------------------------- ------------------------------ ------------
        IPRemoveAllItemProperties(oNew,DURATION_TYPE_TEMPORARY);

        DeleteLocalInt(oPC,"X2_TAILOR_CURRENT_COST");
        DeleteLocalInt(oPC,"X2_TAILOR_CURRENT_DC");
        CISetCurrentModMode(oPC,X2_CI_MODMODE_INVALID );

        // remove backup
        DestroyObject(oBackup);
    }
    else
    {
      ClearAllActions();
    }

    // Remove custscene immobilize from player
    effect eEff = GetFirstEffect(oPC);
    while (GetIsEffectValid(eEff))
    {
        if (GetEffectType(eEff) == EFFECT_TYPE_CUTSCENEIMMOBILIZE
            && GetEffectCreator(eEff) == oPC
            && GetEffectSubType(eEff) == SUBTYPE_EXTRAORDINARY )
        {
            RemoveEffect(oPC,eEff);
        }
        eEff = GetNextEffect(oPC);
    }

    RestoreCameraFacing() ;

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


reprends le si tu veux , ça devrais marcher !

Pense juste a adapter le nom de ta balise , ensuite c'est juste du copier coller ! Very Happy
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 02/12/2005 18:32:56 Sujet du message :

Merci bien ! mais voila j'ai encore un probleme, le dernier scrip ne compile pas

NWScript :
////////////////////////////// ////////////////////////////// /////////////
/////  Script anti-triche
////////////////////////////// ////////////////////////////// /////////////
void main()
{

  int balise_anti_triche = GetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",oPC); //l'erreur se trouve a cette ligne

  if ( balise_anti_triche == TRUE )
  if(!GetIsDM(oPC))
  {

  DelayCommand(10.0,AssignCommand(oPC,JumpToLocation(GetLocation(GetWaypointByTag("WP_TRICHEURS"))))); // Pour l'envoyer dans la prison des tricheurs

  WriteTimestampedLogEntry(" ");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(" TRICHEUR");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(sPlayerName+" Vient d'aller en tole pour TRICHE ! ");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(" ");
  WriteTimestampedLogEntry(" TRICHEUR");
  WriteTimestampedLogEntry("_______________________________________________");

  SendMessageToAllDMs(sPlayerName+"");
  }

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


le message d'erreur:
NWScript :
02/12/2005 18:29:50 : Erreur. 'antiduplik3' n'est pas compilé.
antiduplik3.nss(7): ERREUR : VARIABLE DEFINED WITHOUT TYPE
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Une fois regler j'ai hate de voir si ca marche Very Happy
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 02/12/2005 18:47:01 Sujet du message :

Normal que ça ne compile pas , c'est juste une partie du script , je te file un exemple de script complet :

NWScript :


void main()
{

    object oPC = GetEnteringObject();
    string sPlayerName = GetPCPlayerName(oPC);

////////////////////////////// ////////////////////////////// /////////////
/////  Script anti-triche
////////////////////////////// ////////////////////////////// /////////////

int balise_anti_triche = GetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",oPC);

  if ( balise_anti_triche == TRUE )
  if(!GetIsDM(oPC))
  {

  DelayCommand(10.0,AssignCommand(oPC,JumpToLocation(GetLocation(GetWaypointByTag("WP_TRICHEURS")))));

  WriteTimestampedLogEntry(" ");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(" TRICHEUR");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(sPlayerName+" Vient d'aller en tole pour TRICHE ! ");
  WriteTimestampedLogEntry("_______________________________________________");
  WriteTimestampedLogEntry(" ");
  WriteTimestampedLogEntry(" TRICHEUR");
  WriteTimestampedLogEntry("_______________________________________________");

  SendMessageToAllDMs(sPlayerName+"");
  }
////////////////////////////// ////////////////////////////// /////////////

}

Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


En fait tu as juste omis de rajouter les lignes :

NWScript :

    object oPC = GetEnteringObject();
    string sPlayerName = GetPCPlayerName(oPC);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Je n'ai jamais dit que le script était complet , mais que c'étais " une partie " du script , car mon script dans mon " oncliententer " vérifie beaucoups plus de choses a l'entrée d'un pj sur le mod. Je pensais que tu rajouterais ces 2 lignes seul ! Very Happy

Donc voila , t'as le script complet ! Very Happy
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 04/12/2005 01:39:02 Sujet du message :

Merci beaucoup, je te dois une fiere chandelle Very Happy, je test et je post les resultats.
Merci encore
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 04/12/2005 01:53:29 Sujet du message :

Donc voila ca marche, merci beaucoup mais je revien a d'autre question, la personne envoyer en prison apres son flagrant delit, perd t-elle sa balise?
Si non, ya t-il un moyen pour qu'un dm puisse lui enlever en jeu?
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 04/12/2005 02:31:26 Sujet du message :

De rien ! Wink

Non elle ne la perds pas , sinon ce serais trop facile , elle la perds , puis elle revient dans le mod comme une fleur !!! Mad

Ce que j'ai fait , c'est de faire dans la prison des geôles pour enfermes les prisoniers ( une seule en fait ) , puis j'y ai mis une porte verouillée qui donne sur une autre piéce.

Dans cette autre piéce , un declencheur recouvre TOUT le sol , ce déclencheur sert a renvoyer le perso dans le mod et a lui réinitialiser sa balise pour qu'il puisse jouer.

L'idéal , c'est qu'un mj vienne , discute avec le mec , et une fois les soucis réglés , si le mec est autorisé a revenir sur le mod , le mj lui ouvre la porte , le pj avance , et là il est téléporté a nouveau vers le mod.

Dans tous les cas , même si le mod est plein , sa balise repasse a FALSE , et il pourra revenir plus tard.
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 04/12/2005 19:10:27 Sujet du message :

Bien bien Very Happy
... se serai possible d'avoir le script qui renvoi en enlevant la balise ? Embarassed *sent qu'il abuse*
Par contre j'ai remarquait une chose c'est que le pj bloquer de cette maniere etait compeletement immobilisé, c'ets normal?
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 04/12/2005 19:29:43 Sujet du message :

je crois que j'ai eu le même problême sur le WP d'arrivée , il m'a suffit de le déplacer sur un point de la zone ou j'étais sur qu'il pouvait se déplacer correctement et aprés ça fonctionnait.

Pour le script voila ce qu'il faut mettre dans le " onenter " du déclencheur de la prison :

NWScript :

void main()
{

    object oPC = GetEnteringObject();
    string sPlayerName = GetPCPlayerName(oPC);

////////////////////////////// ////////////////////////////// /////////////
/////  Script anti-triche retour dans le mod
////////////////////////////// ////////////////////////////// /////////////

SetCampaignInt("nom_de_ton_mod","balise_anti_triche_artisanat",FALSE,oPC);
DelayCommand(10.0,AssignCommand(oPC,JumpToLocation(GetLocation(GetWaypointByTag("WP_RETOUR_MOD")))));


}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
darkheaven
Acolyte
Inscrit le: 21 Aoû 2004
Messages: 35
Localisation: nevers
Répondre en citant
Posté le : 05/12/2005 11:52:40 Sujet du message :

Merci pour tous c'est de la baballe, merci encore
_________________
La vie n'est qu'une plume que le destin balade au grés du vent...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 99.784ms