Jump to content

Home

Qui-Gon's Script Shack


Qui-Gon Glenn

Recommended Posts

  • Replies 352
  • Created
  • Last Reply
Posted
Show spoiler
(hidden content - requires Javascript to show)
  JCarter426 said:
So, I have a strange problem. The script compiles fine. The beginning of it executes fine. But then at some point it just stops recognizing two of my variables, causing all other parts of the script to fail to execute. What's stranger still is the script is almost identical to one I wrote for K2 with no such problems.
Show spoiler
(hidden content - requires Javascript to show)
#include "jc_inc_clone"

void main() {

object oTarget = OBJECT_SELF;
int iFaction = 2;

if( oTarget == OBJECT_INVALID ) {
JC_DLG("jc_clo1");
}

else {

string sTemp = JC_Template(oTarget);

object oClone = CreateObject(OBJECT_TYPE_CREATURE, sTemp, GetLocation(OBJECT_SELF), FALSE);

int iI;

// Copy ALIGNMENT
AdjustAlignment(oClone, GetAlignmentGoodEvil(oTarget), abs(GetGoodEvilValue(oTarget) - GetGoodEvilValue(oClone)), FALSE);

// Clear INVENTORY
 for( iI = 0; iI <= 17; iI++ ) {
ActionUnequipItem(GetItemInSlot(iI, oClone), TRUE);
}

// Copy INVENTORY

 for( iI = 0; iI <= 17; iI++ ) {
if( GetIsObjectValid(GetItemInSlot(iI, oTarget)) ){
	DelayCommand(0.1, AssignCommand(oClone, ActionEquipItem(CreateItemOnObject(GetStringLowerCase(GetTag(GetItemInSlot(iI, oTarget))), oClone, 1, 1), iI, TRUE)));
	}
}

// Copy APPEARANCE
ApplyEffectToObject(2, EffectDisguise(GetAppearanceType(oTarget)), oClone, 0.0);

// Set FACTION
ChangeToStandardFaction(oClone, iFaction);

// Heal up the clone (just in case)
ApplyEffectToObject(0, EffectHeal(GetMaxHitPoints(oClone) - GetCurrentHitPoints(oClone)), oClone, 0.0);
ApplyEffectToObject(0, EffectHealForcePoints(GetMaxForcePoints(oClone) - GetCurrentForcePoints(oClone)), oClone, 0.0);

 }

}


It works consistently up to and including the creation of oClone. After that, it seems like oTarget and oClone work once each, and after that they never work again. I'm able to shift parts of the code around to get that part to work, but at the expense of all the others. It's rather frustrating.

Any ideas?



I don't know. Could you post the contents of jc_inc_clone? That might help us out a bit.
Posted
  Hassat Hunter said:
Try adding oClone at the top but blank, so

 

void main() {

object oTarget = OBJECT_SELF;
object oClone = "";
int iFaction = 2;

if( 

 

Not sure if it'll fix it, but it might help...

I tried defining everything outside of the if... no luck.

  Fair Strides 2 said:
I don't know. Could you post the contents of jc_inc_clone? That might help us out a bit.

Ah, well, I knew that part is working, but I've updated the code so jc_inc_clone takes up the bulk of it anyway, so here's the entire updated code:

void JC_DLG(string sDLG) {

SetPartyLeader(-1);
DelayCommand(0.2, AssignCommand(OBJECT_SELF, ActionStartConversation(GetFirstPC(), sDLG, 0, 0, 1, "", "", "", "", "", "", 0, -1, -1, 1)));

}


int JC_Get_Class(object oObject) {

int iClass1 = GetClassByPosition(1, oObject);
int iClass2 = GetClassByPosition(2, oObject);
int iClass3 = GetClassByPosition(3, oObject);

if( iClass3 != 255 ) return iClass3;
if( iClass2 != 255 ) return iClass2;
return iClass1;

}


string JC_Class_To_String(int iClass) {

if( iClass == 0 ) return "soldier";
if( iClass == 1 ) return "scout";
if( iClass == 2 ) return "scoundrel";
if( iClass == 3 ) return "guardian";
if( iClass == 4 ) return "consular";
if( iClass == 5 ) return "sentinel";
if( iClass == 6 ) return "combat";
if( iClass == 7 ) return "expert";
if( iClass == 8 ) return "minion";
return "minion";

}


string JC_Class_To_Letter(int iClass) {

if( iClass == 0 ) return "r";
if( iClass == 1 ) return "t";
if( iClass == 2 ) return "l";
if( iClass == 3 ) return "g";
if( iClass == 4 ) return "c";
if( iClass == 5 ) return "s";
return "";

}


string JC_Gender_To_String(object oObject) {

if( GetGender(oObject) == 1 ) return "f";
return "";

}


int JC_Get_Level(object oObject) {

int iLevel = (	GetLevelByPosition(1, oObject) +
		GetLevelByPosition(2, oObject) +
		GetLevelByPosition(3, oObject) );
return iLevel;

}


string JC_Level_To_String(object oObject) {

return IntToString(JC_Get_Level(oObject));

}


string JC_Object_To_JC_Temp(object oObject) {

if( oObject == GetFirstPC() ) return JC_Class_To_Letter(JC_Get_Class(oObject)) + "pc" + JC_Gender_To_String(oObject);
if( GetTag(oObject) == "Bastila" ) return "bastila";
if( GetTag(oObject) == "Cand" ) return "canderous";
if( GetTag(oObject) == "Carth" ) return "carth";
if( GetTag(oObject) == "HK47" ) return "hk47";
if( GetTag(oObject) == "Jolee" ) return "jolee";
if( GetTag(oObject) == "Juhani" ) return "juhani";
if( GetTag(oObject) == "Mission" ) return "mission";
if( GetTag(oObject) == "T3M4" ) return "t3m4";
if( GetTag(oObject) == "Zaalbar" ) return "zaalbar";
return JC_Class_To_String(JC_Get_Class(oObject)) + JC_Gender_To_String(oObject);

}


string JC_Template(object oObject) {

return "jc_" + JC_Object_To_JC_Temp(oObject) + JC_Level_To_String(oObject);

}


void JC_CLONE(object oTarget, int iFaction) {

object oClone;
string sTemp;
int iI;

if( oTarget == OBJECT_INVALID ) {
JC_DLG("jc_clo1");
}

else {

string sTemp = JC_Template(oTarget);

object oClone = CreateObject(OBJECT_TYPE_CREATURE, sTemp, GetLocation(OBJECT_SELF), FALSE);

// Copy ALIGNMENT
AdjustAlignment(oClone, GetAlignmentGoodEvil(oTarget), abs(GetGoodEvilValue(oTarget) - GetGoodEvilValue(oClone)), FALSE);

// Clear INVENTORY
 for( iI = 0; iI <= 17; iI++ ) {
ActionUnequipItem(GetItemInSlot(iI, oClone), TRUE);
}

// Copy INVENTORY

 for( iI = 0; iI <= 17; iI++ ) {
if( GetIsObjectValid(GetItemInSlot(iI, oTarget)) ){
	DelayCommand(0.1, AssignCommand(oClone, ActionEquipItem(CreateItemOnObject(GetStringLowerCase(GetTag(GetItemInSlot(iI, oTarget))), oClone, 1, 1), iI, TRUE)));
	}
}

// Copy APPEARANCE
ApplyEffectToObject(2, EffectDisguise(GetAppearanceType(oTarget)), oClone, 0.0);

// Set FACTION
ChangeToStandardFaction(oClone, iFaction);

// Heal up the clone (just in case)
ApplyEffectToObject(0, EffectHeal(GetMaxHitPoints(oClone) - GetCurrentHitPoints(oClone)), oClone, 0.0);
ApplyEffectToObject(0, EffectHealForcePoints(GetMaxForcePoints(oClone) - GetCurrentForcePoints(oClone)), oClone, 0.0);

 }

}


void main() {

}

 

And then this is executed through either:

#include "jc_inc_clone"

void main() {

JC_CLONE(OBJECT_SELF, 2);

}

or:

#include "jc_inc_clone"

void main() {

JC_CLONE(GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF, 1), 2);

}

 

EDIT: I have someone breathing down my neck, waiting impatiently for me to finish this, so to prove that it's not my fault I took the scripts and all the support files and moved them into K2, not changing a damn thing. AND IT WORKS. So what's up? I'm officially lost at this point.

  • 1 month later...
Posted

Apologies if I could have found this somewhere else, but I'm rather new to modding, and can't seem to find a particular piece of script code anywhere. I'm trying to write a conditional script to check class in K1 before a specific dialogue option becomes available, but I've searched and searched and can't find the specific code I need.

Posted

// 341: A creature can have up to three classes.  This function determines the
// creature's class (CLASS_TYPE_*) based on nClassPosition.
// - nClassPosition: 1, 2 or 3
// - oCreature
// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in
//   nClassPosition (i.e. a single-class creature will only have a value in
//   nClassLocation=1) or if oCreature is not a valid creature.
int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF);

So, if you want to check if a creature has any particular class:

int StartingConditional(){

object oCreature = [whatever];
int iClass = [whatever];
int iC1 = GetClassByPosition(1, oCreature);
int iC2 = GetClassByPosition(2, oCreature);
int iC3 = GetClassByPosition(3, oCreature);

if(	iC1 == iClass ||
iC2 == iClass ||
iC3 == iClass ){
return TRUE;
}
return FALSE;

}

I'm not sure how the class positions get assigned, so depending on what you need it could be trickier than just that.

Posted
  JCarter426 said:
// 341: A creature can have up to three classes.  This function determines the
// creature's class (CLASS_TYPE_*) based on nClassPosition.
// - nClassPosition: 1, 2 or 3
// - oCreature
// * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in
//   nClassPosition (i.e. a single-class creature will only have a value in
//   nClassLocation=1) or if oCreature is not a valid creature.
int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF);

So, if you want to check if a creature has any particular class:

int StartingConditional(){

object oCreature = [whatever];
int iClass = [whatever];
int iC1 = GetClassByPosition(1, oCreature);
int iC2 = GetClassByPosition(2, oCreature);
int iC3 = GetClassByPosition(3, oCreature);

if(	iC1 == iClass ||
iC2 == iClass ||
iC3 == iClass ){
return TRUE;
}
return FALSE;

}

I'm not sure how the class positions get assigned, so depending on what you need it could be trickier than just that.

 

Thanks very much, combining some of that with code from another script that had another bit of what I needed allowed me to write the necessary script, and I've tested it ingame, so I know it works :)

 

Thanks again

Posted

I know this probably seems like a really wierd question but I assure you there is good reason for it. Now to the question: would it be possible to make a force power (buff) never go away after you cast it? And if that is possible would it be possible to remove the blue arrow it makes?

 

Thanks in advance

Posted
  supreme kotor said:
I know this probably seems like a really wierd question but I assure you there is good reason for it. Now to the question: would it be possible to make a force power (buff) never go away after you cast it? And if that is possible would it be possible to remove the blue arrow it makes?

 

Thanks in advance

 

You might experiment with the "DURATION_TYPE_PERMANENT" option in the ApplyEffect function. Though I would have to assume that it is gone when dispelled and/or you change areas. Still, experimentation may prove me wrong. Hope you have a good run and remember:

 

Show spoiler
(hidden content - requires Javascript to show)
"Scripting is fun!"~~ said some random modder as others attacked him for his insanity.
Posted
  Fair Strides 2 said:
"Scripting is fun!"~~ said some random modder as others attacked him for his insanity.

 

 

Well it would be easier if one could program such things in one contiguous file. Kinda stinks having so many separate files to go through. Sure, you could include a lot of scripts that define functions.

 

Actually that sounds like it would be a lot of fun!

Posted
  VarsityPuppet said:
Well it would be easier if one could program such things in one contiguous file. Kinda stinks having so many separate files to go through. Sure, you could include a lot of scripts that define functions.

 

Actually that sounds like it would be a lot of fun!

 

"Ahhh! He's insane! Aaatttttaaaccckkkk!!!"~~the mob continues to assault programmers everywhere...

Posted

You could include a check in the creature's OnHeartbeat script to reapply the script. It wouldnt quite be permanent - there'd be a few seconds at the start of each module where it wouldn't be active - but it would be close.

  • 3 weeks later...
Posted

Hello there! Hope it's alright to post this here:

 

I’m looking to create dialogs with fight sequences for K1 like these:

 

 

The CutsceneAttack function is often mentioned and works, but I run into the problem that was also discussed here without a solution coming up, which is that it works for only one attack. For that reason, I don’t think this function is used in the scenes above; I can clearly see an NPC attack more than once in a single dialog node.

 

So, my question is, what other method is there to create these fight sequences? I’d like them to be identical every time. Should I use the ActionPlayAnimation or PlayAnimation functions? In that case, would I have to “manually” call the attacker’s and defender’s animation, plus any effects like sparks or lasers from blasters?

Posted
  Taunger said:
Hello there! Hope it's alright to post this here:

 

I’m looking to create dialogs with fight sequences for K1 like these:

 

 

The CutsceneAttack function is often mentioned and works, but I run into the problem that was also discussed here without a solution coming up, which is that it works for only one attack. For that reason, I don’t think this function is used in the scenes above; I can clearly see an NPC attack more than once in a single dialog node.

 

So, my question is, what other method is there to create these fight sequences? I’d like them to be identical every time. Should I use the ActionPlayAnimation or PlayAnimation functions? In that case, would I have to “manually” call the attacker’s and defender’s animation, plus any effects like sparks or lasers from blasters?

 

Have you tried putting the CutsceneAttack function in a for loop? Like this:

 

Show spoiler
(hidden content - requires Javascript to show)
void main()
{
int iTest = 0;
for(iTest, iTest <= <number of attacks you want>, iTest++)
   {
        CutsceneAttack();
   }
}

 

Don't forget to insert the arguments for the CutsceneAttack function.

Posted

You could probably just call CutsceneAttack over and over again, sort of like this:

 

void main()
{

object oOne = GetObjectByTag("one");
object oTwo = GetObjectByTag("two");

AssignCommand(oOne, CutsceneAttack();
AssignCommand(oTwo, CutsceneAttack();
AssignCommand(oOne, CutsceneAttack();
AssignCommand(oTwo, CutsceneAttack();
AssignCommand(oOne, CutsceneAttack();
AssignCommand(oTwo, CutsceneAttack();

}

 

(I'm pretty sure this script won't compile, it's just an example of what you could do.)

 

I remember when I made a cutscene I just used the attack function, made two NPC's attack each other and then let them have it for a few seconds. Then I would end it did with the use talent feat function. I don't know if these function names are correct, I'm on my phone at the moment. I'll check back later when I'm on my computer.

Posted

Fallen Guardian, your code makes calls for one attacker, then the other, then the first one again and so on. This is how fighting in-game works as well; it's turn based. I think that's why making a call for the attacker to repeatedly attack doesn't work (which is what I was trying to do), it's waiting for the victim to fight back, which it doesn't, because I've not programmed it to do so.

 

After some more tinkering I think I've found the solution, which is to use:

 

ChangeToStandardFaction(oVictim, STANDARD_FACTION_PREY);
ChangeToStandardFaction(oAttacker, STANDARD_FACTION_PREDATOR);

 

This, apparently, makes the attacker ignore the turn-taking rules.

 

There's one weird caveat with this, however. If I use something like this:

 

AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_MISS, 0));
AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_CRITICAL_HIT, 1000));

 

The animation of the first attack will play, but not the second time. The attack does succeed, because the victim dies. The animation for any attacks after the first one will only play if the CutsceneAttack call is made after the previous attack has already finished. So, it needs to be something like this:

 

AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_MISS, 0));
DelayCommand(3.5, AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_CRITICAL_HIT, 1000)));

 

I just tested this myself and it works!

Still, it seems rather... curious.

Posted
Show spoiler
(hidden content - requires Javascript to show)
  Taunger said:
Fallen Guardian, your code makes calls for one attacker, then the other, then the first one again and so on. This is how fighting in-game works as well; it's turn based. I think that's why making a call for the attacker to repeatedly attack doesn't work (which is what I was trying to do), it's waiting for the victim to fight back, which it doesn't, because I've not programmed it to do so.

After some more tinkering I think I've found the solution, which is to use:

ChangeToStandardFaction(oVictim, STANDARD_FACTION_PREY);
ChangeToStandardFaction(oAttacker, STANDARD_FACTION_PREDATOR);



This, apparently, makes the attacker ignore the turn-taking rules.

There's one weird caveat with this, however. If I use something like this:

AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_MISS, 0));
AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_CRITICAL_HIT, 1000));



The animation of the first attack will play, but not the second time. The attack does succeed, because the victim dies. The animation for any attacks after the first one will only play if the CutsceneAttack call is made after the previous attack has already finished. So, it needs to be something like this:

AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_MISS, 0));
DelayCommand(3.5, AssignCommand(oAttacker, CutsceneAttack(oVictim, 197, ATTACK_RESULT_CRITICAL_HIT, 1000)));



I just tested this myself and it works!
Still, it seems rather... curious.



Could someone put that into a tutorial for cutscene combat, please?
Posted

Here is an example how TSLRCM does it;

 

//{[Handmaiden attacks, Kreia barely moves, deftly avoiding every blow, then gets bored, and grabs the Handmaiden by the throat, or in a Force Crush.]}
                    case 5:
                          {
                          SetMinOneHP(oHandmaiden, TRUE);
                          SetMinOneHP(oKreia, TRUE);
                          AssignCommand(oHandmaiden , ActionAttack(oKreia));
                          DelayCommand(3.0, AssignCommand(oHandmaiden , ActionAttack(oKreia)));
                          DelayCommand(6.0, AssignCommand(oHandmaiden , ActionAttack(oKreia)));
                          DelayCommand(8.0, AssignCommand(oHandmaiden , ActionAttack(oKreia)));
                          DelayCommand(10.0, SetMinOneHP(oKreia, FALSE));
                          DelayCommand(10.0, SetMinOneHP(oHandmaiden , FALSE));
                          DelayCommand(10.0, AssignCommand(oKreia, ActionPlayAnimation(10063, 1.0, 3.5)));
                          DelayCommand(10.1, AssignCommand(oHandmaiden , ClearAllActions()));
                          DelayCommand(10.2, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectChoke(), oHandmaiden, 3.0));
                          DelayCommand(13.3, AssignCommand(oHandmaiden , ClearAllActions()));
                          DelayCommand(13.5, AssignCommand(oHandmaiden, SetIsDestroyable(0, 1, 0)));
                          effect efDeath = EffectDeath(0, 0, 1);
                          DelayCommand(13.5, ApplyEffectToObject(2, efDeath, oHandmaiden, 0.0));
                          }
                          break;

Posted
Show spoiler
(hidden content - requires Javascript to show)
  Hassat Hunter said:
Here is an example how TSLRCM does it;

//{[Handmaiden attacks, Kreia barely moves, deftly avoiding every blow, then gets bored, and grabs the Handmaiden by the throat, or in a Force Crush.]}
                    case 5:
                          {
                          SetMinOneHP(oHandmaiden, TRUE);
                          SetMinOneHP(oKreia, TRUE);
                          AssignCommand(oHandmaiden , ActionAttack(oKreia));
                          DelayCommand(3.0, AssignCommand(oHandmaiden , ActionAttack(oKreia)));
                          DelayCommand(6.0, AssignCommand(oHandmaiden , ActionAttack(oKreia)));
                          DelayCommand(8.0, AssignCommand(oHandmaiden , ActionAttack(oKreia)));
                          DelayCommand(10.0, SetMinOneHP(oKreia, FALSE));
                          DelayCommand(10.0, SetMinOneHP(oHandmaiden , FALSE));
                          DelayCommand(10.0, AssignCommand(oKreia, ActionPlayAnimation(10063, 1.0, 3.5)));
                          DelayCommand(10.1, AssignCommand(oHandmaiden , ClearAllActions()));
                          DelayCommand(10.2, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectChoke(), oHandmaiden, 3.0));
                          DelayCommand(13.3, AssignCommand(oHandmaiden , ClearAllActions()));
                          DelayCommand(13.5, AssignCommand(oHandmaiden, SetIsDestroyable(0, 1, 0)));
                          effect efDeath = EffectDeath(0, 0, 1);
                          DelayCommand(13.5, ApplyEffectToObject(2, efDeath, oHandmaiden, 0.0));
                          }
                          break;



Did you also have to set them to specific factions?
Posted

No.

She's neutral by default though.

 

When not, yeah, it has to be done. Here for example Kreia vs. Hanharr in the Jekk Jekk Tar. One solution actually has him attack, the other version uses animations to 'fake' it. Had to be done that way considering it works differently if he's a teammate, and damage will break the cutscene.

 

if ((nParam1 == 5)) {
	object oKreia = GetObjectByTag("Kreia", 0);
	object oHanharr = GetObjectByTag("Hanharr", 0);
	ChangeToStandardFaction(oHanharr, STANDARD_FACTION_GIZKA_1);
	ChangeToStandardFaction(oKreia, STANDARD_FACTION_GIZKA_2);
       DelayCommand(0.2, AssignCommand(oHanharr, ActionAttack(oKreia)));
	DelayCommand(1.0, ChangeToStandardFaction(oHanharr, STANDARD_FACTION_FRIENDLY_1));
	DelayCommand(1.0, ChangeToStandardFaction(oKreia, STANDARD_FACTION_FRIENDLY_1));
	DelayCommand(2.2, AssignCommand(oKreia, ActionPlayAnimation(10063, 1.0, 3.5)));
       DelayCommand(2.3, AssignCommand(oHanharr, ClearAllActions()));
       DelayCommand(2.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectChoke(), oHanharr, 2.3));
       DelayCommand(4.9, AssignCommand(oHanharr, ClearAllActions()));
}
if ((nParam1 == 6)) {
	object oKreia = GetObjectByTag("Kreia", 0);
	object oHanharr = GetObjectByTag("Hanharr", 0);
       DelayCommand(0.2, AssignCommand(oHanharr, ActionPlayAnimation(10098, 1.0, 3.5)));
	DelayCommand(2.2, AssignCommand(oKreia, ActionPlayAnimation(10063, 1.0, 3.5)));
       DelayCommand(2.3, AssignCommand(oHanharr, ClearAllActions()));
       DelayCommand(2.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectChoke(), oHanharr, 2.3));
	SetFakeCombatState(oHanharr, 0);
	SetFakeCombatState(oKreia, 0);
       DelayCommand(4.9, AssignCommand(oHanharr, ClearAllActions()));
}

  • 2 weeks later...
Posted

Need some help. Here's a script to make Atton and the PC get Pazaak cards in their hand. All good, and it works... but the PC's cards are invisible. Atton works fine, just not the PC.

If the convo ends I find the cards in my hand, still invisible. Swapping with other weapon and back makes visible, so tried unequipping and re-equipping... didn't work. Tried adding a specific "render" to the pazaak cards, didn't work. Not quite sure what more to try.

I'd rather use the real player than a fake dummy, as that complicates things down the road for what I want... so, anyone got a clue what to do?

void main () {
object oPC = GetFirstPC();
object oAtton = GetObjectByTag("Atton");
int nParam1 = GetScriptParameter(1);
if ((nParam1 == 0)) {
	SetGlobalFadeOut(0.0, 0.0, 0.0, 0.0, 0.0);
	SetGlobalFadeIn(1.0, 1.0, 0.0, 0.0, 0.0);
	GiveItem(GetItemInSlot(4, oPC), oPC);
	GiveItem(GetItemInSlot(5, oPC), oPC);
	GiveItem(GetItemInSlot(4, oAtton), oPC);
	GiveItem(GetItemInSlot(5, oAtton), oPC);
	CreateItemOnObject("w_pazaak_01", oPC, 1, 1);
	CreateItemOnObject("w_pazaak_01", oAtton, 1, 1);
	DelayCommand(0.5, AssignCommand(oPC, ActionEquipItem(GetObjectByTag("w_pazaak_01"), 4, TRUE)));
	DelayCommand(0.5, AssignCommand(oAtton, ActionEquipItem(GetObjectByTag("w_pazaak_01"), 4, TRUE)));
	AssignCommand(oPC, ActionJumpToLocation(Location(Vector(54.15430,45.80115,1.80000),260.0f)));
	AssignCommand(oAtton, ActionJumpToLocation(Location(Vector(54.26917,43.75487,1.80000),60.0f)));
	DelayCommand(0.8, AssignCommand(oPC, ActionPlayAnimation(38, 1.0, (-1.0))));
	DelayCommand(0.8, AssignCommand(oAtton, ActionPlayAnimation(38, 1.0, (-1.0))));
}
}

Posted

Hmm... I just executed it and I didn't end up with invisible cards. Tried it with various weapons in hand, always seemed to do what it's meant to do. Sorry, I got nothing more than that, other than I did it outside of a conversation. :giveup:

Posted

Hmmm, yes, once I dropped the cutscene I got the pazaak cards in hand. Annoying is Atton immediately does his Ebon Hawk routine though, which makes him not getting his cards.

 

Going to try dropping out real fast then rebooting the convo and have Atton get his cards then... hope that works.

 

EDIT: After all that effort, nope. Once the action comes back on the PC loses his hand :/.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...