Example #1
0
 /// <summary>
 /// Show method (which is overloaded) is used to display the message.
 /// This is a static method so we don't need to create an
 /// object of this class to call this method.
 /// </summary>
 /// <param name="messageText">Message which needs to be displayed to user.</param>
 public static DialogResult Show(GameView gv, string messageText)
 {
     IBMessageBox frmMessage = new IBMessageBox();
     frmMessage.IceBlinkButtonResize.setupAll(gv);
     frmMessage.IceBlinkButtonResize.Enabled = false;
     frmMessage.IceBlinkButtonResize.Visible = false;
     //frmMessage.IceBlinkButtonClose.Enabled = false;
     //frmMessage.IceBlinkButtonClose.Visible = false;
     frmMessage.IceBlinkButtonClose.setupAll(gv);
     frmMessage.setupAll(gv);
     frmMessage.lblMessageText.Font = gv.drawFontReg;
     frmMessage.BackColor = Color.Black;
     frmMessage.ForeColor = Color.White;
     frmMessage.setMessage(messageText);
     frmMessage.setBoxSize(messageText);
     frmMessage.addButton(gv, enumMessageButton.OK);
     frmMessage.StartPosition = FormStartPosition.CenterScreen;
     DialogResult dr = frmMessage.ShowDialog();
     return dr;
 }
Example #2
0
        public static DialogResult Show(GameView gv, string messageText, enumMessageButton messageButton)
        {
            IBMessageBox frmMessage = new IBMessageBox();

            frmMessage.IceBlinkButtonResize.setupAll(gv);
            frmMessage.IceBlinkButtonResize.Enabled = false;
            frmMessage.IceBlinkButtonResize.Visible = false;
            //frmMessage.IceBlinkButtonClose.Enabled = false;
            //frmMessage.IceBlinkButtonClose.Visible = false;
            frmMessage.IceBlinkButtonClose.setupAll(gv);
            frmMessage.setupAll(gv);
            frmMessage.lblMessageText.Font = gv.drawFontReg;
            //frmMessage.BackColor = gv.module.ModuleTheme.StandardBackColor;
            frmMessage.BackColor = Color.Black;
            frmMessage.ForeColor = Color.White;
            frmMessage.setMessage(messageText);
            frmMessage.setBoxSize(messageText);
            frmMessage.addButton(gv, messageButton);
            frmMessage.StartPosition = FormStartPosition.CenterScreen;
            DialogResult dr = frmMessage.ShowDialog();

            return(dr);
        }
        public void doSelectedSpell(bool inCombat)
        {
            if (isSelectedSpellSlotInKnownSpellsRange())
            {
                //only allow to cast spells that you know and are usable on this map
                if (getCastingPlayer().knownSpellsTags.Contains(GetCurrentlySelectedSpell().tag))
                {
                    if (inCombat)                 //Combat Map
                    {
                        gv.screenCombat.dontEndTurn = false;

                        bool swiftBlocked = false;
                        if (GetCurrentlySelectedSpell().isSwiftAction&& gv.mod.swiftActionHasBeenUsedThisTurn)
                        {
                            swiftBlocked = true;
                        }

                        bool coolBlocked = false;
                        for (int i = 0; i < getCastingPlayer().coolingSpellsByTag.Count; i++)
                        {
                            if (getCastingPlayer().coolingSpellsByTag[i] == GetCurrentlySelectedSpell().tag)
                            {
                                coolBlocked = true;
                            }
                        }

                        if ((getCastingPlayer().sp >= GetCurrentlySelectedSpell().costSP) && (getCastingPlayer().hp > GetCurrentlySelectedSpell().costHP) && (!gv.mod.nonRepeatableFreeActionsUsedThisTurnBySpellTag.Contains(GetCurrentlySelectedSpell().tag)) && !swiftBlocked && !coolBlocked)
                        {
                            //AoO code
                            foreach (Creature crt in gv.mod.currentEncounter.encounterCreatureList)
                            {
                                if (gv.screenCombat.CalcDistance(crt, crt.combatLocX, crt.combatLocY, getCastingPlayer().combatLocX, getCastingPlayer().combatLocY) == 1 && !crt.isHeld())
                                {
                                    bool playerReceivesAoOWhileCasting = true;
                                    foreach (Effect ef in getCastingPlayer().effectsList)
                                    {
                                        if (ef.allowCastingWithoutTriggeringAoO)
                                        {
                                            playerReceivesAoOWhileCasting = false;
                                            break;
                                        }
                                    }

                                    if ((GetCurrentlySelectedSpell().triggersAoO) && playerReceivesAoOWhileCasting)
                                    {
                                        gv.cc.addLogText("<font color='blue'>Attack of Opportunity by: " + crt.cr_name + "</font><BR>");
                                        int dcForSaveAdder = getCastingPlayer().hp;

                                        //gv.screenCombat.doStandardCreatureAttackAoO(getCastingPlayer(), crt, 1);
                                        gv.screenType      = "combat";
                                        gv.sf.CombatTarget = getCastingPlayer();
                                        gv.screenCombat.CreatureDoesAttack(crt, false, getCastingPlayer());

                                        if ((getCastingPlayer().hp <= 0) || (getCastingPlayer().isHeld()))
                                        {
                                            gv.screenType = "combat";
                                            gv.screenCombat.endPcTurn(true);
                                        }
                                        dcForSaveAdder = dcForSaveAdder - getCastingPlayer().hp;
                                        if (dcForSaveAdder > 0)
                                        {
                                            bool playerCanBeInterruptedWhileCasting = true;
                                            foreach (Effect ef in getCastingPlayer().effectsList)
                                            {
                                                if (ef.allowCastingWithoutRiskOfInterruption)
                                                {
                                                    playerCanBeInterruptedWhileCasting = false;
                                                    break;
                                                }
                                            }

                                            if ((GetCurrentlySelectedSpell().canBeInterrupted) && (GetCurrentlySelectedSpell().castTimeInTurns == 0) && playerCanBeInterruptedWhileCasting)
                                            {
                                                //check interruption
                                                //TODO: continue below, tying in the new effects..
                                                #region Do Calc Save and DC
                                                int saveChkRoll  = gv.sf.RandInt(20);
                                                int saveChk      = 0;
                                                int DC           = 10 + dcForSaveAdder;
                                                int saveChkAdder = getCastingPlayer().will;

                                                saveChk = saveChkRoll + saveChkAdder;
                                                #endregion

                                                if (saveChk >= DC)
                                                {
                                                    gv.cc.addLogText("<font color='yellow'>" + getCastingPlayer().name + " makes will save(" + saveChkRoll + "+" + saveChkAdder + " >= " + DC + "), avoiding interruption." + "</font><BR>");
                                                }
                                                else
                                                {
                                                    gv.cc.addLogText("<font color='yellow'>" + getCastingPlayer().name + " fails will save(" + saveChkRoll + "+" + saveChkAdder + " <= " + DC + "), " + getCastingPlayer().playerClass.spellLabelSingular + " is interrupted. " + "</font><BR>");
                                                    //switch screen, endturn
                                                    getCastingPlayer().sp -= GetCurrentlySelectedSpell().costSP;
                                                    getCastingPlayer().hp -= GetCurrentlySelectedSpell().costHP;
                                                    getCastingPlayer().isPreparingSpell         = false;
                                                    getCastingPlayer().doCastActionInXFullTurns = 0;
                                                    getCastingPlayer().tagOfSpellToBeCastAfterCastTimeIsDone = "none";
                                                    getCastingPlayer().thisCastIsFreeOfCost       = false;
                                                    getCastingPlayer().thisCasterCanBeInterrupted = true;
                                                    //backupKnownSpellTagsInCombat.Clear();
                                                    //gv.screenType = "combat";
                                                    //gv.screenCombat.onKeyUp(Keys.S);
                                                    //gv.screenCombat.animationSeqStack.Clear();
                                                    //gv.screenCombat.onKeyUp(Keys.S);
                                                    if (GetCurrentlySelectedSpell().usesTurnToActivate)
                                                    {
                                                        backupKnownSpellTagsInCombat.Clear();
                                                        gv.screenType = "combat";
                                                        gv.screenCombat.endPcTurn(true);
                                                    }
                                                    else
                                                    {
                                                        backupKnownSpellTagsInCombat.Clear();
                                                        gv.screenCombat.continueTurn = true;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            if ((getCastingPlayer().hp > 0) && (!getCastingPlayer().isHeld()))
                            {
                                if (GetCurrentlySelectedSpell().castTimeInTurns == 0)
                                {
                                    gv.cc.currentSelectedSpell = GetCurrentlySelectedSpell();
                                    getCastingPlayer().thisCasterCanBeInterrupted = GetCurrentlySelectedSpell().canBeInterrupted;

                                    /*
                                     * if (GetCurrentlySelectedSpell().onlyOncePerTurn)
                                     * {
                                     *  gv.mod.nonRepeatableFreeActionsUsedThisTurnBySpellTag.Add(GetCurrentlySelectedSpell().tag);
                                     * }
                                     * if (GetCurrentlySelectedSpell().isSwiftAction)
                                     * {
                                     *  gv.mod.swiftActionHasBeenUsedThisTurn = true;
                                     * }
                                     * if (GetCurrentlySelectedSpell().coolDownTime > 0)
                                     * {
                                     *  getCastingPlayer().coolingSpellsByTag.Add(GetCurrentlySelectedSpell().tag);
                                     *  getCastingPlayer().coolDownTimes.Add(GetCurrentlySelectedSpell().coolDownTime);
                                     * }
                                     */
                                    gv.screenType = "combat";
                                    gv.screenCombat.currentCombatMode = "cast";
                                    doCleanUp();
                                }
                                //a spell requiring a full turn or more is cast
                                else
                                {
                                    //reduce sp and hp in the moment the caster begins the spell
                                    getCastingPlayer().sp -= GetCurrentlySelectedSpell().costSP;
                                    getCastingPlayer().hp -= GetCurrentlySelectedSpell().costHP;

                                    //back to combat screen (rendering now)
                                    gv.screenType = "combat";

                                    //set values to flag taht the pc is now in the process of casting (how long, which spell, can be interrupted, is preparing spell)
                                    getCastingPlayer().doCastActionInXFullTurns = GetCurrentlySelectedSpell().castTimeInTurns;
                                    getCastingPlayer().tagOfSpellToBeCastAfterCastTimeIsDone = GetCurrentlySelectedSpell().tag;
                                    getCastingPlayer().thisCasterCanBeInterrupted            = GetCurrentlySelectedSpell().canBeInterrupted;
                                    getCastingPlayer().isPreparingSpell = true;

                                    //entry in log explaining that the player just started a long time cast
                                    gv.cc.addLogText("<font color='yellow'>" + getCastingPlayer().name + " begins with a " + getCastingPlayer().playerClass.spellLabelSingular + " that takes " + getCastingPlayer().doCastActionInXFullTurns + " full turn(s)..." + " </font><BR>");

                                    //end turn of casting player for now
                                    //gv.screenCombat.animationSeqStack.Clear();
                                    //gv.screenCombat.isPlayerTurn = false;
                                    //gv.screenCombat.canMove = false;
                                    //while (gv.screenCombat.animationSeqStack.Count > 0)
                                    //{
                                    gv.screenCombat.dontEndTurn = false;
                                    gv.screenCombat.endPcTurn(true);
                                    //}

                                    //wonder why this is after swap of render to combat screen, imitating it here
                                    doCleanUp();
                                }
                            }
                        }
                        else
                        {
                            //Toast.makeText(gv.gameContext, "Not Enough SP for that spell", Toast.LENGTH_SHORT).show();
                        }
                    }
                    else                 //Adventure Map
                    {
                        //only cast if useable on adventure maps
                        if ((GetCurrentlySelectedSpell().useableInSituation.Equals("Always")) || (GetCurrentlySelectedSpell().useableInSituation.Equals("OutOfCombat")))
                        {
                            if ((getCastingPlayer().sp >= GetCurrentlySelectedSpell().costSP) && (getCastingPlayer().hp > GetCurrentlySelectedSpell().costHP))
                            {
                                gv.cc.currentSelectedSpell = GetCurrentlySelectedSpell();
                                //ask for target
                                // selected to USE ITEM

                                //********************************************

                                //if target is SELF then just do doSpellTarget(self)
                                if (gv.cc.currentSelectedSpell.spellTargetType.Equals("Self"))
                                {
                                    doSpellTarget(getCastingPlayer(), getCastingPlayer());
                                }

                                //********************************************
                                else
                                {
                                    List <string> pcNames = new List <string>();
                                    pcNames.Add("cancel");
                                    foreach (Player p in gv.mod.playerList)
                                    {
                                        pcNames.Add(p.name + " (" + p.hp + "/" + p.hpMax + " HP)");
                                    }

                                    //If only one PC, do not show select PC dialog...just go to cast selector
                                    if (gv.mod.playerList.Count == 1)
                                    {
                                        try
                                        {
                                            Player target = gv.mod.playerList[0];
                                            gv.cc.doSpellBasedOnScriptOrEffectTag(gv.cc.currentSelectedSpell, target, target, true, false);
                                            gv.screenType = "main";
                                            doCleanUp();
                                            return;
                                        }
                                        catch (Exception ex)
                                        {
                                            gv.errorLog(ex.ToString());
                                        }
                                    }

                                    using (ItemListSelector pcSel = new ItemListSelector(gv, pcNames, gv.mod.getPlayerClass(getCastingPlayer().classTag).spellLabelSingular + " Target"))
                                    {
                                        pcSel.ShowDialog();
                                        Player pc = getCastingPlayer();
                                        if (pcSel.selectedIndex > 0)
                                        {
                                            try
                                            {
                                                Player target = gv.mod.playerList[pcSel.selectedIndex - 1];
                                                gv.cc.doSpellBasedOnScriptOrEffectTag(gv.cc.currentSelectedSpell, pc, target, true, false);
                                                gv.screenType = "main";
                                                doCleanUp();
                                            }
                                            catch (Exception ex)
                                            {
                                                IBMessageBox.Show(gv, "error with Pc Selector screen: " + ex.ToString());
                                                gv.errorLog(ex.ToString());
                                            }
                                        }
                                        else if (pcSel.selectedIndex == 0) // selected "cancel"
                                        {
                                            //do nothing
                                        }
                                    }
                                }//closing else or target self
                            }
                            else
                            {
                                //Toast.makeText(gv.gameContext, "Not Enough SP for that spell", Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                }
            }
        }