Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.90 KB | None | 0 0
  1. #include "script_macros.hpp"
  2. /*
  3. File: functions.sqf
  4. Author: Bryan "Tonic" Boardwine
  5.  
  6. Description: They are functions.
  7. */
  8.  
  9. publicVariable "TON_fnc_terrainSort";
  10.  
  11. TON_fnc_index =
  12. compileFinal "
  13. private [""_item"",""_stack""];
  14. _item = _this select 0;
  15. _stack = _this select 1;
  16. _return = -1;
  17.  
  18. {
  19. if (_item in _x) exitWith {
  20. _return = _forEachIndex;
  21. };
  22. } forEach _stack;
  23.  
  24. _return;
  25. ";
  26.  
  27. TON_fnc_player_query =
  28. compileFinal "
  29. private [""_ret""];
  30. _ret = _this select 0;
  31. if (isNull _ret) exitWith {};
  32. if (isNil ""_ret"") exitWith {};
  33.  
  34. [life_atmbank,life_cash,owner player,player,profileNameSteam,getPlayerUID player,playerSide] remoteExecCall [""life_fnc_adminInfo"",_ret];
  35. ";
  36. publicVariable "TON_fnc_player_query";
  37. publicVariable "TON_fnc_index";
  38.  
  39. TON_fnc_isnumber =
  40. compileFinal "
  41. private [""_valid"",""_array""];
  42. _valid = [""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9""];
  43. _array = [_this select 0] call KRON_StrToArray;
  44. _return = true;
  45.  
  46. {
  47. if (!(_x in _valid)) exitWith {
  48. _return = false;
  49. };
  50. } forEach _array;
  51. _return;
  52. ";
  53.  
  54. publicVariable "TON_fnc_isnumber";
  55.  
  56. TON_fnc_clientGangKick =
  57. compileFinal "
  58. private [""_unit"",""_group""];
  59. _unit = _this select 0;
  60. _group = _this select 1;
  61. if (isNil ""_unit"" || isNil ""_group"") exitWith {};
  62. if (player isEqualTo _unit && (group player) == _group) then {
  63. life_my_gang = objNull;
  64. [player] joinSilent (createGroup civilian);
  65. hint localize ""STR_GNOTF_KickOutGang"";
  66. };
  67. ";
  68.  
  69. publicVariable "TON_fnc_clientGangKick";
  70.  
  71. TON_fnc_clientGetKey =
  72. compileFinal "
  73. private [""_vehicle"",""_unit"",""_giver""];
  74. _vehicle = _this select 0;
  75. _unit = _this select 1;
  76. _giver = _this select 2;
  77. if (isNil ""_unit"" || isNil ""_giver"") exitWith {};
  78. if (player isEqualTo _unit && !(_vehicle in life_vehicles)) then {
  79. _name = getText(configFile >> ""CfgVehicles"" >> (typeOf _vehicle) >> ""displayName"");
  80. hint format [localize ""STR_NOTF_gaveKeysFrom"",_giver,_name];
  81. life_vehicles pushBack _vehicle;
  82. [getPlayerUID player,playerSide,_vehicle,1] remoteExecCall [""TON_fnc_keyManagement"",2];
  83. };
  84. ";
  85.  
  86. publicVariable "TON_fnc_clientGetKey";
  87.  
  88. TON_fnc_clientGangLeader =
  89. compileFinal "
  90. private [""_unit"",""_group""];
  91. _unit = _this select 0;
  92. _group = _this select 1;
  93. if (isNil ""_unit"" || isNil ""_group"") exitWith {};
  94. if (player isEqualTo _unit && (group player) == _group) then {
  95. player setRank ""COLONEL"";
  96. _group selectLeader _unit;
  97. hint localize ""STR_GNOTF_GaveTransfer"";
  98. };
  99. ";
  100.  
  101. publicVariable "TON_fnc_clientGangLeader";
  102.  
  103. TON_fnc_clientGangLeft =
  104. compileFinal "
  105. private [""_unit"",""_group""];
  106. _unit = _this select 0;
  107. _group = _this select 1;
  108. if (isNil ""_unit"" || isNil ""_group"") exitWith {};
  109. if (player isEqualTo _unit && (group player) == _group) then {
  110. life_my_gang = objNull;
  111. [player] joinSilent (createGroup civilian);
  112. hint localize ""STR_GNOTF_LeaveGang"";
  113. };
  114. ";
  115.  
  116. publicVariable "TON_fnc_clientGangLeft";
  117.  
  118. //Cell Phone Messaging
  119. /*
  120. -fnc_cell_textmsg
  121. -fnc_cell_textcop
  122. -fnc_cell_textadmin
  123. -fnc_cell_adminmsg
  124. -fnc_cell_adminmsgall
  125. */
  126.  
  127. //To EMS
  128. TON_fnc_cell_emsrequest =
  129. compileFinal "
  130. private [""_msg"",""_to""];
  131. ctrlShow[3022,false];
  132. _msg = ctrlText 3003;
  133. _length = count (toArray(_msg));
  134. if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3022,true];};
  135. _to = ""EMS Units"";
  136. if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3022,true];};
  137.  
  138. [_msg,name player,5,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",independent];
  139. life_med_notrufe pushBack [(name player),(position player),_msg,servertime,"""",player];
  140. publicVariable ""life_med_notrufe"";[] call life_fnc_cellphone;
  141. hint format [localize ""STR_CELLMSG_ToEMS"",_to,_msg];
  142. ctrlShow[3022,true];
  143. ";
  144. //To One Person
  145. TON_fnc_cell_textmsg =
  146. compileFinal "
  147. private [""_msg"",""_to""];
  148. ctrlShow[3015,false];
  149. _msg = ctrlText 3003;
  150.  
  151. _length = count (toArray(_msg));
  152. if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3015,true];};
  153. if (lbCurSel 3004 isEqualTo -1) exitWith {hint localize ""STR_CELLMSG_SelectPerson""; ctrlShow[3015,true];};
  154.  
  155. _to = call compile format [""%1"",(lbData[3004,(lbCurSel 3004)])];
  156. if (isNull _to) exitWith {ctrlShow[3015,true];};
  157. if (isNil ""_to"") exitWith {ctrlShow[3015,true];};
  158. if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3015,true];};
  159.  
  160. [_msg,name player,0] remoteExecCall [""TON_fnc_clientMessage"",_to];
  161. [] call life_fnc_cellphone;
  162. hint format [localize ""STR_CELLMSG_ToPerson"",name _to,_msg];
  163. ctrlShow[3015,true];
  164. ";
  165. //To All Cops
  166. TON_fnc_cell_textcop =
  167. compileFinal "
  168. private [""_msg"",""_to""];
  169. ctrlShow[3016,false];
  170. _msg = ctrlText 3003;
  171. _to = ""The Police"";
  172.  
  173. if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3016,true];};
  174. _length = count (toArray(_msg));
  175. if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3016,true];};
  176.  
  177. [_msg,name player,1,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",-2];
  178. life_cop_notrufe pushBack [(name player),(position player),_msg,servertime,"""", player];
  179. publicVariable ""life_cop_notrufe"";[] call life_fnc_cellphone;
  180. hint format [localize ""STR_CELLMSG_ToPerson"",_to,_msg];
  181. ctrlShow[3016,true];
  182. ";
  183. //To All Admins
  184. TON_fnc_cell_textadmin =
  185. compileFinal "
  186. private [""_msg"",""_to"",""_from""];
  187. ctrlShow[3017,false];
  188. _msg = ctrlText 3003;
  189. _to = ""The Admins"";
  190.  
  191. if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3017,true];};
  192. _length = count (toArray(_msg));
  193. if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3017,true];};
  194.  
  195. [_msg,name player,2,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",-2];
  196. [] call life_fnc_cellphone;
  197. hint format [localize ""STR_CELLMSG_ToPerson"",_to,_msg];
  198. ctrlShow[3017,true];
  199. ";
  200. //Admin To One Person
  201. TON_fnc_cell_adminmsg =
  202. compileFinal "
  203. if (isServer) exitWith {};
  204. if ((call life_adminlevel) < 1) exitWith {hint localize ""STR_CELLMSG_NoAdmin"";};
  205. private [""_msg"",""_to""];
  206. ctrlShow[3020,false];
  207. _msg = ctrlText 3003;
  208. _to = call compile format [""%1"",(lbData[3004,(lbCurSel 3004)])];
  209. if (isNull _to) exitWith {ctrlShow[3020,true];};
  210. if (isNil ""_to"") exitWith {ctrlShow[3020,true];};
  211. if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3020,true];};
  212.  
  213. [_msg,name player,3] remoteExecCall [""TON_fnc_clientMessage"",_to];
  214. [] call life_fnc_cellphone;
  215. hint format [localize ""STR_CELLMSG_AdminToPerson"",name _to,_msg];
  216. ctrlShow[3020,true];
  217. ";
  218.  
  219. TON_fnc_cell_adminmsgall =
  220. compileFinal "
  221. if (isServer) exitWith {};
  222. if ((call life_adminlevel) < 1) exitWith {hint localize ""STR_CELLMSG_NoAdmin"";};
  223. private [""_msg"",""_from""];
  224. ctrlShow[3021,false];
  225. _msg = ctrlText 3003;
  226. if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3021,true];};
  227.  
  228. [_msg,name player,4] remoteExecCall [""TON_fnc_clientMessage"",-2];
  229. [] call life_fnc_cellphone;
  230. hint format [localize ""STR_CELLMSG_AdminToAll"",_msg];
  231. ctrlShow[3021,true];
  232. ";
  233.  
  234. TON_fnc_cell_polizeimsgall = //NEW
  235. compileFinal "
  236. if(isServer) exitWith {};
  237. if((call life_coplevel) < 2) exitWith {hint ""Du bist dazu nicht berechtigt!"";};
  238. private[""_msg"",""_from""];
  239. ctrlShow[3023,false];
  240. _msg = ctrlText 3003;
  241. if(_msg == """") exitWith {hint ""Du musst eine Nachricht eingeben!"";ctrlShow[3023,true];};
  242. [_msg,name player,6] remoteExecCall [""TON_fnc_clientMessage"",-2];
  243. [] call life_fnc_cellphone;
  244. hint format[""gesendete Rundfunknachricht: %1"",_msg];
  245. ctrlShow[3023,true];
  246. ";
  247. publicVariable "TON_fnc_cell_polizeimsgall";
  248. publicVariable "TON_fnc_cell_textmsg";
  249. publicVariable "TON_fnc_cell_textcop";
  250. publicVariable "TON_fnc_cell_textadmin";
  251. publicVariable "TON_fnc_cell_adminmsg";
  252. publicVariable "TON_fnc_cell_adminmsgall";
  253. publicVariable "TON_fnc_cell_emsrequest";
  254. //Client Message
  255. /*
  256. 0 = private message
  257. 1 = police message
  258. 2 = message to admin
  259. 3 = message from admin
  260. 4 = admin message to all
  261. */
  262. TON_fnc_clientMessage =
  263. compileFinal "
  264. if (isServer) exitWith {};
  265. private [""_msg"",""_from"", ""_type""];
  266. _msg = _this select 0;
  267. _from = _this select 1;
  268. _type = _this select 2;
  269. if (_from isEqualTo """") exitWith {};
  270. switch (_type) do {
  271. case 0 : {
  272. private [""_message""];
  273. _message = format ["">>>MESSAGE FROM %1: %2"",_from,_msg];
  274. hint parseText format [""<t color='#FFCC00'><t size='2'><t align='center'>New Message<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>You<br/><t color='#33CC33'>From: <t color='#ffffff'>%1<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%2"",_from,_msg];
  275.  
  276. [""TextMessage"",[format [""You Received A New Private Message From %1"",_from]]] call bis_fnc_showNotification;
  277. systemChat _message;
  278. };
  279.  
  280. case 1 : {
  281. if (side player != west) exitWith {};
  282. private [""_message"",""_loc"",""_unit""];
  283. _loc = _this select 3;
  284. _unit = _this select 4;
  285. _message = format [""--- 911 DISPATCH FROM %1: %2"",_from,_msg];
  286. if (isNil ""_loc"") then {_loc = ""Unknown"";};
  287. hint parseText format [""<t color='#316dff'><t size='2'><t align='center'>New Dispatch<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>All Officers<br/><t color='#33CC33'>From: <t color='#ffffff'>%1<br/><t color='#33CC33'>Coords: <t color='#ffffff'>%2<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%3"",_from,_loc,_msg];
  288.  
  289. [""PoliceDispatch"",[format [""A New Police Report From: %1"",_from]]] call bis_fnc_showNotification;
  290. systemChat _message;
  291. };
  292.  
  293. case 2 : {
  294. if ((call life_adminlevel) < 1) exitWith {};
  295. private [""_message"",""_loc"",""_unit""];
  296. _loc = _this select 3;
  297. _unit = _this select 4;
  298. _message = format [""!!! ADMIN REQUEST FROM %1: %2"",_from,_msg];
  299. if (isNil ""_loc"") then {_loc = ""Unknown"";};
  300. hint parseText format [""<t color='#ffcefe'><t size='2'><t align='center'>Admin Request<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>Admins<br/><t color='#33CC33'>From: <t color='#ffffff'>%1<br/><t color='#33CC33'>Coords: <t color='#ffffff'>%2<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%3"",_from,_loc,_msg];
  301.  
  302. [""AdminDispatch"",[format [""%1 Has Requested An Admin!"",_from]]] call bis_fnc_showNotification;
  303. systemChat _message;
  304. };
  305.  
  306. case 3 : {
  307. private [""_message""];
  308. _message = format [""!!! ADMIN MESSAGE: %1"",_msg];
  309. _admin = format [""Sent by admin: %1"", _from];
  310. hint parseText format [""<t color='#FF0000'><t size='2'><t align='center'>Admin Message<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>You<br/><t color='#33CC33'>From: <t color='#ffffff'>An Admin<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%1"",_msg];
  311.  
  312. [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification;
  313. systemChat _message;
  314. if ((call life_adminlevel) > 0) then {systemChat _admin;};
  315. };
  316.  
  317. case 4 : {
  318. private [""_message"",""_admin""];
  319. _message = format [""!!!ADMIN MESSAGE: %1"",_msg];
  320. _admin = format [""Sent by admin: %1"", _from];
  321. hint parseText format [""<t color='#FF0000'><t size='2'><t align='center'>Admin Message<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>All Players<br/><t color='#33CC33'>From: <t color='#ffffff'>The Admins<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%1"",_msg];
  322.  
  323. [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification;
  324. systemChat _message;
  325. if ((call life_adminlevel) > 0) then {systemChat _admin;};
  326. };
  327.  
  328. case 5: {
  329. if (side player != independent) exitWith {};
  330. private [""_message"",""_loc"",""_unit""];
  331. _loc = _this select 3;
  332. _unit = _this select 4;
  333. _message = format [""!!! EMS REQUEST: %1"",_msg];
  334. hint parseText format [""<t color='#FFCC00'><t size='2'><t align='center'>EMS Request<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>You<br/><t color='#33CC33'>From: <t color='#ffffff'>%1<br/><t color='#33CC33'>Coords: <t color='#ffffff'>%2<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%3"",_from,_loc,_msg];
  335.  
  336. [""TextMessage"",[format [""EMS Request from %1"",_from]]] call bis_fnc_showNotification;
  337.  
  338. case 6 :
  339. {
  340. private[""_message"",""_admin""];
  341. _message = format[""POLIZEI RUNDFUNK: %1"",_msg];
  342. hint parseText format [""<t color='#0000FF'><t size='2'><t align='center'>Polizei Rundfunk<br/><br/><t color='#33CC33'><t align='left'><t size='1'>An: <t color='#ffffff'>Alle Bürger<br/><t color='#33CC33'>Von: <t color='#ffffff'>Polizei Altis<br/><br/><t color='#33CC33'>Mitteilung:<br/><t color='#ffffff'>%1"",_msg];
  343. [""PolizeiRundfunk"",[""Neue Polizei Mitteilung""]] call bis_fnc_showNotification;
  344. systemChat _message;
  345. };
  346. };
  347. };
  348. ";
  349. publicVariable "TON_fnc_clientMessage";
  350.  
  351. TON_fnc_MapMarkersAdmin = compileFinal "
  352. life_markers_Vehicles = [];
  353. life_markers_Players = [];
  354. if (!life_markers) then {
  355. life_markers = true;
  356. hint localize ""STR_ANOTF_MEnabled"";
  357. } else {
  358. life_markers = false;
  359. hint localize ""STR_ANOTF_MDisabled"";
  360. };
  361. for ""_i"" from 0 to 1 step 0 do {
  362. if (!life_markers) exitWith {};
  363. {
  364. if ((vehicle _x isKindOf ""LandVehicle"") || (vehicle _x isKindOf ""Air"") || (vehicle _x isKindOf ""Ship"")) then {
  365. if (count(crew vehicle _x) > 0) then {
  366. {
  367. if (!(_x in life_markers_Vehicles) && (alive _x) && (getPlayerUID _x != """")) then {
  368. private [""_pos"", ""_Markers"", ""_Vehicle""];
  369. _Vehicle = vehicle _x;
  370. _pos = visiblePosition _x;
  371. _Markers = createMarkerLocal[format [""CRW%1%2"", _pos select 0, _pos select 1], [(_pos select 0) + 20, _pos select 1, 0]];
  372. _TypeVehicle = (getText(configFile >> 'CfgVehicles' >> (typeOf vehicle _x) >> 'displayName'));
  373. _Markers setMarkerTextLocal format ['%1---%2---%3m', name _x, _TypeVehicle, round(_x distance player)];
  374. _Markers setMarkerTypeLocal ""mil_dot"";
  375. if (side _x isEqualTo independent) then {
  376. _Markers setMarkerColorLocal (""ColorIndependent"");
  377. };
  378. if (side _x isEqualTo civilian) then {
  379. _Markers setMarkerColorLocal (""ColorCivilian"");
  380. };
  381. if (side _x isEqualTo west) then {
  382. _Markers setMarkerColorLocal (""ColorBLUFOR"");
  383. };
  384. _Markers setMarkerSizeLocal[1, 1];
  385. life_markers_Vehicles pushBack _x;
  386. [_x, _Markers, _Vehicle, _TypeVehicle] spawn {
  387. private [""_PlayersOrVehicles"", ""_Marker"", ""_CrewVehicle""];
  388. _PlayersOrVehicles = _this select 0;
  389. _Marker = _this select 1;
  390. _TypeVehicle = _this select 3;
  391. for ""_i"" from 0 to 1 step 0 do {
  392. if (!life_markers && !(alive _PlayersOrVehicles) && (vehicle _PlayersOrVehicles == _PlayersOrVehicles) && (getPlayerUID _PlayersOrVehicles != """")) exitWith {};
  393. _CrewVehicle = ((crew vehicle _PlayersOrVehicles) find _PlayersOrVehicles);
  394. _Marker setMarkerPosLocal([(visiblePosition _PlayersOrVehicles select 0) + 20, (visiblePosition _PlayersOrVehicles select 1) - (25 + _CrewVehicle * 20), 0]);
  395. _Marker setMarkerTextLocal format ['%1---%2---%3m', name _PlayersOrVehicles, _TypeVehicle, round(_PlayersOrVehicles distance player)];
  396. sleep 0.01;
  397. };
  398. deleteMarkerLocal _Marker;
  399. if (_PlayersOrVehicles in life_markers_Vehicles) then {
  400. life_markers_Vehicles deleteAt (life_markers_Vehicles find _PlayersOrVehicles);
  401. };
  402. true;
  403. };
  404. };
  405. } forEach crew vehicle _x;
  406. };
  407. } else {
  408. if (!(_x in life_markers_Players) && (vehicle _x == _x) && (getPlayerUID _x != """")) then {
  409. private [""_pos"", ""_Markers""];
  410. _pos = visiblePosition _x;
  411. _Markers = createMarkerLocal[format [""PLR%1%2"", _pos select 0, _pos select 1], [(_pos select 0) + 20, _pos select 1, 0]];
  412. _Markers setMarkerTypeLocal ""mil_dot"";
  413. _Markers setMarkerSizeLocal[1, 1];
  414. if (side _x isEqualTo independent) then {
  415. _Markers setMarkerColorLocal (""ColorIndependent"");
  416. };
  417. if (side _x isEqualTo civilian) then {
  418. _Markers setMarkerColorLocal (""ColorCivilian"");
  419. };
  420. if (side _x isEqualTo west) then {
  421. _Markers setMarkerColorLocal (""ColorBLUFOR"");
  422. };
  423. _Markers setMarkerTextLocal format [""%1---%2"", name _x, round(_x distance player)];
  424. if (_x == player) then {
  425. _Markers setMarkerColorLocal ""ColorGreen"";
  426. };
  427. life_markers_Players pushBack _x;
  428. [_x, _Markers] spawn {
  429. private [""_PlayersOrVehicles"", ""_Marker""];
  430. _PlayersOrVehicles = _this select 0;
  431. _Marker = _this select 1;
  432. for ""_i"" from 0 to 1 step 0 do {
  433. if (!life_markers && !(alive _PlayersOrVehicles) && (vehicle _PlayersOrVehicles != _PlayersOrVehicles) && (getPlayerUID _PlayersOrVehicles != """")) exitWith {};
  434. _Marker setMarkerPosLocal([visiblePosition _PlayersOrVehicles select 0, visiblePosition _PlayersOrVehicles select 1, 0]);
  435. _Marker setMarkerTextLocal format [""%1---%2"", name _PlayersOrVehicles, round(_PlayersOrVehicles distance player)];
  436. sleep 0.01;
  437. };
  438. deleteMarkerLocal _Marker;
  439. if (_PlayersOrVehicles in life_markers_Players) then {
  440. life_markers_Players deleteAt (life_markers_Players find _PlayersOrVehicles);
  441. };
  442. true;
  443. };
  444. };
  445. };
  446. } forEach playableUnits;
  447. sleep 0.3;
  448. };
  449. {
  450. _Markers = str _x;
  451. deleteMarkerLocal _Markers;
  452. } forEach playableUnits;
  453. ";
  454.  
  455. publicVariable "TON_fnc_MapMarkersAdmin";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement