JeuxOnLineForumsPlusConnectés : 519 (sites) | 1020 (forums)Créer un compte
Neverwinter Nights 2
La Tour des Arcanes
Répondre
Partager Outils Rechercher
clementC
Alpha & Oméga
 
Ensuite on choisit les advance skills, pour l'instant seulement 2 pour le barbarre, il faudra que je rajoute les advance skill de profession ainsi que les différents compétence d'artisanat.
Cliquez sur l'image pour la voir en taille réelle

Nom : NWN2_SS_073114_201018.jpg
Affichages : 70
Taille : 198,8 Ko
ID : 228310

PS : le combo YATT + world machine, marche bien pour les terrains.

Dernière modification par clementC ; 31/07/2014 à 21h00.
Lien direct vers le message - Vieux
Nagual
Roi / Reine
 
Salut Clément,

Juste pour savoir si tu étais toujours sur ton projet ou si tu étais passé a autre chose?

Si tu as laché le truc c'était par soucis technique ou a cause de la somme de travail?(ça semblait assez titanesque)
Lien direct vers le message - Vieux
clementC
Alpha & Oméga
 
Citation:
Juste pour savoir si tu étais toujours sur ton projet ou si tu étais passé a autre chose?
Je l'ai laissé en stand by. C'est ni une question technique ni une une question de charge de travail. Ce qui demanderai une équipe à part entiere de game designer serait un systeme à base de compétence passif et de competence active à base de cooldown, hors j'ai jamais eu l'intention de concevoir un hack 'n slash.

Non le probleme vient du fait que ce je racontes sur ce forum n'a pas beaucoup de sens pour la generation post world of warcraft. Ce qu'ils ne savent pas c'est que quant vous jouez à wow ou tous les mmo qui suivirent, vous jouez à legendMud. LegendMud était une fenêtre de chat, ou pour combattre les enemis ils fallaient rentré des lignes de commands. Il y avait la saint trinite guerrier soigneur nuker, et les competences actives à base de cooldowns, et les points de vie qui augmentait à chaque levels. Et oui on joue toujours au même jeux depuis 20 ans. Mais avant que wow se pointe et décide que se qui compte avant tout se sont des tonnes de contenu static generer par une armée (au moins 200 personnes) de level designer, et bien les game designer cherchait à recreer des mondes dynamiques. Par exemple un marchand te demande d'aller lui chercher des provisions à l'autre bout du pays, non pas aprceque un level designer à pondu cettte quete, mais parce que sans toi, ce marchand ne vend plus de marchandise. Donc les autres joueurs ne peuvent plus rien lui acheter. Voila ce qu'est un monde dynamique, et non ce n'es tpas une idée revolutiionaire comme certain adorait lacher pour se payer ma tête, ça au moins 20 ans que ça existe, il faut juste faire abstraction qu'everquest puis son clone ultime wow n'est jamais existé.

Donc neverwinter grace à l'outils dm est parfait pour creer des mondes dynamique sans avoir à construire de mecanisme de simulation de vie, comme c’était le cas dans ultima online, le dragon qui cherchait a se nourrir et quant il ne trouvait plus de nourriture il s'attaqué au humains. Puis si il était rassasié il se mettait en quete de pierre précieuses.

Sauf qu'il ya un gros problème, un trés gros problème. Ca ennuie profondement les dm de faire ça. Ca les gonfles. Ils preferrent attendre que les joueurs leur demande d'incarner un pnj, par exemple un ambassadeur. C'est simple, ils ont juste à repondre à leur question. Et de temps en temps faire une anime, des evenement qui se produisent en autarcies , qui apparaissent spontanement puis disparaisse aussi vite qu'ils sont apparus. Ca me fait penser à certains evenement dans skyrim, les dynamique point of interest. Vous savez par exemple quant un fugitif vient vous donner une arme pour la cacher, et un chasseur vient vous demander si vous avez vu quelqun d'autre dans les parages. Et bienc 'est exactement ça. QUant je vois ce genre de scene je suis mort de rire car je sais que ne reverrais plus jamais ces deux personnages, que c'était juste un mauvais rêve. Ou alors les dm demandent au pj de proposer des projets original, comme construire un bateau pour devenir pirates, ou ouvrir une bibliothèque. Ca fait passer le temps.

Comem projet actuel j'essaie de faire en sorte que l'unreal engine importe automatiquement les assets de dragon age origin, le dernier jeu modable de bioware( jeux que personne ne modifiat à part des changement du genre equilibrage de gameplay et ajout de coupe de cheuveu , le bulshit habituelle, le mêm que skyrim au passage.). Les fichiers erf sont juste des archives contenant des fichiers binaires gff. Et grace au code source de la ligne de command de tazpn, j'ai tout ce qu'il faut pour lire ces fichiers et les transformer en model et animations, et autre.

Maintenant le probleme c'est à quoi cela va servir. Car si c'est pour faire le même jeu ou les dm sont disponible seulement pour incarner un pnj, et les pjs jouent toujours le meme personnage, malgres des noms different, ca va etre mechament complique pour moi d'avoir une raison valable pour continuer. Et c'est même pas la peine de lancer ce genre de conversion sur les forum des modules existants, c'est le meilleur façon de voir son post disparaitre et de se faire bannir .

Dernière modification par clementC ; 18/05/2015 à 09h43. Motif: Unrel engine
Lien direct vers le message - Vieux
Avatar de OnTheAir
OnTheAir
Vicomte / Vicomtesse
 
Avatar de OnTheAir
 
Bonjour ClémentC,

A te lire, je me rends compte de l'étendue de tes compétences... "numérico/gamer". (Pour être moi-même etc...)
Je regrette que tes interventions n'aient pas toujours été appréciées comme elles auraient du l'être en son heure.
Lien direct vers le message - Vieux
Nagual
Roi / Reine
 
C'était surtout pour les solutions multithread que je te posais la question en fait.

Pour le reste on en a déjà discuté,je partage tes opinions sur la fixité des modules.
Lien direct vers le message - Vieux
clementC
Alpha & Oméga
 
J'utilise le dataflow de microsoft c'est assez rapide :

ce code creer un personnage sur un autre thread.

Code:
 public class ActionCreateCharacter : IAction
    {
        public ActionCreateCharacter( string bic, uint oPC)
        {
            m_bic = bic;
            m_oPC = oPC;
        }

        public void Run()
        {
            var memcached = Global.Redis.GetDatabase();
            if (memcached.KeyExists(m_bic))
            {
                return ;
            }

            using (var db = new Database.DatabaseContext())
            {
                var query = from pc in db.player_character
                            where pc.bic == m_bic
                            select pc;
                if (query.Any())
                {
                    var pc = query.First();
                    memcached.HashSet(m_bic, new HashEntry[] { new  HashEntry("first_name", pc.first_name), new HashEntry("last_name",  pc.last_name), new HashEntry("race", pc.race) });
                    return ;
                }

                Global.CommandBuffer.Post(new CommandGetPlayerCharacterInfo(m_oPC, m_infoBlock));
                m_infoBlock.OutputAvailableAsync().Wait();
                var info = m_infoBlock.Receive();

               
                    var data = db.player_character.CreateObject();
                    data.bic = m_bic;
                    data.first_name = info.firstName;
                    data.last_name = info.lastName;
                    data.race = info.race;

                    db.player_character.AddObject(data);
                    db.SaveChanges();

                    memcached.HashSet(m_bic, new HashEntry[] { new  HashEntry("first_name", info.firstName), new HashEntry("last_name",  info.lastName), new HashEntry("race", info.race) });

            }
        }

        string m_bic;
        uint m_oPC;

        WriteOnceBlock<playerCharacterInfo> m_infoBlock = new WriteOnceBlock<playerCharacterInfo>(null);

    }
Code:
   public void Init()
        {
            m_actionQueue.Post(new ActionCreateCharacter(m_bic,m_oPC));

           
        }
     public ActionBlock<IAction> m_actionQueue = new ActionBlock<IAction>((action) => { action.Run(); });
J'execute un script toutes les 30/ 100 de secondes qui consomme les commande qui sont mis en mémoire dans le buffer.

Code:
using NWScript.ManagedInterfaceLayer.NWScriptManagedInterface;
using IronKingdoms;
using System.Threading;
using System.Threading.Tasks.Dataflow;


using NWEffect = NWScript.NWScriptEngineStructure0;
using NWEvent = NWScript.NWScriptEngineStructure1;
using NWLocation = NWScript.NWScriptEngineStructure2;
using NWTalent = NWScript.NWScriptEngineStructure3;
using NWItemProperty = NWScript.NWScriptEngineStructure4;

namespace IronKingdoms
{
    public partial class update : CLRScriptBase, ICLRScriptImplementation, IGeneratedScriptProgram
    {

        public update([In] NWScriptJITIntrinsics Intrinsics, [In] INWScriptProgram Host)
        {
            InitScript(Intrinsics, Host);
        }

        private update([In] update Other)
        {
            InitScript(Other);

            LoadScriptGlobals(Other.SaveScriptGlobals());
        }

        //
        // Include the list of types for parameters to the main function here.
        // An empty list means no parameters.
        //
        public static Type[] ScriptParameterTypes = { };

        public Int32 ScriptMain([In] object[] ScriptParameters, [In] Int32 DefaultReturnCode)
        {
            IList<ICommand> commandList;
            if (Global.CommandBuffer.TryReceiveAll(out commandList))
            {
                foreach (var command in commandList)
                {
                    command.Run(this);
                }
            }

            DelayCommand(0.03f, delegate() { ExecuteScript(SCRIPT_NAME, OBJECT_SELF); });
            
            return DefaultReturnCode;
        }
        private const string SCRIPT_NAME = "update";
    }
}
les classes necessaires :

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading.Tasks.Dataflow;
using StackExchange.Redis;
using CLRScriptFramework;

namespace IronKingdoms
{
    public static class Global
    {
        public static ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect("localhost");
        public static BufferBlock<ICommand> CommandBuffer = new BufferBlock<ICommand>();
    }

    public interface IAction
    {
        void Run();

    }

    public interface ICommand
    {

        void Run(CLRScriptBase scriptBase);
    }
}
Code:
 public struct playerCharacterInfo
    {
        public string firstName;
        public string lastName;
        public int race;
    }

   
    public class CommandGetPlayerCharacterInfo : ICommand
    {
        public CommandGetPlayerCharacterInfo(uint oPC, WriteOnceBlock<playerCharacterInfo> infoBlock)
        {
            m_oPC = oPC;
            m_infoBlock = infoBlock;
        }

        public void Run( CLRScriptBase scriptBase)
        {
            playerCharacterInfo info;
            info.firstName =  scriptBase.GetFirstName(m_oPC);
            info.lastName = scriptBase.GetLastName(m_oPC);
            info.race = scriptBase.GetRacialType(m_oPC);
         
            m_infoBlock.Post(info);
        }

        uint m_oPC;
        WriteOnceBlock<playerCharacterInfo> m_infoBlock;

    }
Lien direct vers le message - Vieux
Répondre

Connectés sur ce fil

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

Outils Rechercher
Rechercher:

Recherche avancée

Thème visuel : Fuseau horaire GMT +2. Il est actuellement 13h23.
   

© 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