Looking for a script to scale placeable size.
TKBold
Member Posts: 15
I have a script that allows me to scale up NPCs with an OnSpawn script line, and adding a Scale Variable with a float integer, and let me tell you if that isn't one of the greatest things ever.
Though, now I've got to account for larger objects as well. Nothin' too big or fancy, just a simple, full XYZ object Scale. If anyone knows how to find one, or if they have one on hand, I'd be especially much obliged.
Though, now I've got to account for larger objects as well. Nothin' too big or fancy, just a simple, full XYZ object Scale. If anyone knows how to find one, or if they have one on hand, I'd be especially much obliged.
0
Comments
void main() { float fScale = GetLocalFloat(OBJECT_SELF, "Scale"); if( fScale > 0.0f ) SetObjectVisualTransform(OBJECT_SELF, OBJECT_VISUAL_TRANSFORM_SCALE, fScale); SetEventScript(OBJECT_SELF, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT, ""); }It does work, but it doesn't seem to work for Static objects. Any way to get around that?
Can you post the script for scaling NPC's? Does it work with part-based creatures with armors, shields and helmets?
Sure! I kind of got mine piggybacked on one of the default spawn scripts but the way it works is basically the same as the object one. Variables, Scale, float integer. Pretty sure it was like that when I got it. And it will scale up or down, literally any creature you have the OnSpawn and the Variable attached to. 1 is default, 2 is double-sized, 0.5 is half-sized, etc.
//:://///////////////////////////////////////////// //:: Name x2_def_spawn //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Default On Spawn script 2003-07-28: Georg Zoeller: If you set a ninteger on the creature named "X2_USERDEFINED_ONSPAWN_EVENTS" The creature will fire a pre and a post-spawn event on itself, depending on the value of that variable 1 - Fire Userdefined Event 1510 (pre spawn) 2 - Fire Userdefined Event 1511 (post spawn) 3 - Fire both events 2007-12-31: Deva Winblood Modified to look for X3_HORSE_OWNER_TAG and if it is defined look for an NPC with that tag nearby or in the module (checks near first). It will make that NPC this horse's master. */ //::////////////////////////////////////////////// //:: Created By: Keith Warner, Georg Zoeller //:: Created On: June 11/03 //::////////////////////////////////////////////// const int EVENT_USER_DEFINED_PRESPAWN = 1510; const int EVENT_USER_DEFINED_POSTSPAWN = 1511; #include "x2_inc_switches" void main() { string sTag; object oNPC; // User defined OnSpawn event requested? int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS"); // Pre Spawn Event requested if (nSpecEvent == 1 || nSpecEvent == 3 ) { SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN )); } sTag=GetLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); if (GetStringLength(sTag)>0) { // look for master oNPC=GetNearestObjectByTag(sTag); if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE) { // master found AddHenchman(oNPC); } // master found else { // look in module oNPC=GetObjectByTag(sTag); if (GetIsObjectValid(oNPC)&&GetObjectType(oNPC)==OBJECT_TYPE_CREATURE) { // master found AddHenchman(oNPC); } // master found else { // master does not exist - remove X3_HORSE_OWNER_TAG DeleteLocalString(OBJECT_SELF,"X3_HORSE_OWNER_TAG"); } // master does not exist - remove X3_HORSE_OWNER_TAG } // look in module } // look for master /* Fix for the new golems to reduce their number of attacks */ int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS); if (nNumber >0 ) { SetBaseAttackBonus(nNumber); } // Execute default OnSpawn script. ExecuteScript("nw_c2_default9", OBJECT_SELF); //Post Spawn event requeste if (nSpecEvent == 2 || nSpecEvent == 3) { SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN)); } float fScale =GetLocalFloat(OBJECT_SELF,"Scale"); if(fScale != 0.0)SetObjectVisualTransform(OBJECT_SELF,OBJECT_VISUAL_TRANSFORM_SCALE,fScale); }Well yuh, that's the obvious solution, but I was wondering if there was a way to have it go into effect as a static object? If the Static box thing is turned off, if you move far enough away from the object, it will disappear. It's probably one of the only really annoying things with NWN and modern systems. Alternate solution would be to find a way to increase the 'view' range, or disable it altogether.
The term "static" means that the appearance is baked before the game starts, just like the tiles. So, scaling during the game is dynamic, not static, by definition. The only way I can see static scaling working is if Beamdog could allow scaling in the toolset to be hard baked - anything done by script can only apply to dynamic objects.
Boooooo. If there's some way to increase the visibility range on things, I'd be okay with that.
https://forums.beamdog.com/discussion/75035/nwn-toolset-enhanced-edition-try-the-new-updates-and-share-your-feedback#latest
I'm having trouble scaling items when they are equipped. The tag-based scripting is running as it should, as I am able to debug the equipping PC and the item they equipped.
The only line that doesn't seem to be firing is the scaling code itself, and it doesn't make any sense to me. I've been able to scale creatures and placeables through scripting just fine. I've also seen screenshots of scaled weapons, so I'm pretty sure it can be done.
void main() { object oPC = GetPCItemLastEquippedBy(); object oItem = GetPCItemLastEquipped(); SendMessageToPC(oPC, "Equipping " + GetName(oItem)); SetObjectVisualTransform(oItem, OBJECT_VISUAL_TRANSFORM_SCALE, 2.0); }Thanks for your help!
I think SetObjectVisualTransform() checks if the item is actually equipped by a character but when the OnEquip event runs the item isn't actually equipped yet.
To work around it, you can do something like:
void ScaleItem(object oItem, float fScale) { SetObjectVisualTransform(oItem, OBJECT_VISUAL_TRANSFORM_SCALE, fScale); } void main() { object oPlayer = GetPCItemLastEquippedBy(); object oItem = GetPCItemLastEquipped(); DelayCommand(0.1f, ScaleItem(oItem, 2.0f)); }