4 Skyscraper 1.11 Alpha - Script Processor - Floor Section
5 Copyright (C)2003-2016 Ryan Thoryk
6 http://www.skyscrapersim.com
7 http://sourceforge.net/projects/skyscraper
8 Contact - ryan@skyscrapersim.com
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License
12 as published by the Free Software Foundation; either version 2
13 of the License, or (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 #include "skyscraper.h"
28 #include "enginecontext.h"
32 #include "cameratexture.h"
34 #include "callbutton.h"
39 #include "elevatorcar.h"
41 #include "floorindicator.h"
43 #include "revolvingdoor.h"
44 #include "directional.h"
45 #include "escalator.h"
46 #include "scriptprocessor.h"
47 #include "script_section.h"
51 namespace Skyscraper {
53 ScriptProcessor::FloorSection::FloorSection(ScriptProcessor *parent) : Section(parent)
55 floorcache_firstrun = true;
61 cache_fullheight_s = "";
62 cache_interfloorheight = 0;
63 cache_interfloorheight_s = "";
70 void ScriptProcessor::FloorSection::Reset()
73 callbutton_elevators.clear();
76 int ScriptProcessor::FloorSection::Run(std::string &LineData)
80 Floor *floor = Simcore->GetFloor(config->Current);
82 //exit with error if floor is invalid
86 floornum = ToString(config->Current);
87 return ScriptError("Invalid floor " + floornum);
90 //cache floor parameters
91 if (cache_current != config->Current || floorcache_firstrun == true)
93 cache_current = config->Current;
94 cache_current_s = ToString(cache_current);
96 if (cache_height != floor->Height || floorcache_firstrun == true)
98 cache_height = floor->Height;
99 cache_height_s = ToString(cache_height);
101 if (cache_fullheight != floor->FullHeight() || floorcache_firstrun == true)
103 cache_fullheight = floor->FullHeight();
104 cache_fullheight_s = ToString(cache_fullheight);
106 if (cache_interfloorheight != floor->InterfloorHeight || floorcache_firstrun == true)
108 cache_interfloorheight = floor->InterfloorHeight;
109 cache_interfloorheight_s = ToString(cache_interfloorheight);
111 if (cache_base != floor->GetBase() || floorcache_firstrun == true)
113 cache_base = floor->GetBase();
114 cache_base_s = ToString(cache_base);
117 floorcache_firstrun = false;
119 //replace variables with actual values
120 ReplaceAll(LineData, "%floor%", cache_current_s);
121 ReplaceAll(LineData, "%height%", cache_height_s);
122 ReplaceAll(LineData, "%fullheight%", cache_fullheight_s);
123 ReplaceAll(LineData, "%interfloorheight%", cache_interfloorheight_s);
124 ReplaceAll(LineData, "%base%", cache_base_s);
125 ReplaceAll(LineData, "%floorid%", floor->ID);
126 ReplaceAll(LineData, "%floorname%", floor->Name);
127 ReplaceAll(LineData, "%floortype%", floor->FloorType);
128 ReplaceAll(LineData, "%description%", floor->Description);
130 if (parent->getfloordata == true)
133 //IF/While statement stub (continue to global commands for processing)
134 if (SetCaseCopy(LineData.substr(0, 2), false) == "if" || SetCaseCopy(LineData.substr(0, 5), false) == "while")
137 //process math functions
138 if (MathFunctions(LineData) == sError)
142 if (parent->FunctionProc() == true)
145 //get text after equal sign
147 if ((int)LineData.find("=", 0) == -1)
149 std::string value = GetAfterEquals(LineData);
151 //create a lowercase string of the line
152 std::string linecheck = SetCaseCopy(LineData, false);
155 if (linecheck.substr(0, 6) == "height")
158 return ScriptError("Syntax error");
159 std::string str = Calc(value);
160 if (!IsNumeric(str, floor->Height))
161 return ScriptError("Invalid value");
167 if (linecheck.substr(0, 16) == "interfloorheight")
170 return ScriptError("Syntax error");
171 std::string str = Calc(value);
172 if (!IsNumeric(str, floor->InterfloorHeight))
173 return ScriptError("Invalid value");
179 if (linecheck.substr(0, 8) == "altitude")
182 return ScriptError("Syntax error");
183 std::string str = Calc(value);
185 if (!IsNumeric(str, alt))
186 return ScriptError("Invalid value");
187 floor->SetAltitude(alt);
190 if (linecheck.substr(0, 2) == "id")
193 return ScriptError("Syntax error");
194 floor->ID = Calc(value);
197 if (linecheck.substr(0, 4) == "name")
200 return ScriptError("Syntax error");
201 floor->Name = Calc(value);
204 if (linecheck.substr(0, 4) == "type")
207 return ScriptError("Syntax error");
208 floor->FloorType = value;
211 if (linecheck.substr(0, 11) == "description")
214 return ScriptError("Syntax error");
215 floor->Description = value;
218 if (linecheck.substr(0, 16) == "indicatortexture")
221 return ScriptError("Syntax error");
222 floor->IndicatorTexture = Calc(value);
225 if (linecheck.substr(0, 5) == "group")
227 //copy string listing of group floors into array
229 int params = SplitAfterEquals(LineData, false);
231 return ScriptError("Syntax Error");
233 for (int line = 0; line < params; line++)
235 if (tempdata[line].find("-", 1) > 0)
238 //found a range marker
239 std::string str1 = tempdata[line].substr(0, tempdata[line].find("-", 1));
240 std::string str2 = tempdata[line].substr(tempdata[line].find("-", 1) + 1);
243 if (!IsNumeric(str1, start) || !IsNumeric(str2, end))
244 return ScriptError("Invalid value");
252 for (int k = start; k <= end; k++)
253 floor->AddGroupFloor(k);
258 if (!IsNumeric(tempdata[line], data))
259 return ScriptError("Invalid value");
260 floor->AddGroupFloor(data);
270 if (floor->CalculateAltitude() == false)
271 return ScriptError();
276 if (linecheck.substr(0, 4) == "exit")
278 if (config->RangeL != config->RangeH)
279 LineData = "<endfloors>";
281 LineData = "<endfloor>";
284 linecheck = SetCaseCopy(LineData, false);
288 if (linecheck.substr(0, 9) == "addfloor ")
291 int params = SplitData(LineData, 9);
293 if (params != 12 && params != 14)
294 return ScriptError("Incorrect number of parameters");
300 //check numeric values
303 for (int i = 2; i <= 10; i++)
305 if (!IsNumeric(tempdata[i]))
306 return ScriptError("Invalid value: " + tempdata[i]);
308 if (warn_deprecated == true)
309 ScriptWarning("Syntax deprecated");
313 for (int i = 2; i <= 12; i++)
317 if (!IsNumeric(tempdata[i]))
318 return ScriptError("Invalid value: " + tempdata[i]);
322 //stop here if in Check mode
323 if (config->CheckScript == true)
328 StoreCommand(floor->AddFloor(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), config->ReverseAxis, false, ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToBool(tempdata[11]), true));
330 StoreCommand(floor->AddFloor(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToBool(tempdata[9]), ToBool(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToBool(tempdata[13])));
334 //AddShaftFloor command
335 if (linecheck.substr(0, 13) == "addshaftfloor")
338 int params = SplitData(LineData, 14);
340 if (params != 12 && params != 14)
341 return ScriptError("Incorrect number of parameters");
347 //check numeric values
350 for (int i = 3; i <= 11; i++)
353 i = 3; //skip non-numeric parameters
354 if (!IsNumeric(tempdata[i]))
355 return ScriptError("Invalid value: " + tempdata[i]);
357 if (warn_deprecated == true)
358 ScriptWarning("Syntax deprecated");
362 for (int i = 3; i <= 13; i++)
365 i = 3; //skip non-numeric parameters
368 if (!IsNumeric(tempdata[i]))
369 return ScriptError("Invalid value: " + tempdata[i]);
374 if (Simcore->GetShaft(ToInt(tempdata[0])))
376 //stop here if in Check mode
377 if (config->CheckScript == true)
381 StoreCommand(Simcore->GetShaft(ToInt(tempdata[0]))->AddFloor(config->Current, tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), config->ReverseAxis, false, ToFloat(tempdata[10]), ToFloat(tempdata[11]), true));
383 StoreCommand(Simcore->GetShaft(ToInt(tempdata[0]))->AddFloor(config->Current, tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToBool(tempdata[10]), ToBool(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13])));
386 return ScriptError("Invalid shaft");
390 //AddStairsFloor command
391 if (linecheck.substr(0, 14) == "addstairsfloor")
394 int params = SplitData(LineData, 14);
396 if (params != 12 && params != 14)
397 return ScriptError("Incorrect number of parameters");
403 //check numeric values
406 for (int i = 3; i <= 11; i++)
409 i = 3; //skip non-numeric parameters
410 if (!IsNumeric(tempdata[i]))
411 return ScriptError("Invalid value: " + tempdata[i]);
413 if (warn_deprecated == true)
414 ScriptWarning("Syntax deprecated");
418 for (int i = 3; i <= 13; i++)
421 i = 3; //skip non-numeric parameters
424 if (!IsNumeric(tempdata[i]))
425 return ScriptError("Invalid value: " + tempdata[i]);
430 if (Simcore->GetStairs(ToInt(tempdata[0])))
432 //stop here if in Check mode
433 if (config->CheckScript == true)
437 StoreCommand(Simcore->GetStairs(ToInt(tempdata[0]))->AddFloor(config->Current, tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), config->ReverseAxis, false, ToFloat(tempdata[10]), ToFloat(tempdata[11]), true));
439 StoreCommand(Simcore->GetStairs(ToInt(tempdata[0]))->AddFloor(config->Current, tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToBool(tempdata[10]), ToBool(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13])));
442 return ScriptError("Invalid stairwell");
446 //AddInterFloorFloor command
447 if (linecheck.substr(0, 18) == "addinterfloorfloor")
450 int params = SplitData(LineData, 19);
452 if (params != 11 && params != 13)
453 return ScriptError("Incorrect number of parameters");
459 //check numeric values
462 for (int i = 2; i <= 10; i++)
464 if (!IsNumeric(tempdata[i]))
465 return ScriptError("Invalid value: " + tempdata[i]);
467 if (warn_deprecated == true)
468 ScriptWarning("Syntax deprecated");
472 for (int i = 2; i <= 12; i++)
476 if (!IsNumeric(tempdata[i]))
477 return ScriptError("Invalid value: " + tempdata[i]);
481 //stop here if in Check mode
482 if (config->CheckScript == true)
487 StoreCommand(floor->AddInterfloorFloor(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), config->ReverseAxis, false, ToFloat(tempdata[9]), ToFloat(tempdata[10]), true));
489 StoreCommand(floor->AddInterfloorFloor(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToBool(tempdata[9]), ToBool(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12])));
494 if (linecheck.substr(0, 7) == "addwall")
497 int params = SplitData(LineData, 8);
500 return ScriptError("Incorrect number of parameters");
502 //check numeric values
503 for (int i = 2; i <= 12; i++)
505 if (!IsNumeric(tempdata[i]))
506 return ScriptError("Invalid value: " + tempdata[i]);
509 //stop here if in Check mode
510 if (config->CheckScript == true)
514 StoreCommand(floor->AddWall(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToBool(tempdata[13])));
518 //AddShaftWall command
519 if (linecheck.substr(0, 12) == "addshaftwall")
522 int params = SplitData(LineData, 13);
525 return ScriptError("Incorrect number of parameters");
527 //check numeric values
528 for (int i = 0; i <= 13; i++)
531 i = 3; //skip non-numeric parameters
532 if (!IsNumeric(tempdata[i]))
533 return ScriptError("Invalid value: " + tempdata[i]);
537 if (Simcore->GetShaft(ToInt(tempdata[0])))
539 //stop here if in Check mode
540 if (config->CheckScript == true)
543 StoreCommand(Simcore->GetShaft(ToInt(tempdata[0]))->AddWall(config->Current, tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13])));
546 return ScriptError("Invalid shaft");
550 //AddStairsWall command
551 if (linecheck.substr(0, 13) == "addstairswall")
554 int params = SplitData(LineData, 14);
557 return ScriptError("Incorrect number of parameters");
559 //check numeric values
560 for (int i = 0; i <= 13; i++)
563 i = 3; //skip non-numeric parameters
564 if (!IsNumeric(tempdata[i]))
565 return ScriptError("Invalid value: " + tempdata[i]);
569 if (Simcore->GetStairs(ToInt(tempdata[0])))
571 //stop here if in Check mode
572 if (config->CheckScript == true)
575 StoreCommand(Simcore->GetStairs(ToInt(tempdata[0]))->AddWall(config->Current, tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13])));
578 return ScriptError("Invalid stairwell");
582 //AddInterFloorWall command
583 if (linecheck.substr(0, 17) == "addinterfloorwall")
586 int params = SplitData(LineData, 18);
589 return ScriptError("Incorrect number of parameters");
591 //check numeric values
592 for (int i = 2; i <= 12; i++)
594 if (!IsNumeric(tempdata[i]))
595 return ScriptError("Invalid value: " + tempdata[i]);
598 //stop here if in Check mode
599 if (config->CheckScript == true)
603 StoreCommand(floor->AddInterfloorWall(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12])));
607 //ColumnWallBox command
608 if (linecheck.substr(0, 14) == "columnwallbox ")
611 int params = SplitData(LineData, 14);
614 return ScriptError("Incorrect number of parameters");
616 //check numeric values
617 for (int i = 2; i <= 9; i++)
619 if (!IsNumeric(tempdata[i]))
620 return ScriptError("Invalid value: " + tempdata[i]);
623 //stop here if in Check mode
624 if (config->CheckScript == true)
627 StoreCommand(floor->ColumnWallBox(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToBool(tempdata[10]), ToBool(tempdata[11]), ToBool(tempdata[12]), ToBool(tempdata[13])));
631 //ColumnWallBox2 command
632 if (linecheck.substr(0, 14) == "columnwallbox2")
635 int params = SplitData(LineData, 15);
638 return ScriptError("Incorrect number of parameters");
640 //check numeric values
641 for (int i = 2; i <= 9; i++)
643 if (!IsNumeric(tempdata[i]))
644 return ScriptError("Invalid value: " + tempdata[i]);
647 //stop here if in Check mode
648 if (config->CheckScript == true)
651 StoreCommand(floor->ColumnWallBox2(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToBool(tempdata[10]), ToBool(tempdata[11]), ToBool(tempdata[12]), ToBool(tempdata[13])));
655 //CallButtonElevators command
656 if (linecheck.substr(0, 19) == "callbuttonelevators")
658 //construct array containing floor numbers
659 int params = SplitAfterEquals(LineData, false);
661 return ScriptError("Syntax Error");
663 callbutton_elevators.clear();
664 callbutton_elevators.resize(params);
666 for (int line = 0; line < params; line++)
669 if (!IsNumeric(tempdata[line], elevnumber))
670 return ScriptError("Invalid elevator number");
671 if (elevnumber < 1 || elevnumber > Simcore->GetElevatorCount())
672 return ScriptError("Invalid elevator number");
673 callbutton_elevators[line] = elevnumber;
678 //CreateCallButtons command
679 if (linecheck.substr(0, 17) == "createcallbuttons")
681 if (callbutton_elevators.size() == 0)
682 return ScriptError("No elevators specified");
685 int params = SplitData(LineData, 18);
693 //check numeric values
696 for (int i = 3; i <= 11; i++)
698 if (i == 6 || i == 9) //skip non-numeric parameters
700 if (!IsNumeric(tempdata[i]))
701 return ScriptError("Invalid value: " + tempdata[i]);
703 if (warn_deprecated == true)
704 ScriptWarning("Syntax deprecated");
706 else if (compat == 2)
708 for (int i = 5; i <= 13; i++)
710 if (i == 8 || i == 11) //skip non-numeric parameters
712 if (!IsNumeric(tempdata[i]))
713 return ScriptError("Invalid value: " + tempdata[i]);
715 if (warn_deprecated == true)
716 ScriptWarning("Syntax deprecated");
721 return ScriptError("Incorrect number of parameters");
723 for (int i = 6; i <= 14; i++)
725 if (i == 9 || i == 12) //skip non-numeric parameters
727 if (!IsNumeric(tempdata[i]))
728 return ScriptError("Invalid value: " + tempdata[i]);
732 //stop here if in Check mode
733 if (config->CheckScript == true)
737 CallButton* callbutton = 0;
739 callbutton = floor->AddCallButtons(callbutton_elevators, "", tempdata[0], tempdata[1], tempdata[1], tempdata[2], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), tempdata[6], ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToBool(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]));
740 else if (compat == 2)
741 callbutton = floor->AddCallButtons(callbutton_elevators, "", tempdata[0], tempdata[1], tempdata[2], tempdata[3], tempdata[4], ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), tempdata[8], ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToBool(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]));
743 callbutton = floor->AddCallButtons(callbutton_elevators, tempdata[0], tempdata[1], tempdata[2], tempdata[3], tempdata[4], tempdata[5], ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), tempdata[9], ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToBool(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]));
747 if (config->lockvalue == 0)
748 callbutton->SetLocked(false, config->keyvalue);
750 callbutton->SetLocked(true, config->keyvalue);
752 StoreCommand(callbutton);
757 if (linecheck.substr(0, 10) == "addstairs ")
760 int params = SplitData(LineData, 10);
763 return ScriptError("Incorrect number of parameters");
765 //check numeric values
766 for (int i = 0; i <= 12; i++)
769 i = 4; //skip non-numeric parameters
770 if (!IsNumeric(tempdata[i]))
771 return ScriptError("Invalid value: " + tempdata[i]);
775 if (Simcore->GetStairs(ToInt(tempdata[0])))
777 //stop here if in Check mode
778 if (config->CheckScript == true)
781 StoreCommand(Simcore->GetStairs(ToInt(tempdata[0]))->AddStairs(config->Current, tempdata[1], tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToInt(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12])));
784 return ScriptError("Invalid stairwell");
789 if (linecheck.substr(0, 8) == "adddoor ")
792 int params = SplitData(LineData, 8);
794 if (params < 10 || params == 11 || params > 14)
795 return ScriptError("Incorrect number of parameters");
799 //check numeric values
802 for (int i = 1; i <= 9; i++)
804 if (!IsNumeric(tempdata[i]))
805 return ScriptError("Invalid value: " + tempdata[i]);
811 for (int i = 3; i <= 11; i++)
813 if (!IsNumeric(tempdata[i]))
814 return ScriptError("Invalid value: " + tempdata[i]);
820 for (int i = 3; i <= 12; i++)
822 if (!IsNumeric(tempdata[i]))
823 return ScriptError("Invalid value: " + tempdata[i]);
829 for (int i = 4; i <= 13; i++)
831 if (!IsNumeric(tempdata[i]))
832 return ScriptError("Invalid value: " + tempdata[i]);
836 //check to see if file exists
839 parent->CheckFile("data/" + tempdata[0]);
840 parent->CheckFile("data/" + tempdata[1]);
843 if (compat > 0 && warn_deprecated == true)
844 ScriptWarning("Syntax deprecated");
846 //stop here if in Check mode
847 if (config->CheckScript == true)
854 door = floor->AddDoor("", "", false, tempdata[0], ToFloat(tempdata[1]), ToInt(tempdata[2]), 0, ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]));
856 door = floor->AddDoor(tempdata[0], tempdata[1], false, tempdata[2], ToFloat(tempdata[3]), ToInt(tempdata[4]), 0, ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]));
858 door = floor->AddDoor(tempdata[0], tempdata[1], false, tempdata[2], ToFloat(tempdata[3]), ToInt(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]));
860 door = floor->AddDoor(tempdata[0], tempdata[1], ToBool(tempdata[2]), tempdata[3], ToFloat(tempdata[4]), ToInt(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]));
863 door->SetLocked(config->lockvalue, config->keyvalue);
869 //AddStairsDoor command
870 if (linecheck.substr(0, 14) == "addstairsdoor ")
873 int params = SplitData(LineData, 14);
875 if (params < 11 || params == 12 || params > 15)
876 return ScriptError("Incorrect number of parameters");
880 //check numeric values
883 for (int i = 0; i <= 10; i++)
886 i = 2; //skip non-numeric parameters
887 if (!IsNumeric(tempdata[i]))
888 return ScriptError("Invalid value: " + tempdata[i]);
894 for (int i = 0; i <= 12; i++)
897 i = 4; //skip non-numeric parameters
898 if (!IsNumeric(tempdata[i]))
899 return ScriptError("Invalid value: " + tempdata[i]);
905 for (int i = 0; i <= 13; i++)
908 i = 4; //skip non-numeric parameters
909 if (!IsNumeric(tempdata[i]))
910 return ScriptError("Invalid value: " + tempdata[i]);
916 for (int i = 0; i <= 14; i++)
919 i = 5; //skip non-numeric parameters
920 if (!IsNumeric(tempdata[i]))
921 return ScriptError("Invalid value: " + tempdata[i]);
925 //check to see if file exists
928 parent->CheckFile("data/" + tempdata[1]);
929 parent->CheckFile("data/" + tempdata[2]);
932 if (compat > 0 && warn_deprecated == true)
933 ScriptWarning("Syntax deprecated");
936 if (Simcore->GetStairs(ToInt(tempdata[0])))
938 //stop here if in Check mode
939 if (config->CheckScript == true)
945 door = Simcore->GetStairs(ToInt(tempdata[0]))->AddDoor(config->Current, "", "", false, tempdata[1], ToFloat(tempdata[2]), ToInt(tempdata[3]), 0, ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]));
947 door = Simcore->GetStairs(ToInt(tempdata[0]))->AddDoor(config->Current, tempdata[1], tempdata[2], false, tempdata[3], ToFloat(tempdata[4]), ToInt(tempdata[5]), 0, ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]));
949 door = Simcore->GetStairs(ToInt(tempdata[0]))->AddDoor(config->Current, tempdata[1], tempdata[2], false, tempdata[3], ToFloat(tempdata[4]), ToInt(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]));
951 door = Simcore->GetStairs(ToInt(tempdata[0]))->AddDoor(config->Current, tempdata[1], tempdata[2], ToBool(tempdata[3]), tempdata[4], ToFloat(tempdata[5]), ToInt(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]));
954 door->SetLocked(config->lockvalue, config->keyvalue);
959 return ScriptError("Invalid stairwell");
963 //AddShaftStdDoor command
964 if (linecheck.substr(0, 16) == "addshaftstddoor ")
967 int params = SplitData(LineData, 16);
970 return ScriptError("Incorrect number of parameters");
972 //check numeric values
973 for (int i = 0; i <= 14; i++)
976 i = 5; //skip non-numeric parameters
977 if (!IsNumeric(tempdata[i]))
978 return ScriptError("Invalid value: " + tempdata[i]);
981 //check to see if file exists
982 parent->CheckFile("data/" + tempdata[1]);
983 parent->CheckFile("data/" + tempdata[2]);
986 if (Simcore->GetShaft(ToInt(tempdata[0])))
988 //stop here if in Check mode
989 if (config->CheckScript == true)
992 Door* door = Simcore->GetShaft(ToInt(tempdata[0]))->AddDoor(config->Current, tempdata[1], tempdata[2], ToBool(tempdata[3]), tempdata[4], ToFloat(tempdata[5]), ToInt(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]));
995 door->SetLocked(config->lockvalue, config->keyvalue);
1000 return ScriptError("Invalid shaft");
1004 //AddExternalDoor command
1005 if (linecheck.substr(0, 16) == "addexternaldoor ")
1008 int params = SplitData(LineData, 16);
1011 return ScriptError("Incorrect number of parameters");
1013 //check numeric values
1014 for (int i = 4; i <= 13; i++)
1016 if (!IsNumeric(tempdata[i]))
1017 return ScriptError("Invalid value: " + tempdata[i]);
1020 //check to see if file exists
1021 parent->CheckFile("data/" + tempdata[0]);
1022 parent->CheckFile("data/" + tempdata[1]);
1024 //stop here if in Check mode
1025 if (config->CheckScript == true)
1029 Door* door = floor->AddDoor(tempdata[0], tempdata[1], ToBool(tempdata[2]), tempdata[3], ToFloat(tempdata[4]), ToInt(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), true);
1032 door->SetLocked(config->lockvalue, config->keyvalue);
1038 //AddDirectionalIndicator command
1039 if (linecheck.substr(0, 23) == "adddirectionalindicator")
1042 int params = SplitData(LineData, 24);
1044 if (params != 18 && params != 19)
1045 return ScriptError("Incorrect number of parameters");
1047 bool compat = false;
1049 //check numeric values
1052 for (int i = 9; i <= 17; i++)
1058 if (!IsNumeric(tempdata[i]))
1059 return ScriptError("Invalid value: " + tempdata[i]);
1062 if (warn_deprecated == true)
1063 ScriptWarning("Syntax deprecated");
1067 for (int i = 10; i <= 18; i++)
1073 if (!IsNumeric(tempdata[i]))
1074 return ScriptError("Invalid value: " + tempdata[i]);
1079 if (!GetElevatorCar(tempdata[0], floor->Number, elevator, car))
1082 //stop here if in Check mode
1083 if (config->CheckScript == true)
1087 StoreCommand(floor->AddDirectionalIndicator(elevator, car, ToBool(tempdata[1]), false, ToBool(tempdata[2]), ToBool(tempdata[3]), tempdata[4], tempdata[5], tempdata[6], tempdata[7], tempdata[8], ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), tempdata[12], ToFloat(tempdata[13]), ToFloat(tempdata[14]), ToBool(tempdata[15]), ToFloat(tempdata[16]), ToFloat(tempdata[17])));
1089 StoreCommand(floor->AddDirectionalIndicator(elevator, car, ToBool(tempdata[1]), ToBool(tempdata[2]), ToBool(tempdata[3]), ToBool(tempdata[4]), tempdata[5], tempdata[6], tempdata[7], tempdata[8], tempdata[9], ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), tempdata[13], ToFloat(tempdata[14]), ToFloat(tempdata[15]), ToBool(tempdata[16]), ToFloat(tempdata[17]), ToFloat(tempdata[18])));
1093 //AddShaftDoor command
1094 if (linecheck.substr(0, 13) == "addshaftdoor ")
1097 int params = SplitData(LineData, 13);
1099 if (params != 5 && params != 6 && params != 10)
1100 return ScriptError("Incorrect number of parameters");
1104 compat = 1; //1.4 compatibility mode
1108 //exit if the SetShaftDoors command was never used
1109 if (compat > 0 && config->setshaftdoors == false)
1110 return ScriptError("SetShaftDoors must be used before AddShaftDoor");
1112 //check numeric values
1115 for (int i = 1; i <= 9; i++)
1119 if (!IsNumeric(tempdata[i]))
1120 return ScriptError("Invalid value: " + tempdata[i]);
1125 for (int i = 1; i <= 4; i++)
1129 if (!IsNumeric(tempdata[i]))
1130 return ScriptError("Invalid value: " + tempdata[i]);
1135 for (int i = 1; i <= 5; i++)
1139 if (!IsNumeric(tempdata[i]))
1140 return ScriptError("Invalid value: " + tempdata[i]);
1144 if (compat > 0 && warn_deprecated == true)
1145 ScriptWarning("Syntax deprecated");
1147 int elevator, carnum;
1148 if (!GetElevatorCar(tempdata[0], floor->Number, elevator, carnum))
1151 //stop here if in Check mode
1152 if (config->CheckScript == true)
1155 Elevator *elev = Simcore->GetElevator(elevator);
1156 ElevatorCar *car = elev->GetCar(carnum);
1159 StoreCommand(car->AddShaftDoor(config->Current, ToInt(tempdata[1]), tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9])));
1161 StoreCommand(car->AddShaftDoor(config->Current, ToInt(tempdata[1]), tempdata[2], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4])));
1163 StoreCommand(car->AddShaftDoor(config->Current, ToInt(tempdata[1]), tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5])));
1167 //AddFloorIndicator command
1168 if (linecheck.substr(0, 17) == "addfloorindicator")
1171 int params = SplitData(LineData, 18);
1173 if (params != 8 && params != 9)
1174 return ScriptError("Incorrect number of parameters");
1176 bool compat = false;
1178 compat = true; //1.4 compatibility mode
1180 //check numeric values
1183 for (int i = 3; i <= 7; i++)
1185 if (!IsNumeric(tempdata[i]))
1186 return ScriptError("Invalid value: " + tempdata[i]);
1188 if (warn_deprecated == true)
1189 ScriptWarning("Syntax deprecated");
1193 for (int i = 4; i <= 8; i++)
1195 if (!IsNumeric(tempdata[i]))
1196 return ScriptError("Invalid value: " + tempdata[i]);
1201 if (!GetElevatorCar(tempdata[0], floor->Number, elevator, car))
1204 //stop here if in Check mode
1205 if (config->CheckScript == true)
1208 if (compat == false)
1209 StoreCommand(floor->AddFloorIndicator(elevator, car, ToBool(tempdata[1]), tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8])));
1211 StoreCommand(floor->AddFloorIndicator(elevator, car, ToBool(tempdata[1]), "Button", tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7])));
1215 //AddFillerWalls command
1216 if (linecheck.substr(0, 14) == "addfillerwalls")
1219 int params = SplitData(LineData, 15);
1221 if (params < 10 || params > 11)
1222 return ScriptError("Incorrect number of parameters");
1224 bool compat = false;
1229 //check numeric values
1230 for (int i = 1; i <= 9; i++)
1234 if (!IsNumeric(tempdata[i]))
1235 return ScriptError("Invalid value: " + tempdata[i]);
1238 //stop here if in Check mode
1239 if (config->CheckScript == true)
1243 floor->AddFillerWalls(tempdata[0], ToFloat(tempdata[1]), ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToBool(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), false);
1245 floor->AddFillerWalls(tempdata[0], ToFloat(tempdata[1]), ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToBool(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToBool(tempdata[10]));
1251 if (linecheck.substr(0, 8) == "addsound")
1254 int params = SplitData(LineData, 9, true);
1256 if (params != 5 && params != 6 && params != 13 && params != 17)
1257 return ScriptError("Incorrect number of parameters");
1259 bool partial = false;
1260 bool compat = false;
1261 if (params == 5 || params == 6)
1263 if (params == 5 || params == 13)
1266 //check numeric values
1267 if (partial == true)
1269 for (int i = 2; i <= 4; i++)
1271 if (!IsNumeric(tempdata[i]))
1272 return ScriptError("Invalid value: " + tempdata[i]);
1279 for (int i = 2; i <= 12; i++)
1281 if (!IsNumeric(tempdata[i]))
1282 return ScriptError("Invalid value: " + tempdata[i]);
1284 if (warn_deprecated == true)
1285 ScriptWarning("Syntax deprecated");
1289 for (int i = 2; i <= 16; i++)
1294 if (!IsNumeric(tempdata[i]))
1295 return ScriptError("Invalid value: " + tempdata[i]);
1300 //check to see if file exists
1301 parent->CheckFile("data/" + tempdata[1]);
1303 //stop here if in Check mode
1304 if (config->CheckScript == true)
1309 if (partial == true)
1310 StoreCommand(floor->AddSound(tempdata[0], tempdata[1], Ogre::Vector3(ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]))));
1312 StoreCommand(floor->AddSound(tempdata[0], tempdata[1], Ogre::Vector3(ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4])), true, ToFloat(tempdata[5]), ToInt(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), 0.0, 360, 360, 1.0, Ogre::Vector3(ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]))));
1316 if (partial == true)
1317 StoreCommand(floor->AddSound(tempdata[0], tempdata[1], Ogre::Vector3(ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4])), ToBool(tempdata[5])));
1319 StoreCommand(floor->AddSound(tempdata[0], tempdata[1], Ogre::Vector3(ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4])), ToBool(tempdata[5]), ToFloat(tempdata[6]), ToInt(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), Ogre::Vector3(ToFloat(tempdata[14]), ToFloat(tempdata[15]), ToFloat(tempdata[16]))));
1324 //AddShaftDoorComponent command
1325 if (linecheck.substr(0, 21) == "addshaftdoorcomponent")
1328 int params = SplitData(LineData, 22);
1330 if (params != 18 && params != 19)
1331 return ScriptError("Incorrect number of parameters");
1333 //check numeric values
1334 bool compat = false;
1338 if (warn_deprecated == true)
1339 ScriptWarning("Syntax deprecated");
1342 for (int i = 1; i <= params - 1; i++)
1348 if (!IsNumeric(tempdata[i]))
1349 return ScriptError("Invalid value: " + tempdata[i]);
1352 int elevator, carnum;
1353 if (!GetElevatorCar(tempdata[0], floor->Number, elevator, carnum))
1356 //stop here if in Check mode
1357 if (config->CheckScript == true)
1360 Elevator *elev = Simcore->GetElevator(elevator);
1361 ElevatorCar *car = elev->GetCar(carnum);
1364 StoreCommand(car->AddShaftDoorComponent(ToInt(tempdata[1]), config->Current, tempdata[2], tempdata[3], tempdata[4], ToFloat(tempdata[5]), tempdata[6], ToFloat(tempdata[7]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]), ToFloat(tempdata[15]), ToFloat(tempdata[16]), ToFloat(tempdata[17])));
1366 StoreCommand(car->AddShaftDoorComponent(ToInt(tempdata[1]), config->Current, tempdata[2], tempdata[3], tempdata[4], ToFloat(tempdata[5]), tempdata[6], ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]), ToFloat(tempdata[15]), ToFloat(tempdata[16]), ToFloat(tempdata[17]), ToFloat(tempdata[18])));
1370 //FinishShaftDoor command
1371 if (linecheck.substr(0, 16) == "finishshaftdoor ")
1374 int params = SplitData(LineData, 16);
1376 bool legacy = false;
1379 return ScriptError("Incorrect number of parameters");
1383 if (IsNumeric(tempdata[2]) == true)
1385 if (warn_deprecated == true)
1386 ScriptWarning("Syntax deprecated");
1391 //check numeric values
1392 for (int i = 1; i <= 1; i++)
1394 if (!IsNumeric(tempdata[i]))
1395 return ScriptError("Invalid value: " + tempdata[i]);
1398 int elevator, carnum;
1399 if (!GetElevatorCar(tempdata[0], floor->Number, elevator, carnum))
1402 //stop here if in Check mode
1403 if (config->CheckScript == true)
1406 Elevator *elev = Simcore->GetElevator(elevator);
1407 ElevatorCar *car = elev->GetCar(carnum);
1409 if (params == 2 || legacy == true)
1410 StoreCommand(car->FinishShaftDoor(ToInt(tempdata[1]), config->Current));
1411 else if (params == 3)
1412 StoreCommand(car->FinishShaftDoor(ToInt(tempdata[1]), config->Current, ToBool(tempdata[2])));
1414 StoreCommand(car->FinishShaftDoor(ToInt(tempdata[1]), config->Current, ToBool(tempdata[2]), ToBool(tempdata[3])));
1419 if (linecheck.substr(0, 8) == "addmodel")
1422 int params = SplitData(LineData, 9, true);
1424 if (params != 14 && params != 15)
1425 return ScriptError("Incorrect number of parameters");
1427 bool compat = false;
1431 //check numeric values
1434 for (int i = 2; i <= 13; i++)
1438 if (!IsNumeric(tempdata[i]))
1439 return ScriptError("Invalid value: " + tempdata[i]);
1441 if (warn_deprecated == true)
1442 ScriptWarning("Syntax deprecated");
1446 for (int i = 3; i <= 14; i++)
1450 if (!IsNumeric(tempdata[i]))
1451 return ScriptError("Invalid value: " + tempdata[i]);
1455 //check to see if file exists
1456 parent->CheckFile("data/" + tempdata[1]);
1458 //stop here if in Check mode
1459 if (config->CheckScript == true)
1461 config->setkey = false;
1468 model = floor->AddModel(tempdata[0], tempdata[1], false, Ogre::Vector3(ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4])), Ogre::Vector3(ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7])), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToBool(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]));
1470 model = floor->AddModel(tempdata[0], tempdata[1], ToBool(tempdata[2]), Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5])), Ogre::Vector3(ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8])), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToBool(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]));
1472 if (config->setkey == true && model)
1473 model->SetKey(config->keyvalue);
1474 config->setkey = false;
1476 StoreCommand(model);
1480 //AddStairsModel command
1481 if (linecheck.substr(0, 14) == "addstairsmodel")
1484 int params = SplitData(LineData, 15, true);
1486 if (params != 15 && params != 16)
1487 return ScriptError("Incorrect number of parameters");
1489 bool compat = false;
1493 //check numeric values
1496 for (int i = 3; i <= 14; i++)
1500 if (!IsNumeric(tempdata[i]))
1501 return ScriptError("Invalid value: " + tempdata[i]);
1503 if (warn_deprecated == true)
1504 ScriptWarning("Syntax deprecated");
1508 for (int i = 4; i <= 15; i++)
1512 if (!IsNumeric(tempdata[i]))
1513 return ScriptError("Invalid value: " + tempdata[i]);
1517 //check to see if file exists
1518 parent->CheckFile("data/" + tempdata[2]);
1521 if (Simcore->GetStairs(ToInt(tempdata[0])))
1523 //stop here if in Check mode
1524 if (config->CheckScript == true)
1526 config->setkey = false;
1533 model = Simcore->GetStairs(ToInt(tempdata[0]))->AddModel(config->Current, tempdata[1], tempdata[2], false, Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5])), Ogre::Vector3(ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8])), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToBool(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]));
1535 model = Simcore->GetStairs(ToInt(tempdata[0]))->AddModel(config->Current, tempdata[1], tempdata[2], ToBool(tempdata[3]), Ogre::Vector3(ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6])), Ogre::Vector3(ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9])), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToBool(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]), ToFloat(tempdata[15]));
1537 if (config->setkey == true && model)
1538 model->SetKey(config->keyvalue);
1539 config->setkey = false;
1541 StoreCommand(model);
1544 return ScriptError("Invalid stairwell");
1548 //AddShaftModel command
1549 if (linecheck.substr(0, 13) == "addshaftmodel")
1552 int params = SplitData(LineData, 14, true);
1554 if (params != 15 && params != 16)
1555 return ScriptError("Incorrect number of parameters");
1557 bool compat = false;
1561 //check numeric values
1564 for (int i = 3; i <= 14; i++)
1568 if (!IsNumeric(tempdata[i]))
1569 return ScriptError("Invalid value: " + tempdata[i]);
1571 if (warn_deprecated == true)
1572 ScriptWarning("Syntax deprecated");
1576 for (int i = 4; i <= 15; i++)
1580 if (!IsNumeric(tempdata[i]))
1581 return ScriptError("Invalid value: " + tempdata[i]);
1585 //check to see if file exists
1586 parent->CheckFile("data/" + tempdata[2]);
1589 if (Simcore->GetShaft(ToInt(tempdata[0])))
1591 //stop here if in Check mode
1592 if (config->CheckScript == true)
1594 config->setkey = false;
1600 model = Simcore->GetShaft(ToInt(tempdata[0]))->AddModel(config->Current, tempdata[1], tempdata[2], false, Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5])), Ogre::Vector3(ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8])), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToBool(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]));
1602 model = Simcore->GetShaft(ToInt(tempdata[0]))->AddModel(config->Current, tempdata[1], tempdata[2], ToBool(tempdata[3]), Ogre::Vector3(ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6])), Ogre::Vector3(ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9])), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToBool(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14]), ToFloat(tempdata[15]));
1604 if (config->setkey == true && model)
1605 model->SetKey(config->keyvalue);
1606 config->setkey = false;
1608 StoreCommand(model);
1611 return ScriptError("Invalid shaft");
1615 //AddActionControl command
1616 if (linecheck.substr(0, 16) == "addactioncontrol")
1619 int params = SplitData(LineData, 17);
1622 return ScriptError("Incorrect number of parameters");
1624 //set backwards compatibility
1625 bool compat = false;
1626 if (IsNumeric(tempdata[8]) == false)
1633 //check numeric values
1634 for (int i = 3; i <= end; i++)
1636 if (!IsNumeric(tempdata[i]))
1637 return ScriptError("Invalid value: " + tempdata[i]);
1640 std::vector<std::string> action_array, tex_array;
1641 int slength, parameters;
1643 //get number of action & texture parameters
1644 slength = (int)tempdata.size();
1645 parameters = slength - (end + 1); //strip off main parameters
1647 //action & texture parameter number needs to be even
1648 if (IsEven(parameters) == false)
1649 return ScriptError("Incorrect number of parameters");
1651 for (int i = (end + 1); i < slength - (parameters / 2); i++)
1652 action_array.push_back(tempdata[i]);
1653 for (int i = slength - (parameters / 2); i < slength; i++)
1654 tex_array.push_back(tempdata[i]);
1656 //check to see if file exists
1657 parent->CheckFile("data/" + tempdata[1]);
1659 //stop here if in Check mode
1660 if (config->CheckScript == true)
1663 Control* control = 0;
1665 control = floor->AddControl(tempdata[0], tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), 1, action_array, tex_array);
1667 control = floor->AddControl(tempdata[0], tempdata[1], tempdata[2], ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToInt(tempdata[8]), action_array, tex_array);
1671 if (config->lockvalue == 0)
1672 control->SetLocked(false, config->keyvalue);
1674 control->SetLocked(true, config->keyvalue);
1676 StoreCommand(control);
1680 //AddShaftActionControl command
1681 if (linecheck.substr(0, 21) == "addshaftactioncontrol")
1684 int params = SplitData(LineData, 21);
1687 return ScriptError("Incorrect number of parameters");
1689 //set backwards compatibility
1690 bool compat = false;
1691 if (IsNumeric(tempdata[9]) == false)
1698 //check numeric values
1699 for (int i = 0; i <= end; i++)
1703 if (!IsNumeric(tempdata[i]))
1704 return ScriptError("Invalid value: " + tempdata[i]);
1707 std::vector<std::string> action_array, tex_array;
1708 int slength, parameters;
1710 //get number of action & texture parameters
1711 slength = (int)tempdata.size();
1712 parameters = slength - (end + 1); //strip off main parameters
1714 //action & texture parameter number needs to be even
1715 if (IsEven(parameters) == false)
1716 return ScriptError("Incorrect number of parameters");
1718 for (int i = (end + 1); i < slength - (parameters / 2); i++)
1719 action_array.push_back(tempdata[i]);
1720 for (int i = slength - (parameters / 2); i < slength; i++)
1721 tex_array.push_back(tempdata[i]);
1723 //check to see if file exists
1724 parent->CheckFile("data/" + tempdata[1]);
1726 if (Simcore->GetShaft(ToInt(tempdata[0])))
1728 //stop here if in Check mode
1729 if (config->CheckScript == true)
1732 Control* control = 0;
1734 control = Simcore->GetShaft(ToInt(tempdata[0]))->AddControl(config->Current, tempdata[1], tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), 1, action_array, tex_array);
1736 control = Simcore->GetShaft(ToInt(tempdata[0]))->AddControl(config->Current, tempdata[1], tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToInt(tempdata[9]), action_array, tex_array);
1740 if (config->lockvalue == 0)
1741 control->SetLocked(false, config->keyvalue);
1743 control->SetLocked(true, config->keyvalue);
1745 StoreCommand(control);
1748 return ScriptError("Invalid shaft");
1752 //AddStairsActionControl command
1753 if (linecheck.substr(0, 21) == "addstairsactioncontrol")
1756 int params = SplitData(LineData, 21);
1759 return ScriptError("Incorrect number of parameters");
1761 //set backwards compatibility
1762 bool compat = false;
1763 if (IsNumeric(tempdata[9]) == false)
1770 //check numeric values
1771 for (int i = 0; i <= end; i++)
1775 if (!IsNumeric(tempdata[i]))
1776 return ScriptError("Invalid value: " + tempdata[i]);
1779 std::vector<std::string> action_array, tex_array;
1780 int slength, parameters;
1782 //get number of action & texture parameters
1783 slength = (int)tempdata.size();
1784 parameters = slength - (end + 1); //strip off main parameters
1786 //action & texture parameter number needs to be even
1787 if (IsEven(parameters) == false)
1788 return ScriptError("Incorrect number of parameters");
1790 for (int i = (end + 1); i < slength - (parameters / 2); i++)
1791 action_array.push_back(tempdata[i]);
1792 for (int i = slength - (parameters / 2); i < slength; i++)
1793 tex_array.push_back(tempdata[i]);
1795 //check to see if file exists
1796 parent->CheckFile("data/" + tempdata[1]);
1798 if (Simcore->GetStairs(ToInt(tempdata[0])))
1800 //stop here if in Check mode
1801 if (config->CheckScript == true)
1804 Control* control = 0;
1806 control = Simcore->GetStairs(ToInt(tempdata[0]))->AddControl(config->Current, tempdata[1], tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), 1, action_array, tex_array);
1808 control = Simcore->GetStairs(ToInt(tempdata[0]))->AddControl(config->Current, tempdata[1], tempdata[2], tempdata[3], ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToInt(tempdata[9]), action_array, tex_array);
1812 if (config->lockvalue == 0)
1813 control->SetLocked(false, config->keyvalue);
1815 control->SetLocked(true, config->keyvalue);
1817 StoreCommand(control);
1820 return ScriptError("Invalid stairwell");
1824 //AddTrigger command
1825 if (linecheck.substr(0, 10) == "addtrigger")
1828 int params = SplitData(LineData, 11);
1831 return ScriptError("Incorrect number of parameters");
1833 //check numeric values
1834 for (int i = 2; i <= 7; i++)
1836 if (!IsNumeric(tempdata[i]))
1837 return ScriptError("Invalid value: " + tempdata[i]);
1840 std::vector<std::string> action_array;
1842 //get number of action & texture parameters
1843 for (int i = 8; i < params; i++)
1844 action_array.push_back(tempdata[i]);
1846 //check to see if file exists
1847 parent->CheckFile("data/" + tempdata[1]);
1849 //stop here if in Check mode
1850 if (config->CheckScript == true)
1853 Ogre::Vector3 min = Ogre::Vector3(ToFloat(tempdata[2]), ToFloat(tempdata[3]), ToFloat(tempdata[4]));
1854 Ogre::Vector3 max = Ogre::Vector3(ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]));
1855 StoreCommand(floor->AddTrigger(tempdata[0], tempdata[1], min, max, action_array));
1859 //AddShaftTrigger command
1860 /*if (linecheck.substr(0, 15) == "addshafttrigger")
1863 int params = SplitData(LineData, 16);
1866 return ScriptError("Incorrect number of parameters");
1868 //check numeric values
1869 for (int i = 0; i <= 8; i++)
1873 if (!IsNumeric(tempdata[i]))
1874 return ScriptError("Invalid value: " + tempdata[i]);
1877 std::vector<std::string> action_array;
1879 //get number of action & texture parameters
1880 for (int i = 9; i < params; i++)
1881 action_array.push_back(tempdata[i]);
1883 //check to see if file exists
1884 parent->CheckFile("data/" + tempdata[1]);
1886 //stop here if in Check mode
1887 if (config->CheckScript == true)
1890 Ogre::Vector3 min = Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]));
1891 Ogre::Vector3 max = Ogre::Vector3(ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]));
1892 if (Simcore->GetShaft(ToInt(tempdata[0])))
1893 StoreCommand(Simcore->GetShaft(ToInt(tempdata[0]))->AddTrigger(Current, tempdata[1], tempdata[2], min, max, action_array));
1895 return ScriptError("Invalid shaft");
1899 //AddStairsTrigger command
1900 if (linecheck.substr(0, 15) == "addstairstrigger")
1903 int params = SplitData(LineData, 16);
1906 return ScriptError("Incorrect number of parameters");
1908 //check numeric values
1909 for (int i = 0; i <= 8; i++)
1913 if (!IsNumeric(tempdata[i]))
1914 return ScriptError("Invalid value: " + tempdata[i]);
1917 std::vector<std::string> action_array;
1919 //get number of action & texture parameters
1920 for (int i = 9; i < params; i++)
1921 action_array.push_back(tempdata[i]);
1923 //check to see if file exists
1924 parent->CheckFile("data/" + tempdata[1]);
1926 //stop here if in Check mode
1927 if (config->CheckScript == true)
1930 Ogre::Vector3 min = Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5]));
1931 Ogre::Vector3 max = Ogre::Vector3(ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]));
1932 if (Simcore->GetStairs(ToInt(tempdata[0])))
1933 StoreCommand(Simcore->GetStairs(ToInt(tempdata[0]))->AddTrigger(Current, tempdata[1], tempdata[2], min, max, action_array));
1935 return ScriptError("Invalid stairwell");
1939 //AddCameraTexture command
1940 if (linecheck.substr(0, 16) == "addcameratexture")
1943 int params = SplitData(LineData, 17);
1946 return ScriptError("Incorrect number of parameters");
1948 //check numeric values
1949 for (int i = 2; i <= 10; i++)
1954 if (!IsNumeric(tempdata[i]))
1955 return ScriptError("Invalid value: " + tempdata[i]);
1958 //stop here if in Check mode
1959 if (config->CheckScript == true)
1962 StoreCommand(floor->AddCameraTexture(tempdata[0], ToBool(tempdata[1]), ToInt(tempdata[2]), ToFloat(tempdata[3]), Ogre::Vector3(ToFloat(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6])), ToBool(tempdata[7]), Ogre::Vector3(ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]))));
1967 if (linecheck.substr(0, 4) == "cut ")
1970 int params = SplitData(LineData, 4);
1973 return ScriptError("Incorrect number of parameters");
1975 //check numeric values
1976 for (int i = 0; i <= 5; i++)
1978 if (!IsNumeric(tempdata[i]))
1979 return ScriptError("Invalid value: " + tempdata[i]);
1982 //stop here if in Check mode
1983 if (config->CheckScript == true)
1986 //perform cut on floor
1987 floor->Cut(Ogre::Vector3(ToFloat(tempdata[0]), ToFloat(tempdata[1]), ToFloat(tempdata[2])), Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5])), ToBool(tempdata[6]), ToBool(tempdata[7]), false);
1992 if (linecheck.substr(0, 6) == "cutall")
1995 int params = SplitData(LineData, 7);
1998 return ScriptError("Incorrect number of parameters");
2000 //check numeric values
2001 for (int i = 0; i <= 5; i++)
2003 if (!IsNumeric(tempdata[i]))
2004 return ScriptError("Invalid value: " + tempdata[i]);
2007 //stop here if in Check mode
2008 if (config->CheckScript == true)
2011 //perform cut on all objects related to the current floor
2012 floor->CutAll(Ogre::Vector3(ToFloat(tempdata[0]), ToFloat(tempdata[1]), ToFloat(tempdata[2])), Ogre::Vector3(ToFloat(tempdata[3]), ToFloat(tempdata[4]), ToFloat(tempdata[5])), ToBool(tempdata[6]), ToBool(tempdata[7]));
2016 //AddRevolvingDoor command
2017 if (linecheck.substr(0, 17) == "addrevolvingdoor ")
2020 int params = SplitData(LineData, 17);
2023 return ScriptError("Incorrect number of parameters");
2025 //check numeric values
2026 for (int i = 2; i <= 13; i++)
2031 if (!IsNumeric(tempdata[i]))
2032 return ScriptError("Invalid value: " + tempdata[i]);
2035 //check to see if file exists
2036 parent->CheckFile("data/" + tempdata[0]);
2038 //stop here if in Check mode
2039 if (config->CheckScript == true)
2043 RevolvingDoor* door = floor->AddRevolvingDoor(tempdata[0], tempdata[1], ToFloat(tempdata[2]), ToBool(tempdata[3]), ToInt(tempdata[4]), ToFloat(tempdata[5]), ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToFloat(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToBool(tempdata[14]));
2047 if (config->lockvalue == 0)
2048 door->SetLocked(false, config->keyvalue);
2050 door->SetLocked(true, config->keyvalue);
2057 //AddEscalator command
2058 if (linecheck.substr(0, 13) == "addescalator ")
2061 int params = SplitData(LineData, 13);
2064 return ScriptError("Incorrect number of parameters");
2066 //check numeric values
2067 for (int i = 1; i <= 14; i++)
2070 i = 6; //skip non-numeric parameters
2071 if (!IsNumeric(tempdata[i]))
2072 return ScriptError("Invalid value: " + tempdata[i]);
2077 //stop here if in Check mode
2078 if (config->CheckScript == true)
2081 StoreCommand(floor->AddEscalator(tempdata[0], ToInt(tempdata[1]), ToFloat(tempdata[2]), tempdata[3], tempdata[4], tempdata[5], ToFloat(tempdata[6]), ToFloat(tempdata[7]), ToFloat(tempdata[8]), ToFloat(tempdata[9]), ToFloat(tempdata[10]), ToInt(tempdata[11]), ToFloat(tempdata[12]), ToFloat(tempdata[13]), ToFloat(tempdata[14])));
2086 //handle end of floor section
2087 if (linecheck == "<endfloor>" && config->RangeL == config->RangeH)
2089 //when finishing a floor, make sure the altitude is valid
2090 if (floor->AltitudeSet == false)
2091 return ScriptError("Floor altitude or height has not been set");
2093 config->SectionNum = 0;
2094 config->Context = "None";
2095 engine->Report("Finished floor");
2099 //handle floor range
2100 if (config->RangeL != config->RangeH && linecheck.substr(0, 9) == "<endfloor")
2102 //when finishing a floor, make sure the altitude is valid
2103 if (floor->AltitudeSet == false)
2104 return ScriptError("Floor altitude is invalid");
2106 if (config->RangeL < config->RangeH)
2108 if (config->Current < config->RangeH)
2111 parent->line = config->RangeStart; //loop back
2116 config->SectionNum = 0; //break out of loop
2117 config->Context = "None";
2120 engine->Report("Finished floors");
2126 if (config->Current > config->RangeH)
2129 parent->line = config->RangeStart; //loop back
2134 config->SectionNum = 0; //break out of loop
2135 config->Context = "None";
2138 engine->Report("Finished floors");