DestroyObject(Obj_FloorDoors[1]); Delete3DTextLabel(Label_Floors); } return 1; } stock Elevator_OpenDoors() { // Opens the elevator\'s doors. new Float:x, Float:y, Float:z; GetObjectPos(Obj_ElevatorDoors[0], x, y, z); MoveObject(Obj_ElevatorDoors[0], X_DOOR_L_OPENED, y, z, DOORS_SPEED); MoveObject(Obj_ElevatorDoors[1], X_DOOR_R_OPENED, y, z, DOORS_SPEED); return 1; } stock Elevator_CloseDoors() { // Closes the elevator\'s doors. if(ElevatorState == ELEVATOR_STATE_MOVING) return 0; new Float:x, Float:y, Float:z; GetObjectPos(Obj_ElevatorDoors[0], x, y, z); MoveObject(Obj_ElevatorDoors[0], X_DOOR_CLOSED, y, z, DOORS_SPEED); MoveObject(Obj_ElevatorDoors[1], X_DOOR_CLOSED, y, z, DOORS_SPEED); return 1; } stock Floor_OpenDoors(floorid) { // Opens the doors at the specified floor. MoveObject(Obj_FloorDoors[floorid][0], X_DOOR_L_OPENED, -1303.171142, GetDoorsZCoordForFloor(floorid), DOORS_SPEED); MoveObject(Obj_FloorDoors[floorid][1], X_DOOR_R_OPENED, -1303.171142, GetDoorsZCoordForFloor(floorid), DOORS_SPEED); return 1; } stock Floor_CloseDoors(floorid) { // Closes the doors at the specified floor. MoveObject(Obj_FloorDoors[floorid][0], X_DOOR_CLOSED, -1303.171142, GetDoorsZCoordForFloor(floorid), DOORS_SPEED); MoveObject(Obj_FloorDoors[floorid][1], X_DOOR_CLOSED, -1303.171142, GetDoorsZCoordForFloor(floorid), DOORS_SPEED); return 1; } stock Elevator_MoveToFloor(floorid) { // Moves the elevator to specified floor (doors are meant to be already closed). ElevatorState = ELEVATOR_STATE_MOVING; ElevatorFloor = floorid; // Move the elevator slowly, to give time to clients to sync the object surfing. Then, boost it up: MoveObject(Obj_Elevator, 1786.678100, -1303.459472, GetElevatorZCoordForFloor(floorid), 0.5); MoveObject(Obj_ElevatorDoors[0], X_DOOR_CLOSED, -1303.459472, GetDoorsZCoordForFloor(floorid), 0.5); MoveObject(Obj_ElevatorDoors[1], X_DOOR_CLOSED, -1303.459472, GetDoorsZCoordForFloor(floorid), 0.5); Delete3DTextLabel(Label_Elevator); ElevatorBoostTimer = SetTimerEx(\"Elevator_Boost\", 2000, 0, \"i\", floorid); return 1; } public Elevator_Boost(floorid) { // Increases the elevator\'s speed until it reaches \'floorid\' MoveObject(Obj_Elevator, 1786.678100, -1303.459472, GetElevatorZCoordForFloor(floorid), ELEVATOR_SPEED); MoveObject(Obj_ElevatorDoors[0], X_DOOR_CLOSED, -1303.459472, GetDoorsZCoordForFloor(floorid), ELEVATOR_SPEED); MoveObject(Obj_ElevatorDoors[1], X_DOOR_CLOSED, -1303.459472, GetDoorsZCoordForFloor(floorid), ELEVATOR_SPEED); return 1; } public Elevator_TurnToIdle() { ElevatorState = ELEVATOR_STATE_IDLE; ReadNextFloorInQueue(); return 1; } stock RemoveFirstQueueFloor() { // Removes the data in ElevatorQueue[0], and reorders the queue accordingly. for(new i; i < sizeof(ElevatorQueue) - 1; i ++) ElevatorQueue = ElevatorQueue[i + 1]; ElevatorQueue[sizeof(ElevatorQueue) - 1] = INVALID_FLOOR; return 1; } stock AddFloorToQueue(floorid) { // Adds \'floorid\' at the end of the queue. // Scan for the first empty space: new slot = -1; for(new i; i < sizeof(ElevatorQueue); i ++) { if(ElevatorQueue == INVALID_FLOOR) { slot = i; break; } } if(slot != -1) { ElevatorQueue[slot] = floorid; // If needed, move the elevator. if(ElevatorState == ELEVATOR_STATE_IDLE) ReadNextFloorInQueue(); return 1; } return 0; } stock ResetElevatorQueue() { // Resets the queue. for(new i; i < sizeof(ElevatorQueue); i ++) { ElevatorQueue = INVALID_FLOOR; FloorRequestedBy = INVALID_PLAYER_ID; } return 1; } stock IsFloorInQueue(floorid) { // Checks if the specified floor is currently part of the queue. for(new i; i < sizeof(ElevatorQueue); i ++) if(ElevatorQueue == floorid) return 1; return 0; } stock ReadNextFloorInQueue() { // Reads the next floor in the queue, closes doors, and goes to it. if(ElevatorState != ELEVATOR_STATE_IDLE || ElevatorQueue[0] == INVALID_FLOOR) return 0; Elevator_CloseDoors(); Floor_CloseDoors(ElevatorFloor); return 1; } stock DidPlayerRequestElevator(playerid) { for(new i; i < sizeof(FloorRequestedBy); i ++) if(FloorRequestedBy == playerid) return 1; return 0; } stock ShowElevatorDialog(playerid) { new string[512]; for(new i; i < sizeof(ElevatorQueue); i ++) { if(FloorRequestedBy != INVALID_PLAYER_ID) strcat(string, \"{FF0000}\"); strcat(string, FloorNames); strcat(string, \"\\n\"); } ShowPlayerDialog(playerid, DIALOG_ID, DIALOG_STYLE_LIST, \"Elevator\", string, \"Accept\", \"Cancel\"); return 1; } stock CallElevator(playerid, floorid) { // Calls the elevator (also used with the elevator dialog). if(FloorRequestedBy[floorid] != INVALID_PLAYER_ID || IsFloorInQueue(floorid)) return 0; FloorRequestedBy[floorid] = playerid; AddFloorToQueue(floorid); return 1; } stock Float:GetElevatorZCoordForFloor(floorid) return (GROUND_Z_COORD + FloorZOffsets[floorid] + ELEVATOR_OFFSET); // A small offset for the elevator object itself. stock Float:GetDoorsZCoordForFloor(floorid) return (GROUND_Z_COORD + FloorZOffsets[floorid]); [/pawn] itt a script
Cím: LS lift script (2) SüRgÕs!
Írta: Disaster3 - 2011. december 03. - 11:35:45
Köszi! Azért megpróbáljuk még.. Dupla hozzászólás automatikusan összefûzve. ( 2011. december 03. - 11:44:30 ) Valószínûleg megoldódott a probléma, de ha nem, akkor majd írok PÜ-t ha nem gond. A haver kb. délben ébred fel aztán egybõl átküldöm neki hogy ne legyen nyugta. xd Zárok! Köszi!