Does anyone know the item tags for the Feast Day DLC gifts and pranks or where/how I could find out this information? I need the tags for proper gift handling in my mod. Unfortunately the files are encrypted or some such nuisance, so I can't open them to find out.
Tags of pranks and gifts in Feast Day DLC?
Débuté par
Karma
, sept. 14 2010 12:51
#1
Posté 14 septembre 2010 - 12:51
#2
Posté 14 septembre 2010 - 04:25
You could write a quick script to work as a PRCSCR or a console script to output the tags of all the items the player has and run it on a savegame where the player has all the gift items. Something like
The "satans_karma Item tag is " is just something to easily identify your output lines in the DragonAge_1 log file since it contains a lot of information.
object [] arInvItems = GetItemsInInventory(oCreature, GET_ITEMS_OPTION_ALL);
int nInvSize = GetArraySize(arInvItems);
int j;
for (j = 0; j < nInvSize; j++)
{
PrintToLog("satans_karma Item tag is " + GetTag(arInvItems[j]));
}
The "satans_karma Item tag is " is just something to easily identify your output lines in the DragonAge_1 log file since it contains a lot of information.
#3
Posté 14 septembre 2010 - 07:11
These might help somewhat if you are willing to sort through them.
val_constants_h.nss
[dascript]
const string VAL_BALL_IN_PLAY = "VAL_BALL_IN_PLAY";
const string VAL_ALCOHOL_TRACKER = "VAL_ALCOHOL_TRACKER";
const string VAL_PUPPET_TRACKER = "VAL_PUPPET_TRACKER";
const string VAL_DOLL_TRACKER = "VAL_DOLL_TRACKER";
const string VAL_LUTE_TRACKER = "VAL_LUTE_TRACKER";
const string VAL_MEMORY_TRACKER = "VAL_MEMORY_TRACKER";
//const string VAL_CAT_TRACKER = "VAL_CAT_TRACKER";
const string VAL_ROCK_TRACKER = "VAL_ROCK_TRACKER";
const string VAL_ROCK_NAME = "VAL_ROCK_NAME";
const string VAL_GIFT_COUNTER = "VAL_GIFT_COUNTER";
const string VAL_PRANK_COUNTER = "VAL_PRANK_COUNTER";
const string VAL_ROCK_NAME_DEFAULT = "hjn197a872skksaeiil";
const int ACH_VAL_FESTIVE = 24;
const int VAL_PARTY_PROPERTIES_2DA = 10500;
const int VAL_PARTY_DOG_SLOT = 2;
const string VAL_GIFT_1 = "Gift1";
const string VAL_GIFT_USEABLE_1 = "GiftUseable1";
//const string VAL_ANTI_GIFT_1 = "AntiGift1";
//const string VAL_ANTI_GIFT_USEABLE_1 = "AntiGiftUseable1";
const string VAL_EXTRA_GIFTS = "ExtraGifts";
const string VAL_GIFT_PREFIX = "val_im_gift";
const string VAL_IT_BALL = "val_im_qck_ball";
const resource VAL_IM_BALL = R"val_im_qck_ball.uti";
//const string VAL_IT_MUZZLE = "val_im_spc_dog_col_shame";
//const resource VAL_IM_MUZZLE = R"val_im_spc_dog_col_shame.uti";
const string VAL_IT_LUTE = "val_im_qck_lute";
const resource VAL_IM_LUTE = R"val_im_qck_lute.uti";
const string VAL_IT_DOLL = "val_im_qck_doll";
const resource VAL_IM_DOLL = R"val_im_qck_doll.uti";
const string VAL_IT_FLASK = "val_im_qck_flask";
const resource VAL_IM_FLASK = R"val_im_qck_flask.uti";
//const string VAL_IT_SOAP = "val_im_qck_soap";
//const resource VAL_IM_SOAP = R"val_im_qck_soap.uti";
const string VAL_IT_AMULET = "val_im_qck_amulet";
const resource VAL_IM_AMULET = R"val_im_qck_amulet.uti";
const string VAL_IT_BRANDY = "val_im_qck_brandy";
const resource VAL_IM_BRANDY = R"val_im_qck_brandy.uti";
//const string VAL_IT_STICK = "val_im_wep_mag_sta_cat";
//const resource VAL_IM_STICK = R"val_im_wep_mag_sta_cat.uti";
const string VAL_IT_ROCK = "val_im_qck_rock";
const resource VAL_IM_ROCK = R"val_im_qck_rock.uti";
const string VAL_IT_SHIELD = "val_im_arm_shd_twr_mrc";
//const resource VAL_IM_CHASTITY_BELT = R"val_im_acc_blt_chs.uti";
//const string VAL_IT_CHASTITY_BELT = "val_im_acc_blt_chs";
//const resource VAL_IM_CHASTITY_KEY = R"val_im_chastity_key.uti";
//const resource VAL_IM_CHASTITY_GIFT = R"val_im_gift_chastity.uti";
const string VAL_IT_BALL_GIFT = "val_im_gift_ball";
const string VAL_IT_HORSE_GIFT = "val_im_gift_horse";
//const string VAL_IT_MUZZLE_GIFT = "val_im_gift_muzzle";
const resource R_VAL_CR_CAT = R"valcr_cat.utc";
const resource R_VAL_IP_ROCK = R"val_ip_rock.utp";
const resource R_VAL_CONV_PRAYER = R"val_sten_prayer.dlg";
const string VAL_IP_ROCK = "val_ip_rock";
const int VFX_VAL_BALL = 110506;
const int ITEM_ABILITY_VAL_BALL = 310500;
const int ITEM_ABILITY_VAL_BRANDY = 310501;
const int ITEM_ABILITY_VAL_AMULET = 310502;
//const int ITEM_ABILITY_VAL_MUZZLE = 310503;
//const int ITEM_ABILITY_VAL_SOAP = 310504;
const int ITEM_ABILITY_VAL_DOLL = 310505;
const int ITEM_ABILITY_VAL_LUTE = 310506;
const int ITEM_ABILITY_VAL_ROCK = 310507;
//const int ITEM_ABILITY_VAL_KEY = 310508;
//const int ITEM_ABILITY_VAL_CAT = 310509;
const int ITEM_ABILITY_VAL_PUPPET = 310510;
const int ITEM_ABILITY_VAL_PRAYERS = 310511;
const int ITEM_ABILITY_VAL_FLASK = 310512;
[/dascript]
val_module.nss
[dascript]
/////////////////////////////////////
// Valentines module events
/////////////////////////////////////
#include "log_h"
#include "utility_h"
#include "wrappers_h"
#include "events_h"
#include "global_objects_h"
#include "party_h"
#include "approval_h"
#include "val_constants_h"
#include "plt_valpt_offer"
#include "plt_valpt_offer_board"
#include "plt_valpt_gifts"
#include "sys_treasure_h"
int VAL_IsItemInPartyInventory(resource rItem)
{
string sTag = ResourceToTag(rItem);
object[] arPartyPool = GetPartyPoolList();
int nSize = GetArraySize(arPartyPool);
int n;
int bFound = FALSE;
for (n = 0; n < nSize && !bFound; n++)
{
if (CountItemsByTag(arPartyPool[n], sTag))
{
bFound = TRUE;
}
}
return bFound;
}
void main()
{
//--------------------------------------------------------------------------
// Initialization
//--------------------------------------------------------------------------
// Load Event Variables
event evEvent = GetCurrentEvent();
int nEventType = GetEventType(evEvent);
// Grab Player, set default event handled to false
object oPC = GetHero();
int bEventHandled = FALSE;
Log_Events(ToString(GetEventType(evEvent)),evEvent);
switch(nEventType)
{
case EVENT_TYPE_MODULE_HANDLE_GIFT:
{
object oItem = GetEventObject(evEvent, 1);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (abs(nValApproval / 1000) == 1) //only values between +-1000 through +-1999 are checked
{
object oFollower = GetEventObject(evEvent, 0);
string sFollower = GetTag(oFollower);
int nFollowerIndex = Approval_GetFollowerIndex(oFollower);
int nApprovalChange = GetEventInteger(evEvent, 0);
int nSoundSet = -1;
nValApproval %= 1000;
if (nValApproval >= 200) //handle extreme (specific) gifts
{
int nItemIndex = abs(nValApproval % 200);
if (nFollowerIndex != VAL_PARTY_DOG_SLOT)
{
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
}
if (nItemIndex == nFollowerIndex) // if item is for this follower, give useable item if it exists
{
/* removing achievement
if(!WR_GetPlotFlag(PLT_VALPT_GIFTS, nItemIndex)
&& !GetHasAchievementByID(ACH_VAL_FESTIVE))
{
object oModule = GetModule();
int nPrankCount = GetLocalInt(oModule, VAL_PRANK_COUNTER);
int nGiftCount = GetLocalInt(oModule, VAL_GIFT_COUNTER);
int nCount;
nGiftCount++;
SetLocalInt(oModule, VAL_GIFT_COUNTER, nGiftCount);
nCount = nPrankCount + nGiftCount;
if (nCount >= 9)
{
WR_UnlockAchievement(ACH_VAL_FESTIVE, FALSE, TRUE);
}
WR_SetPlotFlag(PLT_VALPT_GIFTS, nItemIndex, TRUE, FALSE);
} */
resource rUseable = GetM2DAResource(VAL_PARTY_PROPERTIES_2DA, VAL_GIFT_USEABLE_1, nFollowerIndex);
nSoundSet = SS_GIFT_ECSTATIC;
if (rUseable != INVALID_RESOURCE
&& !VAL_IsItemInPartyInventory(rUseable))
{
object oUseable = CreateItemOnObject(rUseable, GetPartyLeader(), 1, "", TRUE);
TS_ScaleItem(oUseable, GetLevel(GetHero()));
}
if (nFollowerIndex == VAL_PARTY_DOG_SLOT)
{
//working around follower bonus bug
Approval_ChangeApproval(nFollowerIndex, -50);
Approval_ChangeApproval(nFollowerIndex, 30);
Approval_ChangeApproval(nFollowerIndex, 20);
}
else
{
int nCurrentApproval = Approval_GetApproval(nFollowerIndex);
if (nCurrentApproval > 40) //working around follower bonus bug
{
Approval_ChangeApproval(nFollowerIndex, 85 - nCurrentApproval);
nCurrentApproval = Approval_GetApproval(nFollowerIndex);
Approval_ChangeApproval(nFollowerIndex, 100 - nCurrentApproval);
if(!Approval_GetFriendlyEligible(nFollowerIndex))
{
int nStringRef = GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "StringRef", APP_RANGE_WARM);
SetFollowerApprovalDescription(oFollower, nStringRef);
}
}
else
{
Approval_ChangeApproval(nFollowerIndex, 50);
}
}
}
else // refund if not for this follower
{
resource rGift = GetM2DAResource(VAL_PARTY_PROPERTIES_2DA, VAL_GIFT_1, nItemIndex);
nSoundSet = SS_BAD_IDEA;
CreateItemOnObject(rGift, GetPartyLeader(), 1, "", TRUE);
}
}
else // handle general gifts
{
if (nFollowerIndex != VAL_PARTY_DOG_SLOT && nValApproval -200)
{
nSoundSet = SS_GIFT_POSITIVE;
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
Approval_ChangeApproval(nFollowerIndex, nValApproval);
}
}
//StopSound("ss_morrigan/vo/298799_m");
if(nSoundSet != -1 )
PlaySoundSet(oFollower, nSoundSet, 1.0);
}
break;
}
case EVENT_TYPE_UNIQUE_POWER:
{
//------------------------------------------------------------------
// EVENT_TYPE_UNIQUE_POWER
//------------------------------------------------------------------
// Sent by: Scripting
// When: A unique power for an item is used
//------------------------------------------------------------------
int nAbility;
string sItemTag;
object oItem;
object oCaster;
object oTarget;
//------------------------------------------------------------------
nAbility = GetEventInteger(evEvent,0);
oItem = GetEventObject(evEvent, 0);
oCaster = GetEventObject(evEvent, 1);
oTarget = GetEventObject(evEvent, 2);
sItemTag = GetTag(oItem);
break;
}
case EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED:
{
// EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED
//------------------------------------------------------------------
// Sent by: Scripting
// When: Item is added to inventory that has
// ITEM_SEND_ACQUIRED_EVENT set to TRUE
//------------------------------------------------------------------
string sItemTag;
object oItem;
object oAcquirer;
//------------------------------------------------------------------
oAcquirer = GetEventCreator(evEvent);
oItem = GetEventObject(evEvent, 0);
sItemTag = GetTag(oItem);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (nValApproval / 1000 == 1
&& FindSubString(sItemTag, VAL_GIFT_PREFIX) != -1)
{
if (!WR_GetPlotFlag(PLT_VALPT_OFFER, VAL_OFFER_ITEM_PURCHASED))
{
WR_SetPlotFlag(PLT_VALPT_OFFER, VAL_OFFER_ITEM_PURCHASED, TRUE, FALSE);
WR_SetPlotFlag(PLT_VALPT_OFFER_BOARD, VAL_OFFER_BOARD_TEXT, FALSE, FALSE);
}
}
if (sItemTag == VAL_IT_ROCK)
{
if (!WR_GetPlotFlag(PLT_VALPT_GIFTS, VAL_GIFT_ROCK_NAMED))
{
ShowPopup(420566, 2, oItem, TRUE, 420565);
WR_SetPlotFlag(PLT_VALPT_GIFTS, VAL_GIFT_ROCK_NAMED, TRUE);
}
}
break;
}
case EVENT_TYPE_POPUP_RESULT:
{
object oOwner = GetEventObject(evEvent, 0); // owner of popup
int nPopupID = GetEventInteger(evEvent, 0); // popup ID
int nButton = GetEventInteger(evEvent, 1); // button result (1 - 4)
string sName = GetEventString(evEvent,0);
switch (nPopupID)
{
case 2: // Pet Rock Name added
{
if (GetTag(oOwner) == VAL_IT_ROCK)
{
SetLocalString(GetModule(), VAL_ROCK_NAME, sName);
}
break;
}
}
break;
}
}
}
[/dascript]
val_constants_h.nss
[dascript]
const string VAL_BALL_IN_PLAY = "VAL_BALL_IN_PLAY";
const string VAL_ALCOHOL_TRACKER = "VAL_ALCOHOL_TRACKER";
const string VAL_PUPPET_TRACKER = "VAL_PUPPET_TRACKER";
const string VAL_DOLL_TRACKER = "VAL_DOLL_TRACKER";
const string VAL_LUTE_TRACKER = "VAL_LUTE_TRACKER";
const string VAL_MEMORY_TRACKER = "VAL_MEMORY_TRACKER";
//const string VAL_CAT_TRACKER = "VAL_CAT_TRACKER";
const string VAL_ROCK_TRACKER = "VAL_ROCK_TRACKER";
const string VAL_ROCK_NAME = "VAL_ROCK_NAME";
const string VAL_GIFT_COUNTER = "VAL_GIFT_COUNTER";
const string VAL_PRANK_COUNTER = "VAL_PRANK_COUNTER";
const string VAL_ROCK_NAME_DEFAULT = "hjn197a872skksaeiil";
const int ACH_VAL_FESTIVE = 24;
const int VAL_PARTY_PROPERTIES_2DA = 10500;
const int VAL_PARTY_DOG_SLOT = 2;
const string VAL_GIFT_1 = "Gift1";
const string VAL_GIFT_USEABLE_1 = "GiftUseable1";
//const string VAL_ANTI_GIFT_1 = "AntiGift1";
//const string VAL_ANTI_GIFT_USEABLE_1 = "AntiGiftUseable1";
const string VAL_EXTRA_GIFTS = "ExtraGifts";
const string VAL_GIFT_PREFIX = "val_im_gift";
const string VAL_IT_BALL = "val_im_qck_ball";
const resource VAL_IM_BALL = R"val_im_qck_ball.uti";
//const string VAL_IT_MUZZLE = "val_im_spc_dog_col_shame";
//const resource VAL_IM_MUZZLE = R"val_im_spc_dog_col_shame.uti";
const string VAL_IT_LUTE = "val_im_qck_lute";
const resource VAL_IM_LUTE = R"val_im_qck_lute.uti";
const string VAL_IT_DOLL = "val_im_qck_doll";
const resource VAL_IM_DOLL = R"val_im_qck_doll.uti";
const string VAL_IT_FLASK = "val_im_qck_flask";
const resource VAL_IM_FLASK = R"val_im_qck_flask.uti";
//const string VAL_IT_SOAP = "val_im_qck_soap";
//const resource VAL_IM_SOAP = R"val_im_qck_soap.uti";
const string VAL_IT_AMULET = "val_im_qck_amulet";
const resource VAL_IM_AMULET = R"val_im_qck_amulet.uti";
const string VAL_IT_BRANDY = "val_im_qck_brandy";
const resource VAL_IM_BRANDY = R"val_im_qck_brandy.uti";
//const string VAL_IT_STICK = "val_im_wep_mag_sta_cat";
//const resource VAL_IM_STICK = R"val_im_wep_mag_sta_cat.uti";
const string VAL_IT_ROCK = "val_im_qck_rock";
const resource VAL_IM_ROCK = R"val_im_qck_rock.uti";
const string VAL_IT_SHIELD = "val_im_arm_shd_twr_mrc";
//const resource VAL_IM_CHASTITY_BELT = R"val_im_acc_blt_chs.uti";
//const string VAL_IT_CHASTITY_BELT = "val_im_acc_blt_chs";
//const resource VAL_IM_CHASTITY_KEY = R"val_im_chastity_key.uti";
//const resource VAL_IM_CHASTITY_GIFT = R"val_im_gift_chastity.uti";
const string VAL_IT_BALL_GIFT = "val_im_gift_ball";
const string VAL_IT_HORSE_GIFT = "val_im_gift_horse";
//const string VAL_IT_MUZZLE_GIFT = "val_im_gift_muzzle";
const resource R_VAL_CR_CAT = R"valcr_cat.utc";
const resource R_VAL_IP_ROCK = R"val_ip_rock.utp";
const resource R_VAL_CONV_PRAYER = R"val_sten_prayer.dlg";
const string VAL_IP_ROCK = "val_ip_rock";
const int VFX_VAL_BALL = 110506;
const int ITEM_ABILITY_VAL_BALL = 310500;
const int ITEM_ABILITY_VAL_BRANDY = 310501;
const int ITEM_ABILITY_VAL_AMULET = 310502;
//const int ITEM_ABILITY_VAL_MUZZLE = 310503;
//const int ITEM_ABILITY_VAL_SOAP = 310504;
const int ITEM_ABILITY_VAL_DOLL = 310505;
const int ITEM_ABILITY_VAL_LUTE = 310506;
const int ITEM_ABILITY_VAL_ROCK = 310507;
//const int ITEM_ABILITY_VAL_KEY = 310508;
//const int ITEM_ABILITY_VAL_CAT = 310509;
const int ITEM_ABILITY_VAL_PUPPET = 310510;
const int ITEM_ABILITY_VAL_PRAYERS = 310511;
const int ITEM_ABILITY_VAL_FLASK = 310512;
[/dascript]
val_module.nss
[dascript]
/////////////////////////////////////
// Valentines module events
/////////////////////////////////////
#include "log_h"
#include "utility_h"
#include "wrappers_h"
#include "events_h"
#include "global_objects_h"
#include "party_h"
#include "approval_h"
#include "val_constants_h"
#include "plt_valpt_offer"
#include "plt_valpt_offer_board"
#include "plt_valpt_gifts"
#include "sys_treasure_h"
int VAL_IsItemInPartyInventory(resource rItem)
{
string sTag = ResourceToTag(rItem);
object[] arPartyPool = GetPartyPoolList();
int nSize = GetArraySize(arPartyPool);
int n;
int bFound = FALSE;
for (n = 0; n < nSize && !bFound; n++)
{
if (CountItemsByTag(arPartyPool[n], sTag))
{
bFound = TRUE;
}
}
return bFound;
}
void main()
{
//--------------------------------------------------------------------------
// Initialization
//--------------------------------------------------------------------------
// Load Event Variables
event evEvent = GetCurrentEvent();
int nEventType = GetEventType(evEvent);
// Grab Player, set default event handled to false
object oPC = GetHero();
int bEventHandled = FALSE;
Log_Events(ToString(GetEventType(evEvent)),evEvent);
switch(nEventType)
{
case EVENT_TYPE_MODULE_HANDLE_GIFT:
{
object oItem = GetEventObject(evEvent, 1);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (abs(nValApproval / 1000) == 1) //only values between +-1000 through +-1999 are checked
{
object oFollower = GetEventObject(evEvent, 0);
string sFollower = GetTag(oFollower);
int nFollowerIndex = Approval_GetFollowerIndex(oFollower);
int nApprovalChange = GetEventInteger(evEvent, 0);
int nSoundSet = -1;
nValApproval %= 1000;
if (nValApproval >= 200) //handle extreme (specific) gifts
{
int nItemIndex = abs(nValApproval % 200);
if (nFollowerIndex != VAL_PARTY_DOG_SLOT)
{
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
}
if (nItemIndex == nFollowerIndex) // if item is for this follower, give useable item if it exists
{
/* removing achievement
if(!WR_GetPlotFlag(PLT_VALPT_GIFTS, nItemIndex)
&& !GetHasAchievementByID(ACH_VAL_FESTIVE))
{
object oModule = GetModule();
int nPrankCount = GetLocalInt(oModule, VAL_PRANK_COUNTER);
int nGiftCount = GetLocalInt(oModule, VAL_GIFT_COUNTER);
int nCount;
nGiftCount++;
SetLocalInt(oModule, VAL_GIFT_COUNTER, nGiftCount);
nCount = nPrankCount + nGiftCount;
if (nCount >= 9)
{
WR_UnlockAchievement(ACH_VAL_FESTIVE, FALSE, TRUE);
}
WR_SetPlotFlag(PLT_VALPT_GIFTS, nItemIndex, TRUE, FALSE);
} */
resource rUseable = GetM2DAResource(VAL_PARTY_PROPERTIES_2DA, VAL_GIFT_USEABLE_1, nFollowerIndex);
nSoundSet = SS_GIFT_ECSTATIC;
if (rUseable != INVALID_RESOURCE
&& !VAL_IsItemInPartyInventory(rUseable))
{
object oUseable = CreateItemOnObject(rUseable, GetPartyLeader(), 1, "", TRUE);
TS_ScaleItem(oUseable, GetLevel(GetHero()));
}
if (nFollowerIndex == VAL_PARTY_DOG_SLOT)
{
//working around follower bonus bug
Approval_ChangeApproval(nFollowerIndex, -50);
Approval_ChangeApproval(nFollowerIndex, 30);
Approval_ChangeApproval(nFollowerIndex, 20);
}
else
{
int nCurrentApproval = Approval_GetApproval(nFollowerIndex);
if (nCurrentApproval > 40) //working around follower bonus bug
{
Approval_ChangeApproval(nFollowerIndex, 85 - nCurrentApproval);
nCurrentApproval = Approval_GetApproval(nFollowerIndex);
Approval_ChangeApproval(nFollowerIndex, 100 - nCurrentApproval);
if(!Approval_GetFriendlyEligible(nFollowerIndex))
{
int nStringRef = GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "StringRef", APP_RANGE_WARM);
SetFollowerApprovalDescription(oFollower, nStringRef);
}
}
else
{
Approval_ChangeApproval(nFollowerIndex, 50);
}
}
}
else // refund if not for this follower
{
resource rGift = GetM2DAResource(VAL_PARTY_PROPERTIES_2DA, VAL_GIFT_1, nItemIndex);
nSoundSet = SS_BAD_IDEA;
CreateItemOnObject(rGift, GetPartyLeader(), 1, "", TRUE);
}
}
else // handle general gifts
{
if (nFollowerIndex != VAL_PARTY_DOG_SLOT && nValApproval -200)
{
nSoundSet = SS_GIFT_POSITIVE;
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
Approval_ChangeApproval(nFollowerIndex, nValApproval);
}
}
//StopSound("ss_morrigan/vo/298799_m");
if(nSoundSet != -1 )
PlaySoundSet(oFollower, nSoundSet, 1.0);
}
break;
}
case EVENT_TYPE_UNIQUE_POWER:
{
//------------------------------------------------------------------
// EVENT_TYPE_UNIQUE_POWER
//------------------------------------------------------------------
// Sent by: Scripting
// When: A unique power for an item is used
//------------------------------------------------------------------
int nAbility;
string sItemTag;
object oItem;
object oCaster;
object oTarget;
//------------------------------------------------------------------
nAbility = GetEventInteger(evEvent,0);
oItem = GetEventObject(evEvent, 0);
oCaster = GetEventObject(evEvent, 1);
oTarget = GetEventObject(evEvent, 2);
sItemTag = GetTag(oItem);
break;
}
case EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED:
{
// EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED
//------------------------------------------------------------------
// Sent by: Scripting
// When: Item is added to inventory that has
// ITEM_SEND_ACQUIRED_EVENT set to TRUE
//------------------------------------------------------------------
string sItemTag;
object oItem;
object oAcquirer;
//------------------------------------------------------------------
oAcquirer = GetEventCreator(evEvent);
oItem = GetEventObject(evEvent, 0);
sItemTag = GetTag(oItem);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (nValApproval / 1000 == 1
&& FindSubString(sItemTag, VAL_GIFT_PREFIX) != -1)
{
if (!WR_GetPlotFlag(PLT_VALPT_OFFER, VAL_OFFER_ITEM_PURCHASED))
{
WR_SetPlotFlag(PLT_VALPT_OFFER, VAL_OFFER_ITEM_PURCHASED, TRUE, FALSE);
WR_SetPlotFlag(PLT_VALPT_OFFER_BOARD, VAL_OFFER_BOARD_TEXT, FALSE, FALSE);
}
}
if (sItemTag == VAL_IT_ROCK)
{
if (!WR_GetPlotFlag(PLT_VALPT_GIFTS, VAL_GIFT_ROCK_NAMED))
{
ShowPopup(420566, 2, oItem, TRUE, 420565);
WR_SetPlotFlag(PLT_VALPT_GIFTS, VAL_GIFT_ROCK_NAMED, TRUE);
}
}
break;
}
case EVENT_TYPE_POPUP_RESULT:
{
object oOwner = GetEventObject(evEvent, 0); // owner of popup
int nPopupID = GetEventInteger(evEvent, 0); // popup ID
int nButton = GetEventInteger(evEvent, 1); // button result (1 - 4)
string sName = GetEventString(evEvent,0);
switch (nPopupID)
{
case 2: // Pet Rock Name added
{
if (GetTag(oOwner) == VAL_IT_ROCK)
{
SetLocalString(GetModule(), VAL_ROCK_NAME, sName);
}
break;
}
}
break;
}
}
}
[/dascript]
Modifié par Craig Graff, 14 septembre 2010 - 07:13 .
#4
Posté 14 septembre 2010 - 07:14
and this:
vala_module.nss
[dascript]
/////////////////////////////////////
// Valentines module events
/////////////////////////////////////
#include "log_h"
#include "utility_h"
#include "wrappers_h"
#include "events_h"
#include "global_objects_h"
#include "party_h"
#include "approval_h"
#include "vala_constants_h"
#include "plt_valapt_offer"
#include "plt_valapt_offer_board"
#include "plt_valapt_gifts"
#include "sys_treasure_h"
int VAL_IsItemInPartyInventory(resource rItem)
{
string sTag = ResourceToTag(rItem);
object[] arPartyPool = GetPartyPoolList();
int nSize = GetArraySize(arPartyPool);
int n;
int bFound = FALSE;
for (n = 0; n < nSize && !bFound; n++)
{
if (CountItemsByTag(arPartyPool[n], sTag))
{
bFound = TRUE;
}
}
return bFound;
}
void main()
{
//--------------------------------------------------------------------------
// Initialization
//--------------------------------------------------------------------------
// Load Event Variables
event evEvent = GetCurrentEvent();
int nEventType = GetEventType(evEvent);
// Grab Player, set default event handled to false
object oPC = GetHero();
int bEventHandled = FALSE;
switch(nEventType)
{
case EVENT_TYPE_MODULE_HANDLE_GIFT:
{
object oItem = GetEventObject(evEvent, 1);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (abs(nValApproval / 1000) == 1) //only values between +-1000 through +-1999 are checked
{
object oFollower = GetEventObject(evEvent, 0);
string sFollower = GetTag(oFollower);
int nFollowerIndex = Approval_GetFollowerIndex(oFollower);
int nApprovalChange = GetEventInteger(evEvent, 0);
int nSoundSet = -1;
nValApproval %= 1000;
if (nValApproval <= -200) //handle extreme (specific) gifts
{
int nItemIndex = abs(nValApproval % 200);
if (nFollowerIndex != VAL_PARTY_DOG_SLOT)
{
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
}
if (nItemIndex == nFollowerIndex) // if item is for this follower, give useable item if it exists
{
/* removed achievement
if(!WR_GetPlotFlag(PLT_VALAPT_GIFTS, nItemIndex)
&& !GetHasAchievementByID(ACH_VAL_FESTIVE))
{
object oModule = GetModule();
int nPrankCount = GetLocalInt(oModule, VAL_PRANK_COUNTER);
int nGiftCount = GetLocalInt(oModule, VAL_GIFT_COUNTER);
int nCount;
nPrankCount++;
SetLocalInt(oModule, VAL_PRANK_COUNTER, nPrankCount);
nCount = nPrankCount + nGiftCount;
if (nCount >= 9)
{
WR_UnlockAchievement(ACH_VAL_FESTIVE, FALSE, TRUE);
}
WR_SetPlotFlag(PLT_VALAPT_GIFTS, nItemIndex, TRUE, FALSE);
} */
resource rUseable = GetM2DAResource(VALA_PARTY_PROPERTIES_2DA, VAL_ANTI_GIFT_USEABLE_1, nFollowerIndex);
nSoundSet = SS_GIFT_NEGATIVE;
if (rUseable != INVALID_RESOURCE
&& !VAL_IsItemInPartyInventory(rUseable))
{
object oUseable = CreateItemOnObject(rUseable, GetPartyLeader(), 1, "", TRUE);
TS_ScaleItem(oUseable, GetLevel(GetHero()));
}
if (nFollowerIndex != VAL_PARTY_DOG_SLOT)
{
Approval_ChangeApproval(nFollowerIndex, -50);
int nCurrentApproval = Approval_GetApproval(nFollowerIndex);
int nStringRef;
if(nCurrentApproval >= GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "Range", APP_RANGE_HOSTILE))
{
nStringRef = GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "StringRef", APP_RANGE_NEUTRAL);
}
else if(nCurrentApproval >= GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "Range", APP_RANGE_CRISIS))
{
nStringRef = GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "StringRef", APP_RANGE_HOSTILE);
}
SetFollowerApprovalDescription(oFollower, nStringRef);
}
}
else // refund if not for this follower
{
resource rGift = GetM2DAResource(VALA_PARTY_PROPERTIES_2DA, VAL_ANTI_GIFT_1, nItemIndex);
nSoundSet = SS_BAD_IDEA;
CreateItemOnObject(rGift, GetPartyLeader(), 1, "", TRUE);
}
}
else // handle general gifts
{
if (nFollowerIndex != VAL_PARTY_DOG_SLOT && nValApproval > 0 && nValApproval < 200)
{
nSoundSet = SS_GIFT_NEUTRAL;
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
Approval_ChangeApproval(nFollowerIndex, nValApproval);
}
}
//StopSound("ss_morrigan/vo/298799_m");
if (nSoundSet != -1)
PlaySoundSet(oFollower, nSoundSet, 1.0);
}
break;
}
case EVENT_TYPE_UNIQUE_POWER:
{
//------------------------------------------------------------------
// EVENT_TYPE_UNIQUE_POWER
//------------------------------------------------------------------
// Sent by: Scripting
// When: A unique power for an item is used
//------------------------------------------------------------------
int nAbility;
string sItemTag;
object oItem;
object oCaster;
object oTarget;
//------------------------------------------------------------------
nAbility = GetEventInteger(evEvent,0);
oItem = GetEventObject(evEvent, 0);
oCaster = GetEventObject(evEvent, 1);
oTarget = GetEventObject(evEvent, 2);
sItemTag = GetTag(oItem);
break;
}
case EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED:
{
// EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED
//------------------------------------------------------------------
// Sent by: Scripting
// When: Item is added to inventory that has
// ITEM_SEND_ACQUIRED_EVENT set to TRUE
//------------------------------------------------------------------
string sItemTag;
object oItem;
object oAcquirer;
//------------------------------------------------------------------
oAcquirer = GetEventCreator(evEvent);
oItem = GetEventObject(evEvent, 0);
sItemTag = GetTag(oItem);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (nValApproval / 1000 == -1
&& FindSubString(sItemTag, VAL_GIFT_PREFIX) != -1)
{
if (!WR_GetPlotFlag(PLT_VALAPT_OFFER, VALA_OFFER_ITEM_PURCHASED))
{
WR_SetPlotFlag(PLT_VALAPT_OFFER, VALA_OFFER_ITEM_PURCHASED, TRUE, FALSE);
WR_SetPlotFlag(PLT_VALAPT_OFFER_BOARD, VALA_OFFER_BOARD_TEXT, FALSE, FALSE);
}
}
if (sItemTag == VAL_IT_CHASTITY_BELT)
{
object oZevran = Party_GetFollowerByTag(GEN_FL_ZEVRAN);
object oBelt = GetItemInEquipSlot(INVENTORY_SLOT_BELT, oZevran);
UnequipItem(oZevran, oBelt);
oBelt = oItem;
SetItemIrremovable(oBelt, TRUE);
EquipItem(oZevran, oBelt);
CreateItemOnObject(VAL_IM_CHASTITY_KEY, GetPartyLeader(), 1, "", TRUE);
}
else if (sItemTag == VAL_IT_MUZZLE)
{
object oDog = Party_GetFollowerByTag(GEN_FL_DOG);
command cLayDown = CommandPlayAnimation(3081);
object oCollar = GetItemInEquipSlot(INVENTORY_SLOT_DOG_COLLAR, oDog);
UnequipItem(oDog, oCollar);
EquipItem(oDog, oItem);
WR_ClearAllCommands(oDog, TRUE);
PlaySound(oDog, "glo_dog/dog/ss/ss_dog_whimper");
WR_AddCommand(oDog, cLayDown);
}
else if (sItemTag == VAL_IT_PIGEON)
{
object oShale = Party_GetFollowerByTag(GEN_FL_SHALE);
object oArmor = GetItemInEquipSlot(INVENTORY_SLOT_SHALE_CHEST, oShale);
UnequipItem(oShale, oArmor);
EquipItem(oShale, oItem);
}
break;
}
}
}
[/dascript]
vala_module.nss
[dascript]
/////////////////////////////////////
// Valentines module events
/////////////////////////////////////
#include "log_h"
#include "utility_h"
#include "wrappers_h"
#include "events_h"
#include "global_objects_h"
#include "party_h"
#include "approval_h"
#include "vala_constants_h"
#include "plt_valapt_offer"
#include "plt_valapt_offer_board"
#include "plt_valapt_gifts"
#include "sys_treasure_h"
int VAL_IsItemInPartyInventory(resource rItem)
{
string sTag = ResourceToTag(rItem);
object[] arPartyPool = GetPartyPoolList();
int nSize = GetArraySize(arPartyPool);
int n;
int bFound = FALSE;
for (n = 0; n < nSize && !bFound; n++)
{
if (CountItemsByTag(arPartyPool[n], sTag))
{
bFound = TRUE;
}
}
return bFound;
}
void main()
{
//--------------------------------------------------------------------------
// Initialization
//--------------------------------------------------------------------------
// Load Event Variables
event evEvent = GetCurrentEvent();
int nEventType = GetEventType(evEvent);
// Grab Player, set default event handled to false
object oPC = GetHero();
int bEventHandled = FALSE;
switch(nEventType)
{
case EVENT_TYPE_MODULE_HANDLE_GIFT:
{
object oItem = GetEventObject(evEvent, 1);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (abs(nValApproval / 1000) == 1) //only values between +-1000 through +-1999 are checked
{
object oFollower = GetEventObject(evEvent, 0);
string sFollower = GetTag(oFollower);
int nFollowerIndex = Approval_GetFollowerIndex(oFollower);
int nApprovalChange = GetEventInteger(evEvent, 0);
int nSoundSet = -1;
nValApproval %= 1000;
if (nValApproval <= -200) //handle extreme (specific) gifts
{
int nItemIndex = abs(nValApproval % 200);
if (nFollowerIndex != VAL_PARTY_DOG_SLOT)
{
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
}
if (nItemIndex == nFollowerIndex) // if item is for this follower, give useable item if it exists
{
/* removed achievement
if(!WR_GetPlotFlag(PLT_VALAPT_GIFTS, nItemIndex)
&& !GetHasAchievementByID(ACH_VAL_FESTIVE))
{
object oModule = GetModule();
int nPrankCount = GetLocalInt(oModule, VAL_PRANK_COUNTER);
int nGiftCount = GetLocalInt(oModule, VAL_GIFT_COUNTER);
int nCount;
nPrankCount++;
SetLocalInt(oModule, VAL_PRANK_COUNTER, nPrankCount);
nCount = nPrankCount + nGiftCount;
if (nCount >= 9)
{
WR_UnlockAchievement(ACH_VAL_FESTIVE, FALSE, TRUE);
}
WR_SetPlotFlag(PLT_VALAPT_GIFTS, nItemIndex, TRUE, FALSE);
} */
resource rUseable = GetM2DAResource(VALA_PARTY_PROPERTIES_2DA, VAL_ANTI_GIFT_USEABLE_1, nFollowerIndex);
nSoundSet = SS_GIFT_NEGATIVE;
if (rUseable != INVALID_RESOURCE
&& !VAL_IsItemInPartyInventory(rUseable))
{
object oUseable = CreateItemOnObject(rUseable, GetPartyLeader(), 1, "", TRUE);
TS_ScaleItem(oUseable, GetLevel(GetHero()));
}
if (nFollowerIndex != VAL_PARTY_DOG_SLOT)
{
Approval_ChangeApproval(nFollowerIndex, -50);
int nCurrentApproval = Approval_GetApproval(nFollowerIndex);
int nStringRef;
if(nCurrentApproval >= GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "Range", APP_RANGE_HOSTILE))
{
nStringRef = GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "StringRef", APP_RANGE_NEUTRAL);
}
else if(nCurrentApproval >= GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "Range", APP_RANGE_CRISIS))
{
nStringRef = GetM2DAInt(TABLE_APPROVAL_NORMAL_RANGES, "StringRef", APP_RANGE_HOSTILE);
}
SetFollowerApprovalDescription(oFollower, nStringRef);
}
}
else // refund if not for this follower
{
resource rGift = GetM2DAResource(VALA_PARTY_PROPERTIES_2DA, VAL_ANTI_GIFT_1, nItemIndex);
nSoundSet = SS_BAD_IDEA;
CreateItemOnObject(rGift, GetPartyLeader(), 1, "", TRUE);
}
}
else // handle general gifts
{
if (nFollowerIndex != VAL_PARTY_DOG_SLOT && nValApproval > 0 && nValApproval < 200)
{
nSoundSet = SS_GIFT_NEUTRAL;
Approval_ChangeApproval(nFollowerIndex, -1 * nApprovalChange); //undo main game's approval change
Approval_ChangeApproval(nFollowerIndex, nValApproval);
}
}
//StopSound("ss_morrigan/vo/298799_m");
if (nSoundSet != -1)
PlaySoundSet(oFollower, nSoundSet, 1.0);
}
break;
}
case EVENT_TYPE_UNIQUE_POWER:
{
//------------------------------------------------------------------
// EVENT_TYPE_UNIQUE_POWER
//------------------------------------------------------------------
// Sent by: Scripting
// When: A unique power for an item is used
//------------------------------------------------------------------
int nAbility;
string sItemTag;
object oItem;
object oCaster;
object oTarget;
//------------------------------------------------------------------
nAbility = GetEventInteger(evEvent,0);
oItem = GetEventObject(evEvent, 0);
oCaster = GetEventObject(evEvent, 1);
oTarget = GetEventObject(evEvent, 2);
sItemTag = GetTag(oItem);
break;
}
case EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED:
{
// EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED
//------------------------------------------------------------------
// Sent by: Scripting
// When: Item is added to inventory that has
// ITEM_SEND_ACQUIRED_EVENT set to TRUE
//------------------------------------------------------------------
string sItemTag;
object oItem;
object oAcquirer;
//------------------------------------------------------------------
oAcquirer = GetEventCreator(evEvent);
oItem = GetEventObject(evEvent, 0);
sItemTag = GetTag(oItem);
int nValApproval = GetLocalInt(oItem, APP_ITEM_MOTIVATION); // repurposing this local int to indicate approval change
if (nValApproval / 1000 == -1
&& FindSubString(sItemTag, VAL_GIFT_PREFIX) != -1)
{
if (!WR_GetPlotFlag(PLT_VALAPT_OFFER, VALA_OFFER_ITEM_PURCHASED))
{
WR_SetPlotFlag(PLT_VALAPT_OFFER, VALA_OFFER_ITEM_PURCHASED, TRUE, FALSE);
WR_SetPlotFlag(PLT_VALAPT_OFFER_BOARD, VALA_OFFER_BOARD_TEXT, FALSE, FALSE);
}
}
if (sItemTag == VAL_IT_CHASTITY_BELT)
{
object oZevran = Party_GetFollowerByTag(GEN_FL_ZEVRAN);
object oBelt = GetItemInEquipSlot(INVENTORY_SLOT_BELT, oZevran);
UnequipItem(oZevran, oBelt);
oBelt = oItem;
SetItemIrremovable(oBelt, TRUE);
EquipItem(oZevran, oBelt);
CreateItemOnObject(VAL_IM_CHASTITY_KEY, GetPartyLeader(), 1, "", TRUE);
}
else if (sItemTag == VAL_IT_MUZZLE)
{
object oDog = Party_GetFollowerByTag(GEN_FL_DOG);
command cLayDown = CommandPlayAnimation(3081);
object oCollar = GetItemInEquipSlot(INVENTORY_SLOT_DOG_COLLAR, oDog);
UnequipItem(oDog, oCollar);
EquipItem(oDog, oItem);
WR_ClearAllCommands(oDog, TRUE);
PlaySound(oDog, "glo_dog/dog/ss/ss_dog_whimper");
WR_AddCommand(oDog, cLayDown);
}
else if (sItemTag == VAL_IT_PIGEON)
{
object oShale = Party_GetFollowerByTag(GEN_FL_SHALE);
object oArmor = GetItemInEquipSlot(INVENTORY_SLOT_SHALE_CHEST, oShale);
UnequipItem(oShale, oArmor);
EquipItem(oShale, oItem);
}
break;
}
}
}
[/dascript]
Modifié par Craig Graff, 14 septembre 2010 - 07:15 .
#5
Posté 15 septembre 2010 - 02:37
Thank you both for your help. I got the gift approval to work properly now with the DLC gifts.
Just one lingering question... When I give the original companions the onion or the coal, they play the SS_GIFT_ECSTATIC (or maybe the SS_GIFT_POSITIVE) sound. This happens even when I turn off my mod. When I look at my module script and the original sp_module_item_acq script, I see that when the approval is less than 0, it should play SS_GIFT_NEGATIVE. Instead it seems to be resorting to the default soundset SS_GIFT_ECSTATIC. What's going on?
Just one lingering question... When I give the original companions the onion or the coal, they play the SS_GIFT_ECSTATIC (or maybe the SS_GIFT_POSITIVE) sound. This happens even when I turn off my mod. When I look at my module script and the original sp_module_item_acq script, I see that when the approval is less than 0, it should play SS_GIFT_NEGATIVE. Instead it seems to be resorting to the default soundset SS_GIFT_ECSTATIC. What's going on?
Modifié par satans_karma, 15 septembre 2010 - 02:41 .





Retour en haut







