Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
https://steamcommunity.com/profiles/76561198320267018/screenshot/958605698972018737
This vortex is directly hostile to the PC? or is it some neutral random wandering force of nature ?
If hostile then it will actively engage the PC in combat, not sure if that's what you want.
You also want it to teleport the PC if they strike the Vortex, but also if they get too close?
So they will be teleported if they are using ranged weapons but not ranged spells?
You also want a teleport that is triggered by proximity?
It could be problematic since it is easy enough to trigger via damage done to it but making a difference between spell damage and ranged weapon damage might be challenging script-wise.
Also, does this affect any henchmen, animal companions, familiars summoned creatures etc?
im thinking to make things simple maybe get the distance between them to solve alot of problems,if they are to close the get teleported.
This will give you a basic teleport to a wp (in whatever other area) if anything gets within 10 m of it:
Add it to the existing heartbeat script of the vortex (placing it so that it doesn't interfere with any existing script actions of course).
//
object oNearestcreature = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE);
object oDest = GetObjectByTag("wp_vortexenter");
float fDist = GetDistanceBetween(OBJECT_SELF,oNearestcreature);
if (fDist <= 10.0)
{
AssignCommand(oNearestcreature, ClearAllActions());
AssignCommand(oNearestcreature, ActionJumpToObject(oDest,FALSE));
}
//
I'll play about with this a bit more over the next few days.
There might be problems with teleporting hench or other associates without the PC. It might be simpler to make it only apply to player characters and then any associates get teleported along with them.
Zombie Survival Bone Seas Outlook Post 1/255
https://steamcommunity.com/sharedfiles/filedetails/?id=1319391248&searchtext=
It might be better if the teleport is more speciffic about who gets teleported. As said earlier it might work better if it is more directed towards player characters and their associates.
There might be problems otherwise seperating hench from PC. It needs a bit of testing.
The main problem is of course keeping hench away from it!
update/testing:
If your associates get teleported then they just wait there for you on the other side. If you get teleported then your associates automatically go with you. If you destroy the vortex whilst they are still there you might not be able to get them back! You might want to include something (like an object that the vortex creature drops on death that will summon any lost companions in the void back to you).
1.I would like my party members that were sucked into the vortex and placed in the astral plane and stay there.
2.I would like to add a journal entry when a party member is sucked into the vortex and sent to the astral plane.
The journal will tell the player his party member has been sent to the astral plane and needs to be rescued.
Well you know this leads things back to the drawing board but its turning out well.
To make things a little more intresting i guess i should explain the astral plane layout.
EDITING
Heres the vortex in front of the player.It moves towards them like a hostile creature and sucks them up.
https://steamcommunity.com/sharedfiles/filedetails/?id=1631800731
Sends them here and theres a bunch of monsters.I have triggers on the floor,one for a angel to spawn and fight and another trigger that spawns in a hovering angel that is actualy a portal that starts a conversation.The conversation allows them to escapse but this agel portal creature cannot be in combat and CAN be killed.I have the angel portal creature able to spawn very quickly and it allows one to spawn far enough away so a creature is out of combat toi be able to actually see the conversation menu pop up.The angel conversation portal creature is the whiteish light with a vortex at the base and the angel script fireing below.
https://steamcommunity.com/sharedfiles/filedetails/?id=1632709003
The game does not like it when you try to seperate player characters from their associates! (so much of the existing coding is actually there to keep the party together).
You could automatically fire them from the party if they get teleported; then they are no longer your associates and should theoretically stay in the astral plane as npc's.
You can add a conversation line to rejoin your service once they are rescued of course.
There are two ways to do this:
Modify the On Damaged and On Physical Attacked event scripts for the creature, use GetLastDamager and GetLastAttacker respectively to find the damaging object.
If you aren't using a persistent AoE (in which case the distance is determined by the AoE radius), then use GetDistanceToObject if the NPC is the function caller or GetDistanceBetween if the NPC is not the function caller.
JumpToLocation should work, you'll probably have to write a wrapper function that removes any henchmen the PC has as well.
Give it a custom skin that has 100% damage immunity to bludgeoning, piercing and slashing.
Heres the on heartbeat scipt
//mist portal
#include "nw_i0_generic"
void main()
{
object oNearestcreature = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE);
effect eVFX = EffectVisualEffect(VFX_IMP_PULSE_WIND);
object oDest = GetObjectByTag("wp_vortexenter");
float fDist = GetDistanceBetween(OBJECT_SELF,oNearestcreature);
if (fDist <= 3.0)
{
AssignCommand(oNearestcreature, ClearAllActions());
AssignCommand(oNearestcreature, ActionJumpToObject(oDest,FALSE));
}
// * if not runnning normal or better Ai then exit for performance reasons
if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
// Buff ourselves up right away if we should
if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
{
// This will return TRUE if an enemy was within 40.0 m
// and we buffed ourselves up instantly to respond --
// simulates a spellcaster with protections enabled
// already.
if(TalentAdvancedBuff(40.0))
{
// This is a one-shot deal
SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
// This return means we skip sending the user-defined
// heartbeat signal in this one case.
return;
}
}
if(GetHasEffect(EFFECT_TYPE_SLEEP))
{
// If we're asleep and this is the result of sleeping
// at night, apply the floating 'z's visual effect
// every so often
if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
{
effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
if(d10() > 6)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
}
}
}
// If we have the 'constant' waypoints flag set, walk to the next
// waypoint.
else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
{
WalkWayPoints();
}
// Check to see if we should be playing default animations
// - make sure we don't have any current targets
else if ( !GetIsObjectValid(GetAttemptedAttackTarget())
&& !GetIsObjectValid(GetAttemptedSpellTarget())
// && !GetIsPostOrWalking())
&& !GetIsObjectValid(GetNearestSeenEnemy()))
{
if (GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) || GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE) ||
GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE))
{
// This handles special attacking/fleeing behavior
// for omnivores & herbivores.
DetermineSpecialBehavior();
}
else if (!IsInConversation(OBJECT_SELF))
{
if (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
|| GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)
|| GetIsEncounterCreature())
{
PlayMobileAmbientAnimations();
}
else if (GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS))
{
PlayImmobileAmbientAnimations();
}
}
}
// Send the user-defined event signal if specified
if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
{
SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_HEARTBEAT));
}
}
Heres the on on physcail attacked
//Can go OnDamaged, OnDisturbed, OnSpellCastAt, creature heartbeats, etc.
void main()
{
object oPC = GetLastHostileActor();
object oNearestcreature = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE);
object oDest = GetObjectByTag("wp_vortexenter");
float fDist = GetDistanceBetween(OBJECT_SELF,oNearestcreature);
if (fDist <= 10.0)
{
AssignCommand(oNearestcreature, ClearAllActions());
AssignCommand(oNearestcreature, ActionJumpToObject(oDest,FALSE));
}
if (!GetIsPC(oPC)) return;
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("here24");
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
SetLocalLocation(oPC, "ls_stored_loc", GetLocation(oPC));
AssignCommand(oPC, ClearAllActions());
DelayCommand(3.0, AssignCommand(oPC, ActionJumpToLocation(lTarget)));
oTarget = oPC;
int nInt;
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), oTarget);
else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oTarget));
}
Place in the onenter of the area (astral plain or wherever they get teleported to)
This is assuming there is only 1 player character. If there is more than 1 this script will need to be added to to differentiate players and their respective associates.
void main()
{
object oArrival = GetEnteringObject();
object oPC = GetFirstPC();
if (GetIsPC(oArrival))
{
AddJournalQuestEntry("thevortex", 2, oPC, FALSE, FALSE, TRUE);
}
else if(GetAssociateType(oArrival) == ASSOCIATE_TYPE_HENCHMAN)
{
RemoveHenchman(oPC, oArrival);
AddJournalQuestEntry("thevortex", 1, oPC, FALSE, FALSE, TRUE);
}
}
Then replace the lines in your heartbeat script:
AssignCommand(oNearestcreature, ClearAllActions());
AssignCommand(oNearestcreature, ActionJumpToObject(oDest,FALSE));
With:
VortexJumpToObject(oNearestcreature);