ok posto lo script di cui ho parlato: da mettere come OnItemActivated nel modulo, e creare un waypoint con la tag 'arrivo':
Spoiler:
object PC=GetItemActivator();
location lLoc = GetLocation(PC);
object oggetto=GetItemActivated();
string nome=GetTag(oggetto);
void CreatePyramid(location lTarget, int BeamFX_TYPE, float Duration)
{
object destin=GetWaypointByTag("arrivo");
location arrival=GetLocation(destin);
int nEffect = BeamFX_TYPE;
object Area = GetAreaFromLocation(lTarget);
vector v1 = GetPositionFromLocation(lTarget);
vector v2 = GetPositionFromLocation(lTarget);
vector v3 = GetPositionFromLocation(lTarget);
vector v4 = GetPositionFromLocation(lTarget);
vector v5 = GetPositionFromLocation(lTarget);
int offset=2;
v1 = Vector(v1.x-offset,v1.y+offset,v1.z);
v2 = Vector(v2.x-offset,v2.y-offset,v2.z);
v3 = Vector(v3.x+offset,v3.y-offset,v3.z);
v4 = Vector(v4.x+offset,v4.y+offset,v4.z);
v5 = Vector(v5.x,v5.y,v5.z+offset);
location loc1= Location(Area, v1, 0.0);
location loc2= Location(Area, v2, 0.0);
location loc3= Location(Area, v3, 0.0);
location loc4= Location(Area, v4, 0.0);
location loc5= Location(Area, v5, 0.0);
object Base1 = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", loc1);
object Base2 = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", loc2);
object Base3 = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", loc3);
object Base4 = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", loc4);
object Center = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_invisobj", loc5);
effect eBeam1 = EffectBeam(nEffect, Base1, BODY_NODE_CHEST);
effect eBeam2 = EffectBeam(nEffect, Base2, BODY_NODE_CHEST);
effect eBeam3 = EffectBeam(nEffect, Base3, BODY_NODE_CHEST);
effect eBeam4 = EffectBeam(nEffect, Base4, BODY_NODE_CHEST);
effect eBeam5 = EffectBeam(nEffect, Base1, BODY_NODE_CHEST);
effect eBeam6 = EffectBeam(nEffect, Base2, BODY_NODE_CHEST);
effect eBeam7 = EffectBeam(nEffect, Base3, BODY_NODE_CHEST);
effect eBeam8 = EffectBeam(nEffect, Base4, BODY_NODE_CHEST);
DelayCommand(0.1, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam1, Base2, Duration));
DelayCommand(0.2, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam2, Base3, Duration));
DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam3, Base4, Duration));
DelayCommand(0.4, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam4, Base1, Duration));
DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam5, Center, Duration));
DelayCommand(0.6, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam6, Center, Duration));
DelayCommand(0.7, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam7, Center, Duration));
DelayCommand(0.8, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam8, Center, Duration));
DelayCommand(Duration, DestroyObject(Base1));
DelayCommand(Duration, DestroyObject(Base2));
DelayCommand(Duration, DestroyObject(Base3));
DelayCommand(Duration, DestroyObject(Base4));
DelayCommand(Duration, DestroyObject(Center));
DelayCommand(5.0,AssignCommand(PC,JumpToLocation(arrival)));
}
void main()
{
if(nome=="portale_ordine")
{
int Ani = ANIMATION_LOOPING_MEDITATE;
CreatePyramid(lLoc, 444, 10.0);
AssignCommand(PC, ActionPlayAnimation(Ani, 1.0, 5.2));
}
}
allora ci tengo a precisare che è una cosa fatta nel giro di 10 minuti, l'ottimizzazione è uguale a zero. Per la tua richiesta di verghe e pietre del teletrasporto mi spiace ma semplicemente non puoi creare qualcosa di convenzionale per ogni modulo, devo scriverlo e importarlo di volta in volta. Però stai chiedendo una cosa particolare quindi credo ti serva per un modulo specifico, o sbaglio?
edit: ho appena letto il tocco della sirenetta nel tuo messaggio, occhio a non farla arrabbiare XD