LucasForums

LucasForums (http://www.lucasforums.com/index.php)
-   Holowan Laboratories (http://www.lucasforums.com/forumdisplay.php?f=324)
-   -   Talk, fight, talk, fight, talk problem (http://www.lucasforums.com/showthread.php?t=210130)

Trex 05-16-2012 10:33 AM

Talk, fight, talk, fight, talk problem
 
Hi all.

I'm trying to put together a big duel which is in 4 parts. You fight, talk, then fight, then talk etc.

I have this this script in the utc's ScriptDamaged :

Code:

void main() {
  int nFlag = IntToFloat( GetCurrentHitPoints( OBJECT_SELF ) ) < ( 0.1 * GetMaxHitPoints( OBJECT_SELF ) );
  if( nFlag && !GetLocalBoolean( OBJECT_SELF , 10 ) ) {
      SetLocalBoolean( OBJECT_SELF, 10, TRUE );
      SetMinOneHP( OBJECT_SELF, FALSE );

CancelCombat(OBJECT_SELF);
        SurrenderToEnemies();
        ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_NEUTRAL);

        object oNPC=GetObjectByTag("syyth");
  location lMe=GetLocation(GetFirstPC());
    ActionDoCommand(SetCommandable(TRUE,oNPC));
  AssignCommand (oNPC, ActionStartConversation(GetFirstPC()));
  }
 
}

Which works fine, but only for the first round. After the first mid-fight conversation has happened, my baddie just keeps fighting and never turns to neutral and talks to you a second time.

How can I make this work?

Hassat Hunter 05-16-2012 10:44 AM

Well, it only runs if local boolean 10 is not set. Here it's set.
Maybe if you want a second happening use another boolean number instead, and repeat the script, with different damage value...

Trex 05-16-2012 10:51 AM

I see.

So, in theory, if I add a script into the actual conversation to reset the local boolean to false each time, it should work?

EDIT : SOLUTION FOUND

Add a little to the end of the script to reset it (using a seperate script doesn't really work)

Code:

void main() {
  int nFlag = IntToFloat( GetCurrentHitPoints( OBJECT_SELF ) ) < ( 0.1 * GetMaxHitPoints( OBJECT_SELF ) );
  if( nFlag && !GetLocalBoolean( OBJECT_SELF , 10 ) ) {
      SetLocalBoolean( OBJECT_SELF, 10, TRUE );
      SetMinOneHP( OBJECT_SELF, FALSE );

CancelCombat(OBJECT_SELF);
        SurrenderToEnemies();
        ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_NEUTRAL);

        object oNPC=GetObjectByTag("syyth");
  location lMe=GetLocation(GetFirstPC());
    ActionDoCommand(SetCommandable(TRUE,oNPC));
  AssignCommand (oNPC, ActionStartConversation(GetFirstPC()));
  DelayCommand(0.5, SetLocalBoolean( OBJECT_SELF, 10, FALSE ));
  }
 
}


Hassat Hunter 05-16-2012 02:16 PM

Works, but not really dependant on HP. And the NPC can be killed before that time. I was more thinking (not using 2 scripts);

Code:

void main() {
  int nFlag = IntToFloat( GetCurrentHitPoints( OBJECT_SELF ) ) < ( 0.5 * GetMaxHitPoints( OBJECT_SELF ) );
  int nFlag2 = IntToFloat( GetCurrentHitPoints( OBJECT_SELF ) ) < ( 0.1 * GetMaxHitPoints( OBJECT_SELF ) );
  if( nFlag && !GetLocalBoolean( OBJECT_SELF , 10 ) ) {
      SetLocalBoolean( OBJECT_SELF, 10, TRUE );

      CancelCombat(OBJECT_SELF);
        SurrenderToEnemies();
        ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_NEUTRAL);

        object oNPC=GetObjectByTag("syyth");
  location lMe=GetLocation(GetFirstPC());
    ActionDoCommand(SetCommandable(TRUE,oNPC));
  AssignCommand (oNPC, ActionStartConversation(GetFirstPC()));
  }
 
    if( nFlag2 && !GetLocalBoolean( OBJECT_SELF , 15 ) ) {
      SetLocalBoolean( OBJECT_SELF, 15, TRUE );
      SetMinOneHP( OBJECT_SELF, FALSE );

CancelCombat(OBJECT_SELF);
        SurrenderToEnemies();
        ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_NEUTRAL);

        object oNPC=GetObjectByTag("syyth");
  location lMe=GetLocation(GetFirstPC());
    ActionDoCommand(SetCommandable(TRUE,oNPC));
  AssignCommand (oNPC, ActionStartConversation(GetFirstPC()));
  DelayCommand(0.5, SetLocalBoolean( OBJECT_SELF, 10, FALSE ));
  }
}



All times are GMT -4. The time now is 11:07 PM.

Powered by vBulletin®
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LFNetwork, LLC ©2002-2011 - All rights reserved.