示例#1
0
文件: Game.cs 项目: bilwis/SH2RL
        public void InitLoad(string profile_name)
        {
            string path = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(typeof(Game)).CodeBase);
            path = path.Remove(0, 6);
            string newPath = System.IO.Path.Combine(path, "profiles", profile_name);
            ProfilePath = newPath;

            //Initialize the database(s)
            InitDB(newPath);

            facman = new FactionManager();
            rand = new Random();

            //Load the data from the save.dat
            FileStream fstream = new FileStream(System.IO.Path.Combine(ProfilePath, "save.dat"), FileMode.Open);
            StreamReader sreader = new StreamReader(fstream);

            string pdat = "00", fdat = "00";
            int[] wm_param = new int[7];
            string[] temp;
            while (!sreader.EndOfStream)
            {
                temp = sreader.ReadLine().Split('=');
                switch (temp[0])
                {
                    case "Version":
                        if (temp[1] != currentVersionCode)
                            throw new Exception("Error while loading profile: save.dat not at current version");
                        break;
                    case "MapSeed":
                        if (!UInt32.TryParse(temp[1], out seed))
                            throw new Exception("Error while loading profile: MapSeed is not a number.");
                        break;
                    case "FactionData":
                        fdat = temp[1];
                        break;
                    case "PlayerData":
                        pdat = temp[1];
                        break;
                    case "CellWidth":
                        if (!Int32.TryParse(temp[1], out wm_param[0]))
                            throw new Exception("Error while loading profile: CellWidth is not a number.");
                        break;
                    case "CellHeight":
                        if (!Int32.TryParse(temp[1], out wm_param[1]))
                            throw new Exception("Error while loading profile: CellHeight is not a number.");
                        break;
                    case "CellDepth":
                        if (!Int32.TryParse(temp[1], out wm_param[2]))
                            throw new Exception("Error while loading profile: CellDepth is not a number.");
                        break;
                    case "CellsX":
                        if (!Int32.TryParse(temp[1], out wm_param[3]))
                            throw new Exception("Error while loading profile: CellsX is not a number.");
                        break;
                    case "CellsY":
                        if (!Int32.TryParse(temp[1], out wm_param[4]))
                            throw new Exception("Error while loading profile: CellsY is not a number.");
                        break;
                    case "CellsZ":
                        if (!Int32.TryParse(temp[1], out wm_param[5]))
                            throw new Exception("Error while loading profile: CellsZ is not a number.");
                        break;
                    case "GroundLevel":
                        if (!Int32.TryParse(temp[1], out wm_param[6]))
                            throw new Exception("Error while loading profile: GroundLevel is not a number.");
                        break;
                }
            }

            //Deserialize player
            Faction _fac;

            byte[] data;

            MemoryStream mstream = new MemoryStream();
            BinaryFormatter deserializer = new BinaryFormatter();

            data = Util.ConvertDBString(fdat);

            //Write the converted byte array into the MemoryStream (and reset it to origin)
            mstream.Write(data, 0, data.Length);
            mstream.Seek(0, SeekOrigin.Begin);

            //Deserialize the faction object itself
            _fac = (Faction)deserializer.Deserialize(mstream);

            _fac.Init(facman);

            mstream.SetLength(0);
            mstream.Seek(0, SeekOrigin.Begin);

            data = Util.ConvertDBString(pdat);

            //Write the converted byte array into the MemoryStream (and reset it to origin)
            mstream.Write(data, 0, data.Length);
            mstream.Seek(0, SeekOrigin.Begin);

            //Deserialize the player
            player = (Player)deserializer.Deserialize(mstream);

            player.Init(TCODColor.yellow, Out, _fac, new Objects.Action(ActionType.Idle, null, player, 0.0d));

            //SETUP MAP AND WORLDMAP, ADD PLAYER
            wm = new WorldMap(seed, dbconn, wm_param);
            map = new Map(player, wm, Out, facman, dbconn, MAIN_HEIGHT - 2, WINDOW_WIDTH - 2);

            RenderLoadingScreen();

            player.SetPosition(player.X, player.Y, map.DropObject(player.X, player.Y, player.Z + 1));
            map.AddCreature(player);
            Out.SendMessage("Profile " + ProfileName + " successfully loaded. Last played: " + File.GetLastWriteTime(Path.Combine(ProfilePath, "save.dat")) + ".");

            mstream.Close();
            sreader.Close();
            fstream.Close();
        }
示例#2
0
文件: Game.cs 项目: bilwis/SH2RL
        public void InitNew(string profile_name, uint map_seed)
        {
            string path = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(typeof(Game)).CodeBase);
            path = path.Remove(0, 6);
            string newPath = System.IO.Path.Combine(path, "profiles", profile_name);
            Directory.CreateDirectory(newPath);

            ProfilePath = newPath;

            InitDB(newPath);

            rand = new Random();

            facman = new FactionManager();
            Faction player_faction = new Faction("Player", "The player");
            player_faction.Init(facman);

            //Faction human_faction = new Faction("Humans", "The surviors of their self-made cathastrophe.");
            Faction test_faction = new Faction("TESTFAC", "TEST FACTION PLEASE IGNORE");
            //human_faction.Init(facman);
            test_faction.Init(facman);

            //human_faction.AddRelation(test_faction, FactionRelation.Hostile);
            test_faction.AddRelation(player_faction, FactionRelation.Hostile);

            root.setBackgroundFlag(TCODBackgroundFlag.Default);

            player = new Player(1300, 1300, 35, "Player", "A ragged and scruffy-looking individual.", '@', new Body(BODY_DEF_HUMAN), new CharStats(10, 10, 10));

            player.Init(TCODColor.yellow, Out, player_faction, new Objects.Action(ActionType.Idle, null, player, 0.0d));

            Out.SendMessage("Welcome to [insert game name here]!", Message.MESSAGE_WELCOME);
            Out.SendMessage("You wake up in a damp and shoddy shack. Or maybe a patch of dirt. Depends on the games' version.");

            //Default map parameters
            int[] parameters = new int[7];
            parameters[0] = 200; //CellWidth
            parameters[1] = 200; //CellHeight
            parameters[2] = 20; //CellDepth

            parameters[3] = 10; //CellsX
            parameters[4] = 10; //CellsY
            parameters[5] = 6; //CellsZ

            parameters[6] = 45; //GroundLevel

            wm = new WorldMap(map_seed, dbconn, parameters);
            map = new Map(player, wm, Out, facman, dbconn, MAIN_HEIGHT - 2, WINDOW_WIDTH - 2);

            RenderLoadingScreen();

            player.SetPosition(player.X, player.Y, map.DropObject(player.X, player.Y, player.Z + 1));
            map.AddCreature(player);

            //testai = new AICreature(1301, 1301, 31, "TEST", "TEST CREATURE PLEASE IGNORE", 'A', new Body(BODY_DEF_HUMAN), new CharStats(10,10,10));
            //testai.Init(TCODColor.orange, Out, test_faction, new Objects.Action(ActionType.Idle, null, testai, 0.0d), new WalkerAI(rand.Next(0, 100000000)), map);
            //testai_guid = testai.GUID;
            //map.AddCreature(testai);

            dummy = new Creature(1299, 1299, 31, "TEST", "A Training Dummy.", 'D', new Body(BODY_DEF_HUMAN), new CharStats(10, 10, 10));
            dummy.Init(TCODColor.turquoise, Out);
            map.AddCreature(dummy);

            List<FireMode> gl_fm = new List<FireMode>();
            gl_fm.Add(FireMode.Semi);
            gl_fm.Add(FireMode.Burst2);
            testgun = new Firearm(1299, 1301, 31, "Glock 17C", "A semi-automatic pistol manufactured by Austrian Glock Ges. m.b.H. Large parts of it are manufactured from extremely resilient high-strengh polymer and it chambers NATO standard 9x19mm Parabellum rounds. It has a magazine capacity of 17 rounds. The C Variant features slots cut into the barrel and slide compensating for muzzle rise and recoil. It is one of the most commonly used firearms in US law enforcement and enjoys great popularity in the gun community.", 'F', 5.0d, new Caliber(9d, 19d), GunType.Pistol, gl_fm, 17);
            testgun.Init(TCODColor.grey, Out);

            testmag = new Magazine(1301, 1299, 31, "9mm Clip", "TEST MAG PLEASE IGNORE.", 'M', 0.75d, 30, 30, new Caliber(5.56d, 45.0d), AmmoModifier.Regular);
            testmag.Init(TCODColor.brass, Out);

            Item temp = new Item(1302, 1300, 31, "Apple", "A tasty red apple. Possibly Braeburn.", 'F', 0.3d);
            temp.Init(TCODColor.red, Out);

            LightSource p_torch = new LightSource(1300, 1300, 31, 50, 10, "Torch", "A torch.", '!', 1.0d);
            p_torch.Init(TCODColor.orange, Out);

            map.AddItem(testgun);
            map.AddItem(testmag);
            map.AddItem(temp);
            map.AddItem(p_torch);

            //AICreature testai2 = new AICreature(290, 290, 15, "TEST2", "TEST CREATURE PLEASE IGNORE", 'B');
            //testai2.Init(TCODColor.orange, Out, test_faction, new Objects.Action(ActionType.Idle, null, testai, 0.0d), new WalkerAI(rand.Next(0, 10000000)), map);
            //map.AddCreature(testai2);

            //Item test_item = new Item(1299, 1299, map.DropObject(1299, 1299, 35), "Shimmering rock", "A shining polished rock which seems to change color when you look at it.", (char)'*');
            //LightSource test_item = new LightSource(1299, 1299, map.DropObject(1299, 1299, 35), 12, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*');
            //test_item_guid = test_item.GUID;
            //test_item.Init(TCODColor.red, Out);
            //test_item.Activate();
            //map.AddItem(test_item);

            LightSource test_item2 = new LightSource(1295, 1310, map.DropObject(1299, 1299, 35), 50, 10, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*', 1.0d);
            test_item2.Init(TCODColor.blue, Out);
            test_item2.Activate();
            map.AddItem(test_item2);

            LightSource test_item3 = new LightSource(1315, 1283, map.DropObject(1299, 1299, 35), 50, 10, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*', 1.0d);
            test_item3.Init(TCODColor.green, Out);
            test_item3.Activate();
            map.AddItem(test_item3);

            LightSource test_item4 = new LightSource(1315, 1319, map.DropObject(1299, 1299, 35), 50, 10, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*', 1.0d);
            test_item4.Init(TCODColor.orange, Out);
            test_item4.Activate();
            map.AddItem(test_item4);

            LightSource test_item5 = new LightSource(1291, 1283, map.DropObject(1299, 1299, 35), 50, 10, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*', 1.0d);
            test_item5.Init(TCODColor.red, Out);
            test_item5.Activate();
            map.AddItem(test_item5);

            LightSource test_item6 = new LightSource(1305, 1300, map.DropObject(1299, 1299, 35), 50, 10, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*', 1.0d);
            test_item6.Init(TCODColor.pink, Out);
            test_item6.Activate();
            map.AddItem(test_item6);

            LightSource test_item7 = new LightSource(1291, 1293, map.DropObject(1299, 1299, 35), 50, 10, "Shimmering Rock", "A shining polished rock which seems to change color when you look at it.", (char)'*', 1.0d);
            test_item7.Init(TCODColor.violet, Out);
            test_item7.Activate();
            map.AddItem(test_item7);
        }
示例#3
0
文件: Creature.cs 项目: bilwis/SH2RL
        public void Move(int x, int y, int z, Map m, bool overrideAll = false)
        {
            bool isDiag = false;

            if (x * y != 0 || x * z != 0 || y * z != 0)
                isDiag = true;

            if (overrideAll)
                Actions.Clear();

            if (!flying)
            {
                if (checkMovement(x, y, z, m))
                {
                    if (isDiag)
                        Actions.Enqueue(new Action(ActionType.Move, new MovementActionParameters(x, y, m.DropObject(x, y, z), m), this, EDiagMovementCost));
                    else
                        Actions.Enqueue(new Action(ActionType.Move, new MovementActionParameters(x, y, m.DropObject(x, y, z), m), this, EMovementCost));
                }
                else
                {
                    Debug.WriteLine("MOVEMENT IMPOSSIBLE");
                }
            }
                //SetPosition(x, y, z);
        }