thank you. Can you give me some information on how to use this script?Definitely done by script.
name LiftDoor
type none
setlayer 1
facing 1
subject_to_wall 0
subject_to_gravity 0
offscreenkill 3000
animationscript data/scripts/prscript.c
anim spawn
@script
void self = getlocalvar("self");
int State = getentityvar(self, 0);
if(frame==1){
if(State==1){
setentityvar(self, 0, NULL());
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
}
}
@end_script
delay 8
offset 24 72
sound data/sounds/door.snd
frame data/bgs/streets/lidoor1.png
frame data/bgs/streets/lidoor2.png
frame data/bgs/streets/lidoor3.png
delay 100
frame data/bgs/streets/lidoor4.png
delay 8
frame data/bgs/streets/lidoor4.png
anim idle
@script
void self = getlocalvar("self");
void P1 = getplayerproperty(0, "entity");
void P2 = getplayerproperty(1, "entity");
float x = getentityproperty(self, "x");
float y = getentityproperty(self, "a");
float z = getentityproperty(self, "z");
char Name = getentityproperty(self,"name");
float Tx1 = getentityproperty(P1, "x");
float Ty1 = getentityproperty(P1, "a");
float Tz1 = getentityproperty(P1, "z");
float Tx2 = getentityproperty(P2, "x");
float Ty2 = getentityproperty(P2, "a");
float Tz2 = getentityproperty(P2, "z");
float Disx1 = Tx1 - x;
float Disy1 = Ty1 - y;
float Disz1 = Tz1 - z;
float Disx2 = Tx2 - x;
float Disy2 = Ty2 - y;
float Disz2 = Tz2 - z;
if(Disx1 < 0){
Disx1 = -Disx1;
}
if(Disx2 < 0){
Disx2 = -Disx2;
}
if(Disz1 < 0){
Disz1 = -Disz1;
}
if(Disz2 < 0){
Disz2 = -Disz2;
}
if(frame >= 1){
if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
setentityvar(self, 1, 0);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
} else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
setentityvar(self, 1, 1);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
}
}
@end_script
loop 1
delay 5
offset 24 72
frame data/bgs/streets/lidoor4.png
frame data/bgs/streets/lidoor4.png
anim follow1
delay 8
offset 24 72
sound data/sounds/door.snd
frame data/bgs/streets/lidoor1.png
frame data/bgs/streets/lidoor2.png
frame data/bgs/streets/lidoor3.png
delay 100
frame data/bgs/streets/lidoor4.png
delay 8
sound data/sounds/door.snd
frame data/bgs/streets/lidoor3.png
frame data/bgs/streets/lidoor2.png
frame data/bgs/streets/lidoor1.png
@cmd suicide
frame data/chars/misc/empty.gif
anim follow2
@script
void self = getlocalvar("self");
int P = getentityvar(self, 1);
void Player = getplayerproperty(P, "entity");
if(frame==1){
changeentityproperty(Player,"noaicontrol", 1);
changeentityproperty(Player,"setlayer", -20);
bindentity(Player, self, 0, -10, 0, 2, 0);
}
if(frame==11){
changeentityproperty(Player,"noaicontrol", 0);
changeentityproperty(Player,"setlayer", 0);
bindentity(Player, NULL());
changeentityproperty(Player,"position", 735, 330, 220);
setindexedvar(0, 750);
setindexedvar(1, 330);
setindexedvar(2, 220);
setindexedvar(3, 1);
}
if(frame==19){
setentityvar(self, 1, NULL());
}
@end_script
delay 5
offset 24 72
frame data/bgs/streets/lidoor4.png
frame data/bgs/streets/lidoor4.png
delay 8
sound data/sounds/door.snd
frame data/bgs/streets/lidoor3.png
frame data/bgs/streets/lidoor2.png
delay 20
frame data/bgs/streets/lidoor1.png
sound data/sounds/elev.wav
delay 218
@cmd dasher 0 1 0
frame data/chars/misc/empty.gif
delay 50
@cmd dasher 0 0 0
frame data/chars/misc/empty.gif
delay 8
sound data/sounds/door.snd
frame data/bgs/streets/lidoor1.png
frame data/bgs/streets/lidoor2.png
frame data/bgs/streets/lidoor3.png # 10
delay 50
frame data/bgs/streets/lidoor4.png
frame data/bgs/streets/lidoor4.png
delay 8
sound data/sounds/door.snd
frame data/bgs/streets/lidoor3.png
frame data/bgs/streets/lidoor2.png
frame data/bgs/streets/lidoor1.png
delay 218
@cmd dasher 0 -1 0
frame data/chars/misc/empty.gif
delay 50
@cmd dasher 0 0 0
frame data/chars/misc/empty.gif
delay 8
sound data/sounds/door.snd
frame data/bgs/streets/lidoor1.png
frame data/bgs/streets/lidoor2.png
frame data/bgs/streets/lidoor3.png # 20
delay 20
frame data/bgs/streets/lidoor4.png
@cmd beidle
frame data/chars/misc/empty.gif
I've coded that kind of elevator some years ago.
To save texts, I merged the elevator script with door opening mechanic.
Code:name LiftDoor type none setlayer 1 facing 1 subject_to_wall 0 subject_to_gravity 0 offscreenkill 3000 animationscript data/scripts/prscript.c anim spawn @script void self = getlocalvar("self"); int State = getentityvar(self, 0); if(frame==1){ if(State==1){ setentityvar(self, 0, NULL()); changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1")); } } @end_script delay 8 offset 24 72 sound data/sounds/door.snd frame data/bgs/streets/lidoor1.png frame data/bgs/streets/lidoor2.png frame data/bgs/streets/lidoor3.png delay 100 frame data/bgs/streets/lidoor4.png delay 8 frame data/bgs/streets/lidoor4.png anim idle @script void self = getlocalvar("self"); void P1 = getplayerproperty(0, "entity"); void P2 = getplayerproperty(1, "entity"); float x = getentityproperty(self, "x"); float y = getentityproperty(self, "a"); float z = getentityproperty(self, "z"); char Name = getentityproperty(self,"name"); float Tx1 = getentityproperty(P1, "x"); float Ty1 = getentityproperty(P1, "a"); float Tz1 = getentityproperty(P1, "z"); float Tx2 = getentityproperty(P2, "x"); float Ty2 = getentityproperty(P2, "a"); float Tz2 = getentityproperty(P2, "z"); float Disx1 = Tx1 - x; float Disy1 = Ty1 - y; float Disz1 = Tz1 - z; float Disx2 = Tx2 - x; float Disy2 = Ty2 - y; float Disz2 = Tz2 - z; if(Disx1 < 0){ Disx1 = -Disx1; } if(Disx2 < 0){ Disx2 = -Disx2; } if(Disz1 < 0){ Disz1 = -Disz1; } if(Disz2 < 0){ Disz2 = -Disz2; } if(frame >= 1){ if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){ setentityvar(self, 1, 0); changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2")); } else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){ setentityvar(self, 1, 1); changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2")); } } @end_script loop 1 delay 5 offset 24 72 frame data/bgs/streets/lidoor4.png frame data/bgs/streets/lidoor4.png anim follow1 delay 8 offset 24 72 sound data/sounds/door.snd frame data/bgs/streets/lidoor1.png frame data/bgs/streets/lidoor2.png frame data/bgs/streets/lidoor3.png delay 100 frame data/bgs/streets/lidoor4.png delay 8 sound data/sounds/door.snd frame data/bgs/streets/lidoor3.png frame data/bgs/streets/lidoor2.png frame data/bgs/streets/lidoor1.png @cmd suicide frame data/chars/misc/empty.gif anim follow2 @script void self = getlocalvar("self"); int P = getentityvar(self, 1); void Player = getplayerproperty(P, "entity"); if(frame==1){ changeentityproperty(Player,"noaicontrol", 1); changeentityproperty(Player,"setlayer", -20); bindentity(Player, self, 0, -10, 0, 2, 0); } if(frame==11){ changeentityproperty(Player,"noaicontrol", 0); changeentityproperty(Player,"setlayer", 0); bindentity(Player, NULL()); changeentityproperty(Player,"position", 735, 330, 220); setindexedvar(0, 750); setindexedvar(1, 330); setindexedvar(2, 220); setindexedvar(3, 1); } if(frame==19){ setentityvar(self, 1, NULL()); } @end_script delay 5 offset 24 72 frame data/bgs/streets/lidoor4.png frame data/bgs/streets/lidoor4.png delay 8 sound data/sounds/door.snd frame data/bgs/streets/lidoor3.png frame data/bgs/streets/lidoor2.png delay 20 frame data/bgs/streets/lidoor1.png sound data/sounds/elev.wav delay 218 @cmd dasher 0 1 0 frame data/chars/misc/empty.gif delay 50 @cmd dasher 0 0 0 frame data/chars/misc/empty.gif delay 8 sound data/sounds/door.snd frame data/bgs/streets/lidoor1.png frame data/bgs/streets/lidoor2.png frame data/bgs/streets/lidoor3.png # 10 delay 50 frame data/bgs/streets/lidoor4.png frame data/bgs/streets/lidoor4.png delay 8 sound data/sounds/door.snd frame data/bgs/streets/lidoor3.png frame data/bgs/streets/lidoor2.png frame data/bgs/streets/lidoor1.png delay 218 @cmd dasher 0 -1 0 frame data/chars/misc/empty.gif delay 50 @cmd dasher 0 0 0 frame data/chars/misc/empty.gif delay 8 sound data/sounds/door.snd frame data/bgs/streets/lidoor1.png frame data/bgs/streets/lidoor2.png frame data/bgs/streets/lidoor3.png # 20 delay 20 frame data/bgs/streets/lidoor4.png @cmd beidle frame data/chars/misc/empty.gif
If you wondered about the sprites used for this LiftDoor, they are just door opening sprites.
The script in IDLE works like this:
1. It waits for player 1 or player 2 to stand in front of the door.
2. If one player is there, the door will snatch that player, hides him/her behind background while waiting for the door to close, move up and opens.
3. After it opens, it will drop the snatched player up near where door is.
4. The door will close, move down and opens after reaching ground floor.
repeat to step 1.
Although the door can snatch either player 1 or 2, it can only snatch and carry one at a time. That's why, I looped the system back to IDLE to allow second player to ride the elevator too. Also useful if player who has gone up somehow fall down and need to go up again.
That's the gist of it.
thank you. Moving through the elevator was successful. But it seems to return to the first state with @cmd beidle at the end, but it's not going well.
void beidle()
{// Go to IDLE animation!
void self = getlocalvar("self");
setidle(self);
}
I have beidle in my script file list, but it doesn't work.
Here is the code I rewrote for my game.
name Elevator
type none
setlayer 1
facing 1
subject_to_wall 0
subject_to_gravity 0
offscreenkill 3000
animationscript data/scripts/script.c
anim spawn
@script
void self = getlocalvar("self");
int State = getentityvar(self, 0);
if(frame==1){
if(State==1){
setentityvar(self, 0, NULL());
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW1"));
}
}
@end_script
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
frame data/sprites/cr/misc/ev/elevator-13.gif
anim idle
@script
void self = getlocalvar("self");
void P1 = getplayerproperty(0, "entity");
void P2 = getplayerproperty(1, "entity");
float x = getentityproperty(self, "x");
float y = getentityproperty(self, "a");
float z = getentityproperty(self, "z");
char Name = getentityproperty(self,"name");
float Tx1 = getentityproperty(P1, "x");
float Ty1 = getentityproperty(P1, "a");
float Tz1 = getentityproperty(P1, "z");
float Tx2 = getentityproperty(P2, "x");
float Ty2 = getentityproperty(P2, "a");
float Tz2 = getentityproperty(P2, "z");
float Disx1 = Tx1 - x;
float Disy1 = Ty1 - y;
float Disz1 = Tz1 - z;
float Disx2 = Tx2 - x;
float Disy2 = Ty2 - y;
float Disz2 = Tz2 - z;
if(Disx1 < 0){
Disx1 = -Disx1;
}
if(Disx2 < 0){
Disx2 = -Disx2;
}
if(Disz1 < 0){
Disz1 = -Disz1;
}
if(Disz2 < 0){
Disz2 = -Disz2;
}
if(frame >= 1){
if(Disx1 <= 10 && Disz1 <= 10 && Disy1 <= 5){
setentityvar(self, 1, 0);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
} else if(Disx2 <= 10 && Disz2 <= 10 && Disy2 <= 5){
setentityvar(self, 1, 1);
changeentityproperty(self, "animation", openborconstant("ANI_FOLLOW2"));
}
}
@end_script
loop 1
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
anim follow1
delay 3
offset 15 47
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif
delay 100
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
@cmd suicide
frame data/sprites/empty.gif
anim follow2
@script
void self = getlocalvar("self");
int P = getentityvar(self, 1);
void Player = getplayerproperty(P, "entity");
if(frame==1){
changeentityproperty(Player,"noaicontrol", 1);
changeentityproperty(Player,"setlayer", -20);
bindentity(Player, self, 0, -10, 0, 2, 0);
}
if(frame==28){
changeentityproperty(Player,"noaicontrol", 0);
changeentityproperty(Player,"setlayer", 0);
bindentity(Player, NULL());
changeentityproperty(Player,"position", 200, 138, 0);
setindexedvar(0, 200);
setindexedvar(1, 138);
setindexedvar(2, 0);
setindexedvar(3, 1);
}
if(frame==19){
setentityvar(self, 1, NULL());
}
@end_script
delay 5
offset 15 47
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
delay 20
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 10
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
frame data/sprites/cr/misc/ev/elevator-13.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-12.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 100
@cmd dasher 0 -0.46 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 50
@cmd dasher 0 0 0
frame data/sprites/cr/misc/ev/elevator-01.gif
delay 3
sound data/sounds/door.wav
frame data/sprites/cr/misc/ev/elevator-01.gif
frame data/sprites/cr/misc/ev/elevator-02.gif
frame data/sprites/cr/misc/ev/elevator-03.gif
frame data/sprites/cr/misc/ev/elevator-04.gif
frame data/sprites/cr/misc/ev/elevator-05.gif
frame data/sprites/cr/misc/ev/elevator-06.gif
frame data/sprites/cr/misc/ev/elevator-07.gif
frame data/sprites/cr/misc/ev/elevator-08.gif
frame data/sprites/cr/misc/ev/elevator-09.gif
frame data/sprites/cr/misc/ev/elevator-10.gif
frame data/sprites/cr/misc/ev/elevator-11.gif
frame data/sprites/cr/misc/ev/elevator-12.gif # 20
delay 50
frame data/sprites/cr/misc/ev/elevator-13.gif
@cmd beidle
frame data/sprites/empty.gif
Put your script or texts here
void beidle()
{// Go to IDLE animation!
void self = getlocalvar("self");
setidle(self, openborconstant("ANI_IDLE"));
}
setindexedvar(0, 750);
setindexedvar(1, 330);
setindexedvar(2, 220);
setindexedvar(3, 1);
thank you. Scripts and elevators are working fine.You should use these forum functions next time to reduce your post size:
Code:Put your script or texts here
Back to topic, it's strange that beidle doesn't work....
Wait a second, your beidle is different than mine. Mine is like this:
C:void beidle() {// Go to IDLE animation! void self = getlocalvar("self"); setidle(self, openborconstant("ANI_IDLE")); }
Mine specifies animation change so it changes animation when the function is run.
BTW you can omit these lines from your script:
C:setindexedvar(0, 750); setindexedvar(1, 330); setindexedvar(2, 220); setindexedvar(3, 1);
Those lines are for defining respawn coords and mode, which are more likely not used by you.