Guest User

Untitled

a guest
Aug 29th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.04 KB | None | 0 0
  1. /*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Infected Hound Agent">*/
  2. /*%FSM<HEAD>*/
  3. /*
  4. item0[] = {"init",0,250,-1525.000000,-75.000000,-1425.000000,-25.000000,0.000000,"init"};
  5. item1[] = {"End",1,250,-1200.000000,175.000000,-1100.000000,225.000000,0.000000,"End"};
  6. item2[] = {"Not_Alive",4,218,-1400.000000,175.000000,-1300.000000,225.000000,5.000000,"Not" \n "Alive"};
  7. item3[] = {"true",8,218,-1525.000000,0.000000,-1425.000000,50.000000,0.000000,"true"};
  8. item4[] = {"Begin",2,250,-1525.000000,75.000000,-1425.000000,125.000000,0.000000,"Begin"};
  9. item5[] = {"is_Dedicated",4,218,-1200.000000,-75.000000,-1100.000000,-25.000000,5.000000,"is" \n "Dedicated"};
  10. item6[] = {"Chase_Distance",4,218,-1525.000000,300.000000,-1425.000000,350.000000,1.000000,"Chase" \n "Distance"};
  11. item7[] = {"Attack_Distance",4,218,-1400.000000,325.000000,-1300.000000,375.000000,1.000000,"Attack" \n "Distance"};
  12. item8[] = {"Chase",2,250,-1525.000000,375.000000,-1425.000000,425.000000,0.000000,"Chase"};
  13. item9[] = {"Attack",2,250,-1275.000000,325.000000,-1175.000000,375.000000,0.000000,"Attack"};
  14. item10[] = {"Waiting",2,250,-1525.000000,225.000000,-1425.000000,275.000000,0.000000,"Waiting"};
  15. item11[] = {"Has_Target",4,218,-1525.000000,150.000000,-1425.000000,200.000000,1.000000,"Has" \n "Target"};
  16. item12[] = {"",7,210,-1603.999512,546.000000,-1596.000366,554.000000,0.000000,""};
  17. item13[] = {"",7,210,-1603.999756,246.000000,-1596.000122,253.999985,0.000000,""};
  18. item14[] = {"reorientate",4,218,-1525.000000,450.000000,-1425.000000,500.000000,1.000000,"reorientate"};
  19. item15[] = {"Target_Dead",4,218,-1400.000000,225.000000,-1300.000000,275.000000,5.000000,"Target" \n "Dead"};
  20. item16[] = {"Attack_Finished",4,218,-1275.000000,525.000000,-1175.000000,575.000000,5.000000,"Attack" \n "Finished"};
  21. item17[] = {"",7,210,-1153.999634,246.000000,-1146.000244,253.999985,0.000000,""};
  22. item18[] = {"Too_Far_Away",4,4314,-1400.000000,275.000000,-1300.000000,325.000000,5.000000,"Too Far" \n "Away"};
  23. item19[] = {"Infected_Hound_A",-1,250,-1675.000000,-200.000000,-1375.000000,-150.000000,0.000000,"Infected Hound Agent"};
  24. item20[] = {"Created_By_Death",-1,250,-1675.000000,-150.000000,-1375.000000,-100.000000,0.000000,"Created By Deathlyrage"};
  25. version=1;
  26. class LayoutItems
  27. {
  28. class Item19
  29. {
  30. class ItemInfo
  31. {
  32. FontFace="Arial";
  33. FontHeight=19;
  34. FontWeight=700;
  35. lStyle=1;
  36. lColor=-1;
  37. };
  38. };
  39. class Item20
  40. {
  41. class ItemInfo
  42. {
  43. FontFace="Arial";
  44. FontHeight=19;
  45. FontWeight=700;
  46. lStyle=1;
  47. lColor=-1;
  48. };
  49. };
  50. };
  51. link0[] = {0,3};
  52. link1[] = {0,5};
  53. link2[] = {2,17};
  54. link3[] = {3,4};
  55. link4[] = {4,11};
  56. link5[] = {5,1};
  57. link6[] = {6,8};
  58. link7[] = {7,9};
  59. link8[] = {8,2};
  60. link9[] = {8,7};
  61. link10[] = {8,14};
  62. link11[] = {8,15};
  63. link12[] = {8,18};
  64. link13[] = {9,16};
  65. link14[] = {10,2};
  66. link15[] = {10,6};
  67. link16[] = {10,7};
  68. link17[] = {10,15};
  69. link18[] = {10,18};
  70. link19[] = {11,10};
  71. link20[] = {12,13};
  72. link21[] = {13,10};
  73. link22[] = {14,8};
  74. link23[] = {15,17};
  75. link24[] = {16,12};
  76. link25[] = {17,1};
  77. link26[] = {18,17};
  78. globals[] = {25.000000,1,0,0,0,640,480,1,612,6316128,1,-1599.693481,-944.241089,471.738647,-151.888290,493,593,1};
  79. window[] = {0,-1,-1,-1,-1,971,113,1137,233,1,511};
  80. *//*%FSM</HEAD>*/
  81. class FSM
  82. {
  83. fsmName = "Infected Hound Agent";
  84. class States
  85. {
  86. /*%FSM<STATE "init">*/
  87. class init
  88. {
  89. name = "init";
  90. init = /*%FSM<STATEINIT""">*/"_mutant = _this select 0;" \n
  91. "_type = _this select 1;" \n
  92. "_standing = true;" \n
  93. "_command = ""none"";" \n
  94. "_forceWalk = false;" \n
  95. "_maxSpeed = 2;" \n
  96. "_maxSpeedInit = _maxSpeed;" \n
  97. "_forceChange = false;" \n
  98. "" \n
  99. "_target = objNull;" \n
  100. "_attackTarget = objNull;" \n
  101. "_target setVariable ['forceWalk',false];" \n
  102. "_pos = position _mutant;" \n
  103. "_lastPos = _pos;" \n
  104. "_move = """";" \n
  105. "_movePos = [];" \n
  106. "" \n
  107. "_idleTime = 5;" \n
  108. "_coolDown = 0;" \n
  109. "" \n
  110. "" \n
  111. "_character = player;" \n
  112. "" \n
  113. "_speedVal = [1,8,-1];" \n
  114. "" \n
  115. "_mutant setVariable [""state"", ""passive"", true];" \n
  116. "_mutant setVariable [""currentSpeed"", _maxSpeed];"/*%FSM</STATEINIT""">*/;
  117. precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
  118. class Links
  119. {
  120. /*%FSM<LINK "is_Dedicated">*/
  121. class is_Dedicated
  122. {
  123. priority = 5.000000;
  124. to="End";
  125. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  126. condition=/*%FSM<CONDITION""">*/"isDedicated"/*%FSM</CONDITION""">*/;
  127. action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
  128. };
  129. /*%FSM</LINK>*/
  130. /*%FSM<LINK "true">*/
  131. class true
  132. {
  133. priority = 0.000000;
  134. to="Begin";
  135. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  136. condition=/*%FSM<CONDITION""">*/"dayz_clientPreload and !(isNull _mutant)"/*%FSM</CONDITION""">*/;
  137. action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
  138. };
  139. /*%FSM</LINK>*/
  140. };
  141. };
  142. /*%FSM</STATE>*/
  143. /*%FSM<STATE "End">*/
  144. class End
  145. {
  146. name = "End";
  147. init = /*%FSM<STATEINIT""">*/"if (!isDedicated) then" \n
  148. "{" \n
  149. " if (!isNull _mutant) then {" \n
  150. " //deleteVehicle _mutant;" \n
  151. " _mutant = nil;" \n
  152. " };" \n
  153. "};"/*%FSM</STATEINIT""">*/;
  154. precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
  155. class Links
  156. {
  157. };
  158. };
  159. /*%FSM</STATE>*/
  160. /*%FSM<STATE "Begin">*/
  161. class Begin
  162. {
  163. name = "Begin";
  164. init = /*%FSM<STATEINIT""">*/"_myDest = _pos;" \n
  165. "_newDest = _pos;" \n
  166. "_array = [];" \n
  167. "" \n
  168. "_bodyStay = 60;" \n
  169. "" \n
  170. "_mutant disableAI ""FSM"";" \n
  171. "_mutant setBehaviour ""CARELESS"";" \n
  172. "_mutant setCombatMode ""RED"";" \n
  173. "_mutant setSkill 0;" \n
  174. "" \n
  175. "_newDest = getPosATL _mutant;" \n
  176. "_timeN = time;" \n
  177. "" \n
  178. "_mutant setVariable [""isTazed"",false,true];" \n
  179. " _id = _mutant addeventhandler [""HandleDamage"",{_this call local_zombieDamage;_this call DDOPP_taser_handleHit;}];" \n
  180. "" \n
  181. "_isAlive = alive _mutant;" \n
  182. "_isSomeone = true;" \n
  183. "" \n
  184. "_target = objNull;" \n
  185. "_targetPos = [];" \n
  186. "_countr = 0;" \n
  187. "" \n
  188. "mut_target_search = {" \n
  189. " _mutant = _this select 0;" \n
  190. " _cover_area = _this select 1;" \n
  191. " _refresh = false;" \n
  192. " _i = 1;" \n
  193. " _targets = nearestObjects [_mutant, [""CAManBase""], _cover_area];" \n
  194. " while {!_refresh && (_i < (count _targets))} do {" \n
  195. " _mut_target = _targets select _i;" \n
  196. " if (alive _mut_target) then {" \n
  197. " if (!(_mut_target isKindOf ""zZombie_Base"")) then {" \n
  198. " _refresh = true;" \n
  199. " _i = 1;" \n
  200. " } else {" \n
  201. " _i = _i + 1;" \n
  202. " _mut_target = objNull;" \n
  203. " };" \n
  204. " } else {" \n
  205. " _i = _i + 1;" \n
  206. " _mut_target = objNull;" \n
  207. " };" \n
  208. " };" \n
  209. "};" \n
  210. "" \n
  211. "_cover_area = 500;" \n
  212. "_mut_target = objNull;" \n
  213. "" \n
  214. "nul = [objNull, _mutant, rSAY, ""hound_init""] call RE;" \n
  215. "" \n
  216. "_mut_target = (vehicle player);" \n
  217. "" \n
  218. "_sounds = [_mutant] spawn" \n
  219. "{" \n
  220. "private [""_sound"",""_mutant""];" \n
  221. " _mutant = _this select 0;" \n
  222. " while {alive _mutant} do {" \n
  223. " sleep random 15;" \n
  224. " _blood_sound = round(random 4);" \n
  225. " switch (_blood_sound) do {" \n
  226. " case 0: {_sound = ""hound_bark0"";};" \n
  227. " case 1: {_sound = ""hound_bark1"";};" \n
  228. " case 2: {_sound = ""hound_bark2"";};" \n
  229. " case 3: {_sound = ""hound_bark3"";};" \n
  230. " case 4: {_sound = ""hound_bark4"";};" \n
  231. " default {_sound = ""hound_bark5"";};" \n
  232. " };" \n
  233. " _mutant say _sound;" \n
  234. " [nil, _mutant, rSAY, _sound] call RE;" \n
  235. " sleep random 25;" \n
  236. " };" \n
  237. "}; "/*%FSM</STATEINIT""">*/;
  238. precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
  239. class Links
  240. {
  241. /*%FSM<LINK "Has_Target">*/
  242. class Has_Target
  243. {
  244. priority = 1.000000;
  245. to="Waiting";
  246. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  247. condition=/*%FSM<CONDITION""">*/"!(isNull _mut_target)"/*%FSM</CONDITION""">*/;
  248. action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
  249. };
  250. /*%FSM</LINK>*/
  251. };
  252. };
  253. /*%FSM</STATE>*/
  254. /*%FSM<STATE "Chase">*/
  255. class Chase
  256. {
  257. name = "Chase";
  258. init = /*%FSM<STATEINIT""">*/"_targetPos = getPosATL _mut_target;" \n
  259. "_distance = (_mutant distance _mut_target);" \n
  260. "" \n
  261. "_mutant moveTo _targetPos;" \n
  262. "_mutant forceSpeed 15;" \n
  263. "" \n
  264. "_waitTime = time;"/*%FSM</STATEINIT""">*/;
  265. precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
  266. class Links
  267. {
  268. /*%FSM<LINK "Too_Far_Away">*/
  269. class Too_Far_Away
  270. {
  271. priority = 5.000000;
  272. to="End";
  273. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  274. condition=/*%FSM<CONDITION""">*/"(_mutant distance _mut_target) > 300"/*%FSM</CONDITION""">*/;
  275. action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
  276. };
  277. /*%FSM</LINK>*/
  278. /*%FSM<LINK "Target_Dead">*/
  279. class Target_Dead
  280. {
  281. priority = 5.000000;
  282. to="End";
  283. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  284. condition=/*%FSM<CONDITION""">*/"!_targetAlive"/*%FSM</CONDITION""">*/;
  285. action=/*%FSM<ACTION""">*/"nul = [objNull, _mut_target, rSAY, ""hound_damage""] call RE;" \n
  286. "terminate _sounds;"/*%FSM</ACTION""">*/;
  287. };
  288. /*%FSM</LINK>*/
  289. /*%FSM<LINK "Not_Alive">*/
  290. class Not_Alive
  291. {
  292. priority = 5.000000;
  293. to="End";
  294. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  295. condition=/*%FSM<CONDITION""">*/"!_isAlive"/*%FSM</CONDITION""">*/;
  296. action=/*%FSM<ACTION""">*/"nul = [objNull, _mutant, rSAY, ""hound_pain""] call RE;" \n
  297. "terminate _sounds;"/*%FSM</ACTION""">*/;
  298. };
  299. /*%FSM</LINK>*/
  300. /*%FSM<LINK "reorientate">*/
  301. class reorientate
  302. {
  303. priority = 1.000000;
  304. to="Chase";
  305. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  306. condition=/*%FSM<CONDITION""">*/"((time - _waitTime) > 1)"/*%FSM</CONDITION""">*/;
  307. action=/*%FSM<ACTION""">*/"_distance = (_mutant distance _mut_target);" \n
  308. "_targetPos = getPosATL _mut_target;"/*%FSM</ACTION""">*/;
  309. };
  310. /*%FSM</LINK>*/
  311. /*%FSM<LINK "Attack_Distance">*/
  312. class Attack_Distance
  313. {
  314. priority = 1.000000;
  315. to="Attack";
  316. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  317. condition=/*%FSM<CONDITION""">*/"(_mut_target distance _mutant) <= 5"/*%FSM</CONDITION""">*/;
  318. action=/*%FSM<ACTION""">*/"_distance = (_mutant distance _mut_target);"/*%FSM</ACTION""">*/;
  319. };
  320. /*%FSM</LINK>*/
  321. };
  322. };
  323. /*%FSM</STATE>*/
  324. /*%FSM<STATE "Attack">*/
  325. class Attack
  326. {
  327. name = "Attack";
  328. init = /*%FSM<STATEINIT""">*/"private [""_sound"",""_distance"",""_s"",""_cnt"",""_index"",""_wound"",""_damage"",""_cantSee""];" \n
  329. "" \n
  330. "_attack = [_mutant,_mut_target] spawn" \n
  331. "{" \n
  332. "private [""_sound"",""_dog""];" \n
  333. " _dog = _this select 0;" \n
  334. " _target = _this select 1;" \n
  335. "" \n
  336. " _dog doTarget _target;" \n
  337. " _dog lookAt _target;" \n
  338. "" \n
  339. " //_dog attachTo [_target,[0,0.8,0],""hrudnik""];" \n
  340. " //_dog setDir 180;" \n
  341. " _dir = [_dog,_target] call BIS_Fnc_dirTo;" \n
  342. "" \n
  343. " _dog setDir _dir;" \n
  344. "" \n
  345. " //_dog playMove ""BP_DogAttack"";" \n
  346. " _dog switchMove ""BP_DogAttack"";" \n
  347. " sleep 0.35; " \n
  348. " _dog setVelocity [0, 0, 2.5];" \n
  349. "" \n
  350. " //detach _dog;" \n
  351. "" \n
  352. " _sound = ""hound_bite"";" \n
  353. " _dog say _sound;" \n
  354. " [nil, _dog, rSAY, _sound] call RE;" \n
  355. "" \n
  356. " //If (((boundingBox _target select 1) select 2) > 1) Then" \n
  357. " //{" \n
  358. " // _target setHit [""legs"", 1];" \n
  359. " // _target playMove ""AmovPpneMstpSrasWrflDnon"";" \n
  360. " //}" \n
  361. " //Else" \n
  362. " //{" \n
  363. " // _target setHit [""hands"", 1];" \n
  364. " // //_target setDamage (damage _target + 0.2);" \n
  365. " //};" \n
  366. "" \n
  367. " _cnt = count (DAYZ_woundHit_ok select 1);" \n
  368. " _index = floor (random _cnt);" \n
  369. " _index = (DAYZ_woundHit_ok select 1) select _index;" \n
  370. " _wound = (DAYZ_woundHit_ok select 0) select _index; " \n
  371. " _damage = 0.4 + random (0.3);" \n
  372. "" \n
  373. " _distance = (_dog distance _target);" \n
  374. " _tPos = (getPosASL _target);" \n
  375. " _zPos = (getPosASL _dog);" \n
  376. " _inAngle = [_zPos,(getdir _dog),50,_tPos] call fnc_inAngleSector;" \n
  377. " if (_inAngle) then {" \n
  378. " _cantSee = [_dog,_target] call dayz_losCheck;" \n
  379. " if (!_cantSee) then" \n
  380. " {" \n
  381. " if (local _dog) then" \n
  382. " { " \n
  383. " [player, _wound, _damage, _dog,""hound""] call fnc_usec_damageHandler; " \n
  384. " } else {" \n
  385. " dayzHit = [_target,_wound, _damage, _dog,""hound""];" \n
  386. " publicVariable ""dayzHit"";" \n
  387. " };" \n
  388. " };" \n
  389. " };" \n
  390. " sleep 1;" \n
  391. "}; " \n
  392. ""/*%FSM</STATEINIT""">*/;
  393. precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
  394. class Links
  395. {
  396. /*%FSM<LINK "Attack_Finished">*/
  397. class Attack_Finished
  398. {
  399. priority = 5.000000;
  400. to="Waiting";
  401. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  402. condition=/*%FSM<CONDITION""">*/"scriptdone _attack"/*%FSM</CONDITION""">*/;
  403. action=/*%FSM<ACTION""">*/"//_mutant switchMove """";" \n
  404. "_distance = (_mutant distance _mut_target);" \n
  405. "_targetPos = getPosATL _mut_target;"/*%FSM</ACTION""">*/;
  406. };
  407. /*%FSM</LINK>*/
  408. };
  409. };
  410. /*%FSM</STATE>*/
  411. /*%FSM<STATE "Waiting">*/
  412. class Waiting
  413. {
  414. name = "Waiting";
  415. init = /*%FSM<STATEINIT""">*/"//_bul = [_mutant, _cover_area] call mut_target_search;" \n
  416. "_waitTime = time;" \n
  417. "_lastpos = _pos;" \n
  418. "_lostTarget = false;" \n
  419. "_isAlive = alive _mutant;" \n
  420. "_targetAlive = alive _mut_target;" \n
  421. "_targetPos = getPosATL _mut_target;" \n
  422. "_distance = (_mutant distance _mut_target);"/*%FSM</STATEINIT""">*/;
  423. precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
  424. class Links
  425. {
  426. /*%FSM<LINK "Too_Far_Away">*/
  427. class Too_Far_Away
  428. {
  429. priority = 5.000000;
  430. to="End";
  431. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  432. condition=/*%FSM<CONDITION""">*/"(_mutant distance _mut_target) > 300"/*%FSM</CONDITION""">*/;
  433. action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
  434. };
  435. /*%FSM</LINK>*/
  436. /*%FSM<LINK "Target_Dead">*/
  437. class Target_Dead
  438. {
  439. priority = 5.000000;
  440. to="End";
  441. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  442. condition=/*%FSM<CONDITION""">*/"!_targetAlive"/*%FSM</CONDITION""">*/;
  443. action=/*%FSM<ACTION""">*/"nul = [objNull, _mut_target, rSAY, ""hound_damage""] call RE;" \n
  444. "terminate _sounds;"/*%FSM</ACTION""">*/;
  445. };
  446. /*%FSM</LINK>*/
  447. /*%FSM<LINK "Not_Alive">*/
  448. class Not_Alive
  449. {
  450. priority = 5.000000;
  451. to="End";
  452. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  453. condition=/*%FSM<CONDITION""">*/"!_isAlive"/*%FSM</CONDITION""">*/;
  454. action=/*%FSM<ACTION""">*/"nul = [objNull, _mutant, rSAY, ""hound_pain""] call RE;" \n
  455. "terminate _sounds;"/*%FSM</ACTION""">*/;
  456. };
  457. /*%FSM</LINK>*/
  458. /*%FSM<LINK "Attack_Distance">*/
  459. class Attack_Distance
  460. {
  461. priority = 1.000000;
  462. to="Attack";
  463. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  464. condition=/*%FSM<CONDITION""">*/"(_mut_target distance _mutant) <= 5"/*%FSM</CONDITION""">*/;
  465. action=/*%FSM<ACTION""">*/"_distance = (_mutant distance _mut_target);"/*%FSM</ACTION""">*/;
  466. };
  467. /*%FSM</LINK>*/
  468. /*%FSM<LINK "Chase_Distance">*/
  469. class Chase_Distance
  470. {
  471. priority = 1.000000;
  472. to="Chase";
  473. precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
  474. condition=/*%FSM<CONDITION""">*/"(_mut_target distance _mutant) >= 5"/*%FSM</CONDITION""">*/;
  475. action=/*%FSM<ACTION""">*/"_distance = (_mutant distance _mut_target);"/*%FSM</ACTION""">*/;
  476. };
  477. /*%FSM</LINK>*/
  478. };
  479. };
  480. /*%FSM</STATE>*/
  481. };
  482. initState="init";
  483. finalStates[] =
  484. {
  485. "End",
  486. };
  487. };
  488. /*%FSM</COMPILE>*/
Add Comment
Please, Sign In to add comment