public override void doDie(Creature killer)
    {
        World.getInstance().unregisterTower(this);
        World.getInstance().unregisterTowerBySpawn(_spawn);

        _gameInstance.GetComponent <HealthBarController> ().destroy();

        Vector3 originalPos = getGameInstance().transform.position;

        GameObject.Destroy(getGameInstance());

        GameObject fracturedInstance = GameObject.Instantiate(
            getTower().getFracturedAsset(), World.getInstance().getTerrainTransform()) as GameObject;

        fracturedInstance.transform.position = originalPos;
        fracturedInstance.AddComponent <TowerCollapse> ().Propagate = true;

        GameObject ps = ParticleSystemTable.getInstance().instantiateParticleSystem("PS_Collapse");

        ps.transform.position = originalPos;
        ps.AddComponent <ParticleSystemCollector> ();
        ps.GetComponent <ParticleSystem> ().Play();
        ps.AddComponent <AudioSource> ().loop = false;
        SoundTable.getInstance().getAudioPlayer(ps.GetComponent <AudioSource> (), "sound_collapse");
        ps.GetComponent <AudioSource> ().Play();
        CameraShake.INSTANCE.prepareShake();

        PlatfromSpawnTable.getInstance().enablePlatform(_spawn);
        SpawnTable.getInstance().releaseSpawn(_spawn);
    }
        public virtual void init()
        {
            Message("Siege registration of " + name + " has begun!");
            Message("Now its open for 2 hours!");

            npc4 = (L2Character)SpawnTable.getInstance().spawnOne(MessengerId, spawn4[0], spawn4[1], spawn4[2], spawn4[3]);
        }
Example #3
0
 public L2Warehouse(SpawnTable spawnTable, int objectId, NpcTemplate template, L2Spawn spawn) : base(spawnTable, objectId, template, spawn)
 {
     Template = template;
     Name     = template.Name;
     Initialize();
     this.spawn = spawn;
 }
    private static SpawnTable AddSpawnTableTo(List <SpawnTable> inTables, int inMinDungeonLevel, int inMaxDungeonLevel)
    {
        //max must ALWAYS be greater than min
        if (inMaxDungeonLevel <= inMinDungeonLevel)
        {
            throw new System.Exception("tried to add an item table where the max level wasn't greater than the min");
        }

        //min must be EXACTLY one greater than the previous max (if no previous item table, it MUST be 1)
        int requiredMin = 1;

        if (inTables.Count > 0)
        {
            requiredMin = inTables[inTables.Count - 1].dungeonLevelRange.max + 1;
        }

        if (inMinDungeonLevel != requiredMin)
        {
            throw new System.Exception("tried to add an item table that didn't have the required min level of " + requiredMin);
        }

        SpawnTable t = new SpawnTable(inMinDungeonLevel, inMaxDungeonLevel);

        inTables.Add(t);

        return(t);
    }
Example #5
0
        public GameSpawnAsset(DataReader data, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
        {
            int num = data.ReadInt32("Roots");

            insertRoots = new List <SpawnTable>(num);
            for (int i = 0; i < num; i++)
            {
                SpawnTable spawnTable = new SpawnTable();
                spawnTable.spawnID    = data.ReadUInt16($"Root_{i}_Spawn_ID", 0);
                spawnTable.isOverride = data.Has($"Root_{i}_Override");
                spawnTable.weight     = data.ReadInt32($"Root_{i}_Weight", spawnTable.isOverride ? 1 : 0);
                spawnTable.chance     = 0f;
                insertRoots.Add(spawnTable);
            }
            _roots = new List <SpawnTable>(num);
            int num2 = data.ReadInt32("Tables");

            _tables = new List <SpawnTable>(num2);
            for (int j = 0; j < num2; j++)
            {
                SpawnTable spawnTable2 = new SpawnTable
                {
                    assetID = data.ReadUInt16($"Table_{j}_Asset_ID", 0),
                    spawnID = data.ReadUInt16($"Table_{j}_Spawn_ID", 0),
                    weight  = data.ReadInt32($"Table_{j}_Weight"),
                    chance  = 0f
                };
                tables.Add(spawnTable2);
            }
            areTablesDirty = true;
        }
    public void spawnPlatforms()
    {
        foreach (GameObject obj in _spawnPlatforms.Values)
        {
            GameObject.Destroy(obj);
        }
        _spawnPlatforms.Clear();

        Dictionary <byte, SpawnPoint> towerSpawns = SpawnTable.getInstance().getTowerSpawns();

        Material[] platformMat = { Resources.Load("Materials/glowing_platform") as Material };

        foreach (byte index in towerSpawns.Keys)
        {
            SpawnPoint sp = towerSpawns [index];

            //SpawnTable.SpawnPoint sp = to
            Vector3[] vertices =
            {
                new Vector3(0,                        0,                        0),
                new Vector3(0,                        0, Constants.VERTEX_SPACING),
                new Vector3(Constants.VERTEX_SPACING, 0,                        0),
                new Vector3(Constants.VERTEX_SPACING, 0, Constants.VERTEX_SPACING)
            };

            GameObject empty = new GameObject();
            empty.name           = "spawn_position_" + index;
            empty.transform.name = empty.name + "_transform";
            empty.AddComponent <MeshFilter> ();
            empty.AddComponent <MeshRenderer> ();

            int[] faces =
            {
                0, 3, 2,
                0, 1, 3
            };

            Mesh platform = new Mesh();
            platform.vertices  = vertices;
            platform.triangles = faces;

            platform.RecalculateNormals();

            empty.GetComponent <MeshFilter> ().mesh        = platform;
            empty.GetComponent <MeshRenderer> ().materials = platformMat;

            empty.transform.parent = World.getInstance().getTerrainTransform();
            Vector3 emptyPos = Formulas.getPositionInMap(sp.getAveragePosition());
            emptyPos.y += 0.1f;
            emptyPos.x -= Constants.VERTEX_SPACING / 2.0f;
            emptyPos.z -= Constants.VERTEX_SPACING / 2.0f;
            empty.transform.position = emptyPos;

            empty.AddComponent <BoxCollider> ();
            empty.AddComponent <SpawnIndex> ();
            empty.GetComponent <SpawnIndex> ()._spawnIndex = index;

            _spawnPlatforms.Add(index, empty);
        }
    }
    public SwarmOrder createOrder(byte source, byte target, int spawnZone)
    {
        PathSolution ps = _computedPaths [spawnZone];

        if (source != 0)
        {
            ps = ps.getSpecifiSolution(source);
        }

        Vector3         targetAvgPos = new Vector3();
        Queue <Vector3> path         = null;

        if (target == MAIN_TARGET)
        {
            path         = ps.getPathToTarget();
            targetAvgPos = SpawnTable.getInstance().getTargetSpawns() [0].getAveragePosition();
        }
        else
        {
            path = ps.getPathToTower(target);

            if (path == null)
            {
                Debug.Log("Null order. source: " + source + ", target: " + target + ", spawnZone: " + spawnZone);
                return(null);
            }

            targetAvgPos = SpawnTable.getInstance().getTowerSpawns() [target].getAveragePosition();
        }

        SwarmOrder order = new SwarmOrder(target, targetAvgPos, path);

        return(order);
    }
Example #8
0
 public L2Trainer(SpawnTable spawnTable, int objectId, NpcTemplate template, L2Spawn spawn) : base(spawnTable, objectId, template, spawn)
 {
     Template = template;
     Name     = template.Name;
     InitializeCharacterStatus();
     CharStatus.SetCurrentHp(MaxHp);
     CharStatus.SetCurrentMp(MaxMp);
     //Stats = new CharacterStat(this);
 }
Example #9
0
 public L2Npc(SpawnTable spawnTable, int objectId, NpcTemplate template, L2Spawn spawn) : base(objectId, template)
 {
     Template = template;
     Name     = Template.Name;
     Initialize();
     CharStatus.SetCurrentHp(MaxHp);
     CharStatus.SetCurrentMp(MaxMp);
     this.spawn = spawn;
     //CStatsInit();
 }
Example #10
0
    private void updateObstacleGridWithTowers()
    {
        Dictionary <byte, SpawnPoint> towerSpawns = SpawnTable.getInstance().getTowerSpawns();

        foreach (byte key in towerSpawns.Keys)
        {
            SpawnPoint sp = towerSpawns [key];

            foreach (int vertexIndex in sp.getBounds().Keys)
            {
                _obstacleGrid [vertexIndex] = key;
                _maxPossiblePositions++;
            }
        }
    }
Example #11
0
    public void setPositionGrid(Vector3[] positions, byte[] obstacleGrid)
    {
        _obstacleGrid = obstacleGrid;
        _positions    = new Vector3[positions.Length];

        for (int i = 0; i < positions.Length; i++)
        {
            _positions [i] = Formulas.getPositionInMap(positions [i]);
            if (_obstacleGrid [i] == Pathfinder.WALKABLE_CELL)
            {
                _maxPossiblePositions++;
            }
        }

        updateObstacleGridWithTowers();

        SpawnPoint target = SpawnTable.getInstance().getTargetSpawns() [0];

        _maxPossiblePositions += target.getBounds().Count;
    }
Example #12
0
    public void preComputePaths()
    {
        _computedPaths.Clear();

        Dictionary <int, SpawnPoint> enemySpawns = SpawnTable.getInstance().getMonsterSpawnPoints();

        foreach (int soldierSpawnIndex in enemySpawns.Keys)
        {
            SpawnPoint spawnObject = enemySpawns [soldierSpawnIndex];

            SpawnPoint target = SpawnTable.getInstance().getTargetSpawns() [0];
            float      closer = Mathf.Infinity;
            int        index  = 0;
            foreach (int vIndex in target.getBounds().Keys)
            {
                float sqrtMag = (target.getBounds() [vIndex] - spawnObject.getAveragePosition()).sqrMagnitude;
                if (sqrtMag < closer)
                {
                    closer = sqrtMag;
                    index  = vIndex;
                }
            }

            Vector3      finalTarget = Formulas.getPositionInMap(target.getBounds() [index]);
            Pathfinder   pf          = new Pathfinder(spawnObject, finalTarget);
            PathSolution ps          = pf.computePaths();

            GameObject go = new GameObject("Spawn_Zone_Controller_" + soldierSpawnIndex);
            go.transform.parent   = World.getInstance().getTerrainTransform();
            go.transform.position = Formulas.getPositionInMap(spawnObject.getAveragePosition());               // Irrelevant, but still...
            go.AddComponent <SpawnZoneController> ()._spawnZone = soldierSpawnIndex;
            _spawnZoneControllers.Add(soldierSpawnIndex, go);

            _computedPaths.Add(soldierSpawnIndex, ps);
        }

        SwarmAI.getInstance().initialize(_computedPaths);
    }
        public virtual void start()
        {
            isActive = true;
            Message("Siege of " + name + " has begun!");
            npc1       = (L2Character)SpawnTable.getInstance().spawnOne(BossId, spawn1[0], spawn1[1], spawn1[2], spawn1[3]);
            npc2       = (L2Character)SpawnTable.getInstance().spawnOne(Minion1Id, spawn2[0], spawn2[1], spawn2[2], spawn2[3]);
            npc3       = (L2Character)SpawnTable.getInstance().spawnOne(Minion2Id, spawn3[0], spawn3[1], spawn3[2], spawn3[3]);
            npc4       = (L2Character)SpawnTable.getInstance().spawnOne(MessengerId, spawn4[0], spawn4[1], spawn4[2], spawn4[3]);
            clanDamage = new SortedList <int, double>();
            mobActive  = new List <L2Character>();

            foreach (int[] sp in mobSpawns)
            {
                L2Character o = (L2Character)SpawnTable.getInstance().spawnOne(sp[0], sp[1], sp[2], sp[3], sp[4]);
                mobActive.Add(o);
            }

            TimeSiege          = new Timer();
            TimeSiege.Interval = 3600000;// 60 минут
            TimeSiege.Elapsed += new ElapsedEventHandler(TimeSiegeEnd);

            Message("Guards " + mobActive.Count + "! 60 min left");
        }
Example #14
0
 public L2Warrior(SpawnTable spawnTable, int objectId, NpcTemplate template, L2Spawn spawn) : base(spawnTable, objectId, template, spawn)
 {
 }
 private void OnEnable()
 {
     _spawnTable = (SpawnTable)target;
 }
Example #16
0
 public AdminSpawnNpc(IServiceProvider serviceProvider) : base(serviceProvider)
 {
     _idFactory  = serviceProvider.GetService <IdFactory>();
     _spawnTable = serviceProvider.GetService <SpawnTable>();
 }
Example #17
0
        static void Main(string[] args)
        {
            Console.WriteLine("Soda Dungeon Adventure System");

            //initialize data that the adventure requires to run
            Stats.BuildDefaultStats();
            SkillId.CacheIds();
            Skill.CreateSkills();
            DungeonData.CreateDungeons();
            ItemId.CacheIds();
            Item.CreateItems();
            SpawnTable.CreateOreTables();
            SpawnPattern.CreateSpawnPatterns();
            SodaScript.CreateScripts();
            StatusEffect.CreateAncillaryTypeData();
            CharacterData.InitCharacterCollection();
            PlayerCharacterData.CreatePlayerCharacters();
            EnemyCharacterData.CreateEnemyCharacters();
            PoolManager.CreateObjectPools();

            //create two characters for our party and add them to a list. It's important that we create them as copies of the prototypes from the master character collection
            var character1 = (PlayerCharacterData)CharacterData.GetCopy(CharId.SODA_JUNKIE);
            var character2 = (PlayerCharacterData)CharacterData.GetCopy(CharId.NURSE);
            var character3 = (PlayerCharacterData)CharacterData.GetCopy(CharId.CARPENTER);
            var character4 = (PlayerCharacterData)CharacterData.GetCopy(CharId.NURSE);

            var playerCharacters = new List <PlayerCharacterData>();

            playerCharacters.Add(character1);
            playerCharacters.Add(character2);
            playerCharacters.Add(character3);
            playerCharacters.Add(character4);

            //create a new adventure in the castle, provide characters, and set input mode to auto (otherwise the adventure will stop and wait for player input)
            var adventure = new Adventure(DungeonId.CASTLE, playerCharacters);

            adventure.SetInputMode(AdventureInputMode.AUTO);

            //set this to true if you want the adventure to log a message every time it processes a step
            adventure.showVerboseOutput = false;

            //when input mode is set to auto, combat decisions will handled by soda script. however, we can still allow the player to choose random treasure chests and paths.
            //this is off by default; if you turn it on you must listen for events such as EAltPathsEncountered and respond with OnAltPathClicked(choice)
            adventure.requireInputForRandomChoices = false;

            //listen for various events to receive information about the adventure progress
            adventure.EBattleStarted         += OnBattleStarted;
            adventure.ESkillUsed             += OnSkillUsed;
            adventure.ESkillResolved         += OnSkillResolved;
            adventure.EEnemyLootEarned       += OnEnemyLootEarned;
            adventure.ECharactersDied        += OnCharactersDied;
            adventure.EAltPathsEncountered   += OnAltPathsEncountered;
            adventure.EAltPathConfirmed      += OnAltPathConfirmed;
            adventure.ETreasureRoomConfirmed += OnTreasureRoomConfirmed;

            //start the adventure
            adventure.Start();

            //read key so that the output window won't close immediately after the adventure finishes
            Console.ReadKey();
        }