Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Script d'activation de placeables via un levier

Par Elmo le 14/1/2003 à 4:00:23 (#3015894)

bon alors j'explique j'ai téléchargé l'excellent hak pak "LOK Dungeon tileset"
http://nwvault.ign.com/Files/hakpacks/data/1042412322468.shtml
et y'a une placeable de mur coulissant mais bon c'est un peu naze d'activer un mur en le touchant donc j'aimerai qu'il coulisse lorsqu'on active un levier, j'ai essayé de faire un script mais c'est vraiment nazbroque donc si un scripteur plus doué que moi (et c'est pas dur à faire) pouvait m'aider ça serait sympa :)

void main()
{
object oMur1 = GetObjectByTag("mur_s_1");

if (GetLocalInt(oMur1,"NW_L_AMION") == 0)
{
AssignCommand(oMur1,PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
AssignCommand(oMur1,SetLocalInt(oMur1,"NW_L_AMION",1));
PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
SetLocalInt(oMur1,"NW_L_AMION",1);
}
else
{
AssignCommand(oMur1,PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
AssignCommand(oMur1,SetLocalInt(oMur1,"NW_L_AMION",0));
PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
SetLocalInt(oMur1,"NW_L_AMION",0);
}
}

Par Elmo le 14/1/2003 à 16:40:59 (#3019533)

Help'n'Bump!

Par Jaha Effect le 14/1/2003 à 16:53:51 (#3019650)

En général, je fais ça dans le OnActivate du levier, ça marche pas mal :)

void main()
{
object oMur1 = GetObjectByTag ("mur_s_1");
object oLevier = GetObjectByTag ("Levier");

int Levier;

if ( GetLocalInt( OBJECT_SELF, "Actif" ) != TRUE )
{
SetLocalInt( OBJECT_SELF, "Actif", TRUE );
PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE );
}
else
{
SetLocalInt( OBJECT_SELF, "Actif", FALSE );
PlayAnimation( ANIMATION_PLACEABLE_DEACTIVATE );
}
Levier = GetLocalInt (oLevier,"Actif");

if (Levier == TRUE)
{
SetLocked(oMur1, FALSE);
ActionOpenDoor(oMur1);
}
else
{
SetLocked(oMur1, TRUE);
ActionCloseDoor(oMur1);
}
}


Jaha Effect :D

Par Elmo le 14/1/2003 à 16:59:55 (#3019708)

cool comme code... pour une porte :D
en fait le mur coulissant est un placeable qui n'est pas considéré comme une porte mais comme un placeable dont animation activate ouvre et deactivate ferme donc si tu as une idée...

Par Jaha Effect le 14/1/2003 à 17:08:34 (#3019803)

Peut être comme ça tout simplement, non ?

void main()
{
object oMur1 = GetObjectByTag ("mur_s_1");
object oLevier = GetObjectByTag ("Levier");

int Levier;

if ( GetLocalInt( OBJECT_SELF, "Actif" ) != TRUE )
{
SetLocalInt( OBJECT_SELF, "Actif", TRUE );
PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE );
}
else
{
SetLocalInt( OBJECT_SELF, "Actif", FALSE );
PlayAnimation( ANIMATION_PLACEABLE_DEACTIVATE );
}
Levier = GetLocalInt (oLevier,"Actif");

if (Levier == TRUE)
{
AssignCommand(oMur1,PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
}
else
{
AssignCommand(oMur1,PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
}
}


Jaha Effect :D

Par Elmo le 14/1/2003 à 20:25:55 (#3021549)

GRUNT! ça marche toujours pas! mais je viens de découvrir un truc!
dans le Onactivate du Mur coulissant y'a ça:

void main()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0);
CreateObject(OBJECT_TYPE_PLACEABLE,"lokwallsecopen",mylocation,FALSE);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DelayCommand(0.5 , DestroyObject(OBJECT_SELF,0.0));
RecomputeStaticLighting(GetArea(OBJECT_SELF));
}


j'ai l'impression que ça a son importance...

Par Jedaï le 14/1/2003 à 21:26:43 (#3022145)

Drôle de script, m'enfin...

Petite modification du script de Jaha prenant en compte les dernières informations :


void OpenWall()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0); CreateObject(OBJECT_TYPE_PLACEABLE,"lokwallsecopen", mylocation, FALSE);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DestroyObject(OBJECT_SELF,0.5));
RecomputeStaticLighting(GetArea(OBJECT_SELF));
}

void main()
{
object oMur1 = GetObjectByTag ("mur_s_1");
object oLevier = GetObjectByTag ("Levier");


int Levier;

if ( GetLocalInt( OBJECT_SELF, "Actif" ) != TRUE )
{
SetLocalInt( OBJECT_SELF, "Actif", TRUE );
PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE );
}
else
{
SetLocalInt( OBJECT_SELF, "Actif", FALSE );
PlayAnimation( ANIMATION_PLACEABLE_DEACTIVATE );
}
Levier = GetLocalInt (oLevier,"Actif");


if (Levier == TRUE && !GetLocalInt(OBJECT_SELF, "bFist"))
{
AssignCommand(oMur1,OpenWall());
SetLocalInt(OBJECT_SELF, "bFist", TRUE);
}
}


Notez que ne sachant pas comment se ferme le mur, je n'ai pu scripter cette partie : encore un petit effort ?

Par Elmo le 14/1/2003 à 21:47:17 (#3022342)

bin écoutes j'ai testé ton script à toutes fin utile et le mur s'ouvre bien mais juste une fois (j'ai utilisé le levier 4 fois pour etre sur) meme si je le met en usable et que je le ferme "a la main" en cliquant dessus.

Par Jedaï le 14/1/2003 à 21:57:55 (#3022426)

C'est effectivement mon problème : tu ne m'as donné que la partie "ouverture" du script du mur, si j'avais la partie "fermeture", je pourrais l'ouvrir et le fermer à volonté mais ce n'est pas le cas. C'est pourquoi j'ai limité l'utilisation du script à une seule ouverture. Je ne peux rien faire tant que tu ne m'as pas fournis le script OnUse de l'autre mur , blueprint : "lokwallsecopen".
A toi de jouer !:p

Par Elmo le 14/1/2003 à 22:07:37 (#3022505)

voila (il me semble qu'il ya des trucs inutiles meme, non?)

void SpawnSomething(string szClass, location lWhere);
void main()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DelayCommand(2.0,SpawnSomething("lokwallsecclo", mylocation));
DelayCommand(2.1, RecomputeStaticLighting(GetArea(OBJECT_SELF)));
DestroyObject(OBJECT_SELF,2.5);

}
//Spawn in the creature function.
void SpawnSomething(string szClass, location lWhere)
{
SendMessageToAllDMs("Got To Create Object");
object oSomething = CreateObject(OBJECT_TYPE_PLACEABLE, szClass, lWhere);
}

Par Jedaï le 14/1/2003 à 22:27:30 (#3022670)

Si tu veux mon avis y a plein de truc bizarroïde ou qui servent à rien mais comme tu me dis que ça marche comme c'est et qu'il s'agit d'une création personnelle, je ne vais rien modifier, voilà donc le script final qui devrait enfin te permettre d'ouvrir et de refermer ton mur avec un levier et de jouer à courant d'air/air immobile tout ton saoul :


void SpawnSomething(string szClass, location lWhere);
void CloseWall();
void OpenWall();

void main()
{
object oMur1 = GetObjectByTag ("mur_s_1");
object oMur2 = GetObjectByTag ("mur_s_2");
object oLevier = OBJECT_SELF;


int Levier;

if ( GetLocalInt( oLevier, "Actif" ) != TRUE )
{
SetLocalInt( oLevier, "Actif", TRUE );
PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE );
}
else
{
SetLocalInt( oLevier, "Actif", FALSE );
PlayAnimation( ANIMATION_PLACEABLE_DEACTIVATE );
}
Levier = GetLocalInt (oLevier,"Actif");


if (Levier == TRUE)
{
AssignCommand( oMur1, OpenWall() );
}
else
{
AssignCommand( oMur2, CloseWall() );
}
}

void CloseWall()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DelayCommand(2.0,SpawnSomething("lokwallsecclo", mylocation));
DelayCommand(2.1, RecomputeStaticLighting(GetArea(OBJECT_SELF)));
DestroyObject(OBJECT_SELF,2.5);
}

void OpenWall()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0);
CreateObject(OBJECT_TYPE_PLACEABLE,"lokwallsecopen", mylocation, FALSE);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DestroyObject(OBJECT_SELF,0.5));
RecomputeStaticLighting(GetArea(OBJECT_SELF));
}



//Spawn in the creature function.
void SpawnSomething(string szClass, location lWhere)
{
CreateObject(OBJECT_TYPE_PLACEABLE, szClass, lWhere);
}


Tu remarqueras que tu va devoir changer le tag par défaut de ton "mur ouvert" en "mur_s_2" si tu veux que mon (Jaha's copyright) script marche, de même tu devras vérifier que le tag par défaut de ton "mur fermé" est bien "mur_s_1".

Même si tel est le cas, tu devras veiller à ce qu'il n'y ait qu'un seul "mur coulissant" dans ton module.
Sinon tu devras t'assurer que ton levier se trouve sur la même area que son mur et plus proche de son mur à lui que de n'importe quel autre mur (coulissant), et utiliser ce script :


void SpawnSomething(string szClass, location lWhere);
void CloseWall();
void OpenWall();

void main()
{
object oMur1 = GetNearestObjectByTag ("mur_s_1");
object oMur2 = GetNearestObjectByTag ("mur_s_2");
object oLevier = OBJECT_SELF;


int Levier;

if ( GetLocalInt( oLevier, "Actif" ) != TRUE )
{
SetLocalInt( oLevier, "Actif", TRUE );
PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE );
}
else
{
SetLocalInt( oLevier, "Actif", FALSE );
PlayAnimation( ANIMATION_PLACEABLE_DEACTIVATE );
}
Levier = GetLocalInt (oLevier,"Actif");


if (Levier == TRUE)
{
AssignCommand( oMur1, OpenWall() );
}
else
{
AssignCommand( oMur2, CloseWall() );
}
}

void CloseWall()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DelayCommand(2.0,SpawnSomething("lokwallsecclo", mylocation));
DelayCommand(2.1, RecomputeStaticLighting(GetArea(OBJECT_SELF)));
DestroyObject(OBJECT_SELF,2.5);
}

void OpenWall()
{
location mylocation = GetLocation(OBJECT_SELF);
PlayAnimation(ANIMATION_PLACEABLE_OPEN, 1.0, 0.0);
CreateObject(OBJECT_TYPE_PLACEABLE,"lokwallsecopen", mylocation, FALSE);
RecomputeStaticLighting(GetArea(OBJECT_SELF));
DestroyObject(OBJECT_SELF,0.5));
RecomputeStaticLighting(GetArea(OBJECT_SELF));
}



//Spawn in the creature function.
void SpawnSomething(string szClass, location lWhere)
{
CreateObject(OBJECT_TYPE_PLACEABLE, szClass, lWhere);
}

Par Elmo le 14/1/2003 à 22:43:02 (#3022806)

nickel ça marche! mais je me pose une question: ce mur à plusieurs état: Ouvert, fermé et détruit, je comprend pas qu'il faille spawner un mur ou autre... enfin bon je vais faire le TPCM (Touches Plus Ca Marche)

JOL Archives 1.0.1
@ JOL / JeuxOnLine