Exemplo n.º 1
0
    void Awake()
    {
        Dialog = GameObject.Find("GUI").GetComponent <DialogBoxHandler>();

        nurse        = transform.FindChild("NPC_nurse").GetComponent <NPCHandler>();
        screenSprite = transform.FindChild("PokeCenterScreen").FindChild("Screen_SpriteLight").GetComponent <SpriteRenderer>();
        screenLight  = transform.FindChild("PokeCenterScreen").FindChild("Screen_Light").GetComponent <Light>();
        Transform healMachine = transform.FindChild("healMachine").transform;

        for (int i = 0; i < 6; i++)
        {
            pokeBalls[i] = healMachine.FindChild("Ball" + i).GetComponent <SpriteRenderer>();
        }

        PokemonCenterAudio = transform.GetComponent <AudioSource>();
    }
Exemplo n.º 2
0
 void CheckCollision(Collision coll)
 {
     if (coll.gameObject.tag == "Ally")
     {
         NPCHandler npcHandler = coll.gameObject.GetComponent <NPCHandler>();
         if (npcHandler.mode == NPCMode.ALLY && isSeenByCamera && mode != NPCMode.ALLY) //ensures it is visible and hit by an ally, and is not an ally
         {
             ConvertToAlly();
             AddPoint();
         }
     }
     else if (coll.gameObject.tag == "Player" && mode != NPCMode.ALLY) //ensures it is hit by player and is not an ally previously
     {
         ConvertToAlly();
         AddPoint();
     }
 }
Exemplo n.º 3
0
        public void BuyBackItem(Character chr, Item item)
        {
            var inv       = chr.Inventory;
            var newSlotId = inv.FindFreeSlot(item, item.Amount, false);

            var err = newSlotId.Container.CheckAdd(newSlotId.Slot, item, item.Amount);

            if (err == InventoryError.OK)
            {
                var amount = item.Amount;
                inv.CheckUniqueness(item, ref amount, ref err, true);
                if (err == InventoryError.OK && amount != item.Amount)
                {
                    err = InventoryError.CANT_CARRY_MORE_OF_THIS;
                }
                else
                {
                    if (newSlotId.Slot != BaseInventory.INVALID_SLOT)
                    {
                        var price = ((uint)item.Amount * item.Template.SellPrice);
                        if (chr.Money < price)
                        {
                            NPCHandler.SendBuyError(chr.Client, NPC, (ItemId)item.EntryId, BuyItemError.NotEnoughMoney);
                            return;
                        }
                        else
                        {
                            item.Remove(false);
                            newSlotId.Container.AddUnchecked(newSlotId.Slot, item, true);
                            chr.Money -= price;

                            NPCHandler.SendBuyItem(chr.Client, NPC, item.Template.ItemId, amount);
                            return;
                        }
                    }
                    else
                    {
                        err = InventoryError.INVENTORY_FULL;
                    }
                }
            }

            ItemHandler.SendInventoryError(chr.Client, err);
        }
Exemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        var multipler = 1f;

        if (colHandler.underwater())
        {
            multipler = waterMultiplier;
        }
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            rb.velocity = Vector3.up * JumpSpeed * multipler;
        }
        else if (Input.GetKey(KeyCode.DownArrow))
        {
            if (rb.velocity.y - DuckSpeed > maxFallSpeed)
            {
                rb.velocity -= Vector3.up * DuckSpeed * multipler;
            }
        }

        if (colHandler.underwater())
        {
            rb.velocity = Vector3.up * Mathf.Min(rb.velocity.y, maxWaterVerticalSpeed);
            rb.velocity = Vector3.up * Mathf.Max(rb.velocity.y, minWaterVerticalSpeed);
        }

        if (Input.GetKeyDown(KeyCode.F))
        {
            if (inInteraction || colHandler.canAccessNPC())
            {
                if (!inInteraction)
                {
                    currNPC = colHandler.currNPC();
                }
                inInteraction = currNPC.interact();
            }
        }
    }
Exemplo n.º 5
0
        /// <summary>
        ///   Also sends a message to the Character, if not valid
        /// </summary>
        internal bool CheckVendorInteraction(Character chr)
        {
            if (chr.Map != m_Map ||
                !IsInRadiusSq(chr, NPCMgr.DefaultInteractionDistanceSq) ||
                !chr.CanSee(this))
            {
                NPCHandler.SendNPCError(chr, this, VendorInventoryError.TooFarAway);
                return(false);
            }

            if (!IsAlive)
            {
                NPCHandler.SendNPCError(chr, this, VendorInventoryError.VendorDead);
                return(false);
            }

            if (chr.IsAlive == IsSpiritHealer)
            {
                NPCHandler.SendNPCError(chr, this, VendorInventoryError.YouDead);
                return(false);
            }

            if (!chr.CanInteract || !CanInteract)
            {
                return(false);
            }

            var reputation = chr.Reputations.GetOrCreate(Faction.ReputationIndex);

            if (reputation != null && !reputation.CanInteract)
            {
                NPCHandler.SendNPCError(chr, this, VendorInventoryError.BadRep);
                return(false);
            }

            return(true);
        }
Exemplo n.º 6
0
    void SpawnNPC(LevelData levelData)
    {
        int maxAllies = master.saveHandler.GetAllies();
        int maxNonCon = master.controls.NPCCount - maxAllies;

        Debug.Log(maxNonCon + " max");

        int allyCount   = 0;
        int nonConCount = 0;


        if (levelData.isTutorial)
        {
            maxAllies = 0; maxNonCon = 5;
        }

        while (allyCount < maxAllies || nonConCount < maxNonCon) //keep looping until all allies and noncons are in places
        {
            foreach (LevelData.NPCSpawn npcSpawn in levelData.npcSpawn)
            {
                foreach (Transform child in levelData.transform)
                {
                    if (child.name.Contains(npcSpawn.keyTerm))
                    {
                        NPCHandler.NPCMode npcMode = npcSpawn.mode;

                        if (npcMode == NPCHandler.NPCMode.NONCON)
                        {
                            //  Debug.Log("checking: " + nonConCount + " .... " + maxNonCon);
                        }

                        if (npcMode == NPCHandler.NPCMode.ALLY && allyCount < maxAllies ||
                            npcMode == NPCHandler.NPCMode.NONCON && nonConCount < maxNonCon)
                        {
                            GameObject npc = Instantiate(npcSpawn.NPCPrefab, child);

                            npc.transform.parent = levelData.transform;
                            npc.name             = "NPC [" + npcSpawn.keyTerm.Replace("Spawn", "") + "]";

                            NPCHandler npcHandler = npc.GetComponent <NPCHandler>();
                            npcHandler.master = master;
                            npcHandler.SetMode(npcSpawn.mode);

                            MoveMotor motor = npc.GetComponent <MoveMotor>();
                            motor.master = master;

                            if (npcMode == NPCHandler.NPCMode.ALLY)
                            {
                                allyCount++;
                                // Debug.Log("add ally111");
                            }
                            else if (npcMode == NPCHandler.NPCMode.NONCON)
                            {
                                nonConCount++;
                            }
                        }
                    }
                }
            }
        }



        foreach (LevelData.NPCSpawn npcSpawn in levelData.npcSpawn)
        {
            foreach (Transform child in levelData.transform)
            {
                if (child.name.Contains(npcSpawn.keyTerm))
                {
                    Destroy(child.gameObject);
                }
            }
        }
    }
Exemplo n.º 7
0
    private IEnumerator runEvent(CustomEventTree[] treesArray, int index)
    {
        CustomEventDetails currentEvent = treesArray[eventTreeIndex].events[index];
        CustomEventDetails nextEvent    = null;

        if (index + 1 < treesArray[eventTreeIndex].events.Length)
        {
            //if not the last event
            nextEvent = treesArray[eventTreeIndex].events[index + 1];
        }

        NPCHandler targetNPC = null;

        CustomEventDetails.CustomEventType ty = currentEvent.eventType;

        Debug.Log("Run event. Type: " + ty.ToString());

        switch (ty)
        {
        case (CustomEventDetails.CustomEventType.Wait):
            yield return(new WaitForSeconds(currentEvent.float0));

            break;

        case (CustomEventDetails.CustomEventType.Walk):
            if (currentEvent.object0.GetComponent <NPCHandler>() != null)
            {
                targetNPC = currentEvent.object0.GetComponent <NPCHandler>();

                int initialDirection = targetNPC.direction;
                targetNPC.direction = (int)currentEvent.dir;
                for (int i = 0; i < currentEvent.int0; i++)
                {
                    targetNPC.direction = (int)currentEvent.dir;
                    Vector3 forwardsVector = targetNPC.getForwardsVector(true);
                    if (currentEvent.bool0)
                    {
                        //if direction locked in
                        targetNPC.direction = initialDirection;
                    }
                    while (forwardsVector == new Vector3(0, 0, 0))
                    {
                        targetNPC.direction = (int)currentEvent.dir;
                        forwardsVector      = targetNPC.getForwardsVector(true);
                        if (currentEvent.bool0)
                        {
                            //if direction locked in
                            targetNPC.direction = initialDirection;
                        }
                        yield return(new WaitForSeconds(0.1f));
                    }

                    targetNPC.setOverrideBusy(true);
                    yield return(StartCoroutine(targetNPC.move(forwardsVector, currentEvent.float0)));

                    targetNPC.setOverrideBusy(false);
                }
                targetNPC.setFrameStill();
            }     //Move the player if set to player
            if (currentEvent.object0 == PlayerMovement.player.gameObject)
            {
                int initialDirection = PlayerMovement.player.direction;

                PlayerMovement.player.speed = (currentEvent.float0 > 0)
                        ? PlayerMovement.player.walkSpeed / currentEvent.float0
                        : PlayerMovement.player.walkSpeed;
                for (int i = 0; i < currentEvent.int0; i++)
                {
                    PlayerMovement.player.updateDirection((int)currentEvent.dir);
                    Vector3 forwardsVector = PlayerMovement.player.getForwardVector();
                    if (currentEvent.bool0)
                    {
                        //if direction locked in
                        PlayerMovement.player.updateDirection(initialDirection);
                    }

                    PlayerMovement.player.setOverrideAnimPause(true);
                    yield return
                        (StartCoroutine(PlayerMovement.player.move(forwardsVector, false, currentEvent.bool0)));

                    PlayerMovement.player.setOverrideAnimPause(false);
                }
                PlayerMovement.player.speed = PlayerMovement.player.walkSpeed;
            }
            break;

        case (CustomEventDetails.CustomEventType.TurnTo):
            int   direction;
            float xDistance;
            float zDistance;
            if (currentEvent.object0.GetComponent <NPCHandler>() != null)
            {
                targetNPC = currentEvent.object0.GetComponent <NPCHandler>();
            }
            if (targetNPC != null)
            {
                if (currentEvent.object1 != null)
                {
                    //calculate target objects's position relative to this objects's and set direction accordingly.
                    xDistance = targetNPC.hitBox.position.x - currentEvent.object1.transform.position.x;
                    zDistance = targetNPC.hitBox.position.z - currentEvent.object1.transform.position.z;
                    if (xDistance >= Mathf.Abs(zDistance))
                    {
                        //Mathf.Abs() converts zDistance to a positive always.
                        direction = 3;
                    }     //this allows for better accuracy when checking orientation.
                    else if (xDistance <= Mathf.Abs(zDistance) * -1)
                    {
                        direction = 1;
                    }
                    else if (zDistance >= Mathf.Abs(xDistance))
                    {
                        direction = 2;
                    }
                    else
                    {
                        direction = 0;
                    }
                    targetNPC.setDirection(direction);
                }
                if (currentEvent.int0 != 0)
                {
                    direction = targetNPC.direction + currentEvent.int0;
                    while (direction > 3)
                    {
                        direction -= 4;
                    }
                    while (direction < 0)
                    {
                        direction += 4;
                    }
                    targetNPC.setDirection(direction);
                }
            }
            break;

        case (CustomEventDetails.CustomEventType.Dialog):
            for (int i = 0; i < currentEvent.strings.Length; i++)
            {
                Dialog.drawDialogBox();
                yield return(StartCoroutine(Dialog.drawText(currentEvent.strings[i])));

                if (i < currentEvent.strings.Length - 1)
                {
                    while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back"))
                    {
                        yield return(null);
                    }
                }
            }
            if (nextEvent != null)
            {
                if (nextEvent.eventType != CustomEventDetails.CustomEventType.Choice)
                {
                    while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back"))
                    {
                        yield return(null);
                    }
                    if (!EventRequiresDialogBox(nextEvent.eventType))
                    {
                        Dialog.undrawDialogBox();
                    }     // do not undraw the box if the next event needs it
                }
            }
            else
            {
                while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back"))
                {
                    yield return(null);
                }
                Dialog.undrawDialogBox();
            }
            break;

        case (CustomEventDetails.CustomEventType.Choice):
            if (currentEvent.strings.Length > 1)
            {
                Dialog.drawChoiceBox(currentEvent.strings);
                yield return(StartCoroutine(Dialog.choiceNavigate(currentEvent.strings)));
            }
            else
            {
                Dialog.drawChoiceBox();
                yield return(StartCoroutine(Dialog.choiceNavigate()));
            }
            int chosenIndex = Dialog.chosenIndex;
            chosenIndex = currentEvent.ints.Length - 1 - chosenIndex;     //flip it to reflect the original input
            Dialog.undrawChoiceBox();
            Dialog.undrawDialogBox();
            if (chosenIndex < currentEvent.ints.Length)
            {
                //only change tree if index is valid
                if (currentEvent.ints[chosenIndex] != eventTreeIndex &&
                    currentEvent.ints[chosenIndex] < treesArray.Length)
                {
                    JumpToTree(currentEvent.ints[chosenIndex]);
                }
            }
            break;

        case CustomEventDetails.CustomEventType.Sound:
            SfxHandler.Play(currentEvent.sound);
            break;

        case CustomEventDetails.CustomEventType.ReceiveItem:
            //Play Good for TM, Average for Item
            AudioClip itemGetMFX = (currentEvent.bool0)
                    ? Resources.Load <AudioClip>("Audio/mfx/GetGood")
                    : Resources.Load <AudioClip>("Audio/mfx/GetDecent");
            BgmHandler.main.PlayMFX(itemGetMFX);

            string firstLetter = currentEvent.string0.Substring(0, 1).ToLowerInvariant();
            Dialog.drawDialogBox();
            if (currentEvent.bool0)
            {
                Dialog.StartCoroutine(Dialog.drawText(
                                          SaveData.currentSave.playerName + " received TM" +
                                          ItemDatabase.getItem(currentEvent.string0).getTMNo() + ": " + currentEvent.string0 + "!"));
            }
            else
            {
                if (currentEvent.int0 > 1)
                {
                    Dialog.StartCoroutine(Dialog.drawText(
                                              SaveData.currentSave.playerName + " received " + currentEvent.string0 + "s!"));
                }
                else if (firstLetter == "a" || firstLetter == "e" || firstLetter == "i" || firstLetter == "o" ||
                         firstLetter == "u")
                {
                    Dialog.StartCoroutine(Dialog.drawText(
                                              SaveData.currentSave.playerName + " received an " + currentEvent.string0 + "!"));
                }
                else
                {
                    Dialog.StartCoroutine(Dialog.drawText(
                                              SaveData.currentSave.playerName + " received a " + currentEvent.string0 + "!"));
                }
            }
            yield return(new WaitForSeconds(itemGetMFX.length));

            bool itemAdd = SaveData.currentSave.Bag.addItem(currentEvent.string0, currentEvent.int0);

            Dialog.drawDialogBox();
            if (itemAdd)
            {
                if (currentEvent.bool0)
                {
                    yield return
                        (Dialog.StartCoroutine(Dialog.drawTextSilent(
                                                   SaveData.currentSave.playerName + " put the TM" +
                                                   ItemDatabase.getItem(currentEvent.string0).getTMNo() + " \\away into the bag.")));
                }
                else
                {
                    if (currentEvent.int0 > 1)
                    {
                        yield return
                            (Dialog.StartCoroutine(Dialog.drawTextSilent(
                                                       SaveData.currentSave.playerName + " put the " + currentEvent.string0 +
                                                       "s \\away into the bag.")));
                    }
                    else
                    {
                        yield return
                            (Dialog.StartCoroutine(Dialog.drawTextSilent(
                                                       SaveData.currentSave.playerName + " put the " + currentEvent.string0 +
                                                       " \\away into the bag.")));
                    }
                }
                while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back"))
                {
                    yield return(null);
                }
            }
            else
            {
                yield return(Dialog.StartCoroutine(Dialog.drawTextSilent("But there was no room...")));

                while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back"))
                {
                    yield return(null);
                }
            }
            Dialog.undrawDialogBox();
            break;

        case CustomEventDetails.CustomEventType.ReceivePokemon:
            if (SaveData.currentSave.PC.hasSpace(0))
            {
                //Play Great for Pokemon
                AudioClip pokeGetMFX = Resources.Load <AudioClip>("Audio/mfx/GetGreat");

                PokemonData pkd = PokemonDatabase.getPokemon(currentEvent.ints[0]);

                string         pkName   = pkd.getName();
                Pokemon.Gender pkGender = Pokemon.Gender.CALCULATE;

                if (pkd.getMaleRatio() == -1)
                {
                    pkGender = Pokemon.Gender.NONE;
                }
                else if (pkd.getMaleRatio() == 0)
                {
                    pkGender = Pokemon.Gender.FEMALE;
                }
                else if (pkd.getMaleRatio() == 100)
                {
                    pkGender = Pokemon.Gender.MALE;
                }
                else
                {
//if not a set gender
                    if (currentEvent.ints[2] == 0)
                    {
                        pkGender = Pokemon.Gender.MALE;
                    }
                    else if (currentEvent.ints[2] == 1)
                    {
                        pkGender = Pokemon.Gender.FEMALE;
                    }
                }

                Dialog.drawDialogBox();
                yield return
                    (Dialog.StartCoroutine(Dialog.drawText(
                                               SaveData.currentSave.playerName + " received the " + pkName + "!")));

                BgmHandler.main.PlayMFX(pokeGetMFX);
                yield return(new WaitForSeconds(pokeGetMFX.length));

                string nickname = currentEvent.strings[0];
                if (currentEvent.strings[1].Length == 0)
                {
                    //If no OT set, allow nicknaming of Pokemon

                    Dialog.drawDialogBox();
                    yield return
                        (StartCoroutine(
                             Dialog.drawTextSilent("Would you like to give a nickname to \nthe " + pkName +
                                                   " you received?")));

                    Dialog.drawChoiceBox();
                    yield return(StartCoroutine(Dialog.choiceNavigate()));

                    int nicknameCI = Dialog.chosenIndex;
                    Dialog.undrawDialogBox();
                    Dialog.undrawChoiceBox();

                    if (nicknameCI == 1)
                    {
                        //give nickname
                        //SfxHandler.Play(selectClip);
                        yield return(StartCoroutine(ScreenFade.main.Fade(false, 0.4f)));

                        Scene.main.Typing.gameObject.SetActive(true);
                        StartCoroutine(Scene.main.Typing.control(10, "", pkGender,
                                                                 Pokemon.GetIconsFromID_(currentEvent.ints[0], currentEvent.bool0)));
                        while (Scene.main.Typing.gameObject.activeSelf)
                        {
                            yield return(null);
                        }
                        if (Scene.main.Typing.typedString.Length > 0)
                        {
                            nickname = Scene.main.Typing.typedString;
                        }

                        yield return(StartCoroutine(ScreenFade.main.Fade(true, 0.4f)));
                    }
                }
                if (!EventRequiresDialogBox(nextEvent.eventType))
                {
                    Dialog.undrawDialogBox();
                }

                int[] IVs = new int[]
                {
                    Random.Range(0, 32), Random.Range(0, 32), Random.Range(0, 32),
                    Random.Range(0, 32), Random.Range(0, 32), Random.Range(0, 32)
                };
                if (currentEvent.bool1)
                {
                    //if using Custom IVs
                    IVs[0] = currentEvent.ints[5];
                    IVs[1] = currentEvent.ints[6];
                    IVs[2] = currentEvent.ints[7];
                    IVs[3] = currentEvent.ints[8];
                    IVs[4] = currentEvent.ints[9];
                    IVs[5] = currentEvent.ints[10];
                }

                string pkNature = (currentEvent.ints[3] == 0)
                        ? NatureDatabase.getRandomNature().getName()
                        : NatureDatabase.getNature(currentEvent.ints[3] - 1).getName();

                string[] pkMoveset = pkd.GenerateMoveset(currentEvent.ints[1]);
                for (int i = 0; i < 4; i++)
                {
                    if (currentEvent.strings[4 + i].Length > 0)
                    {
                        pkMoveset[i] = currentEvent.strings[4 + i];
                    }
                }

                Debug.Log(pkMoveset[0] + ", " + pkMoveset[1] + ", " + pkMoveset[2] + ", " + pkMoveset[3]);


                Pokemon pk = new Pokemon(currentEvent.ints[0], nickname, pkGender, currentEvent.ints[1],
                                         currentEvent.bool0, currentEvent.strings[2], currentEvent.strings[3],
                                         currentEvent.strings[1], IVs[0], IVs[1], IVs[2], IVs[3], IVs[4], IVs[5], 0, 0, 0, 0, 0, 0,
                                         pkNature, currentEvent.ints[4],
                                         pkMoveset, new int[4]);

                SaveData.currentSave.PC.addPokemon(pk);
            }
            else
            {
                //jump to new tree
                JumpToTree(currentEvent.int0);
            }
            break;

        case (CustomEventDetails.CustomEventType.SetActive):
            if (currentEvent.bool0)
            {
                currentEvent.object0.SetActive(true);
            }
            else
            {
                if (currentEvent.object0 == this.gameObject)
                {
                    deactivateOnFinish = true;
                }
                else if (currentEvent.object0 != PlayerMovement.player.gameObject)
                {
                    //important to never deactivate the player
                    currentEvent.object0.SetActive(false);
                }
            }
            break;

        case CustomEventDetails.CustomEventType.SetCVariable:
            SaveData.currentSave.setCVariable(currentEvent.string0, currentEvent.float0);
            break;

        case (CustomEventDetails.CustomEventType.LogicCheck):
            bool passedCheck = false;

            CustomEventDetails.Logic lo = currentEvent.logic;

            switch (lo)
            {
            case CustomEventDetails.Logic.CVariableEquals:
                if (currentEvent.float0 == SaveData.currentSave.getCVariable(currentEvent.string0))
                {
                    passedCheck = true;
                }
                break;

            case CustomEventDetails.Logic.CVariableGreaterThan:
                if (SaveData.currentSave.getCVariable(currentEvent.string0) > currentEvent.float0)
                {
                    passedCheck = true;
                }
                break;

            case CustomEventDetails.Logic.CVariableLessThan:
                if (SaveData.currentSave.getCVariable(currentEvent.string0) < currentEvent.float0)
                {
                    passedCheck = true;
                }
                break;

            case CustomEventDetails.Logic.GymBadgeNoOwned:
                if (Mathf.FloorToInt(currentEvent.float0) < SaveData.currentSave.gymsBeaten.Length &&
                    Mathf.FloorToInt(currentEvent.float0) >= 0)
                {
                    //ensure input number is valid
                    if (SaveData.currentSave.gymsBeaten[Mathf.FloorToInt(currentEvent.float0)])
                    {
                        passedCheck = true;
                    }
                }
                break;

            case CustomEventDetails.Logic.GymBadgesEarned:
                int badgeCount = 0;
                for (int bi = 0; bi < SaveData.currentSave.gymsBeaten.Length; bi++)
                {
                    if (SaveData.currentSave.gymsBeaten[bi])
                    {
                        badgeCount += 1;
                    }
                }
                if (badgeCount >= currentEvent.float0)
                {
                    passedCheck = true;
                }
                break;

            case CustomEventDetails.Logic.PokemonIDIsInParty:
                for (int pi = 0; pi < 6; pi++)
                {
                    if (SaveData.currentSave.PC.boxes[0][pi] != null)
                    {
                        if (SaveData.currentSave.PC.boxes[0][pi].getID() ==
                            Mathf.FloorToInt(currentEvent.float0))
                        {
                            passedCheck = true;
                            pi          = 6;
                        }
                    }
                }
                break;

            case CustomEventDetails.Logic.SpaceInParty:
                if (currentEvent.bool0)
                {
                    if (!SaveData.currentSave.PC.hasSpace(0))
                    {
                        passedCheck = true;
                    }
                }
                else
                {
                    if (SaveData.currentSave.PC.hasSpace(0))
                    {
                        passedCheck = true;
                    }
                }
                break;
            }

            if (passedCheck)
            {
                int newTreeIndex = currentEvent.int0;
                if (newTreeIndex != eventTreeIndex &&     //only change tree if index is valid
                    newTreeIndex < treesArray.Length)
                {
                    JumpToTree(newTreeIndex);
                }
            }
            break;

        case CustomEventDetails.CustomEventType.TrainerBattle:

            //custom cutouts not yet implemented
            StartCoroutine(ScreenFade.main.FadeCutout(false, ScreenFade.slowedSpeed, null));

            //Automatic LoopStart usage not yet implemented
            Scene.main.Battle.gameObject.SetActive(true);

            Trainer trainer = currentEvent.object0.GetComponent <Trainer>();

            if (trainer.battleBGM != null)
            {
                Debug.Log(trainer.battleBGM.name);
                BgmHandler.main.PlayOverlay(trainer.battleBGM, trainer.samplesLoopStart);
            }
            else
            {
                BgmHandler.main.PlayOverlay(Scene.main.Battle.defaultTrainerBGM,
                                            Scene.main.Battle.defaultTrainerBGMLoopStart);
            }
            Scene.main.Battle.gameObject.SetActive(false);
            yield return(new WaitForSeconds(1.6f));

            Scene.main.Battle.gameObject.SetActive(true);
            StartCoroutine(Scene.main.Battle.control(true, trainer, currentEvent.bool0));

            while (Scene.main.Battle.gameObject.activeSelf)
            {
                yield return(null);
            }

            //yield return new WaitForSeconds(sceneTransition.FadeIn(0.4f));
            yield return(StartCoroutine(ScreenFade.main.Fade(true, 0.4f)));

            if (currentEvent.bool0)
            {
                if (Scene.main.Battle.victor == 1)
                {
                    int newTreeIndex = currentEvent.int0;
                    if (newTreeIndex != eventTreeIndex &&     //only change tree if index is valid
                        newTreeIndex < treesArray.Length)
                    {
                        JumpToTree(newTreeIndex);
                    }
                }
            }

            break;
        }
    }
Exemplo n.º 8
0
 public ActionFirstEvent()
 {
     _event = new Handler(onActionFirst);
     _npcEvent = new NPCHandler(onActionFirstNPC);
 }
Exemplo n.º 9
0
        /// <summary>
        /// Tries to sell the given Item of the given Character
        /// </summary>
        /// <param name="chr">The seller.</param>
        /// <param name="item">May be null (will result into error message for chr)</param>
        /// <param name="amount">The amount of Item to sell.</param>
        public void SellItem(Character chr, Item item, int amount)
        {
            if (!CheckVendorInteraction(chr))
            {
                return;
            }

            var error = SellItemError.Success;

            if (!CanPlayerSellItem(chr, item, ref error))
            {
                NPCHandler.SendSellError(chr.Client, NPC.EntityId, item.EntityId, error);
                return;
            }

            if (amount <= 0 || amount > item.Amount)
            {
                amount = item.Amount;
            }

            var money  = (uint)(amount * item.Template.SellPrice);
            var maxDur = item.MaxDurability;

            if (maxDur != 0)
            {
                money = (money * (uint)item.Durability) / (uint)maxDur;
            }

            chr.Money += money;

            var invError = InventoryError.OK;

            if (amount < item.Amount)
            {
                // split the stack

                // create a new stack of items with the number sold
                var newBuyBackItem = item.CreateNew(amount);

                // subtract the sold items from the original stack
                // if item.Amount reaches 0, the item is destroyed
                item.Amount -= amount;

                // Move the new stack to the buyback partial inventory
                invError = chr.Inventory.BuyBack.AddBuyBackItem(newBuyBackItem, true);
            }
            else if (item.Slot != (int)InventorySlot.Invalid)
            {
                // Move the item from the Player's inventory to the buyback inventory
                invError = chr.Inventory.BuyBack.AddBuyBackItem(item, false);
            }

            if (invError != InventoryError.OK)
            {
                ItemHandler.SendInventoryError(chr.Client, invError);
                return;
            }

            chr.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.MoneyFromVendors, money);
            NPCHandler.SendSellError(chr.Client, NPC.EntityId, item.EntityId, error);
        }
Exemplo n.º 10
0
        public void BuyItem(Character chr, uint itemEntryId, BaseInventory bag, int amount, int slot)
        {
            if (!CheckVendorInteraction(chr))
            {
                return;
            }

            var item = GetVendorItem(itemEntryId);

            if (item == null)
            {
                return;
            }

            amount = Math.Max(amount, 1);
            if (item.BuyStackSize > 0)
            {
                amount = amount * item.BuyStackSize;
            }

            uint price;
            var  buyErr = CanPlayerBuyItem(chr, item, amount, out price);

            if (buyErr != BuyItemError.Ok)
            {
                NPCHandler.SendBuyError(chr, NPC, item.Template.ItemId, buyErr);
                return;
            }

            BaseInventory  inv = chr.Inventory;
            InventoryError err;

            if (inv.IsValidSlot(slot))
            {
                err = inv.TryAdd(item.Template, ref amount, slot);
            }
            else
            {
                // count will be set to the actual amount of items that found space in the inventory
                // if not all could be added, err contains the reason why
                err = inv.TryAdd(item.Template, ref amount);
            }

            if (err != InventoryError.OK)
            {
                ItemHandler.SendInventoryError(chr.Client, null, null, err);
            }

            if (amount <= 0)
            {
                // Nothing was purchased
                // Should usually never happen, but just to make sure
                ItemHandler.SendInventoryError(chr.Client, null, null, InventoryError.INVENTORY_FULL);
                return;
            }

            chr.Money -= (price * (uint)amount);             // we already checked that our money is sufficient
            if (item.ExtendedCostEntry != null)
            {
                var exCost = item.ExtendedCostEntry;

                chr.HonorPoints -= exCost.HonorCost;
                chr.ArenaPoints -= exCost.ArenaPointCost;

                foreach (var reqItem in exCost.RequiredItems)
                {
                    if (reqItem.Id == ItemId.None)
                    {
                        break;
                    }

                    if (!chr.Inventory.RemoveByItemId(reqItem.Id, reqItem.Cost, false))
                    {
                        // should not happen
                        LogManager.GetCurrentClassLogger().Warn("Unable to remove required item \"{0}\" from player \"{1}\" when purchasing item: {2}",
                                                                reqItem.Template, chr, item.Template);
                    }
                }
            }

            // manage stock
            int remainingAmount;

            if (item.RemainingStockAmount != UnlimitedSupply)
            {
                // The vendor had a limited supply of this item, update the chr.Client with the new inventory
                remainingAmount = item.RemainingStockAmount - amount;
                //NPCHandler.SendVendorInventoryList(chr.Client, NPC.EntityId, ConstructVendorItemList(chr));
            }
            else
            {
                remainingAmount = UnlimitedSupply;
            }

            // send packet
            NPCHandler.SendBuyItem(chr.Client, NPC, item.Template.ItemId, amount, remainingAmount);
        }
Exemplo n.º 11
0
 public DialogueEvent()
 {
     _event = new Handler(onDialogue);
     _npcEvent = new NPCHandler(onDialogueNPC);
     _rivalEvent = new RivalHandler(onDialogueRival);
 }