Qu'est devenu expotron ?

Répondre
Partager Rechercher
La question est dans le titre

Me semble qu'il à disparu des outils d'Obsidian et pas vu sur le Vault...

Y à-t'il un moyen de le récupérer par quelqu'un ?


Dernière modification par MaJo ; 23/12/2011 à 22h59.
question tardive
bonjour à tous,
Expotron ne semble plus disponible sur le site d'Obsidian (ils sont malheureusement passés à autre chose).
Je cherche à exporter les modèles 3D de NWN2, ainsi que les textures, mais surtout les animations (d'autres outils encore disponibles permettent d'exporter mesh et textures mais pas les animations).
Expotron permettait apparemment de gérer aussi les animations, pas juste les modèles 3D.
Quelqu'un peut-il me donner ce plug-in. Le site mentionné plus haut pour les liens en téléchargement n'est pas accessible pour moi; mon ordinateur me dit que le serveur a un malware et refuse d'ouvrir la page.
Cordialement,
Laurent P.
utilisation de Expotron
Merci pour l'info.
L'idée est de récupérer une partie des éléments 3D de NWN2 dont la communauté en ligne n'est plus très active, pour les importer dans un projet perso que j'ai commencé sous Unity3D.
Unity3D est un outil de conception de jeux, un peu comme une boite de légos, mais donnée avec très peu de "légos". Je cherche donc un moyen d'importer ceux qui me plaisaient bien à l'époque, avec probablement une amélioration sur les textures aux passages (on pet y appliquer une texture dites "normal" pour inclure du relief sur un mesh à partir de sa texture.
Le moteur 3D d'Unity3D ets beaucoup plus puissant que celui de NWN2 mais il y a beaucoup à rajouter dedans. Ensuite je pourrais y faire jouer mes amis directement depuis un navigateur Web, sans qu'ils aient besoin de NWN2 (qui ne se trouve plus de toute manière).
Voilà mon projet, qui avance à petits pas sur mon temps libre (je suis en profession libérale).
Salutations
Tu as la normal map de gérée déja sur nwn2.
J'ai pas encore zieuté Unity mais il semble très usité dans le milieu pro.

Si tu cherches des batiments et des trucs plus jolis que ceux de base de nwn 2 je te conseil ce hack sur le vault entre autre =>

http://nwvault.ign.com/View.php?view....detail&id=299

Nettement plus joli mais plus lourd.(et très complet pour faire les villes.)
Merci
Merci,
Pour les normal map sur NWN2 je ne savais pas car je n'ai jamais vu cet effet sur les textures. En même temps NWN et NWN2 sont installés sur mon PC plus ancien, et je n'avai peut être pas activé les shaders pour ne pas faire plonger encore plus le framerate.
Mon nouveau PC est une "bête de course", Core i7 avec 8G de ram et une bonne nVidia. Du coup ce que tu me dis me donne envie de le réinstaller sur cette machine aussi pour m'en remettre un peu plein les yeux.
Pour les "placeables", il y a plein de ressources disponibles avec la communauté de developeurs sur Unity3D, au format .FBX qui inclut les mesh, textures, collision et animations.
Mon objectif est de pouvoir importer sous 3DS ou Blender des objets animés issus de mes jeux NWN2 (j'ai toutes les extensions, dont une en double grâce à quelqu'un qui a voulu me faire une surprise en m'offrant un jeu .. que j'avais déjà), puis de les ré-exporter vers Unity3D au format .FBX avec les animations (pour les personnages c'est mieux) ou au pire si le squelette est reconnu à la norme de Mechanim, les bones rigging se font automatiquement pour les animations standard et Unity3D est capable d'animer un personnage/mdèle 3D "statique".

Unity3D n'est pas que pour les pro, il y a une version gratuite dite "Indy" avec très peu de fonctionnalités en moins.

Les concepteurs de hakpak de NWN2, s'ils ont envie de continuer à se faire plaisir, devraient se tourner vers cette solution (enfin cela a été mon choix). Et il y a des tutoriels très bien fait pour commencer un Hack&Slash sous Unity3D

Amicalement,

Laurent
Je peux t'envoyer les fichiers expotron mais à mon avis ça ne servira pas pour ce que tu veux faire : les anim NWN 2 sont spécifiques, tu devras réadapter les maillages à un squelette compatible avec ton moteur de jeu et skinner les maillages sur ce squelette.

Enfin expotron fonctionne en exportation/importation jusqu'à la version 9 de 3DS Max, mais pas au dela, et pour modifier des animations il te faut une version 7 ou 8.
ma version de 3DS
J'ai 3DS Max 4, je n'ai pas plus récent;
3DS Max 4 remonte au temps où j'étais jeune j'avais un peu de Warez, et utiliser un logiciel qui a plus de 10 ans d'âge ne fera pas grand mal à Autodesk. Depuis je n'ai que du légal, c'est pour cela que pour le reste je mentionnais Blender.
Comme je sais un peu compter, je sais aussi que 4 <> 7, donc je veux bien le plugin pour essayer mais j'ai soudain un doute sur la capacité de R4 à l'utiliser.

Vu que je suis avec des connaisseurs, y'en a t'il parmi vous qui ont essayé d'exporter mesh+textures+animations dans un autre outil 3D, tels que Blender ou Maya, ou un 3DS récent. Il y a des outils dans Blender ensuite qui permettent d'importer d'autres formats

Merci de votre aide

Dernière modification par pierrard ; 12/06/2013 à 18h35.
Il existe aussi un plugin pour importer/exporter les fichiers mdb vers Blender. Il me semble qu'Hippias l'utilise.

Par contre ça m'étonne que tu puisse récupérer le squelette NWN 2 dans Unity 3D. Si on parle bien de la même chose ça m'intéresse.

En fait les squelettes NWN 2 sont basés sur la technologie granny 3D de RAD game tool. C'est un logiciel avec un prix à 6 chiffres réservé aux professionnels et c'est d'ailleurs, il me semble, suite à des pressions de rad game tool qu'Obsidian a retiré la dll qui permets de lire les animations.
NWN2 animations
Je ne sais pas si je peux ré-utiliser les animations de NWN2, je n'ai pas essayé.
J'ai changé de PC il y a un an et celui où j'avais installé NWN et NWN2 prend la poussière.
Unity3D est installé sur ce nouveau PC; j'essaye d'apprendre comment il fonctionne, j'ai récupéré différends sets de scripts pour essayer de refaire un petit hack&slash pour m'amuser avec Unity3D, mais il va me manquer des modèles 3D dans Unity pour que cela ressemble à quelquechose.

Comme je l'ai écrit, Unity3D est un peu comme un système de jeu de légos; il en explique le principe mais il manque des pièces dans la boite. le très bon point c'est qu'il s'ait faire les rigs (jointures de squelette) automatiquement si on importe un bipède (autre je n'ai pas trouvé de tuto) et y rajoute des animations propres à Unity3D.
Unity3D sais aussi reconnaitre lorsque l'objet a déjà des animations lors de l'import, mais ne sais pas si l'animation correspond à une marche, un état d'attente, à courir, etc..., il faut donc dans Unity découper le petit film d'animation importé (qui sont en fait les emplacements des différentes articulations à un instant donné) et dire à unity de la frame 0 à la frame 60, c'est état "idle" par exemple, de la frame 61 à la frame 120, c'est l'état "walk" et ainsi de suite.

Si l'objet 3D importé n'a pas d'animation, Unity3D peut (si c'est un bipède), réutiliser des animations standard.
Les animations d'objets importés sont reconnus comme des objets "animations", et peuvent être réutilisées pour d'autre objets similaires; si par exemple j'ai une animation d'un humain qui tourne la tête, je pourrais reprendre cette animation pour un orc ou un elf..

Si les animations de NWN2 ne sont pas exportables dans un outil comme Blender, alors je vais avoir beaucoup baucoup plus de travail, mais bon, ce projet est aussi pour moi un moyen d'apprendre...

Mon objectif n'est pas de pouvoir réimporter des animations dans NWN2; je me fais peu d'illusions concernant le nombre de fans qui y joue encore, malheureusement et malgré le potentiel énorme offert par l'éditeur.
Mon objectif est de pouvoir récupérer le plus possible de contenu de mon ancien jeu, pour le réimporter dans Unity3D et le petit jeu que j'essaye de me construire.
Unity permet de publier vers PC et Mac gratuitement. Il faut une version pro pour publier quasiment le même code (on doit rajouter les éléments permettant d'avoir un clavier/manette) vers Android et iPhone. La version pro indique aussi qu'elle permet de compiler pour XBox360 et PS3 mais avec un autre plugin de l'éditeur d'Unity3D.

J'essaye d'apprendre à me servir correctement d'Unity3D (version Indie, gratuite, il n'y a que très peu de fonctions en moins et c'est parfait pour apprendre). Si je me débrouille et que je vois un potentiel derrière, alors il sera temps de prendre Unity3D pro (environ 1500€ quand même..) et de travailler un peu les mesh et textures de mes objets pour plus de détail; Unity permet de jouer ensuite en 3D en caméra 3ème personne ou première personne.

Si des personnes sont intéressées par mon projet, et voir comment on peut s'aider (je peux vous expliquer ce que j'ai compris sous Unity, et vous pouvez me montrer comment importer dans Blender des objets de NWN2, si possible avec leurs animations), alors ajoutez moi sur Skype, ce sera plus simple pour discuter que des messages qui deviennent un roman. Je donnerais mon identifiant Skype ou Yahoo Messenger si on m’envoie un MP.

A bientôt!
Salut Pierrard,

Il n'y a aucun moyen de récupérer les animations de nwn2 dans blender. Si tu cherches au moins un squelette. Tu as les squelettes pour les différentes races fournis avec le plugin Blender.
http://nwvault.ign.com/View.php?view...s.Detail&id=94

Attention !!! Celui-ci ne fonctionne qu'avec Blender 2.5 (j'utilise le 2.59), ce qui est déjà plutot convivial.
merci à vous
Merci à vous,

Comme je le disais, Unity3D peut ajouter des animations standards à un personnage s'il en reconnait les articulations. Un elf ou orc ou nain pourront ainsi hériter des animations réalisées pour un humain, et il y en a déjà pas mal de fournies avec Unity3D.

J'aurais aimé pouvoir récupérer des araignées et autres monstres un peu plus exotiques avec le minimum d'effort, mais tant pis, si je n'ai que les squelettes à refaire et mapper des animations dessus, c'est déjà énormément de travail en moins.

Y'en a t'il parmis vous qui ont également essayer de porter des objets issus de NWN2 vers d'autres outils?

Amicalement,

Laurent
Salut Pierrard,

Il y avait autrefois un très bon explicatif de l'import d'objet de nwn2 et l'export vers un autre support sur esenthel.fr (malheureusement plus accessible).

Toutefois, par rapport à ce que j'ai lu sur unity. Il suffit de placer tes fichiers .blend dans le dossier de ton projet et unity l'importe au bon format à l'ouverture. Si cela marche sans bug, c'est une excellente nouvelle.
Citation :
Publié par HiPPiaS
Salut Pierrard,

Il y avait autrefois un très bon explicatif de l'import d'objet de nwn2 et l'export vers un autre support sur esenthel.fr (malheureusement plus accessible).

Toutefois, par rapport à ce que j'ai lu sur unity. Il suffit de placer tes fichiers .blend dans le dossier de ton projet et unity l'importe au bon format à l'ouverture. Si cela marche sans bug, c'est une excellente nouvelle.
Oui, d'ailleurs voici un lien vers un bon tuto d'export de Blender vers Unity3D se trouve ici.
http://cgcookie.com/unity/2011/12/05...-from-blender/
Si j'arrive à récupérer dans Blender des objets avec textures et animation de NWN2, le tour est joué

Merci
Merci
Je viens de le télécharger, je vais y jeter un oeuil.
De votre côté, s'il y en a qui sont intéressés par Unity3D et aimeraient me poser des questions, je me ferais un plaisir d'y répondre la limite de mes capacités.

Merci à vous,

Laurent P.
Bonjour,

Perso je voudrais surtout savoir si il y a des systèmes pratiques pour créer des...systèmes.J'entend par là porter les règles de add par exemple,créer des systèmes de compétences sans trop passer par la programmation.
tutoriaux Unity3D
Unity3D n'est pas un éditeur Aurora. Il n'a rien de "tout prêt, y'a plus qu'à poser les pièces". Il faut chercher des sources sur le web si tu n'es pas toi même développeur, mais heureusement les sources ne manquent pas, exemple;
http://www.unity3d-france.com/unity/...1-tutoriel-20/

Unity est par contre un outil de base, déjà très complet en soit et performant;
http://unity3d.com/unity/

Il y a aussi des kits tout prêt en vente sur le "asset store" de Unity3D, des plug-ins pour transformer Unity en éditeur de RPG,mais payant et pas forcemment avec les rêgles de JdR que tu espèrent. par exemple: https://www.assetstore.unity3d.com/#/content/6809

Regarde un peu sur le net les kit RPG pour Unity3D, tu verras aussi beaucoup de ressources sur YouTube
En fait je ne demandais pas si il y en avait de tous prêt mais si ils avaient un système simple d'implémenter pour les créer qui ne nécéssite pas de savoir coder comme une brute.
C'est a mon avis le plus gros soucis pour faire un portage sur un autre éditeur.(on serait déja sur le cry engine sinon )
(le fil déviant cependant il faudrait en rouvrir un ou le prochain gars en quète d'expotron va longuement arpenter les forums d'unity pour le trouver ^^.)

Dernière modification par Nagual ; 15/06/2013 à 17h08.
..
heu, je crois que j'ai répondu à cette question en disant justement qu'Unity n'est pas un environnement de création de RPG en soit, mais un moteur de rendu 3D, et qu'il faut ajouter des plug-ins payants pour pouvoir en faire un éditeur de jeu RPG (développé par d'autres personnes que la société Unity), ou bien les coder toit même (C sharp ou Javascript) ce qui reste à la portée des courageux grâce à de nombreux tutoriels disponibles sur le net.
Puisque j'ai bien compris que tu ne sais pas coder, il faudra te rabattre sur des kits à rajouter à Unity. Regarde le "asset store" du site d'Unity

Il est par contre beaucoup plus accessible au néophyte que le moteur Unreal, et Unity est aussi distribué en version gratuite. Avant de te poser plus de question, fais une petite recherche sur youtube pour les RPG réalisés sous Unity, et tu trouveras des choses superbes réalisées par une équipe d'un "one-man-team" souvent âgé de tout juste 25-30 ans.
Ne t'attend pas à réaliser une super-production qui sera vendue à la Fnac si tu es tout seul sur ton projet, mais il y a de quoi faire des petites choses sympas et si ton concept est bon tu arriveras à attirer du monde. Unity3D dispose d'une grosse communauté de personnes motivées. Individuellement seuls quelques uns arrivent à produire quelquechose, mais avec un bon concept, une équipe pourrait se souder et arriver à faire de très très belles choses.
Les rendus graphiques sont proches de ce que peut réaliser le moteur Unreal (shaders, DirectX11, etc..), il y a également des instructions pour réaliser des applis client-serveur, accès à une base de donnée SQLite côté serveur, et du son 3D (prise en compte de la direction de l'émetteur du son quand tu te déplaces dans l'environnement).
Tout ce que je viens de citer est incorporable dans ton jeu si tu ajoutes des plugins réalisés par la communauté. On n'a rien sans rien, il faut t'y coller un peu si tu veux faire quelquechose avec, ou alors prendre un kit RPG tout fait mais si tu n'es pas développeur tu ne sauras pas le modifier ou y ajouter les fonctionalités qui t'intéressent.

Cordialement

Dernière modification par pierrard ; 15/06/2013 à 17h16.
C'est, de loin , le moins compliquer

Par exemple dans dragon age la fonction pour savoir si oui ou non on a touché la cible :

Code:
int Combat_GetAttackResult(object oAttacker, object oTarget, object oWeapon, float fBonus = 0.0f, int nAbility = 0)
{

    // -------------------------------------------------------------------------
    // Debug
    // -------------------------------------------------------------------------
    int nForcedCombatResult = GetForcedCombatResult(oAttacker);
    if (nForcedCombatResult != -1)
    {
        #ifdef DEBUG
        Log_Trace_Combat("combat_h.GetAttackResult"," Skipped rules, FORCED RESULT IS:" + ToString(nForcedCombatResult), oTarget);
        #endif
        return nForcedCombatResult;
    }



    // -------------------------------------------------------------------------
    // Placeables are always hit
    // -------------------------------------------------------------------------
    if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
    {
        #ifdef DEBUG
        Log_Trace_Combat("combat_h.GetAttackResult"," Placeable, automatic result : COMBAT_RESULT_HIT", oTarget);
        #endif
        return COMBAT_RESULT_HIT;
    }


    // -------------------------------------------------------------------------
    // Displacement
    // -------------------------------------------------------------------------
    float fDisplace = GetCreatureProperty(oTarget, PROPERTY_ATTRIBUTE_DISPLACEMENT);
    float fRand = RandomFloat()*100.0;
    if ( fRand < fDisplace)
    {
        #ifdef DEBUG
        Log_Trace_Combat("combat_h.GetAttackResult"," Displacement effect kciked in, automatic result : COMBAT_RESULT_MISS", oTarget);
        #endif

        // ---------------------------------------------------------------------
        // if the target has the evasion talent, attribute this miss to the talent
        // (random 50% because the anim is interrupting)
        // ---------------------------------------------------------------------
        if (HasAbility(oTarget, ABILITY_TALENT_EVASION) && fRand < (20.0f - (RandomFloat()*10.0f)  ))
        {
                command currentCmd = GetCurrentCommand(oTarget);
                int nCmdType = GetCommandType(currentCmd);
                // Evasion only plays during attack and wait commands.
                if ( nCmdType == COMMAND_TYPE_WAIT || nCmdType == COMMAND_TYPE_ATTACK || nCmdType == COMMAND_TYPE_INVALID )
                {
                    ApplyEffectOnObject(EFFECT_DURATION_TYPE_INSTANT, Effect(1055), oTarget, 0.0f, oTarget, ABILITY_TALENT_EVASION);
                }
        }

        return COMBAT_RESULT_MISS;
    }



    int  nAttackType = Combat_GetAttackType(oAttacker, oWeapon);
    int nRet;

    // -------------------------------------------------------------------------
    // Get the attackers attack rating (includes effects and equipment stats)
    // -------------------------------------------------------------------------
    float   fAttackRating;

    if (GetBaseItemType(oWeapon) == BASE_ITEM_TYPE_STAFF)
    {
        // ---------------------------------------------------------------------
        // Staves always hit
        // ---------------------------------------------------------------------
        return COMBAT_RESULT_HIT;
    }



    fAttackRating =  GetCreatureAttackRating (oAttacker);

    // -------------------------------------------------------------------------
    // Add item stat (usually 0) along with scripted boni and attack bias.
    // -------------------------------------------------------------------------

    fAttackRating += GetItemStat(oWeapon,   ITEM_STAT_ATTACK) + fBonus + ATTACK_HIT_BIAS;

    // -------------------------------------------------------------------------
    // Easier difficulties grant the player a bonus.
    // -------------------------------------------------------------------------
    fAttackRating += Diff_GetRulesAttackBonus(oAttacker);


    // -------------------------------------------------------------------------
    // This section deals with figuring out which critical hit modifier (melee, ranged, etc)
    // to use for this attack.
    // -------------------------------------------------------------------------
    float   fCriticalHitModifier;
    int     nCriticalHitModifier  = (nAttackType == ATTACK_TYPE_RANGED) ?  CRITICAL_MODIFIER_RANGED : CRITICAL_MODIFIER_MELEE;



    fCriticalHitModifier = GetCreatureCriticalHitModifier(oAttacker, nCriticalHitModifier);
    fCriticalHitModifier += GetItemStat(oWeapon, ITEM_STAT_CRIT_CHANCE_MODIFIER);

    // -------------------------------------------------------------------------
    //  Bravery grants +3.5 critical hit per enemy past the first 2
    // -------------------------------------------------------------------------
    if (HasAbility(oAttacker, ABILITY_TALENT_BRAVERY))
    {

        int nEnemies = Max(0,GetArraySize(GetCreaturesInMeleeRing(oAttacker,0.0, 359.99f,TRUE,0))-2);
        fCriticalHitModifier +=  nEnemies * 3.5f;
    }


    // -------------------------------------------------------------------------
    // Calculate Flanking Bonus
    // -------------------------------------------------------------------------
    float fFlanking = Combat_GetFlankingBonus(oAttacker, oTarget);
    if (fFlanking > 0.0 )
    {
        // ---------------------------------------------------------------------
        // Also increase chance for critical hits by 1/5th of the flanking bonus
        // ---------------------------------------------------------------------
        fCriticalHitModifier *=  (1.0 + (fFlanking/5.0));
    }

    // -------------------------------------------------------------------------
    // Range plays a role too.
    // -------------------------------------------------------------------------
    float fDistance =  GetDistanceBetween(oAttacker, oTarget);
    float fNoPenaltyDistance = MaxF(POINT_BLANK_RANGE,GetItemStat(oWeapon, ITEM_STAT_OPTIMUM_RANGE));
    fDistance = MaxF(fDistance-fNoPenaltyDistance,0.0f);

    float fAttackRoll = 50.0;
    float fPenalties = fDistance; // every meter distance past the free range is -1!
    float fAttack = fAttackRating  + fAttackRoll + fFlanking - fPenalties;

    // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    // BEGIN SECTION CRITICAL HITS
    // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        int bThreatenCritical = (RandomFloat()*100.0f   < fCriticalHitModifier  );

        if (!bThreatenCritical)
        {
            // ---------------------------------------------------------------------
            // Attacking out of stealth always threatens crit.
            // ---------------------------------------------------------------------
            if (IsModalAbilityActive(oAttacker, ABILITY_SKILL_STEALTH_1))
            {
                bThreatenCritical = TRUE;
            }

            // -----------------------------------------------------------------
            // Death hex effect ... all hits are auto crit
            // -----------------------------------------------------------------
            if (GetHasEffects(oTarget, EFFECT_TYPE_DEATH_HEX))
            {
                bThreatenCritical = TRUE;
            }

            // -----------------------------------------------------------------
            // Autocrit effect
            // -----------------------------------------------------------------
            if (GetHasEffects(oAttacker, EFFECT_TYPE_AUTOCRIT))
            {
                bThreatenCritical = TRUE;
            }
        }
        else
        {
            // ---------------------------------------------------------------------
            // Double strike does not allow crits
            // ---------------------------------------------------------------------
            if (IsModalAbilityActive(oAttacker, ABILITY_TALENT_DUAL_WEAPON_DOUBLE_STRIKE))
            {
                bThreatenCritical = FALSE;
            }

            // rapid shot doesn't allow critical strikes
            if (IsModalAbilityActive(oAttacker, ABILITY_TALENT_RAPIDSHOT))
            {
                bThreatenCritical = FALSE;
            }
        }


        // ---------------------------------------------------------------------
        // Targets that have critical hit immunity can not be crit...
        // ---------------------------------------------------------------------
        if (bThreatenCritical)
        {
            Log_Trace_Combat("combat_h.GetAttackResult"," Critical hit averted, target has critical hit immunity", oTarget);
            bThreatenCritical = !HasAbility(oTarget, ABILITY_TRAIT_CRITICAL_HIT_IMMUNITY);
        }



    // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    // END SECTION CRITICAL HITS
    // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<




    // -------------------------------------------------------------------------
    // This section deals with calculating the defense values of the attack target
    // -------------------------------------------------------------------------
    float fDefenseRating =  GetCreatureDefense(oTarget) + ((nAttackType == ATTACK_TYPE_RANGED) ? GetCreatureProperty(oTarget,PROPERTY_ATTRIBUTE_MISSILE_SHIELD):0.0f);

    // -------------------------------------------------------------------------
    // Easier difficulties grant the player a bonus.
    // -------------------------------------------------------------------------
    fDefenseRating += Diff_GetRulesDefenseBonus(oTarget);

    // -------------------------------------------------------------------------
    // A hit is successful if the attack rating exceeds the defense rating
    // -------------------------------------------------------------------------
    if (RandomFloat()*100.0f <  fAttack - fDefenseRating)
    {

        // ---------------------------------------------------------------------
        // If we threatened a critical, we crit here, otherwise just report normal hit
        // ---------------------------------------------------------------------
        nRet =  ( (bThreatenCritical) ? COMBAT_RESULT_CRITICALHIT : COMBAT_RESULT_HIT  );

        if ( nAttackType == ATTACK_TYPE_MELEE)
        {
            // -----------------------------------------------------------------
            // If we are backstabbing, we change the result here if it
            // was a crit. Abilities never bs (anim priority)
            // -----------------------------------------------------------------
            if ( nAbility == 0 && Combat_CheckBackstab(oAttacker, oTarget, oWeapon,fFlanking))
            {
                    nRet =  COMBAT_RESULT_BACKSTAB;
            }
        }

    }
    // -------------------------------------------------------------------------
    // Miss...
    // -------------------------------------------------------------------------
    else
    {
        nRet = COMBAT_RESULT_MISS;

    }

    // -------------------------------------------------------------------------
    // Misdirection Hex
    // -------------------------------------------------------------------------
    if (GetHasEffects(oAttacker, EFFECT_TYPE_MISDIRECTION_HEX))
    {
        #ifdef DEBUG
        Log_Trace_Combat("combat_h.GetAttackResult"," Attacker under misdirection hex: Hits are misses, crits are hits.", oTarget);
        #endif

        if (nRet == COMBAT_RESULT_HIT || nRet == COMBAT_RESULT_BACKSTAB)
        {
            nRet = COMBAT_RESULT_MISS;
        }
        else if (nRet == COMBAT_RESULT_CRITICALHIT)
        {
            nRet = COMBAT_RESULT_HIT;
        }
    }


  //  return COMBAT_RESULT_BACKSTAB;

    #ifdef DEBUG
    Log_Trace_Combat("combat_h.GetAttackResult"," ToHit Calculation: " +
                     " fAttack:"  + ToString(fAttack) +
                     " = (fAttackRating: " + ToString(fAttackRating) +
                     " fAttackRoll:" + ToString(fAttackRoll) +
                     " (range penalty:" + ToString(fPenalties) + ")"+
                     " fFlanking: " + ToString(fFlanking) +
                     " fBonus(script): " + ToString(fBonus) +
                     ")" , oAttacker, oTarget, LOG_CHANNEL_COMBAT_TOHIT );

    Log_Trace_Combat("combat_h.GetAttackResult"," ToHit Calculation (2):  " +
                     " fDefenseRating: " + ToString(fDefenseRating) +
                     " fCriticalHitModifier: " + ToString(fCriticalHitModifier) +
                     " bThreatenCritical: " + ToString(bThreatenCritical), oAttacker, oTarget, LOG_CHANNEL_COMBAT_TOHIT );

    #endif

    return nRet;




}
Répondre

Connectés sur ce fil

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