Player Resource Consortium

 

Author Topic: My prc_base_skin came off...  (Read 4443 times)

0 Members and 1 Guest are viewing this topic.

August 01, 2010, 08:23:54 PM

... and is now just sitting in my inventory.  I can't figure out how to re-equip it, and it's undroppable.  It came off as a result of a cutscene polymorph effect, I think.  I've tried resting, re-loading a savegame (both before and after the offending cutscene), and de-leveling and re-leveling.  Nothing has worked.  I'm playing a Warlock, so except for my basic Eldritch Blast (as modified by my last Blast Essence) all of my class abilities are attached to the skin, which is a mite frustrating, especially since the last Blast Essence I applied was the Brimstone Blast, and several of my upcoming foes are immune to fire...

Edit:  I have all but confirmed that the problem stems from the application of a scripted Polymorph effect.  This happens in a custom module, and is more than somewhat vexing, as in HotU, when one is forced to make use of the Polymorph effects of the amulet, the skin gets re-equipped, but in this module, it's not.

2nd Edit:  I tried creating a snippet of code to put in the override folder:

Code: [Select]
void main()
{
object oPC = GetFirstPC();
object oSkin = GetFirstItemInInventory(oPC);
ActionEquipItem(oSkin, INVENTORY_SLOT_CARMOUR);
}


but even though the base_prc_skin is in the first inventory slot, I get an error "You don't have the necessary proficiencies to equip this item." or somesuch.  Any help would be appreciated.

3rd Edit (Fit the Fourth): On examination of the relevant code sections in the Toolset, it seems that the primary difference in the HotU Polymorph function is that it's handled through a DelayCommand(....) call as opposed to a direct call of ApplyEffectToObject(....), and the HotU Polymorph is assigned with the duration type DURATION_TYPE_PERMANENT as opposed to the custom module's DURATION_TYPE_TEMPORARY.  Also, of course, the HotU Polymorph is managed via dialouge as opposed to forced-cutscene activity.  I have no idea why (or indeed if) any of that is relevant to the loss of the base_prc_skin creature skin that holds all of my class abilities...

Thanks again for any help, insights, or guesses that anyone might be able to offer!
« Last Edit: August 02, 2010, 07:55:04 AM by DoskiousSteele »


August 02, 2010, 12:34:14 PM
Reply #1

Your making the assumption that the game relates inventory position with the physical position of it in the inventory. I would guess that it determines position based on the order in which you picked it up. At least with my limited coding knowledge it would be a lot easier just to append things to a list and store the items location with a variable. Tying to constantly reorder the inventory list depending on where you move an item to seems quite inelegant.

I would check the onrest code for the PRC as I recall having this issue and to solve it, I think I dropped the hide, then rested. I may of had to wipe the database files as well, but I can't recall.
« Last Edit: August 02, 2010, 12:37:28 PM by KenquinnTheInsaneOne »


August 02, 2010, 03:44:32 PM
Reply #2

Quote from: KenquinnTheInsaneOne

Your making the assumption that the game relates inventory position with the physical position of it in the inventory. I would guess that it determines position based on the order in which you picked it up. At least with my limited coding knowledge it would be a lot easier just to append things to a list and store the items location with a variable. Tying to constantly reorder the inventory list depending on where you move an item to seems quite inelegant.

I would check the onrest code for the PRC as I recall having this issue and to solve it, I think I dropped the hide, then rested. I may of had to wipe the database files as well, but I can't recall.


>.< Right, I feel silly.  I have tried dropping the *skin* only to have it tell me that "This item is not transferable."  I have not yet tried dropping the hideTokens that are *inside* the base_prc_skin item.

That said, if I knew the tag for the skin (is it just "base_prc_skin"?), maybe I could implement a While loop to match the tag to an inventory item, and then try to equip that item, along the lines of

Code: [Select]
       while (!(oItem == OBJECT_INVALID))
        {
            if (GetTag(oItem) == "base_prc_skin")
              break;
            oItem = GetNextItemInInventory(oMember);
        }


I'll look into the OnRest scripts, tho, thanks.


August 02, 2010, 03:47:46 PM
Reply #3

One of the scripts will have its tag or you can open up the bic file with a GFF editor(look in the nwvault) and find the hides tag.
« Last Edit: August 02, 2010, 03:47:58 PM by KenquinnTheInsaneOne »


August 03, 2010, 02:39:21 AM
Reply #4

I took your advice, and according to the data, the character is currently equipped with one base_prc_skin (that is the tag) and has another in his inventory.  The one in the inventory has all of the warlock invocations on it, and while I figured out how to eliminate the equipped (incorrect) skin causing the correct skin to be equipped on loading the save, I think that a savegame edit is a suboptimal solution, as I know that more Polymorphic effects are scripted into the module beyond my current progress.

I thought that the problem might have been associated only with the cutscene-invisible Polymorph effect, but it has happened with a different Polymorph effect as well - that is, when the Polymorph ends, the character has a base_prc_skin in his inventory with all the Warlock Invocation bonus feats on it, and no access to invocations (since the bonus feats granting access are on the inventory skin as opposed to the equipped skin).

Any insight as to why this might be a problem following polymorph effects would be appreciated, if only so that I could go through the module and future modules to correct whatever problem might exist...

Thanks again!


August 03, 2010, 01:32:49 PM
Reply #5

The GFF editor was not intended as a solution but as a diagnostic tool. We now know that you character is somehow getting a blank PRC hide.

Could you post a copy of one of the polymorph scripts that messes up the PRC base hide?
« Last Edit: August 03, 2010, 01:36:15 PM by KenquinnTheInsaneOne »


August 04, 2010, 05:12:53 PM
Reply #6

Full text of the script:

Code: [Select]
void main()
{

  float fLength = 100.0;

  object oPC = GetEnteringObject();
  if(GetIsPC(oPC))
  {
    SetCameraMode(oPC, CAMERA_MODE_TOP_DOWN);
    GestaltCameraTrack (GetObjectByTag("LordPaladinson2"),
                        20.0, 20.0,
                        11.0, 50.0,
                        6.0, 20.0,
                        oPC, 0);
   }

  if( (!(GetLocalInt(OBJECT_SELF, "fired") == 1)) && (GetIsPC(GetEnteringObject()) == TRUE) )
  {
    SetLocalInt(OBJECT_SELF, "fired", 1);
    object oPC = GetEnteringObject();
    object oLord = GetObjectByTag("LordPaladinson2");
    object oJordan = GetObjectByTag("Jordan");
    object oArchmage = GetObjectByTag("Archmage");

    AssignCommand(oJordan, ActionForceMoveToObject(oLord, TRUE));
    DelayCommand(5.0, AssignCommand(oLord, SpeakString("Jordan, report!")));
    DelayCommand(10.0, AssignCommand(oJordan, SpeakString("It's bad, my Lord.  Much of the city is burning.")));

    AssignCommand(oArchmage, ActionForceMoveToObject(GetObjectByTag("wp_archmage_near")));
    DelayCommand(15.0, AssignCommand(oArchmage, SpeakString("Lord Peirgieron, this meteor shower was no accident.")));
    DelayCommand(20.0, AssignCommand(oLord, SpeakString("What is it Eärind?  What do you know?")));
    DelayCommand(28.0, AssignCommand(oArchmage, SpeakString("Some force has pulled down these rocks from the sky, and I believe I know why.")));
    DelayCommand(36.0, AssignCommand(oLord, SpeakString("Who?  Some enemy of ours?  Waterdeep burns this night!")));
    DelayCommand(42.0, AssignCommand(oArchmage, SpeakString("I believe the devastation was merely a byproduct.")));
    DelayCommand(48.0, AssignCommand(oArchmage, SpeakString("Rather it is something within one of the rocks they desired.")));
    DelayCommand(54.0, AssignCommand(oLord, SpeakString("What is this thing they seek?")));
    DelayCommand(60.0, AssignCommand(oArchmage, SpeakString("I believe it is called the Tear of Selūne, a jewel of great power.")));
    DelayCommand(66.0, AssignCommand(oArchmage, SpeakString("We must recover it from its resting place, the heart of Lizard Marsh.")));
    DelayCommand(72.0, AssignCommand(oJordan, SpeakString("My Lord, all hands are busy putting out fires and controlling looters.")));


    DelayCommand(77.0, AssignCommand(oLord, ActionMoveToObject(oJordan)));
    DelayCommand(90.0, AssignCommand(oLord, PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL, 1.0, 6.0)));
    DelayCommand(78.0, AssignCommand(oLord, SpeakString("Then put out the call, to all who seek fame and fortune.")));
    DelayCommand(84.0, AssignCommand(oLord, SpeakString("Offer a great reward for the recovery of this gem.")));
    DelayCommand(90.0, AssignCommand(oLord, SpeakString("Whoever seeks it has made a great enemy this day.")));
    DelayCommand(96.0, AssignCommand(oJordan, SpeakString("Yes, my Lord.")));
    DelayCommand(98.0, AssignCommand(oJordan, ActionForceMoveToObject(GetObjectByTag("wp_inter2_2"), TRUE)));
    DelayCommand(fLength + 1.0, ExecuteScript("dc1_inter2_2", oJordan));
  }

  if((!(GetTag(GetEnteringObject()) == "Jordan")) &&
     (!(GetTag(GetEnteringObject()) == "Archmage")) )
  {
    effect ePolymorph;
    object oPC = GetEnteringObject();
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(100), oPC);
    ePolymorph = EffectPolymorph(POLYMORPH_TYPE_INVISIBLE);
    AssignCommand(GetEnteringObject(), SetCameraFacing(DIRECTION_NORTH));
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePolymorph, GetEnteringObject(), fLength);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneDominated(), GetEnteringObject(), fLength - 1.0);


//    object oMember = GetFirstFactionMember(oPC, FALSE);
//    while (GetIsObjectValid(oMember))
//    {
//       ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePolymorph, oMember, fLength);
//       ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneDominated(), oMember, fLength);

//       oMember = GetNextFactionMember(oPC);
//    }


  }
}


August 05, 2010, 01:43:00 PM
Reply #7

No idea what is happening in that script to cause that issue. Mainly because of my limited knowledge of how the PRC scripting works. You can try the IRC for help with solving your issue. Just click IRC at the top of this page or you can hope someone like DMH or xwarren will reply.
« Last Edit: August 05, 2010, 01:43:28 PM by KenquinnTheInsaneOne »