Yup, you're right, the output is being rendered before the attack
method is processed. Unfortunately, I'm not sure how to fix it.
This is what's happening:
The attack button is clicked, and the page is reloaded due to the post
back.
The page is reloaded before the attack is processed, and the output -
which is written by the page's code behind file during the Page_Load
event - is displayed.
The attack is finally processed, but the results aren't seen because
the page has already been rendered.
Is there a way to force the attack processing to take place before the
page load? This is what I currently have:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PlayerCharacter PC = null;
PlayerCharacter Enemy = null;
if (Page.IsPostBack)
{
PC = (PlayerCharacter)Context.Session["attacker"];
Enemy = (PlayerCharacter)Context.Session["target"];
}
else
{
PC = new PlayerCharacter("Neo", "Male", "A young hacker,
unaware that he's the chosen one", new Hacker());
Enemy = new PlayerCharacter("Smith", "Male", "An agent of
the Matrix", new Shill());
}
PC.Money = 2.34f;
Context.Session["attacker"] = PC;
Context.Session["target"] = Enemy;
AttackEventArgs attackArgs = new AttackEventArgs(Context);
List<Attack> PCattacks = PC.Attacks;
attack.Click += delegate { PCattacks[0].ExecuteAttack(this,
attackArgs); };
mainLabel.Text = PC.Name + " ";
mainLabel.Text += PC.Gender + "\n<br />";
mainLabel.Text += "HP: " + PC.CurrentHP + " TP: " +
PC.CurrentTP + " DMG: " + PC.DMG + "\n<br />";
mainLabel.Text += "Money: $" + PC.Money + "\n<br />";
mainLabel.Text += PC.Class.GetType().ToString() + "\n<br /
><br />";
mainLabel.Text += "Attack info before leveling up: <br />";
mainLabel.Text += "DMG: " + PC.DMG + " DMG Modifier " +
PC.DMGModifier + " Chance to Hit: " + PC.ChanceToHit + "<br /><br />";
mainLabel.Text += "Enemy HP: " + Enemy.CurrentHP + "<br /><br /
>";
}
}
On Dec 4, 3:24 am, CK <[EMAIL PROTECTED]> wrote:
> it sounds like you may be handling the display of the enemy
> characteristics (e.g. in Page_Load) before the button event is
> raised. Try putting break points on each method and watch what
> happens.
>
> On 3 Dec, 18:13, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
> wrote:
>
> > Like I've said in other messages, I'm currently attempting to write a
> > web-based game (RPG). For my combat system, I'm attempting to create
> > a turn-based system where the player and computer-controlled character
> > swap turns. Every attack a combatant can execute is, itself, an
> > object. The actual attack is a method of that object.
>
> > Right now, in my test page, I have a simple attack scenario. I have
> > one button tied to the player character's base attack. When clicked,
> > the attack executes, and the enemy is hit. My problem is that the
> > output which displays the hit is delayed by a turn. In other words, I
> > click the attack button, and the page reloads, but the enemy shows no
> > damage, even though the debugger shows that 1. the attack was
> > successful, and 2. damage was recorded. In each new battle, no damage
> > is ever displayed after the first turn, even if it was a success.
>
> > I'm saving the two combatants in a session in order to save their
> > state for the post back. That way, I can see the damage accrue as I
> > click the attack button. Could the session be causing the delay?
>
> > Let me know if I need to post my code. I didn't post it initially
> > because I didn't want to write a huge message and annoy everyone.