Kaynağa Gözat

common files

samp@samp.h0v1n8.nl 4 yıl önce
ebeveyn
işleme
2b94d8e37a
100 değiştirilmiş dosya ile 41655 ekleme ve 172 silme
  1. 1 0
      .gitignore
  2. 91 0
      LICENSE
  3. BIN
      announce
  4. 22 0
      filterscripts/CountDown_FilterScript-master/.gitattributes
  5. 215 0
      filterscripts/CountDown_FilterScript-master/.gitignore
  6. BIN
      filterscripts/CountDown_FilterScript-master/CountDown.amx
  7. 135 0
      filterscripts/CountDown_FilterScript-master/CountDown.pwn
  8. 21 0
      filterscripts/CountDown_FilterScript-master/README.md
  9. 264 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_automasters.inc
  10. 70 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_classgroups.inc
  11. 66 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_funcinc.inc
  12. 63 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_groupfirst.inc
  13. 486 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_grouponce.inc
  14. 67 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_grouprevert.inc
  15. 469 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_groupsecond.inc
  16. 113 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_groupsingle.inc
  17. 105 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_inttest.inc
  18. 103 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_inttest2.inc
  19. 459 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_masteronce.inc
  20. 98 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_nogroups.inc
  21. 174 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_overridemaster.inc
  22. 112 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_shortfunc.inc
  23. 260 0
      filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_version.inc
  24. 222 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_als.inc
  25. 566 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_bintree.inc
  26. 310 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_bit.inc
  27. 1294 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_classes.inc
  28. 59 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_colors.inc
  29. 5173 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_colours.inc
  30. 2252 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_commands.inc
  31. 304 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_debug.inc
  32. 88 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_files.inc
  33. 248 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_flooding.inc
  34. 277 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_groups.inc
  35. 1008 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_hooks.inc
  36. 1165 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_ini.inc
  37. 955 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_iterate.inc
  38. 1524 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_master.inc
  39. 141 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_playerarray.inc
  40. 649 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_scripting.inc
  41. 746 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_stringhash.inc
  42. 2047 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_td.inc
  43. 235 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_testing.inc
  44. 265 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_timers.inc
  45. 403 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_utils.inc
  46. 893 0
      filterscripts/CountDown_FilterScript-master/include/YSI/y_xml.inc
  47. BIN
      filterscripts/ann.amx
  48. 91 0
      filterscripts/dizzy.pwn
  49. BIN
      filterscripts/donator.amx
  50. BIN
      filterscripts/donorMaps.amx
  51. BIN
      filterscripts/helmet.amx
  52. BIN
      filterscripts/hmainterior.amx
  53. BIN
      filterscripts/kebab.amx
  54. BIN
      filterscripts/music.amx
  55. BIN
      filterscripts/objects.amx
  56. BIN
      filterscripts/rp_bk.amx
  57. 198 0
      filterscripts/rp_bk.pwn
  58. BIN
      filterscripts/spraytag.amx
  59. BIN
      filterscripts/test.amx
  60. 22 0
      filterscripts/ulMaps.pwn
  61. BIN
      filterscripts/vspawner.amx
  62. 387 0
      filterscripts/vspawner.pwn
  63. BIN
      filterscripts/weapons.amx
  64. 145 0
      filterscripts/weapons.pwn
  65. BIN
      gamemodes/bare.amx
  66. BIN
      gamemodes/barron.amx
  67. BIN
      gamemodes/grandlarc.amx
  68. 2064 0
      gamemodes/inc/backpack.inc
  69. 7006 0
      gamemodes/inc/server_maps.inc
  70. BIN
      gamemodes/lvdm.amx
  71. BIN
      gamemodes/rivershell.amx
  72. BIN
      gamemodes/sqltest.amx
  73. BIN
      gamemodes/timertest.amx
  74. BIN
      gamemodes/urp.amx
  75. 241 0
      include/gl_common.inc
  76. 166 0
      include/gl_messages.inc
  77. 138 0
      include/gl_spawns.inc
  78. 76 0
      include/vehicleutil.inc
  79. BIN
      log-core2.so
  80. BIN
      pawno/include.rar
  81. 1595 0
      pawno/include/BUD.inc
  82. 695 0
      pawno/include/BustAim.inc
  83. 435 0
      pawno/include/DialogCenter.inc
  84. 154 85
      pawno/include/Dini.inc
  85. 3 0
      pawno/include/DynamicEnums.inc
  86. 62 0
      pawno/include/GPD.inc
  87. 0 0
      pawno/include/New Text Document.txt
  88. 374 0
      pawno/include/OPA.inc
  89. 121 0
      pawno/include/OPJV.inc
  90. 169 49
      pawno/include/OPSP.inc
  91. 143 0
      pawno/include/Pawn.CMD.inc
  92. 65 0
      pawno/include/PlayerToPlayer.inc
  93. 975 0
      pawno/include/S32_Business.inc
  94. 255 0
      pawno/include/SII.inc
  95. 38 38
      pawno/include/SKY.inc
  96. 112 0
      pawno/include/VehicleMatrix.inc
  97. 177 0
      pawno/include/VeronaMall.inc
  98. 463 0
      pawno/include/YSF.inc
  99. 1022 0
      pawno/include/YSI.inc
  100. 45 0
      pawno/include/YSI/YSI/extra/y_extra_languages.inc

+ 1 - 0
.gitignore

@@ -4,3 +4,4 @@ sql_log.txt
 nohup.out
 server.cfg
 crashinfo.txt
+scriptfiles/mysql_error.txt

+ 91 - 0
LICENSE

@@ -0,0 +1,91 @@
+------------------------------------------------------------------------------------
+
+The SA-MP modification for Grand Theft Auto: San Andreas (r) is a software project
+aimed at extending the functionality of the Grand Theft Auto: San Andreas (r)
+software for Microsoft Windows (r).
+
+------------------------------------------------------------------------------------
+
+SA-MP CLIENT AND SERVER SOFTWARE LICENSE AGREEMENT AND ATTRIBUTIONS
+
+
+---- LICENSE TERMS ----
+
+(a) You must have a valid license to use Grand Theft Auto: San Andreas (r) PC
+in order for this license to be valid.
+
+(b) The software contained herein is provided on an "as-is" basis without
+any form of warranty.
+
+(c) This software may not be exploited for personal, financial or 
+commercial gain.
+
+(d) The author(s) of this software accept no liability for use/misuse of the
+software.
+
+(e) The SA-MP software package may not be distributed, sold, rented or
+leased, without written permission of the software author(s).
+
+(f) You may not create or distribute derivative works of the software or files
+contained within the package.
+
+(g) You may not use this software for any illegal purposes.
+
+(h) The author(s) of this software retain the right to modify/revoke this license
+at any time under any conditions seen appropriate by the author(s).
+
+(i) Ideas expressed in this software by way of coding or configuration are
+property of SA-MP.com.
+
+
+------------------------------------------------------------------------------------
+
+(c) 2005-2010 SA-MP.com team.
+
+The SA-MP.com team is not affiliated with Rockstar Games, Rockstar North or 
+Take-Two Interactive Software Inc.
+
+Grand Theft Auto and Grand Theft Auto: San Andreas are registered trademarks of
+Take-Two Interactive Software Inc.
+
+------------------------------------------------------------------------------------
+
+
+---- ATTRIBUTIONS ----
+
+- This software makes use of the RakNet networking library (c) 2003 Kevin Jenkins
+- This software makes use of the Pawn language (c) ITB CompuPhase, 1997-2005
+- This software makes use of the ttmath library (c) 2006-2009, Tomasz Sowa
+
+*** ttmath LIBRARY LICENSE ***
+
+ Copyright (c) 2006-2009, Tomasz Sowa
+  All rights reserved.
+  
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+  
+    Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the following disclaimer.
+     
+    Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+     
+    Neither the name Tomasz Sowa nor the names of contributors to this
+     project may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+  THE POSSIBILITY OF SUCH DAMAGE.
+
+------------------------------------------------------------------------------------

BIN
announce


+ 22 - 0
filterscripts/CountDown_FilterScript-master/.gitattributes

@@ -0,0 +1,22 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs     diff=csharp
+*.sln    merge=union
+*.csproj merge=union
+*.vbproj merge=union
+*.fsproj merge=union
+*.dbproj merge=union
+
+# Standard to msysgit
+*.doc	 diff=astextplain
+*.DOC	 diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot  diff=astextplain
+*.DOT  diff=astextplain
+*.pdf  diff=astextplain
+*.PDF	 diff=astextplain
+*.rtf	 diff=astextplain
+*.RTF	 diff=astextplain

+ 215 - 0
filterscripts/CountDown_FilterScript-master/.gitignore

@@ -0,0 +1,215 @@
+#################
+## Eclipse
+#################
+
+*.pydevproject
+.project
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+
+#################
+## Visual Studio
+#################
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+*.pubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+#############
+## Windows detritus
+#############
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac crap
+.DS_Store
+
+
+#############
+## Python
+#############
+
+*.py[co]
+
+# Packages
+*.egg
+*.egg-info
+dist/
+build/
+eggs/
+parts/
+var/
+sdist/
+develop-eggs/
+.installed.cfg
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+.coverage
+.tox
+
+#Translations
+*.mo
+
+#Mr Developer
+.mr.developer.cfg

BIN
filterscripts/CountDown_FilterScript-master/CountDown.amx


+ 135 - 0
filterscripts/CountDown_FilterScript-master/CountDown.pwn

@@ -0,0 +1,135 @@
+/*
+
+		   Copyright [2011] [Anthony_prince aka Archer]
+
+		   Licensed under the Apache License, Version 2.0 (the "License");
+		   you may not use this file except in compliance with the License.
+		   You may obtain a copy of the License at
+
+		       http://www.apache.org/licenses/LICENSE-2.0
+
+		   Unless required by applicable law or agreed to in writing, software
+		   distributed under the License is distributed on an "AS IS" BASIS,
+		   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+		   See the License for the specific language governing permissions and
+		   limitations under the License.
+
+*/
+
+//===================Includes===================================================
+#include <a_samp>
+#include <YSI\y_ini> // thanks to Y_Less
+//===================Macros=====================================================
+#define isnull(%1) ((%1[0] == 0) || (%1[0] == 1 && %1[1] == 0)) //Thanks to Slice
+//===================Config=====================================================
+#define PrintCount // Disable this if you dont wan't to print.
+#define Path "LoadData.ini"
+#define ServerName "This is my server" // This string will show when the countdown finishes
+#define ServerPassword false // This will lock your server until the countdown finishes [true to enable | false to disable]
+#define PasswordName "countdown"
+//==================Strings=====================================================
+//Please don't touch this if you're newbie
+new SrvName[] = ServerName;
+#if ServerPassword == true
+	new SrvPass[] = PasswordName; // Put your password here
+#endif
+#if ServerPassword == false
+	#undef PasswordName
+    new SrvPass[] = " "; // Prevent the error that SrvPass is not defined
+#endif
+new GeneralString[32+26+24];
+// I use "+" beacuse in this way i remember how many strings are here [CountDown, CountDownStop, RconPassword format]
+//==================CountDown Settings==========================================
+new CountDown,
+	_days=1,
+	_hours=0,
+	_minutes=1,
+	_seconds=10
+; // Set the time to CountDown
+
+//==================Callbacks===================================================
+forward OpenCountDown();
+//==============================================================================
+
+public OnFilterScriptInit()
+{
+	print(" CountDown FilterScript Loaded" );
+	if(!isnull(SrvPass) || ServerPassword == true) {
+		format(GeneralString, sizeof(GeneralString), "password %s", SrvPass);
+		SendRconCommand(GeneralString);
+	}
+	else {
+	    SendRconCommand("password 0");
+	}
+	CountDown=SetTimer("OpenCountDown",1000,true);
+	return 1;
+}
+
+public OnFilterScriptExit()
+{
+	print(" CountDown FilterScript UnLoaded ");
+	return 1;
+}
+
+public OpenCountDown()
+{
+    if(fexist(Path)) INI_ParseFile(Path, "%s", .bFileFirst = true);
+	_seconds--;
+	switch(_seconds)
+	{
+		case -1:
+		_seconds = 59,
+		_minutes--;
+	}
+	switch(_minutes)
+	{
+	    case -1:
+		_minutes = 59,
+		_hours--;
+	}
+	switch(_hours)
+	{
+	    case -1:
+	    _hours = 23,
+		_days--;
+	}
+	SaveData();
+	format(GeneralString, sizeof(GeneralString), "hostname Opens In %01dd:%02dh:%02dm:%02ds",_days,_hours,_minutes,_seconds);
+	SendRconCommand(GeneralString);
+	#if defined PrintCount
+	    printf(GeneralString);
+	#endif
+	if(!_days&&!_hours&&!_minutes&&!_seconds) CountDownStop();
+}
+
+stock SaveData()
+{
+	new INI:File = INI_Open(Path);
+	//INI_SetTag(File,"CountDown");
+	INI_WriteInt(File, "Days", _days);
+	INI_WriteInt(File, "Hours", _hours);
+	INI_WriteInt(File, "Minutes", _minutes);
+	INI_WriteInt(File, "Seconds", _seconds);
+	INI_Close(File);
+	return 1;
+}
+
+forward LoadData(name[], value[]);
+public LoadData(name[],value[])
+{
+    INI_Int("Days", _days);
+    INI_Int("Hours", _hours);
+    INI_Int("Minutes", _minutes);
+    INI_Int("Seconds", _seconds);
+	return 1;
+}
+
+stock CountDownStop()
+{
+	format(GeneralString, sizeof(GeneralString), "hostname %s ", SrvName); // Here will show your Original Server Name after the count.
+	SendRconCommand(GeneralString); // Send the RCON command
+	SendRconCommand("password 0");  // This will open the server
+	print(" Server Opened " ); // I use print instead of a string as above i prefer to have less lag.
+	KillTimer(CountDown); // Stops the timer
+	fremove(Path);
+}

+ 21 - 0
filterscripts/CountDown_FilterScript-master/README.md

@@ -0,0 +1,21 @@
+CountDown FilterScript
+======================
+
+Filterscript that help to lock your server with a countdown timer. Once the timer experices it will unlock automaticaly
+
+
+Installation
+
+1. Download the package.
+2. Extract the files and put them in "FilterScript" folder.
+3. Open server.cfg and add CountDown in the "filterscript" line.
+4. Save it!
+5. (version 2.x.x+) Copy the folder YSI into your pawno/include directory
+Then Enjoy!
+
+(c)Anthony_Prince aka TheArcher aka SaM^
+
+Credits:  Dracon-Blue for his DINI
+	  DOuble-Of-Seven for his INI system
+          Y_Less for his INI Save/Load 
+

+ 264 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_automasters.inc

@@ -0,0 +1,264 @@
+/*----------------------------------------------------------------------------*-
+					===============================
+					Y Sever Includes - Master Auto
+					===============================
+Description:
+	Attempts to figure out from what library the current instance of the master
+	system was included from.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.1
+Changelog:
+	06/08/10:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+	Hooks:
+		-
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-.
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+Natives:
+	-
+-*----------------------------------------------------------------------------*/
+
+// =============================================================================
+// =============================================================================
+// 
+//   MAKE SURE THE RECALL CODE IN y_groups HAS THE RIGHT NUMBERS - THATS GIVEN
+//   ODD ERRORS TWICE NOW!!!
+// 
+// =============================================================================
+// =============================================================================
+
+#undef _inc_y_automasters
+
+#define _YSIM_USED_AUTO
+
+// Commands are set as master number 25
+#if defined _inc_y_commands
+	#if !defined _YCM_z@ // z is letter 25
+		#define MASTER                  25
+		#endinput
+	#endif
+#endif
+
+// Groups are set as master number 24
+#if defined _inc_y_grouponce
+	#if !defined _YCM_y@ // y is letter 24
+		#define MASTER                  24
+		#endinput
+	#endif
+#endif
+
+// Reserve this number (only in terms of not using it).
+//#define DEFAULT_USER_COMMAND_MASTER   23
+
+// Classes are set as master number 22
+#if defined _inc_y_classes
+	#if !defined _YCM_w@ // w is letter 22
+		#define MASTER                  22
+		#endinput
+	#endif
+#endif
+
+// Dialogs are set as master number 23
+/*#if defined _inc_y_dialog
+	#if !defined _YCM_x@ // x is letter 23
+		#define MASTER                  23
+		#endinput
+	#endif
+#endif*/
+
+// Languages are set as master number 27
+/*#if defined _inc_y_languages
+	#if !defined _YCM_w@ // B is letter 27
+		#define MASTER                  22
+		#endinput
+	#endif
+#endif
+
+// Players are set as master number 28
+#if defined _inc_y_player
+	#if !defined _YCM_v@ // C is letter 28
+		#define MASTER                  21
+		#endinput
+	#endif
+#endif
+
+// The help system is set as master number 29
+#if defined _inc_y_help
+	#if !defined _YCM_u@ // D is letter 29
+		#define MASTER                  20
+		#endinput
+	#endif
+#endif*/
+
+#if defined _YSI_ALLOW_INTERNAL_TEST
+	#if defined _inc_y_inttest
+		#if !defined _YCM_j@
+			#define MASTER              9
+			#endinput
+		#endif
+	#endif
+	#if defined _inc_y_inttest2
+		#if !defined _YCM_i@
+			#define MASTER              8
+			#endinput
+		#endif
+	#endif
+#endif
+
+#undef _YSIM_USED_AUTO
+
+// We can't have an auto-incrementing master number as there's no way to
+// guarantee that two scripts using the same library will have the same master
+// number for that library!
+/*#if defined _YCM_z@
+	#error "Max masters exceeded."
+#endif
+#if defined _YCM_y@
+	#define MASTER                      25
+#endif
+#if defined _YCM_x@
+	#define MASTER                      24
+#endif
+#if defined _YCM_w@
+	#define MASTER                      23
+#endif
+#if defined _YCM_v@
+	#define MASTER                      22
+#endif
+#if defined _YCM_u@
+	#define MASTER                      21
+#endif
+#if defined _YCM_t@
+	#define MASTER                      20
+#endif
+#if defined _YCM_s@
+	#define MASTER                      19
+#endif
+#if defined _YCM_r@
+	#define MASTER                      18
+#endif
+#if defined _YCM_q@
+	#define MASTER                      17
+#endif
+#if defined _YCM_p@
+	#define MASTER                      16
+#endif
+#if defined _YCM_o@
+	#define MASTER                      15
+#endif
+#if defined _YCM_n@
+	#define MASTER                      14
+#endif
+#if defined _YCM_m@
+	#define MASTER                      13
+#endif
+#if defined _YCM_l@
+	#define MASTER                      12
+#endif
+#if defined _YCM_k@
+	#define MASTER                      11
+#endif
+#if defined _YCM_j@
+	#define MASTER                      10
+#endif
+#if defined _YCM_i@
+	#define MASTER                      9
+#endif
+#if defined _YCM_h@
+	#define MASTER                      8
+#endif
+#if defined _YCM_g@
+	#define MASTER                      7
+#endif
+#if defined _YCM_f@
+	#define MASTER                      6
+#endif
+#if defined _YCM_e@
+	#define MASTER                      5
+#endif
+#if defined _YCM_d@
+	#define MASTER                      4
+#endif
+#if defined _YCM_c@
+	#define MASTER                      3
+#endif
+#if defined _YCM_b@
+	#define MASTER                      2
+#endif
+#if defined _YCM_a@
+	#define MASTER                      1
+#endif
+#define MASTER                          0*/

+ 70 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_classgroups.inc

@@ -0,0 +1,70 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_classes - Advanced class selection! 
+					=======================================
+Description:
+	Allows for advanced class selection options such as skins only certain
+	people can see and actually removing skins from class selection.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+stock Class_ResolveGroups(class, Group:forgroup, bool:cp) <YSI_has_groups:y>
+{
+	P:3("Class_AddClass<y>: call Resolve %d %d %d", class, forgroup, cp);
+	if (cp)
+	{
+		// Here "class" means "playerid".
+		Group_SetPlayer(forgroup, class, true);
+	}
+	else
+	{
+		// Only enable this class for one group.
+		Group_UpdateAllClass(class, false);
+		Group_SetClass(forgroup, class, true);
+	}
+}

+ 66 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_funcinc.inc

@@ -0,0 +1,66 @@
+/*----------------------------------------------------------------------------*-
+					===============================
+					 y_funcinc - Fix SYSREQ.C bugs
+					===============================
+Description:
+	Calls functions which are used in SYSREQ.C calls before they are used.  The
+	compiler crashes if the functions are not used in an included function
+	before being used in a SYSREQ.C call as the function is not in the native
+	functions table.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+forward _@_y_funcinc_@_();
+public _@_y_funcinc_@_()
+{
+	// This function calls any functions used in assembly code in YSI to ensure
+	// that they are included in the native function table.
+	printf("");
+	new _funcinc_a[1 char];
+	strunpack(_funcinc_a, "");
+}

+ 63 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_groupfirst.inc

@@ -0,0 +1,63 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#undef _inc_y_groupfirst
+
+//RC@v:_GROUP_CREATE(group)
+//public _GROUP_CREATE(group)
+_GROUP_OPC_PUBLIC(playerid)
+{
+	P:3(#_GROUP_OPC_PUBLIC " called");
+	// This is actually the first half of a function...

+ 486 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_grouponce.inc

@@ -0,0 +1,486 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <a_samp>
+
+#include <YSI\y_master>
+#include <YSI\y_bit>
+
+#include <YSI\y_debug>
+
+//#include <YSI\y_hooks>
+#include <YSI\y_scripting>
+
+#include <YSI\y_iterate>
+
+#define ALS_PREFIX Group
+
+#include <YSI\y_als>
+
+//#define _YSI_HAS_GROUP_SYSTEM
+
+//#define _GROUP_MAKE_NAME<%0...%1> %0_%1
+// Dummy value
+//#define _GROUP_MAKE_LIMIT               0
+
+// Dummy values.
+#undef _GROUP_MAKE_NAME
+#undef _GROUP_MAKE_LIMIT
+#define _GROUP_MAKE_NAME<%0...%1>       %0_%1
+#define _GROUP_MAKE_LIMIT               0
+
+// Example:
+//  #define _GROUP_MAKE_NAME<%0...%1> %0Checkpoint%1
+/*#if !defined _GROUP_MAKE_NAME
+	#error Please define _GROUP_MAKE_NAME before including y_groupsone.
+#endif
+#if !defined _GROUP_MAKE_LIMIT
+	#error Please define _GROUP_MAKE_LIMIT before including y_groupsone.
+#endif*/
+
+// Define local variable names.  This will go in the single call file.
+//#define _GROUP_LOCAL_NAME               _GROUP_MAKE_NAME<i...>
+#define _GROUP_GROUP_NAME               _GROUP_MAKE_NAME<YSI_gs_Group...Data>
+#define _GROUP_GLOBAL_NAME              _GROUP_MAKE_NAME<YSI_gs_GroupGlobal...>
+
+#define _GROUP_SET_PLAYER               _GROUP_MAKE_NAME<..._SetPlayer>
+
+/*#define _GROUP_UPDATE                   _GROUP_MAKE_NAME<Group_UpdatePlayer...>
+#define _GROUP_UPDATE_ALL               _GROUP_MAKE_NAME<Group_UpdateAll...>
+
+#define _GROUP_GROUP_FUNC               _GROUP_MAKE_NAME<Group_Set...>
+#define _GROUP_GLOBAL_FUNC              _GROUP_MAKE_NAME<Group_SetGlobal...>
+
+#define _GROUP_GLOBAL_DEF               _GROUP_MAKE_NAME<Group_SetGlobal...Default>
+#define _GROUP_GROUP_DEF                _GROUP_MAKE_NAME<Group_Set...Default>
+
+#define _GROUP_ON_PLAYER_CONNECT        _GROUP_MAKE_NAME<@yH_PlayerConnect_...@yG>
+
+#define _GROUP_DEFAULTS                 _GROUP_MAKE_NAME<Group_...Defaults>
+
+#define _GROUP_INIT                     _GROUP_MAKE_NAME<Group_...Init>*/
+
+#define _GROUP_CREATE                   _GROUP_MAKE_NAME<@yG_Init...>
+#define _GROUP_UPDATE_PLAYER            _GROUP_MAKE_NAME<@yG_Upd...>
+//#define _GROUP_ON_PLAYER_CONNECT        _GROUP_MAKE_NAME<@yG_..._PlayerConnect>
+//#define _GROUP_ON_PLAYER_CONNECT        RH:_GROUP_MAKE_NAME<...@yG_OnPlayerConnect>
+
+#define _GROUP_OPC_OTHER_CALLED   _GROUP_MAKE_NAME<_@yGPlayerConnect_...>
+#define _GROUP_OPC_IS_CALLED   _GROUP_MAKE_NAME<_yG@PlayerConnect_...>
+#define _GROUP_OPC_PUBLIC      _GROUP_MAKE_NAME<@yG_PlayerConnect_...>
+
+#if !defined MAX_GROUP_NAME
+	#define MAX_GROUP_NAME              (24)
+#endif
+
+#if !defined MAX_GROUPS
+	// 1 less than a nice number (with good reason).
+	#define MAX_GROUPS                  (Group:127)
+#endif
+
+enum e_GROUP_FLAGS (<<= 1)
+{
+	e_GROUP_FLAGS_GANG = 1,
+	// I can't remember why I had this!
+	//e_GROUP_FLAGS_CHAT,
+	e_GROUP_FLAGS_ACTIVE,
+	e_GROUP_FLAGS_COLOR = 0xFFFFFF00
+}
+
+enum E_GROUP_DATA
+{
+	E_GROUP_DATA_NAME[MAX_GROUP_NAME char],
+	E_GROUP_DATA_HASH,
+	e_GROUP_FLAGS:E_GROUP_DATA_FLAGS,
+}
+
+stock
+	BitArray:YSI_gGroupPlayers[MAX_GROUPS]<MAX_PLAYERS>,
+	YSI_gGroupData[MAX_GROUPS][E_GROUP_DATA];
+
+ALS_DATA<>
+
+#define GROUPS_MAX_LIBRARIES            4
+
+static stock
+	YSI_g_sNextUpdateFunc[32],
+	YSI_g_sNextInitFunc[32],
+	YSI_g_sGroupCount,
+	bool:YSI_g_sHasOPC = false;
+
+#define _Group_HasPlayer(%0,%1) \
+	Bit_Get(YSI_gGroupPlayers[(%0)], (%1), MAX_PLAYERS)
+
+#define _Group_GetColor(%0) \
+	(_:(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] & e_GROUP_FLAGS_COLOR | e_GROUP_FLAGS:0xAA))
+
+#define _Group_SetColor(%0,%1) \
+	(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] |= e_GROUP_FLAGS:(%1) & e_GROUP_FLAGS_COLOR)
+
+#define _Group_GetGang(%0) \
+	(bool:(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] & e_GROUP_FLAGS_GANG))
+
+#define _Group_LetGang(%0) \
+	(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] |= e_GROUP_FLAGS_GANG)
+
+#define _Group_VetGang(%0) \
+	(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] &= ~e_GROUP_FLAGS_GANG)
+
+#define _Group_IsActive(%0) \
+	(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] & e_GROUP_FLAGS_ACTIVE)
+
+//#define _Group_IsValid(%0) 
+//	(0 <= (%0) < MAX_GROUPS && Group_IsActive(%0))
+
+#define _Group_IsValid(%0) \
+	(Group:0 <= (%0) < MAX_GROUPS && _Group_IsActive(%0))
+
+#define Group_IsActive(%0) \
+	(YSI_gGroupData[GROUP_FIX(%0)][E_GROUP_DATA_FLAGS] & e_GROUP_FLAGS_ACTIVE)
+
+/*#define Group_IsValid(%0) \
+	(GROUP_MASK <= (%0) < (GROUP_MASK + MAX_GROUPS) <=  && Group_IsActive(%0))*/
+
+//#define Group_GetColor(%0) 
+//	(YSI_gGroupData[(%0)][E_GROUP_DATA_FLAGS] & e_GROUP_FLAGS_COLOR | 0xAA);
+//	(0 <= GROUP_FIX(%0) < MAX_GROUPS && Group_IsActive(%0))
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	state YSI_has_groups:y;
+	ALS_DETECT<PlayerDisconnect>
+	ALS_DETECT<PlayerConnect>
+	YSI_g_sHasOPC = funcidx(#_GROUP_OPC_PUBLIC) != -1;
+	P:3(#_GROUP_OPC_PUBLIC " does%s exist", YSI_g_sHasOPC ? ("") : (" not"));
+	P:5("Group_OnScriptInit: OPC = %d", YSI_g_sHasOPC);
+	new
+		a = Scripting_GetPublic(0, YSI_g_sNextUpdateFunc, "@yG_Upd"),
+		idx = Scripting_GetPublic(0, YSI_g_sNextInitFunc, "@yG_Init");
+	if (idx)
+	{
+		CallLocalFunction(YSI_g_sNextInitFunc, "ii", -1, (a << 16) | idx);
+	}
+	CallLocalFunction("Group_OnScriptInit", "");
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit Group_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit Group_OnScriptInit
+#endif
+forward Group_OnScriptInit();
+
+// This needs an OnPlayerConnect hook, but an ALS one - I'll sort that later.
+RA:Group_OnPlayerDisconnect(playerid, reason)
+{
+	new
+		s = Bit_Slot(playerid),
+		Bit:m = ~Bit_Mask(playerid);
+	for (new Group:i; i != MAX_GROUPS; ++i)
+	{
+		// Pre-calculate the slot and mask.
+		YSI_gGroupPlayers[i][s] &= m;
+	}
+	//CallLocalFunction("Group_OnPlayerConnect", "i", playerid);
+	ALS_CALL<PlayerDisconnect>
+}
+
+#if defined _ALS_OnPlayerDisconnect
+	#undef OnPlayerDisconnect
+#else
+	#define _ALS_OnPlayerDisconnect
+#endif
+#define OnPlayerDisconnect Group_OnPlayerDisconnect
+
+ALS_FORWARD<PlayerDisconnect>
+
+// This needs an OnPlayerConnect hook, but an ALS one - I'll sort that later.
+public OnPlayerConnect(playerid)
+{
+	P:3("Group_OnPlayerConnect called");
+	if (YSI_g_sHasOPC) CallLocalFunction(#_GROUP_OPC_PUBLIC, "i", playerid);
+	//CallLocalFunction("Group_OnPlayerConnect", "i", playerid);
+	ALS_CALL<PlayerConnect>
+}
+
+forward _GROUP_OPC_PUBLIC(playerid);
+
+#if defined _ALS_OnPlayerConnect
+	#undef OnPlayerConnect
+#else
+	#define _ALS_OnPlayerConnect
+#endif
+#define OnPlayerConnect Group_OnPlayerConnect
+
+ALS_FORWARD<PlayerConnect>
+
+RF@vp:Group_SetPlayer[iii](Group:g,p,bool:s)<g,p,s>
+{
+	//g &= ~GROUP_MASK;
+	GROUP_FIX(g);
+	if (_Group_IsValid(g) && 0 <= p < MAX_PLAYERS)
+	{
+		Bit_Set(YSI_gGroupPlayers[g], p, s, bits<MAX_PLAYERS>);
+		P:4("Group_SetPlayer: %d %d", g, _:YSI_gGroupPlayers[g][0]);
+		if (YSI_g_sNextUpdateFunc[0])
+		{
+			CallLocalFunction(YSI_g_sNextUpdateFunc, "iii", p, g, s);
+		}
+	}
+}
+
+RF@pt:bool:Group_GetPlayer[ii](Group:g,p)<g,p>
+{
+	GROUP_FIX(g);
+	if (_Group_IsValid(g) && 0 <= p < MAX_PLAYERS)
+	{
+		return Bit_Get(YSI_gGroupPlayers[g], p);
+		//Bit_Set(YSI_gGroupPlayers[g], p, s, bits<MAX_PLAYERS>);
+	}
+	return false;
+}
+
+RF@vp:Group_SetName[is](Group:g,n[])<g,n>
+{
+	GROUP_FIX(g);
+	if (_Group_IsValid(g))
+	{
+		strpack(YSI_gGroupData[g][E_GROUP_DATA_NAME], n, MAX_GROUP_NAME char);
+	}
+}
+
+RS@p:Group_GetName[i](Group:g)<g>
+{
+	new
+		ret[YSI_MAX_STRING];
+	GROUP_FIX(g);
+	if (_Group_IsValid(g))
+	{
+		//return Bit_Get(YSI_gGroupPlayers[g], p);
+		//Bit_Set(YSI_gGroupPlayers[g], p, s, bits<MAX_PLAYERS>);
+		strunpack(ret, YSI_gGroupData[g][E_GROUP_DATA_NAME], YSI_MAX_STRING);
+	}
+	return ret;
+}
+
+RF@vp:Group_SetGang[is](Group:g,bool:n)<g,n>
+{
+	GROUP_FIX(g);
+	if (_Group_IsValid(g))
+	{
+		if (n)
+		{
+			_Group_LetGang(g);
+		}
+		else
+		{
+			_Group_VetGang(g);
+		}
+	}
+}
+
+RF@pt:bool:Group_GetGang[i](Group:g)<g>
+{
+	GROUP_FIX(g);
+	if (_Group_IsValid(g))
+	{
+		return _Group_GetGang(g);
+	}
+	return false;
+}
+
+RF@vp:Group_SetColour[ii](Group:g,c)<g,c>
+{
+	GROUP_FIX(g);
+	if (_Group_IsValid(g))
+	{
+		_Group_SetColor(g, c);
+	}
+}
+
+RF@p:Group_GetColour[i](Group:g)<g>
+{
+	GROUP_FIX(g);
+	if (_Group_IsValid(g))
+	{
+		return _Group_GetColor(g);
+		//Bit_Set(YSI_gGroupPlayers[g], p, s, bits<MAX_PLAYERS>);
+	}
+	return 0;
+}
+
+#define Group_SetColor Group_SetColour
+#define Group_GetColor Group_GetColour
+
+RF@pt:Group:Group_Create[s](name[])<name>
+{
+	P:3("Group_Create called in %d", _@);
+	new
+		Group:i;
+	while (i != MAX_GROUPS && _Group_IsActive(i))
+	{
+		++i;
+	}
+	if (i == MAX_GROUPS) return GROUP_GLOBAL;
+	strpack(YSI_gGroupData[i][E_GROUP_DATA_NAME], name, MAX_GROUP_NAME char);
+	++YSI_g_sGroupCount;
+	YSI_gGroupData[i][E_GROUP_DATA_FLAGS] = e_GROUP_FLAGS_ACTIVE;
+	// Now initialise all the little bits.  CallREMOTEFunction to get ALL
+	// scripts which may control part of the group system.
+	//CallRemoteFunction(#_GROUP_CREATE, "ii", _:i, -1);
+	if (YSI_g_sNextInitFunc[0])
+	{
+		CallLocalFunction(YSI_g_sNextInitFunc, "ii", _:i, -1);
+	}
+	return i | GROUP_MASK;
+}
+
+//forward _GROUP_CREATE(group);
+
+stock YSI_gSGroup(Group:group)
+{
+	GROUP_FIX(group);
+	if (!_Group_IsValid(group))
+	{
+		return -1;
+	}
+	static const
+		scDeBruijn[] =
+			{
+				0,  1,  28, 2,  29, 14, 24, 3,  30, 22, 20, 15, 25, 17, 4,  8,
+				31, 27, 13, 23, 21, 19, 16, 7,  26, 12, 18, 6,  11, 5,  10, 9
+			};
+	new
+		cur;
+	for (new i = 0; i != bits<MAX_PLAYERS>; ++i)
+	{
+		if ((cur = _:YSI_gGroupPlayers[group][i]))
+		{
+			// http://supertech.csail.mit.edu/papers/debruijn.pdf
+			return (i * cellbits) + scDeBruijn[((cur & -cur) * 0x077CB531) >>> 27];
+		}
+	}
+	return -1;
+}
+
+stock YSI_gAGroupFunc(Group:group, start)
+{
+	GROUP_FIX(group);
+	if (!_Group_IsValid(group))
+	{
+		return -1;
+	}
+	static const
+		scDeBruijn[] =
+			{
+				0,  1,  28, 2,  29, 14, 24, 3,  30, 22, 20, 15, 25, 17, 4,  8,
+				31, 27, 13, 23, 21, 19, 16, 7,  26, 12, 18, 6,  11, 5,  10, 9
+			};
+	new
+		cur,
+		i = Bit_Slot(start);
+	if ((cur = (_:YSI_gGroupPlayers[group][i] & (~((1 << (start + 1)) - 1)))))
+	{
+		return (i * cellbits) + scDeBruijn[((cur & -cur) * 0x077CB531) >>> 27];
+	}
+	++i;
+	while (i != bits<MAX_PLAYERS>)
+	{
+		if ((cur = _:YSI_gGroupPlayers[group][i]))
+		{
+			return (i * cellbits) + scDeBruijn[((cur & -cur) * 0x077CB531) >>> 27];
+		}
+		++i;
+	}
+	return -1;
+}
+
+/*stock Group:operator-(Group:group, Group:playerid)
+{
+	Group_SetPlayer(group, playerid, false);
+	return group;
+}
+
+stock Group:operator+(Group:group, playerid)
+{
+	Group_SetPlayer(group, playerid, false);
+	return group;
+}
+
+stock Group:operator==(Group:group, playerid)
+{
+	return Group_GetPlayer(group, playerid);
+}*/
+
+#define YSI_gAGroup(%0)[%1] YSI_gAGroupFunc(%0,%1)
+
+#define _YSIM_RESET_USER
+#include <YSI\y_master>
+
+#undef ALS_PREFIX

+ 67 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_grouprevert.inc

@@ -0,0 +1,67 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#undef _inc_y_grouprevert
+
+#define _YSIM_RESET_USER
+#include <YSI\y_master>
+
+#if defined GROUP_LIBRARY_NAME && defined GROUP_LIBRARY_SIZE
+//	#include <YSI\internal\y_groupsingle>
+	#undef _GROUP_MAKE_NAME
+	#undef _GROUP_MAKE_LIMIT
+	#define _GROUP_MAKE_NAME        GROUP_LIBRARY_NAME
+	#define _GROUP_MAKE_LIMIT       GROUP_LIBRARY_SIZE
+#endif

+ 469 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_groupsecond.inc

@@ -0,0 +1,469 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+	
+	#undef _inc_y_groupsecond
+	
+	// This is actually the second half of a function!
+	//_GROUP_INIT(group);
+	//_GROUP_MAKE_NAME<Group_...Init>(group);
+	#if YSIM_HAS_MASTER
+		#if YSIM_IS_CLIENT
+		#else
+			#if YSIM_IS_SERVER
+				_GROUP_OPC_IS_CALLED(playerid);
+			#else
+				#if YSIM_IS_STUB
+					#error y_groupsecond called with YSIM_IS_STUB.
+				#else
+					_GROUP_OPC_IS_CALLED(playerid);
+				#endif
+			#endif
+		#endif
+	#else
+		_GROUP_OPC_IS_CALLED(playerid);
+	#endif
+	// This is also NOT a master controlled function as the group master may be
+	// different to a system using the group system's master.
+	#pragma tabsize 4
+	_GROUP_OPC_OTHER_CALLED(playerid);
+}
+
+forward _GROUP_OPC_PUBLIC(playerid);
+
+// This file contains generic code for setting all the stats to do with a single
+// element type.  Groups can be defined for any element (classes, objects etc)
+// and each one will specialise this file to give different functions.
+
+#if !defined _GROUP_MAKE_NAME
+	#error Please define _GROUP_MAKE_NAME before including y_groups.
+#endif
+
+#if !defined _GROUP_MAKE_LIMIT
+	#error Please define _GROUP_MAKE_LIMIT before including y_groups.
+#endif
+
+// Start of the multi-use file.
+static stock
+	BitArray:_GROUP_GLOBAL_NAME<_GROUP_MAKE_LIMIT>,
+	BitArray:_GROUP_GROUP_NAME[MAX_GROUPS]<_GROUP_MAKE_LIMIT>,
+	BitArray:_GROUP_DEFAULTS<_:MAX_GROUPS + 1>,
+	YSI_g_sNextUpdateFunc[32],
+	YSI_g_sNextInitFunc[32],
+	bool:YSI_g_sHasOPC = false;
+
+// Initialise permissions for a new player based on the default settings.  This
+// is one of the few places where direct master system intervention is required
+// due to the horrible combination of function naming macros.
+// TODO: Uncomment when the better y_hooks library is integrated.
+
+_GROUP_OPC_OTHER_CALLED(playerid)
+{
+	if (YSI_g_sHasOPC) CallLocalFunction(#_GROUP_OPC_PUBLIC, "i", playerid);
+}
+
+#if YSIM_CLOUD
+	_GROUP_OPC_IS_CALLED(playerid)<>
+	{
+		#pragma unused playerid
+	}
+	
+	_GROUP_OPC_IS_CALLED(playerid)<_YCM:y>
+#else
+	stock _GROUP_OPC_IS_CALLED(playerid)
+#endif
+{
+	P:3(#_GROUP_OPC_IS_CALLED " called in %d", _@);
+	for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+	{
+		// Set and unset all the global items.
+		_GROUP_SET_PLAYER(j, playerid, Bit_Get(_GROUP_GLOBAL_NAME, j));
+		P:5(#_GROUP_SET_PLAYER ": Set %d %d %d", j, playerid, Bit_Get(_GROUP_GLOBAL_NAME, j));
+	}
+}
+
+#if YSIM_HAS_MASTER
+	#if YSIM_IS_CLIENT
+		#define __GF<%0...%1>[%2](%3)<%4> stock _GROUP_MAKE_NAME<%0...%1>(%3)U@(8,YSIM_CALLER,_@),W@(#@#_GROUP_MAKE_NAME<%0...%1>,#%2#x,%4),U@(8,YSIM_CALLER,-1);stock _GROUP_MAKE_NAME<_%0...%1>(%3)
+	#else
+		#if YSIM_IS_SERVER
+			#define __GF<%0...%1>[%2](%3)<%4> forward _GROUP_MAKE_NAME<@%0...%1>(%3);_GROUP_MAKE_NAME<@%0...%1>(%3)_GROUP_MAKE_NAME<%0...%1>(%4);_GROUP_MAKE_NAME<%0...%1>(%3)
+		#else
+			#if YSIM_IS_STUB
+				#error y_groupsecond called with YSIM_IS_STUB.
+			#else
+				#define __GF<%0...%1>[%2](%3)<%4> forward _GROUP_MAKE_NAME<@%0...%1>(%3);_GROUP_MAKE_NAME<@%0...%1>(%3)<>{}_GROUP_MAKE_NAME<@%0...%1>(%3)<_YCM:y>_GROUP_MAKE_NAME<%0...%1>(%4);_GROUP_MAKE_NAME<%0...%1>(%3)<>Y@(),W@(#@#_GROUP_MAKE_NAME<%0...%1>,#%2#x,%4),T@();_GROUP_MAKE_NAME<%0...%1>(%3)<_YCM:y>
+			#endif
+		#endif
+	#endif
+#else
+	#define __GF<%0...%1>[%2](%3)<%4> stock _GROUP_MAKE_NAME<%0...%1>(%3)
+#endif
+
+_GROUP_CREATE(group,idx);
+
+#if YSIM_HAS_MASTER
+	#if YSIM_IS_CLIENT
+		// Note: not the same.
+		_GROUP_MAKE_NAME<_yG@Init...>(group,idx)
+	#else
+		#if YSIM_IS_SERVER
+			_GROUP_CREATE(group,idx)
+		#else
+			#if !YSIM_IS_STUB
+				_GROUP_CREATE(group,idx)<>
+				{
+					P:3(#_GROUP_MAKE_NAME<@yG_Init...> " called in %d", _@);
+					if (group == -1)
+					{
+						YSI_g_sHasOPC = funcidx(#_GROUP_OPC_PUBLIC) != -1;
+						P:3(#_GROUP_OPC_PUBLIC " does%s exist", YSI_g_sHasOPC ? ("") : ("not"));
+						new
+							a = Scripting_GetPublic(idx >>> 16, YSI_g_sNextUpdateFunc, "@yG_Upd"),
+							b = Scripting_GetPublic(idx & 0xFFFF, YSI_g_sNextInitFunc, "@yG_Init");
+						if (b)
+						{
+							CallLocalFunction(YSI_g_sNextInitFunc, "ii", -1, (a << 16) | b);
+						}
+					}
+				}
+				
+				_GROUP_CREATE(group,idx)<_YCM:y>
+			#endif
+		#endif
+	#endif
+#else
+	_GROUP_CREATE(group,idx)
+#endif
+{
+	P:3(#_GROUP_MAKE_NAME<@yG_Init...> " called in %d", _@);
+	if (group == -1)
+	{
+		Bit_SetAll(_GROUP_GLOBAL_NAME, true, bits<_GROUP_MAKE_LIMIT>);
+		Bit_Let(_GROUP_DEFAULTS, _:MAX_GROUPS);
+		// Initialise the next item
+		YSI_g_sHasOPC = funcidx(#_GROUP_OPC_PUBLIC) != -1;
+		P:3(#_GROUP_OPC_PUBLIC " does%s exist", YSI_g_sHasOPC ? ("") : (" not"));
+		new
+			a = Scripting_GetPublic(idx >>> 16, YSI_g_sNextUpdateFunc, "@yG_Upd"),
+			b = Scripting_GetPublic(idx & 0xFFFF, YSI_g_sNextInitFunc, "@yG_Init");
+		if (b)
+		{
+			CallLocalFunction(YSI_g_sNextInitFunc, "ii", -1, (a << 16) | b);
+		}
+	}
+	else if (group < _:MAX_GROUPS)
+	{
+		// This is called when a new group is created, it sets the default default
+		// values - i.e. sets everything to true.
+		Bit_SetAll(_GROUP_GROUP_NAME[Group:group], false, bits<_GROUP_MAKE_LIMIT>);
+		Bit_Vet(_GROUP_DEFAULTS, group);
+		if (YSI_g_sNextInitFunc[0])
+		{
+			CallLocalFunction(YSI_g_sNextInitFunc, "ii", group, -1);
+		}
+	}
+}
+
+#if !defined _YSI_GROUPS_FIRST_HALF
+	forward bool:_GROUP_INITIALISE(x = _GROUP_MAKE_LIMIT);
+#endif
+
+stock bool:_GROUP_INITIALISE(x = _GROUP_MAKE_LIMIT) <YSI_has_groups:y>
+{
+	// A new item has been added to the system - update all players according to
+	// the default settings for a group.
+	//_GROUP_UPDATE_ALL(_GROUP_LOCAL_NAME);
+	if (x != _GROUP_MAKE_LIMIT)
+	{
+		P:3(#_GROUP_INITIALISE "<YSI_has_groups:y> called in %d", _@);
+		_GROUP_MAKE_NAME<Group_UpdateAll...>(x, true);
+	}
+	return true;
+}
+
+// Called to set all players to a new element.  Can ignore defaults for
+// specialised setups such as classes.
+__GF<Group_UpdateAll...>[i](_GROUP_LOCAL_NAME,bool:d)<_GROUP_LOCAL_NAME,d>
+{
+	// Set the permissions from the defaults for each groups.
+	new
+		s = Bit_Slot(_GROUP_LOCAL_NAME),
+		Bit:m = Bit_Mask(_GROUP_LOCAL_NAME),
+		Bit:v = ~m;
+	if (d)
+	{
+		for (new Group:i; i != MAX_GROUPS; ++i)
+		{
+			if (Bit_Get(_GROUP_DEFAULTS, i)) _GROUP_GROUP_NAME[i][s] |= m;
+			else _GROUP_GROUP_NAME[i][s] &= v;
+		}
+		// Set the default settings.
+		if (Bit_Get(_GROUP_DEFAULTS, MAX_GROUPS)) _GROUP_GLOBAL_NAME[s] |= m;
+		else _GROUP_GLOBAL_NAME[s] &= v;
+		// Now update all the existing players.
+		foreach (Player, i) _GROUP_MAKE_NAME<Group_UpdatePlayer...>(_GROUP_LOCAL_NAME, i);
+	}
+	else
+	{
+		P:3(#_GROUP_MAKE_NAME<Group_UpdateAll...> " called as 0");
+		for (new Group:i; i != MAX_GROUPS; ++i) _GROUP_GROUP_NAME[i][s] &= v;
+		_GROUP_GLOBAL_NAME[s] &= v;
+	}
+}
+
+static stock _GROUP_MAKE_NAME<Group_UpdatePlayer...>(_GROUP_LOCAL_NAME,playerid)
+{
+	if (Bit_Get(_GROUP_GLOBAL_NAME, _GROUP_LOCAL_NAME))
+	{
+		_GROUP_SET_PLAYER(_GROUP_LOCAL_NAME, playerid, true);
+		return;
+	}
+	new
+		ps = Bit_Slot(playerid),
+		Bit:pm = Bit_Mask(playerid),
+		es = Bit_Slot(_GROUP_LOCAL_NAME),
+		Bit:em = Bit_Mask(_GROUP_LOCAL_NAME);
+	for (new Group:i; i != MAX_GROUPS; ++i)
+	{
+		if (_Group_IsActive(i) && YSI_gGroupPlayers[i][ps] & pm && _GROUP_GROUP_NAME[i][es] & em)
+		//if (Group_IsActive(i) && Group_HasPlayer(i, playerid) && Bit_Get(_GROUP_GROUP_NAME[i], _GROUP_LOCAL_NAME))
+		{
+			_GROUP_SET_PLAYER(_GROUP_LOCAL_NAME, playerid, true);
+			return;
+		}
+	}
+	_GROUP_SET_PLAYER(_GROUP_LOCAL_NAME, playerid, false);
+}
+
+_GROUP_UPDATE_PLAYER(playerid, group, set);
+
+#if YSIM_HAS_MASTER
+	#if YSIM_IS_CLIENT
+		// Note: not the same.
+		_GROUP_MAKE_NAME<_yG@Upd...>(playerid, group, set)
+	#else
+		#if YSIM_IS_SERVER
+			_GROUP_UPDATE_PLAYER(playerid, group, set)
+		#else
+			#if !YSIM_IS_STUB
+				_GROUP_UPDATE_PLAYER(playerid, group, set)<>
+				{
+					if (YSI_g_sNextUpdateFunc[0])
+					{
+						CallLocalFunction(YSI_g_sNextUpdateFunc, "iii", playerid, group, set);
+					}
+				}
+				
+				_GROUP_UPDATE_PLAYER(playerid, group, set)<_YCM:y>
+			#endif
+		#endif
+	#endif
+#else
+	_GROUP_UPDATE_PLAYER(playerid, group, set)
+#endif
+{
+	if (set)
+	{
+		// Joined a group - add everything they will need.
+		for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+		{
+			if (Bit_Get(_GROUP_GROUP_NAME[group], j))
+			{
+				_GROUP_SET_PLAYER(j, playerid, true);
+			}
+		}
+	}
+	else
+	{
+		// Left a group - full update.
+		for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+		{
+			_GROUP_MAKE_NAME<Group_UpdatePlayer...>(j, playerid);
+		}
+	}
+}
+
+__GF<Group_Set...Default>[ii](Group:g,bool:s)<g,s>
+{
+	GROUP_FIX(g);
+	if (g == GROUP_GLOBAL & ~GROUP_MASK)
+	{
+		_GROUP_MAKE_NAME<Group_SetGlobal...Default>(s);
+	}
+	else if (_Group_IsValid(g))
+	{
+		Bit_SetAll(_GROUP_GROUP_NAME[g], s, bits<_GROUP_MAKE_LIMIT>);
+		if (s)
+		{
+			Bit_Let(_GROUP_DEFAULTS, _:g);
+			foreach (Player, i)
+			{
+				if (_Group_HasPlayer(g, i))
+				{
+					for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+					{
+						_GROUP_SET_PLAYER(j, i, true);
+					}
+				}
+			}
+		}
+		else
+		{
+			Bit_Vet(_GROUP_DEFAULTS, _:g);
+			foreach (Player, i)
+			{
+				if (_Group_HasPlayer(g, i))
+				{
+					for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+					{
+						_GROUP_MAKE_NAME<Group_UpdatePlayer...>(j, i);
+					}
+				}
+			}
+		}
+	}
+}
+
+__GF<Group_SetGlobal...Default>[i](bool:s)<s>
+{
+	Bit_SetAll(_GROUP_GLOBAL_NAME, s, bits<_GROUP_MAKE_LIMIT>);
+	if (s)
+	{
+		Bit_Let(_GROUP_DEFAULTS, _:MAX_GROUPS);
+		foreach (Player, i)
+		{
+			for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+			{
+				_GROUP_SET_PLAYER(j, i, true);
+			}
+		}
+	}
+	else
+	{
+		Bit_Vet(_GROUP_DEFAULTS, _:MAX_GROUPS);
+		foreach (Player, i)
+		{
+			for (new j = 0; j != _GROUP_MAKE_LIMIT; ++j)
+			{
+				_GROUP_MAKE_NAME<Group_UpdatePlayer...>(j, i);
+			}
+		}
+	}
+}
+
+__GF<Group_SetGlobal...>[ii](_GROUP_LOCAL_NAME,bool:s)<_GROUP_LOCAL_NAME,s>
+{
+	// Set wether the global group can use this item.
+	//Bit_Set(_GROUP_GLOBAL_NAME, _GROUP_LOCAL_NAME, set, bits<_GROUP_MAKE_LIMIT>);
+	if (s)
+	{
+		Bit_Let(_GROUP_GLOBAL_NAME, _GROUP_LOCAL_NAME);
+		foreach (Player, i)
+		{
+			_GROUP_SET_PLAYER(_GROUP_LOCAL_NAME, i, true);
+		}
+	}
+	else
+	{
+		Bit_Vet(_GROUP_GLOBAL_NAME, _GROUP_LOCAL_NAME);
+		foreach (Player, i)
+		{
+			_GROUP_MAKE_NAME<Group_UpdatePlayer...>(_GROUP_LOCAL_NAME, i);
+		}
+	}
+}
+
+__GF<Group_Set...>[iii](Group:g,_GROUP_LOCAL_NAME,bool:s)<g,_GROUP_LOCAL_NAME,s>
+{
+	// Set wether a group can use this item.
+	if (0 <= _GROUP_LOCAL_NAME < _GROUP_MAKE_LIMIT)
+	{
+		GROUP_FIX(g);
+		if (g == GROUP_GLOBAL & ~GROUP_MASK)
+		{
+			//_GROUP_GLOBAL_FUNC(_GROUP_LOCAL_NAME, set);
+			_GROUP_MAKE_NAME<Group_SetGlobal...>(_GROUP_LOCAL_NAME, s);
+		}
+		else if (_Group_IsValid(g))
+		{
+			//Bit_Set(_GROUP_GROUP_NAME[group], _GROUP_LOCAL_NAME, set, bits<_GROUP_MAKE_LIMIT>);
+			if (s)
+			{
+				Bit_Let(_GROUP_GROUP_NAME[g], _GROUP_LOCAL_NAME);
+				foreach (Player, i)
+				{
+					if (_Group_HasPlayer(g, i))
+					{
+						_GROUP_SET_PLAYER(_GROUP_LOCAL_NAME, i, true);
+					}
+				}
+			}
+			else
+			{
+				Bit_Vet(_GROUP_GROUP_NAME[g], _GROUP_LOCAL_NAME);
+				foreach (Player, i)
+				{
+					if (_Group_HasPlayer(g, i))
+					{
+						//_GROUP_UPDATE(_GROUP_LOCAL_NAME, i);
+						_GROUP_MAKE_NAME<Group_UpdatePlayer...>(_GROUP_LOCAL_NAME, i);
+					}
+				}
+			}
+		}
+	}
+}
+
+#undef __GF

+ 113 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_groupsingle.inc

@@ -0,0 +1,113 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#undef _inc_y_groupsingle
+
+//#undef GROUP_LOCAL
+//#undef Group
+
+/*#if YSIM_HAS_MASTER
+	#if YSIM_IS_CLIENT
+		//#define Group:%0_InitialiseFromGroups(%1)
+		stock _GROUP_INITIALISE(x) <YSI_has_groups:n>
+		{
+			#pragma unused x
+		}
+		
+		stock _GROUP_INITIALISE(x) <>
+		{
+			#pragma unused x
+		}
+	#else
+		#if YSIM_IS_SERVER
+			//#define Group:%0_InitialiseFromGroups(%1) forward _GROUP_INITIALISE(x);_GROUP_INITIALISE(%1)<YSI_has_groups:n>__GROUP_INITIALISE(%1);_GROUP_INITIALISE(%1)<>__GROUP_INITIALISE(%1);static stock __GROUP_INITIALISE(%1)
+			stock bool:_GROUP_INITIALISE(x) <YSI_has_groups:n>
+			{
+				#pragma unused x
+				return false;
+			}
+			
+			stock bool:_GROUP_INITIALISE(x) <>
+			{
+				#pragma unused x
+				return false;
+			}
+		#else
+			#if YSIM_IS_STUB
+				#error y_groupsingle called with YSIM_IS_STUB.
+			#else
+				//#define Group:%0_InitialiseFromGroups(%1) forward _GROUP_INITIALISE(x);_GROUP_INITIALISE(%1)<YSI_has_groups:n>__GROUP_INITIALISE(%1);_GROUP_INITIALISE(%1)<>__GROUP_INITIALISE(%1);static stock __GROUP_INITIALISE(%1)
+			#endif
+		#endif
+	#endif
+#else
+	//#define Group:%0_InitialiseFromGroups(%1) forward _GROUP_INITIALISE(x);_GROUP_INITIALISE(%1)<YSI_has_groups:n>__GROUP_INITIALISE(%1);_GROUP_INITIALISE(%1)<>__GROUP_INITIALISE(%1);static stock __GROUP_INITIALISE(%1)
+#endif*/
+
+#if !defined _YSI_HAS_GROUP_SYSTEM
+	forward bool:_GROUP_INITIALISE(x = _GROUP_MAKE_LIMIT);
+#endif
+
+stock bool:_GROUP_INITIALISE(x = _GROUP_MAKE_LIMIT) <YSI_has_groups:n>
+{
+	#pragma unused x
+	return false;
+}
+
+stock bool:_GROUP_INITIALISE(x = _GROUP_MAKE_LIMIT) <>
+{
+	#pragma unused x
+	return false;
+}

+ 105 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_inttest.inc

@@ -0,0 +1,105 @@
+/*----------------------------------------------------------------------------*-
+					=================================
+					 y_inttest - Internal test code!
+					=================================
+Description:
+	Internal test code - do not use...
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#if !defined _YSI_ALLOW_INTERNAL_TEST
+	#endinput
+#endif
+
+#define MAX_INTERNALX_TEST_ITEMS         42
+
+#define _GROUP_MAKE_NAME_INTTEST<%0...%1>       %0InttestX%1
+#define _GROUP_MAKE_LIMIT_INTTEST               MAX_INTERNALX_TEST_ITEMS
+
+#include <YSI\y_master>
+#include <YSI\y_groups>
+
+#include <YSI\y_playerarray>
+
+static
+	//BitArray:gPlayers[MAX_INTERNALX_TEST_ITEMS]<MAX_PLAYERS>,
+	PlayerArray:gPlayers[MAX_INTERNALX_TEST_ITEMS]<MAX_PLAYERS>,
+	gElements[MAX_INTERNALX_TEST_ITEMS] = {-1, ...};
+
+//inttestxxx
+//checkpoint
+RF:InttestX_Create[i](val)
+{
+	new
+		i = 0;
+	while (i != MAX_INTERNALX_TEST_ITEMS && gElements[i] != -1)
+	{
+		++i;
+	}
+	if (i == MAX_INTERNALX_TEST_ITEMS)
+	{
+		return -1;
+	}
+	NO_GROUPS(i)
+	{
+		//Bit_SetAll(
+		PA_Init(gPlayers[i], true, bits<MAX_PLAYERS>);
+	}
+	gElements[i] = val;
+	return i;
+}
+
+RF@v:InttestX_SetPlayer[iii](element, playerid, bool:set)
+//Inttest_SetPlayer(element, playerid, set)
+{
+	if (set) PA+(gPlayers[element], playerid);
+	else PA-(gPlayers[element], playerid);
+}
+
+#define YSI_GROUPS_LAST 9
+#include <YSI\internal\y_grouprevert>

+ 103 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_inttest2.inc

@@ -0,0 +1,103 @@
+/*----------------------------------------------------------------------------*-
+					=================================
+					 y_inttest - Internal test code!
+					=================================
+Description:
+	Internal test code - do not use...
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#if !defined _YSI_ALLOW_INTERNAL_TEST
+	#endinput
+#endif
+
+#define MAX_INTERNAL_TEST_ITEMS         42
+
+#define _GROUP_MAKE_NAME_INTTEST2<%0...%1>      %0Inttest%1
+#define _GROUP_MAKE_LIMIT_INTTEST2              MAX_INTERNAL_TEST_ITEMS
+
+#include <YSI\y_master>
+#include <YSI\y_groups>
+
+#include <YSI\y_bit>
+
+static
+	BitArray:gPlayers[MAX_INTERNAL_TEST_ITEMS]<MAX_PLAYERS>,
+	gElements[MAX_INTERNAL_TEST_ITEMS] = {-1, ...};
+
+//inttestxxx
+//checkpoint
+RF:Inttest_Create[i](val)
+{
+	new
+		i = 0;
+	while (i != MAX_INTERNAL_TEST_ITEMS && gElements[i] != -1)
+	{
+		++i;
+	}
+	if (i == MAX_INTERNAL_TEST_ITEMS)
+	{
+		return -1;
+	}
+	NO_GROUPS(i)
+	{
+		Bit_SetAll(gPlayers[x], true, bits<MAX_PLAYERS>);
+	}
+	//Inttest_InitialiseFromGroups(i);
+	gElements[i] = val;
+	return i;
+}
+
+RF@v:Inttest_SetPlayer[iii](element, playerid, bool:set)
+//Inttest_SetPlayer(element, playerid, set)
+{
+	Bit_Set(gPlayers[element], playerid, set);
+}
+
+#define YSI_GROUPS_LAST 8
+#include <YSI\internal\y_grouprevert>

+ 459 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_masteronce.inc

@@ -0,0 +1,459 @@
+/*----------------------------------------------------------------------------*-
+                              ===================
+                               YSI - Master Core
+                              ===================
+Description:
+	There seems to be a bug with a compiler when using #emit in files included
+	more than once, so this code has been moved to a file only included once.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.2
+Changelog:
+	07/08/10:
+		Split in to y_masteronce.
+		Added assembly for publics scanning.
+	06/08/10:
+		Managed the ultimate - got completely transparent inclusion!
+	05/08/10:
+		Completed new master system, now does all syncing and clients.
+	06/10/09:
+		Rewrote using states.
+		Added remote function macros.
+		Reduced the number of masters to a single one.  It must have them all.
+		Vastly simplified the master model - ending the master ends everything.
+	06/01/08:
+		Added code to not pass data if no other script exists.
+	17/11/07:
+		Added code for a script to remove itself from the global list.
+	11/10/07:
+		Not first version but added documentation months late.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+	Hooks:
+		OnGameModeInit
+		OnGameModeExit
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		_@ - ID of this script.
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+Natives:
+	-
+-*----------------------------------------------------------------------------*/
+
+// These parts should only be defined once ever.  This code is not dependent on
+// the current MASTER value, it's all generic.
+
+#include <YSI\internal\y_version>
+#include <YSI\y_debug>
+
+#define YSIM_MASTER #M
+
+#define YSIM_RETURN #R
+
+#define YSIM_CALLER #C
+
+#define YSIM_STRING (42)
+
+// Define all the alternate spellings once.
+#define RF@cp  RF@pc
+#define RF@pvc RF@pcv
+#define RF@cpv RF@pcv
+#define RF@cvp RF@pcv
+#define RF@vpc RF@pcv
+#define RF@vcp RF@pcv
+#define RF@vp  RF@pv
+#define RF@cv  RF@vc
+//#define RF@nv  RF@vn
+
+#define RF@cpt  RF@pct
+#define RF@tcp  RF@pct
+#define RF@tpc  RF@pct
+#define RF@ctp  RF@pct
+#define RF@ptc  RF@pct
+#define RF@tp  RF@pt
+#define RF@tc  RF@ct
+//#define RF@tn  RF@nt
+
+#define OnScriptClose Master_OnScriptClose
+forward Master_OnScriptClose(script);
+
+#define YSIM_NOT_CLIENT (!YSIM_HAS_MASTER || !YSIM_IS_CLIENT)
+
+#define YSI_MAX_STRING (128)
+
+#if defined YSI_NO_MASTER
+	// Public variable.
+	public
+		_@ = 0;
+	#endinput
+#endif
+
+// Public variable.
+public
+	_@ = -1;
+
+//#if !defined MAX_MASTERS
+#define MAX_MASTERS 26
+//#else
+//	#if MAX_MASTERS > 32
+//		#undef MAX_MASTERS
+//		#define MAX_MASTERS 32
+//	#endif
+//#endif
+
+forward Master_Reassert();
+
+static
+	YSI_g_sMasterCount,
+	YSI_g_sMasterData[MAX_MASTERS];
+
+#include <YSI\internal\y_shortfunc>
+
+stock X@(n)
+{
+	setproperty(8, YSIM_RETURN, n);
+}
+
+stock Y@()
+{
+	return setproperty(8, YSIM_CALLER, _@);
+}
+
+stock Z@()
+{
+	setproperty(8, YSIM_CALLER, -1);
+	return getproperty(8, YSIM_RETURN);
+}
+
+stock T@()
+{
+	setproperty(8, YSIM_CALLER, -1);
+}
+
+new Q@[YSI_MAX_STRING];
+
+stock S@()
+{
+	getproperty(9, "", YSIM_STRING, Q@);
+	strunpack(Q@, Q@);
+	setproperty(8, YSIM_CALLER, -1);
+	return 0;
+}
+
+stock R@(buffer[])
+{
+	setproperty(9, "", YSIM_STRING, buffer);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Master_GetNext
+Params:
+	-
+Return:
+	Next master ID to be assigned.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock Master_GetNext()
+{
+	new
+		masters = getproperty(8, YSIM_MASTER),
+		i = 0;
+	while (i != 32)
+	{
+		if (!(masters & (1 << i)))
+		{
+			return i;
+		}
+		++i;
+	}
+	return -1;
+}
+
+/*----------------------------------------------------------------------------*-
+Hook:
+	OnGameModeInit
+Notes:
+	Constructor.  Gets the script a master ID.  Now ALWAYS gets an ID, even if
+	the master system is disabled - doing otherwise is just too complicated.
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	P:1("Master_OGM");
+	if (!existproperty(8, YSIM_MASTER))
+	{
+		setproperty(8, YSIM_MASTER, 0);
+	}
+	// Properties get lost between script changes so we need to force a rebuild.
+	CallRemoteFunction("Master_Reassert", "");
+	new
+		masters = getproperty(8, YSIM_MASTER),
+		i = 0;
+	while (i != 32)
+	{
+		if (!(masters & (1 << i)))
+		{
+			_@ = i;
+			masters |= 1 << i;
+			break;
+		}
+		++i;
+	}
+	if (i != 32)
+	{
+		setproperty(8, YSIM_MASTER, masters);
+	}
+	C:1(if (_@ == -1) printf("*** Internal Error! MasterID not assigned"););
+	// Make sure this is called before all other YSI initialisations, at least
+	// all the ones which use the master system.
+	CallLocalFunction("YSIM_OnMasterSystemInit", "");
+	// Just use one name...
+	CallLocalFunction("YSIM_OnScriptInit", "");
+	return 1;
+}
+
+#define OnMasterSystemInit YSIM_OnMasterSystemInit
+forward YSIM_OnMasterSystemInit();
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit YSIM_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit YSIM_OnScriptInit
+#endif
+forward YSIM_OnScriptInit();
+
+
+/*----------------------------------------------------------------------------*-
+Hook:
+	OnGameModeExit
+Notes:
+	Destructor.
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptExit()
+#else
+	public OnGameModeExit()
+#endif
+{
+	// Loop through everything this script is master for and call the remote
+	// function for it.  EXCEPT for this script itself!
+	new
+		func[4];
+	for (new i = 0; i != YSI_g_sMasterCount; ++i)
+	{
+		// This is slightly slower for ending and starting scripts, but uses far
+		// less heap space, and these values are rarely used, so may as well
+		// pack them (which is what has happened here).
+		func[0] = YSI_g_sMasterData[i] & 0xFF;
+		func[1] = (YSI_g_sMasterData[i] >> 8) & 0xFF;
+		func[2] = YSI_g_sMasterData[i] >> 16;
+		CallLocalFunction(func, "");
+		// The properties currently clear instantly, but that may not always be
+		// the case.
+		setproperty(8, YSIM_MASTER, getproperty(8, YSIM_MASTER) & ~(1 << _@));
+	}
+	CallLocalFunction("YSIM_OnScriptExit", "");
+	CallRemoteFunction("Master_OnScriptClose", "i", _@);
+	return 1;
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptExit
+		#undef OnFilterScriptExit
+	#else
+		#define _ALS_OnFilterScriptExit
+	#endif
+	#define OnFilterScriptExit YSIM_OnScriptExit
+#else
+	#if defined _ALS_OnGameModeExit
+		#undef OnGameModeExit
+	#else
+		#define _ALS_OnGameModeExit
+	#endif
+	#define OnGameModeExit YSIM_OnScriptExit
+#endif
+forward YSIM_OnScriptExit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Master_Reassert
+Params:
+	-
+Return:
+	-
+Notes:
+	Rebuilds the collection of master data whenever a script is restarted.
+-*----------------------------------------------------------------------------*/
+
+public Master_Reassert()
+{
+	// Make sure that the caller parameter is always -1 by default.
+	U@(8, YSIM_CALLER, -1);
+	if (_@ != -1)
+	{
+		// Readd this script's master value.
+		setproperty(8, YSIM_MASTER, getproperty(8, YSIM_MASTER) | (1 << _@));
+		// Readd this script's owned scripts.
+		new
+			func[4];
+		for (new i = 0; i != YSI_g_sMasterCount; ++i)
+		{
+			// This is slightly slower for ending and starting scripts, but uses far
+			// less heap space, and these values are rarely used, so may as well
+			// pack them (which is what has happened here).
+			func[0] = YSI_g_sMasterData[i] & 0xFF;
+			func[1] = (YSI_g_sMasterData[i] >> 8) & 0xFF;
+			func[2] = YSI_g_sMasterData[i] >> 16;
+			setproperty(8, func, _@);
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	_Master_Get
+Params:
+	library[] - The name of the library to try become master for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock bool:_Master_Get(library[], bool:force = false)
+{
+	P:2("_Master_Get called");
+	if (!force && existproperty(8, library))
+	{
+		P:4("_Master_Get: Prop exists: %d %d", getproperty(8, library), _@);
+		if (getproperty(8, library) != -1)
+		{
+			P:4("_Master_Get: Prop set");
+			return false;
+		}
+	}
+	P:4("_Master_Get: Get master.");
+	setproperty(8, library, _@);
+	P:4("_Master_Get: Set master.");
+	// Add this library to the list.  The list is designed to only deal with
+	// two or three character master names now!
+	if (YSI_g_sMasterCount < MAX_MASTERS)
+	{
+		P:4("_Master_Get: Set master string.");
+		YSI_g_sMasterData[YSI_g_sMasterCount++] = library[0] | (library[1] << 8) | (library[2] << 16);
+		P:4("_Master_Get: Set master string.");
+	}
+	C:1(else printf("*** Internal Error! Too many master scripts"););
+	return true;
+}
+
+//#define RS@pc RS@cp
+
+/*
+#define RF:%1[%2](%3)
+#define RF@p:%1[%2](%3)<%4>
+#define RF@c:%1[%2](%3)
+#define RF@v:%1[%2](%3)
+#define RF@n:%1[]()
+#define RF@pc:%1[%2](%3)<%4>
+#define RF@pv:%1[%2](%3)<%4>
+#define RF@pcv:%1[%2](%3)<%4>
+#define RF@vc:%1[%2](%3)
+#define RF@vn:%1[]()
+*/
+
+// Define all the alternate spellings once.
+//#define RC@nv  RC@vn
+
+/*
+#define RC:%1[%2](%3)
+#define RC@v:%1[%2](%3)
+#define RC@n:%1[]()
+#define RC@vn:%1[]()
+*/

+ 98 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_nogroups.inc

@@ -0,0 +1,98 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+// This file defines functions which are called if the group system is not used.
+
+static stock _Groups_DefineStates_() <YSI_has_groups:n>
+{
+}
+
+static stock _Groups_DefineStates_() <YSI_has_groups:y>
+{
+}
+
+/*stock _@Group_Sink(e)
+{
+	#pragma unused e
+}*/
+
+// Now you can use the default fallback to define functions:
+//  
+//  stock Class_InitialiseFromGroups() <YSI_has_groups:n>
+//  {
+//      // Enable the class for all players.
+//  }
+//  
+//  stock Class_InitialiseFromGroups() <>
+//  {
+//      // Enable the class for all players.
+//  }
+//  
+
+#define _GROUP_LOCAL_NAME               e
+#define _GROUP_INITIALISE               _GROUP_MAKE_NAME<..._InitialiseFromGroups>
+//#define __GROUP_INITIALISE              _GROUP_MAKE_NAME<_..._InitialiseFromGroups>
+
+#define Group:
+
+// Dummy values.
+#define _GROUP_MAKE_NAME<%0...%1>       %0_%1
+#define _GROUP_MAKE_LIMIT               0
+
+#define GROUP_GLOBAL                    (Group:-1)
+#define GROUP_MASK                      (Group:0x80000000)
+#define GROUP_FIX(%0)                   ((%0)&=~GROUP_MASK)
+
+#define NO_GROUPS(%0) if(!_GROUP_INITIALISE(%0))

+ 174 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_overridemaster.inc

@@ -0,0 +1,174 @@
+/*----------------------------------------------------------------------------*-
+					===============================
+					Y Sever Includes - Master Auto
+					===============================
+Description:
+	Attempts to figure out from what library the current instance of the master
+	system was included from.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.1
+Changelog:
+	06/08/10:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+	Hooks:
+		-
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-.
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+Natives:
+	-
+-*----------------------------------------------------------------------------*/
+
+#undef _inc_y_overridemaster
+
+#if _YSIM_OVERRIDE == 0
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_0
+	#define MASTER                      0
+#elseif _YSIM_OVERRIDE == 1
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_1
+	#define MASTER                      1
+#elseif _YSIM_OVERRIDE == 2
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_2
+	#define MASTER                      2
+#elseif _YSIM_OVERRIDE == 3
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_3
+	#define MASTER                      3
+#elseif _YSIM_OVERRIDE == 4
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_4
+	#define MASTER                      4
+#elseif _YSIM_OVERRIDE == 5
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_5
+	#define MASTER                      5
+#elseif _YSIM_OVERRIDE == 6
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_6
+	#define MASTER                      6
+#elseif _YSIM_OVERRIDE == 7
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_7
+	#define MASTER                      7
+#elseif _YSIM_OVERRIDE == 8
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_8
+	#define MASTER                      8
+#elseif _YSIM_OVERRIDE == 9
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_9
+	#define MASTER                      9
+#elseif _YSIM_OVERRIDE == 10
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_10
+	#define MASTER                      10
+#elseif _YSIM_OVERRIDE == 11
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_11
+	#define MASTER                      11
+#elseif _YSIM_OVERRIDE == 12
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_12
+	#define MASTER                      12
+#elseif _YSIM_OVERRIDE == 13
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_13
+	#define MASTER                      13
+#elseif _YSIM_OVERRIDE == 14
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_14
+	#define MASTER                      14
+#elseif _YSIM_OVERRIDE == 15
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_15
+	#define MASTER                      15
+#elseif _YSIM_OVERRIDE == 16
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_16
+	#define MASTER                      16
+#elseif _YSIM_OVERRIDE == 17
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_17
+	#define MASTER                      17
+#elseif _YSIM_OVERRIDE == 18
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_18
+	#define MASTER                      18
+#elseif _YSIM_OVERRIDE == 19
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_19
+	#define MASTER                      19
+#elseif _YSIM_OVERRIDE == 20
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_20
+	#define MASTER                      20
+#elseif _YSIM_OVERRIDE == 21
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_21
+	#define MASTER                      21
+#elseif _YSIM_OVERRIDE == 22
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_22
+	#define MASTER                      22
+#elseif _YSIM_OVERRIDE == 23
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_23
+	#define MASTER                      23
+#elseif _YSIM_OVERRIDE == 24
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_24
+	#define MASTER                      24
+#elseif _YSIM_OVERRIDE == 25
+	#define YSIM_STORED_SETTINGS        YSIM_RECALL_25
+	#define MASTER                      25
+#endif

+ 112 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_shortfunc.inc

@@ -0,0 +1,112 @@
+/*----------------------------------------------------------------------------*-
+                              ====================
+                               YSI - Master Funcs
+                              ====================
+Description:
+	Defines new names for native functions.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.2
+Changelog:
+	21/10/10:
+		Split in to y_shortfunc.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+	Hooks:
+		-
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+Natives:
+	W@ - Renaming of CallRemoteFunction for size reasons.
+	V@ - Renaming of getproperty for size reasons.
+	S@ - Renaming of setproperty for size reasons.
+	P@ - Renaming of CallLocalFunction for size reasons.
+-*----------------------------------------------------------------------------*/
+
+native U@(id=0, const name[]="", value=cellmin, const string[]="") = setproperty;
+native V@(id=0, const name[]="", value=cellmin, string[]="") = getproperty;
+// Define this command with basically every strong tag in existance to avoid
+// tag mismatch warnings with remote functions with strong tag parameters.
+native W@(const function[], const format[], {Float, File, Bit, PlayerText3D, Text, Text3D, Menu, DB, DBResult, Style, XML, Bintree, Group, _}:...) = CallRemoteFunction;
+native P@(const function[], const format[], {Float, File, Bit, PlayerText3D, Text, Text3D, Menu, DB, DBResult, Style, XML, Bintree, Group, _}:...) = CallLocalFunction;
+native O@(const function[], time, repeat, const format[], {Float, File, Bit, PlayerText3D, Text, Text3D, Menu, DB, DBResult, Style, XML, Bintree, Group, _}:...) = SetTimerEx;
+
+// Consume trailing spaces.  Despite being a common letter, this is unlkely to
+// ever be matched due to the unusual series of operators after it.  If anyone
+// else tries to define "x" however they may have a slight problem (they can't).
+//#define x,), x),
+// Changed as x,): was also needed (for ?:).
+#define x,) x)
+
+// This is for getting excess parameters on non-strings.
+#define _:%0,) %0)

+ 260 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/internal/y_version.inc

@@ -0,0 +1,260 @@
+/*----------------------------------------------------------------------------*-
+                              =====================
+                               YSI - Version Check
+                              =====================
+Description:
+	Checks online to see if there is a newer version of YSI available.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.2
+Changelog:
+	26/10/10:
+		Added changelog capabilities.
+	22/10/10:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+	Hooks:
+		OnGameModeInit
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+Natives:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <a_samp>
+#include <a_http>
+
+#define YSI_VERSION_RESPO               2
+
+#define YSI_VERSION_MAJOR               1
+#define YSI_VERSION_MINOR               03
+#define YSI_VERSION_BUILD               0011
+
+#define YSI_VERSION                     #YSI_VERSION_MAJOR "." #YSI_VERSION_MINOR "." #YSI_VERSION_BUILD
+
+forward YVers_Callback(index, code, data[]);
+
+/*----------------------------------------------------------------------------*-
+Hook:
+	OnScriptInit
+Notes:
+	Constructor.  Checks to see if there is a new version available.  This code
+	can not use ANY of the rest of YSI as it needs to be included by everything
+	first.
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	print(" ");
+	print(" ======================================= ");
+	print(" |                                     | ");
+	print(" |        YSI version " YSI_VERSION "        | ");
+	print(" |        By Alex \"Y_Less\" Cole        | ");
+	print(" |                                     | ");
+	print(" |  Checking the latest YSI version..  | ");
+	print(" |                                     | ");
+	print(" ======================================= ");
+	print(" ");
+	// Call my server to check the current public YSI version.  v is the current
+	// version and c is the version of data response which this code can parse.
+	// Note that the response data SHOULD be backward compatible, but may not
+	// always be - hence the accept parameter.  This will never send any data
+	// except the current version for targeted replies (e.g. to ignore minor
+	// updates which aren't critical).  It MAY in the future send what libraries
+	// are in use so that it only tells you to upgrade if the libraries you are
+	// using have changed, but that will take more work and I'm not going to do
+	// that for now (I'm not entirely sure exactly how to do it (though I have
+	// an idea - note to self: chain callbacks from repeated inclusions of this
+	// file in the same way as ALS then call them BEFORE sending the HTTP)).
+	// Note that due to the way the internet works the server will know the IP
+	// of the server which sent the request, but the ENTIRE current contents of
+	// the remote page are (note: I won't update this comment every time the
+	// version updates, but that's the gist of it):
+	//  
+	//  1
+	//  1.01.0000
+	//  
+	// This remote script has now been updated to include changelog information.
+	HTTP(0, HTTP_GET, "ysi-version.y-less.com/index.php?c=" #YSI_VERSION_RESPO "&v=" YSI_VERSION, "", "YVers_Callback");
+	CallLocalFunction("YVers_OnScriptInit", "");
+	return 1;
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit YVers_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit YVers_OnScriptInit
+#endif
+forward YVers_OnScriptInit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	YVers_Callback
+Params:
+	index - Not used.
+	code - Response code from the server.
+	data[] - HTTP data sent from the server.
+Return:
+	-
+Notes:
+	This is called when my server responds to the HTTP request sent above (or
+	when it doesn't).  This prints information on the current and any future
+	versions of YSI.  Note that it only does a strcmp to determine if the
+	version is newer - people can't have versions newer than the latest, only
+	older or equal (unless they play with the version numbers, but then that's
+	their own fault).
+-*----------------------------------------------------------------------------*/
+
+public YVers_Callback(index, code, data[])
+{
+	print(" ");
+	if (code == 200)
+	{
+		// Got the remote page.
+		// The first line is the version data version.  This should be forward
+		// compatible, so new data is always added to the end of the file.
+		// Skip the first line - contains the response version.
+		new
+			pos = strfind(data, "\n") + 1;
+		if (strcmp(data[pos], YSI_VERSION, false, 9))
+		{
+			//data[pos + 9] = '\0';
+			print(" ========================================== ");
+			print(" |                                        | ");
+			printf(" |  A new version (v%.9s) of YSI is  | ", data[pos]);
+			print(" |            available from:             | ");
+			print(" |                                        | ");
+			print(" |     www.y-less.com/YSI/YSI_1.0.zip     | ");
+			//printf("data[0]: %c", data[0]);
+			if (data[0] == '2')
+			{
+				print(" |                                        | ");
+				print(" | Changelog:                             | ");
+				// Print the changelog.
+				new
+					last = pos + 13;
+				for ( ; ; )
+				{
+					pos = strfind(data[last], "\n", false);
+					//printf("%d %d %s", last, pos, data[last]);
+					if (pos == -1)
+					{
+						// To break out in the middle of a loop.
+						break;
+					}
+					pos += last;
+					data[pos - 1] = '\0';
+					printf(" | %38s | ", data[last]);
+					last = pos + 1;
+				}
+			}
+			print(" |                                        | ");
+			print(" ========================================== ");
+		}
+		else
+		{
+			print(" ====================================== ");
+			print(" |                                    | ");
+			print(" |  Congratulations! You are running  | ");
+			print(" |     the latest version of YSI!     | ");
+			print(" |                                    | ");
+			print(" ====================================== ");
+		}
+	}
+	else
+	{
+		// Didn't get the remote page.
+		print(" ======================================= ");
+		print(" |                                     | ");
+		print(" |   Error: Could not connect to YSI   | ");
+		printf(" |  update server (response was %03d).  | ", code);
+		print(" |                                     | ");
+		print(" ======================================= ");
+	}
+	print(" ");
+}

+ 222 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_als.inc

@@ -0,0 +1,222 @@
+/*----------------------------------------------------------------------------*-
+					==============================
+					 y_als - Useful codes for ALS
+					==============================
+Description:
+	Provides a number of macros for making ALS (Advanced Library System)
+	callback hooking simpler.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	21/10/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+// Allow multiple inclusions.
+#undef _inc_y_als
+
+#if !defined _Y_ALS_INCLUDED
+	// This is an include guard with a purpose!
+	
+	#include <YSI\y_bit>
+	#include <YSI\internal\y_shortfunc>
+	
+	enum ALS
+	{
+		Bit:ALS_OnGameModeInit,
+		Bit:ALS_OnGameModeExit,
+		Bit:ALS_OnFilterScriptInit,
+		Bit:ALS_OnFilterScriptExit,
+		Bit:ALS_OnPlayerConnect,
+		Bit:ALS_OnPlayerDisconnect,
+		Bit:ALS_OnPlayerSpawn,
+		Bit:ALS_OnPlayerDeath,
+		Bit:ALS_OnVehicleSpawn,
+		Bit:ALS_OnVehicleDeath,
+		Bit:ALS_OnPlayerText,
+		Bit:ALS_OnPlayerCommandText,
+		Bit:ALS_OnPlayerRequestClass,
+		Bit:ALS_OnPlayerEnterVehicle,
+		Bit:ALS_OnPlayerExitVehicle,
+		Bit:ALS_OnPlayerStateChange,
+		Bit:ALS_OnPlayerEnterCheckpoint,
+		Bit:ALS_OnPlayerLeaveCheckpoint,
+		Bit:ALS_OnPlayerEnterRaceCheckpoint,
+		Bit:ALS_OnPlayerLeaveRaceCheckpoint,
+		Bit:ALS_OnRconCommand,
+		Bit:ALS_OnPlayerRequestSpawn,
+		Bit:ALS_OnObjectMoved,
+		Bit:ALS_OnPlayerObjectMoved,
+		Bit:ALS_OnPlayerPickUpPickup,
+		Bit:ALS_OnVehicleMod,
+		Bit:ALS_OnEnterExitModShop,
+		Bit:ALS_OnVehiclePaintjob,
+		Bit:ALS_OnVehicleRespray,
+		Bit:ALS_OnVehicleDamageStatusUpdate,
+		Bit:ALS_OnPlayerSelectedMenuRow,
+		Bit:ALS_OnPlayerExitedMenu,
+		Bit:ALS_OnPlayerInteriorChange,
+		Bit:ALS_OnPlayerKeyStateChange,
+		Bit:ALS_OnRconLoginAttempt,
+		Bit:ALS_OnPlayerUpdate,
+		Bit:ALS_OnPlayerStreamIn,
+		Bit:ALS_OnPlayerStreamOut,
+		Bit:ALS_OnVehicleStreamIn,
+		Bit:ALS_OnVehicleStreamOut,
+		Bit:ALS_OnDialogResponse,
+		Bit:ALS_OnPlayerClickPlayer
+	}
+	
+	#define ALS_DATA<> static stock BitArray:gs_ALS<_:ALS>;
+	
+	#define ALS_DETECT<%0> if(funcidx(#ALS_PREFIX"_On"#%0)!=-1)Bit_Let(gs_ALS,_:ALS_On%0);
+	
+	//#define ALS_DETECT_SHORT<On%0> if(funcidx(#ALS_PREFIX"_"#%0)!=-1)Bit_Let(gs_ALS,_:ALS_On%0);
+	
+	//#define ALS_CALL_INT<%0,%2>(%3) return Bit_GetBit(Bit:gs_ALS,_:ALS_On%0)?P@(#ALS_PREFIX"_On"#%0,#%2#x,%3):1;
+	
+	#define ALS_C_INT<%0,%1,%2>(%3) return Bit_GetBit(Bit:gs_ALS,_:ALS_On%0)?P@(#ALS_PREFIX"_On"#%0,#%2#x,%3):%1;
+	#define ALS_F_INT<%0>(%1) forward On%0(%1);
+	
+	// Forward declarations.
+	#define ALS_F_GameModeInit              ALS_F_INT<GameModeInit             >()
+	#define ALS_F_GameModeExit              ALS_F_INT<GameModeExit             >()
+	#define ALS_F_FilterScriptInit          ALS_F_INT<FilterScriptInit         >()
+	#define ALS_F_FilterScriptExit          ALS_F_INT<FilterScriptExit         >()
+	#define ALS_F_PlayerConnect             ALS_F_INT<PlayerConnect            >(playerid)
+	#define ALS_F_PlayerDisconnect          ALS_F_INT<PlayerDisconnect         >(playerid,reason)
+	#define ALS_F_PlayerSpawn               ALS_F_INT<PlayerSpawn              >(playerid)
+	#define ALS_F_PlayerDeath               ALS_F_INT<PlayerDeath              >(playerid,killerid,reason)
+	#define ALS_F_VehicleSpawn              ALS_F_INT<VehicleSpawn             >(vehicleid)
+	#define ALS_F_VehicleDeath              ALS_F_INT<VehicleDeath             >(vehicleid,killerid)
+	#define ALS_F_PlayerText                ALS_F_INT<PlayerText               >(playerid,text[])
+	#define ALS_F_PlayerCommandText         ALS_F_INT<PlayerCommandText        >(playerid,cmdtext[])
+	#define ALS_F_PlayerRequestClass        ALS_F_INT<PlayerRequestClass       >(playerid,classid)
+	#define ALS_F_PlayerEnterVehicle        ALS_F_INT<PlayerEnterVehicle       >(playerid,vehicleid,ispassenger)
+	#define ALS_F_PlayerExitVehicle         ALS_F_INT<PlayerExitVehicle        >(playerid,vehicleid)
+	#define ALS_F_PlayerStateChange         ALS_F_INT<PlayerStateChange        >(playerid,newstate,oldstate)
+	#define ALS_F_PlayerEnterCheckpoint     ALS_F_INT<PlayerEnterCheckpoint    >(playerid)
+	#define ALS_F_PlayerLeaveCheckpoint     ALS_F_INT<PlayerLeaveCheckpoint    >(playerid)
+	#define ALS_F_PlayerEnterRaceCheckpoint ALS_F_INT<PlayerEnterRaceCheckpoint>(playerid)
+	#define ALS_F_PlayerLeaveRaceCheckpoint ALS_F_INT<PlayerLeaveRaceCheckpoint>(playerid)
+	#define ALS_F_RconCommand               ALS_F_INT<RconCommand              >(cmd[])
+	#define ALS_F_PlayerRequestSpawn        ALS_F_INT<PlayerRequestSpawn       >(playerid)
+	#define ALS_F_ObjectMoved               ALS_F_INT<ObjectMoved              >(objectid)
+	#define ALS_F_PlayerObjectMoved         ALS_F_INT<PlayerObjectMoved        >(playerid,objectid)
+	#define ALS_F_PlayerPickUpPickup        ALS_F_INT<PlayerPickUpPickup       >(playerid,pickupid)
+	#define ALS_F_VehicleMod                ALS_F_INT<VehicleMod               >(playerid,vehicleid,componentid)
+	#define ALS_F_EnterExitModShop          ALS_F_INT<EnterExitModShop         >(playerid,enterexit,interiorid)
+	#define ALS_F_VehiclePaintjob           ALS_F_INT<VehiclePaintjob          >(playerid,vehicleid,paintjobid)
+	#define ALS_F_VehicleRespray            ALS_F_INT<VehicleRespray           >(playerid,vehicleid,color1,color2)
+	#define ALS_F_VehicleDamageStatusUpdate ALS_F_INT<VehicleDamageStatusUpdate>(playerid,vehicleid)
+	#define ALS_F_PlayerSelectedMenuRow     ALS_F_INT<PlayerSelectedMenuRow    >(playerid,row)
+	#define ALS_F_PlayerExitedMenu          ALS_F_INT<PlayerExitedMenu         >(playerid)
+	#define ALS_F_PlayerInteriorChange      ALS_F_INT<PlayerInteriorChange     >(playerid,newinteriorid,oldinteriorid)
+	#define ALS_F_PlayerKeyStateChange      ALS_F_INT<PlayerKeyStateChange     >(playerid,newkeys,oldkeys)
+	#define ALS_F_RconLoginAttempt          ALS_F_INT<RconLoginAttempt         >(ip[],password[],success)
+	#define ALS_F_PlayerUpdate              ALS_F_INT<PlayerUpdate             >(playerid)
+	#define ALS_F_PlayerStreamIn            ALS_F_INT<PlayerStreamIn           >(playerid,forplayerid)
+	#define ALS_F_PlayerStreamOut           ALS_F_INT<PlayerStreamOut          >(playerid,forplayerid)
+	#define ALS_F_VehicleStreamIn           ALS_F_INT<VehicleStreamIn          >(vehicleid,forplayerid)
+	#define ALS_F_VehicleStreamOut          ALS_F_INT<VehicleStreamOut         >(vehicleid,forplayerid)
+	#define ALS_F_DialogResponse            ALS_F_INT<DialogResponse           >(playerid,dialogid,response,listitem,inputtext[])
+	#define ALS_F_PlayerClickPlayer         ALS_F_INT<PlayerClickPlayer        >(playerid,clickedplayerid,source)
+	
+	// Chain call declarations.
+	#define ALS_C_GameModeInit              ALS_C_INT<GameModeInit             ,1,>()
+	#define ALS_C_GameModeExit              ALS_C_INT<GameModeExit             ,1,>()
+	#define ALS_C_FilterScriptInit          ALS_C_INT<FilterScriptInit         ,1,>()
+	#define ALS_C_FilterScriptExit          ALS_C_INT<FilterScriptExit         ,1,>()
+	#define ALS_C_PlayerConnect             ALS_C_INT<PlayerConnect            ,1,i>(playerid)
+	#define ALS_C_PlayerDisconnect          ALS_C_INT<PlayerDisconnect         ,1,ii>(playerid,reason)
+	#define ALS_C_PlayerSpawn               ALS_C_INT<PlayerSpawn              ,1,i>(playerid)
+	#define ALS_C_PlayerDeath               ALS_C_INT<PlayerDeath              ,1,iii>(playerid,killerid,reason)
+	#define ALS_C_VehicleSpawn              ALS_C_INT<VehicleSpawn             ,1,i>(vehicleid)
+	#define ALS_C_VehicleDeath              ALS_C_INT<VehicleDeath             ,1,ii>(vehicleid,killerid)
+	#define ALS_C_PlayerText                ALS_C_INT<PlayerText               ,1,is>(playerid,text)
+	#define ALS_C_PlayerCommandText         ALS_C_INT<PlayerCommandText        ,0,is>(playerid,cmdtext)
+	#define ALS_C_PlayerRequestClass        ALS_C_INT<PlayerRequestClass       ,1,ii>(playerid,classid)
+	#define ALS_C_PlayerEnterVehicle        ALS_C_INT<PlayerEnterVehicle       ,1,iii>(playerid,vehicleid,ispassenger)
+	#define ALS_C_PlayerExitVehicle         ALS_C_INT<PlayerExitVehicle        ,1,ii>(playerid,vehicleid)
+	#define ALS_C_PlayerStateChange         ALS_C_INT<PlayerStateChange        ,1,iii>(playerid,newstate,oldstate)
+	#define ALS_C_PlayerEnterCheckpoint     ALS_C_INT<PlayerEnterCheckpoint    ,1,i>(playerid)
+	#define ALS_C_PlayerLeaveCheckpoint     ALS_C_INT<PlayerLeaveCheckpoint    ,1,i>(playerid)
+	#define ALS_C_PlayerEnterRaceCheckpoint ALS_C_INT<PlayerEnterRaceCheckpoint,1,i>(playerid)
+	#define ALS_C_PlayerLeaveRaceCheckpoint ALS_C_INT<PlayerLeaveRaceCheckpoint,1,i>(playerid)
+	#define ALS_C_RconCommand               ALS_C_INT<RconCommand              ,1,s>(cmd)
+	#define ALS_C_PlayerRequestSpawn        ALS_C_INT<PlayerRequestSpawn       ,1,i>(playerid)
+	#define ALS_C_ObjectMoved               ALS_C_INT<ObjectMoved              ,1,i>(objectid)
+	#define ALS_C_PlayerObjectMoved         ALS_C_INT<PlayerObjectMoved        ,1,ii>(playerid,objectid)
+	#define ALS_C_PlayerPickUpPickup        ALS_C_INT<PlayerPickUpPickup       ,1,ii>(playerid,pickupid)
+	#define ALS_C_VehicleMod                ALS_C_INT<VehicleMod               ,1,iii>(playerid,vehicleid,componentid)
+	#define ALS_C_EnterExitModShop          ALS_C_INT<EnterExitModShop         ,1,iii>(playerid,enterexit,interiorid)
+	#define ALS_C_VehiclePaintjob           ALS_C_INT<VehiclePaintjob          ,1,iii>(playerid,vehicleid,paintjobid)
+	#define ALS_C_VehicleRespray            ALS_C_INT<VehicleRespray           ,1,iiii>(playerid,vehicleid,color1,color2)
+	#define ALS_C_VehicleDamageStatusUpdate ALS_C_INT<VehicleDamageStatusUpdate,1,ii>(playerid,playerid)
+	#define ALS_C_PlayerSelectedMenuRow     ALS_C_INT<PlayerSelectedMenuRow    ,1,ii>(playerid,row)
+	#define ALS_C_PlayerExitedMenu          ALS_C_INT<PlayerExitedMenu         ,1,i>(playerid)
+	#define ALS_C_PlayerInteriorChange      ALS_C_INT<PlayerInteriorChange     ,1,iii>(playerid,newinteriorid,oldinteriorid)
+	#define ALS_C_PlayerKeyStateChange      ALS_C_INT<PlayerKeyStateChange     ,1,iii>(playerid,newkeys,oldkeys)
+	#define ALS_C_RconLoginAttempt          ALS_C_INT<RconLoginAttempt         ,1,ssi>(ip,password,success)
+	#define ALS_C_PlayerUpdate              ALS_C_INT<PlayerUpdate             ,1,i>(playerid)
+	#define ALS_C_PlayerStreamIn            ALS_C_INT<PlayerStreamIn           ,1,ii>(playerid,forplayerid)
+	#define ALS_C_PlayerStreamOut           ALS_C_INT<PlayerStreamOut          ,1,ii>(playerid,forplayerid)
+	#define ALS_C_VehicleStreamIn           ALS_C_INT<VehicleStreamIn          ,1,ii>(vehicleid,forplayerid)
+	#define ALS_C_VehicleStreamOut          ALS_C_INT<VehicleStreamOut         ,1,ii>(vehicleid,forplayerid)
+	//#define ALS_C_DialogResponse            ALS_C_INT<DialogResponse           ,1,ii>(playerid,dialogid,response,listitem,inputtext)
+	#define ALS_C_PlayerClickPlayer         ALS_C_INT<PlayerClickPlayer        ,1,iii>(playerid,clickedplayerid,source)
+	#define ALS_C_DialogResponse if(inputtext[0]){ALS_C_INT<DialogResponse,1,iiiis>(playerid,dialogid,response,listitem,inputtext)}else{ALS_C_INT<DialogResponse,1,iiiis>(playerid,dialogid,response,listitem,NULL)}
+	
+	#define ALS_CALL<%0> ALS_C_%0
+	#define ALS_FORWARD<%0> ALS_F_%0
+	
+	#define _Y_ALS_INCLUDED
+#endif
+
+#if !defined ALS_PREFIX
+	//#error You must define a callback prefix before including y_als.
+	#define ALS_PREFIX Mode
+#endif

+ 566 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_bintree.inc

@@ -0,0 +1,566 @@
+/*----------------------------------------------------------------------------*-
+					===================================
+					Y Sever Includes - Binary Tree Core
+					===================================
+Description:
+	Provides functions to generate balanced binary search trees for efficient
+	searching of large arrays by value.  Left branch is less than, right branch
+	is greater than or equal to for multiple matching values.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.1.3
+Changelog:
+	12/08/07:
+		Fixed a bug with empty trees.
+	14/04/07:
+		Updated header documentation with more than changelog.
+	10/04/07:
+		Added parents for easy deletion.
+		Added node deletion code.
+	08/04/07:
+		Added Bintree_Add()
+	24/03/07:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		Bintree_QSort - Custom implementaion of QSort to keep pointers.
+		Bintree_SortHalf - Itteratively balances halves of an array.
+	Stock:
+		Bintree_Generate - Generates a balanced binary tree from given input.
+		Bintree_Reset - Resets a position in a tree.
+		Bintree_FindValue - Finds the pointer for a value in the tree.
+		Bintree_Add - Adds an item to a generated tree.
+		Bintree_Delete - Removes an item from a tree.
+		Bintree_UpdatePointers - Updates the pointers after a target change.
+	Static:
+		Bintree_Compress - Removes space from an altered tree.
+		Bintree_FindMin - Finds the smallest value on a branch.
+		Bintree_FindMax - Finds the largest value on a branch.
+	Inline:
+		Bintree_Sort - Entry point for Bintree_QSort.
+		Bintree_Fill - Entry point for Bintree_SortHalf.
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	BINTREE_NO_BRANCH - Nowhere to go from the number in required direction.
+	BINTREE_NOT_FOUND - Failure return.
+Enums:
+	E_BINTREE_TREE - Structure of a leaf of a binary tree.
+	E_BINTREE_INPUT - Structure of an array of data to be added to a tree.
+Macros:
+	-
+Tags:
+	Bintree - Binary tree type.
+Variables:
+	Global:
+		-
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#define BINTREE_NO_BRANCH -1
+#define BINTREE_NOT_FOUND -1
+
+enum E_BINTREE_TREE
+{
+	E_BINTREE_TREE_VALUE,
+	E_BINTREE_TREE_LEFT,
+	E_BINTREE_TREE_RIGHT,
+	E_BINTREE_TREE_PARENT,
+	E_BINTREE_TREE_POINTER
+}
+
+enum E_BINTREE_INPUT
+{
+	E_BINTREE_INPUT_VALUE,
+	E_BINTREE_INPUT_POINTER
+}
+
+//#define leafs<%1> %1][E_BINTREE_TREE
+//#define Bintree:%1[%2] Bintree:%1[%2][E_BINTREE_TREE]
+#define BinaryTree:%1<%2> Bintree:%1[%2][E_BINTREE_TREE]
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Sort
+Params:
+	input[][E_BINTREE_INPUT] - Data to sort.
+	size - Size of data to sort.
+Return:
+	-
+Notes:
+	Entry point for Bintree_QSort.
+-*----------------------------------------------------------------------------*/
+
+#define Bintree_Sort(%1,%2) \
+	Bintree_QSort((%1), 0, (%2) - 1)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Fill
+Params:
+	BinaryTree:output<> - Destination for balanced tree.
+	data[][E_BINTREE_INPUT] - Source data.
+	size - Size of data.
+Return:
+	Bintree_SortHalf.
+Notes:
+	Entry point for Bintree_SortHalf.
+-*----------------------------------------------------------------------------*/
+
+#define Bintree_Fill(%1,%2,%3) \
+	Bintree_SortHalf((%1), (%2), 0, (%3), 0, BINTREE_NO_BRANCH)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Generate
+Params:
+	BinaryTree:output<> - Binary tree to store the data in.
+	input[][E_BINTREE_INPUT] - Input data to get the data from.
+	size - Number of items to sort.
+Return:
+	-
+Notes:
+	Just calls the sort and fill routines.
+-*----------------------------------------------------------------------------*/
+
+stock Bintree_Generate(BinaryTree:output<>, input[][E_BINTREE_INPUT], size)
+{
+	if (!size)
+	{
+		output[0][E_BINTREE_TREE_PARENT] = BINTREE_NO_BRANCH;
+		output[0][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+		output[0][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+		return 0;
+	}
+	Bintree_Sort(input, size);
+	Bintree_Fill(output, input, size);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Reset
+Params:
+	BinaryTree:tree<> - Array to reset.
+	pointer - Position to reset.
+Return:
+	-
+Notes:
+	Initialises the array for use.
+-*----------------------------------------------------------------------------*/
+
+stock Bintree_Reset(BinaryTree:tree<>, pointer = 0)
+{
+	tree[pointer][E_BINTREE_TREE_VALUE] = 0;
+	tree[pointer][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+	tree[pointer][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+	tree[pointer][E_BINTREE_TREE_PARENT] = BINTREE_NO_BRANCH;
+	tree[pointer][E_BINTREE_TREE_POINTER] = BINTREE_NOT_FOUND;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_FindValue
+Params:
+	BinaryTree:tree<> - Tree to find the data in.
+	value - Value to search for.
+	&cont - Start point.
+	&old - The last real leaf.
+Return:
+	-
+Notes:
+	Itterates through the array following the various paths till it locates
+	the value provided or reaches a dead end.  If the current value is greater
+	than the search value, the search goes left, otherwise right.
+	
+	If cont is not -1 the search will start from the data pointed to by the
+	data pointed to by conts' right path, this is to allow collisions to be
+	passed over if you want a subsequent one.
+-*----------------------------------------------------------------------------*/
+
+stock Bintree_FindValue(BinaryTree:tree<>, value, &cont = 0, &old = 0)
+{
+	new
+		treeValue;
+	while (cont != BINTREE_NO_BRANCH)
+	{
+		old = cont;
+		treeValue = tree[old][E_BINTREE_TREE_VALUE];
+		if (value < treeValue) cont = tree[old][E_BINTREE_TREE_LEFT];
+		else
+		{
+			cont = tree[old][E_BINTREE_TREE_RIGHT];
+			if (value == treeValue)
+			{
+				return tree[old][E_BINTREE_TREE_POINTER];
+			}
+		}
+	}
+	return BINTREE_NOT_FOUND;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_QSort
+Params:
+	numbers[][E_BINTREE_INPUT] - Data to sort.
+	left - Start index.
+	right - End index.
+Return:
+	-
+Notes:
+	Custom version of QSort (see YSI_misc) allows for E_BINTREE_INPUT data
+	types, preserving the relative pointers for the sorted data.
+-*----------------------------------------------------------------------------*/
+
+Bintree_QSort(numbers[][E_BINTREE_INPUT], left, right)
+{
+	new
+		pivot = numbers[left][E_BINTREE_INPUT_VALUE],
+		pointer = numbers[left][E_BINTREE_INPUT_POINTER],
+		l_hold = left,
+		r_hold = right;
+	while (left < right)
+	{
+		while ((numbers[right][E_BINTREE_INPUT_VALUE] >= pivot) && (left < right)) right--;
+		if (left != right)
+		{
+			numbers[left][E_BINTREE_INPUT_VALUE] = numbers[right][E_BINTREE_INPUT_VALUE];
+			numbers[left][E_BINTREE_INPUT_POINTER] = numbers[right][E_BINTREE_INPUT_POINTER];
+			left++;
+		}
+		while ((numbers[left][E_BINTREE_INPUT_VALUE] <= pivot) && (left < right)) left++;
+		if (left != right)
+		{
+			numbers[right][E_BINTREE_INPUT_VALUE] = numbers[left][E_BINTREE_INPUT_VALUE];
+			numbers[right][E_BINTREE_INPUT_POINTER] = numbers[left][E_BINTREE_INPUT_POINTER];
+			right--;
+		}
+	}
+	numbers[left][E_BINTREE_INPUT_VALUE] = pivot;
+	numbers[left][E_BINTREE_INPUT_POINTER] = pointer;
+	pivot = left;
+	left = l_hold;
+	right = r_hold;
+	if (left < pivot) Bintree_QSort(numbers, left, pivot - 1);
+	if (right > pivot) Bintree_QSort(numbers, pivot + 1, right);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_SortHalf
+Params:
+	BinaryTree:output<> - Destination array.
+	data[][E_BINTREE_INPUT] - Source array.
+	index - Start index of the source for processing.
+	upper - End index of the source for processing.
+	offset - Current offset in the destination array for writing.
+Return:
+	Size of balanced tree.
+Notes:
+	Recursively calls itself.  Bisects the passed array and passed each half
+	back to itself, with the middle value of each half being the left and
+	right branches of the middle value of the passed array (which isn't
+	included in either bisected half).  This is itterative so those are again
+	split and again split.  If the passed array is only one or two elements
+	big the behaviour is set and hardcoded.
+	
+	Equal values SHOULD branch right, the code is designed for this however
+	the generation is not fully tested (it mostly branches right but adjacent
+	after bisecting values haven't been tested).
+	
+	Based on code written for PHP by me.
+-*----------------------------------------------------------------------------*/
+
+Bintree_SortHalf(BinaryTree:output<>, data[][E_BINTREE_INPUT], index, upper, offset, parent)
+{
+	new
+		num = upper - index;
+	if (!num) return offset;
+	if (num == 1)
+	{
+		output[offset][E_BINTREE_TREE_VALUE] = data[index][E_BINTREE_INPUT_VALUE];
+		output[offset][E_BINTREE_TREE_POINTER] = data[index][E_BINTREE_INPUT_POINTER];
+		output[offset][E_BINTREE_TREE_PARENT] = parent;
+		output[offset][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+		output[offset][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+	}
+	else if (num == 2)
+	{
+		output[offset][E_BINTREE_TREE_VALUE] = data[index][E_BINTREE_INPUT_VALUE];
+		output[offset][E_BINTREE_TREE_POINTER] = data[index][E_BINTREE_INPUT_POINTER];
+		output[offset][E_BINTREE_TREE_PARENT] = parent;
+		output[offset][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+		output[offset][E_BINTREE_TREE_RIGHT] = ++offset;
+		output[offset][E_BINTREE_TREE_VALUE] = data[++index][E_BINTREE_INPUT_VALUE];
+		output[offset][E_BINTREE_TREE_POINTER] = data[index][E_BINTREE_INPUT_POINTER];
+		output[offset][E_BINTREE_TREE_PARENT] = offset - 1;
+		output[offset][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+		output[offset][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+	}
+	else
+	{
+		new
+			half = num / 2,
+			off = half + index,
+			right;
+		while (off && data[off][E_BINTREE_INPUT_VALUE] == data[off - 1][E_BINTREE_INPUT_VALUE]) off--;
+		right = Bintree_SortHalf(output, data, index, off, offset + 1, offset);
+		output[offset][E_BINTREE_TREE_VALUE] = data[off][E_BINTREE_INPUT_VALUE];
+		output[offset][E_BINTREE_TREE_POINTER] = data[off][E_BINTREE_INPUT_POINTER];
+		output[offset][E_BINTREE_TREE_PARENT] = parent;
+		output[offset][E_BINTREE_TREE_LEFT] = offset + 1;
+		output[offset][E_BINTREE_TREE_RIGHT] = right;
+		return Bintree_SortHalf(output, data, off + 1, upper, right, offset);
+	}
+	return offset + 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Add
+Params:
+	BinaryTree:data<> - Array to add to.
+	pointer - Pointer to add.
+	value - Value to add.
+	offset - Location in the array to store the data.
+	maxsize - Size of data.
+Return:
+	Next free location
+Notes:
+	-
+
+native Bintree_Add(BinaryTree:tree<>, pointer, value, offset, maxsize = sizeof (data));
+
+-*----------------------------------------------------------------------------*/
+
+stock Bintree_Add(BinaryTree:data<>, pointer, value, offset, maxsize = sizeof (data))
+{
+	if (offset >= maxsize) return BINTREE_NOT_FOUND;
+	if (offset)
+	{
+		new
+			leaf,
+			old;
+		while (Bintree_FindValue(data, value, leaf, old) != BINTREE_NOT_FOUND) continue;
+		//Bintree_Reset(data, offset);
+		if (value < data[old][E_BINTREE_TREE_VALUE]) data[old][E_BINTREE_TREE_LEFT] = offset;
+		else data[old][E_BINTREE_TREE_RIGHT] = offset;
+		data[offset][E_BINTREE_TREE_PARENT] = old;
+		data[offset][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+		data[offset][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+		data[offset][E_BINTREE_TREE_VALUE] = value;
+		data[offset][E_BINTREE_TREE_POINTER] = pointer;
+		return offset + 1;
+	}
+	else
+	{
+		data[0][E_BINTREE_TREE_PARENT] = BINTREE_NO_BRANCH;
+		data[0][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+		data[0][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+		data[0][E_BINTREE_TREE_VALUE] = value;
+		data[0][E_BINTREE_TREE_POINTER] = pointer;
+		return 1;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Delete
+Params:
+	BinaryTree:tree<> - Data.
+	index - Index to remove.
+	count - Number of binary tree items.
+Return:
+	-
+Notes:
+	The left branch is usually larger due to the division
+	method used so we start there.  Even though right is
+	>= and left is only < in even sized arrays the greater
+	chunk (unless there's only 2 items) goes left.
+	
+	Called itteratively to ensure branches are maintained.
+-*----------------------------------------------------------------------------*/
+
+stock Bintree_Delete(BinaryTree:source<>, index, count)
+{
+	new
+		branch,
+		old = index;
+	while (TRUE)
+	{
+		if ((branch = source[old][E_BINTREE_TREE_LEFT]) != BINTREE_NO_BRANCH) branch = Bintree_FindMax(source, branch);
+		else if ((branch = source[old][E_BINTREE_TREE_RIGHT]) != BINTREE_NO_BRANCH) branch = Bintree_FindMin(source, branch);
+		else
+		{
+			if ((branch = source[old][E_BINTREE_TREE_PARENT]) != BINTREE_NO_BRANCH)
+			{
+				if (source[branch][E_BINTREE_TREE_LEFT] == old) source[branch][E_BINTREE_TREE_LEFT] = BINTREE_NO_BRANCH;
+				else source[branch][E_BINTREE_TREE_RIGHT] = BINTREE_NO_BRANCH;
+			}
+			return Bintree_Compress(source, old, count);
+		}
+		new
+			value = source[old][E_BINTREE_TREE_VALUE],
+			pointer = source[old][E_BINTREE_TREE_POINTER];
+		source[old][E_BINTREE_TREE_VALUE] = source[branch][E_BINTREE_TREE_VALUE];
+		source[old][E_BINTREE_TREE_POINTER] = source[branch][E_BINTREE_TREE_POINTER];
+		source[branch][E_BINTREE_TREE_VALUE] = value;
+		source[branch][E_BINTREE_TREE_POINTER] = pointer;
+		old = branch;
+	}
+	return BINTREE_NO_BRANCH;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_Compress
+Params:
+	BinaryTree:tree<> - Array to compress.
+	index - Point to start at.
+	count - Number of items total.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+static stock Bintree_Compress(BinaryTree:data<>, index, count)
+{
+	new
+		index2 = index + 1;
+	while (index < count)
+	{
+		new
+			left = (data[index][E_BINTREE_TREE_LEFT] = data[index2][E_BINTREE_TREE_LEFT]),
+			right = (data[index][E_BINTREE_TREE_RIGHT] = data[index2][E_BINTREE_TREE_RIGHT]),
+			parent = (data[index][E_BINTREE_TREE_PARENT] = data[index2][E_BINTREE_TREE_PARENT]);
+		data[index][E_BINTREE_TREE_VALUE] = data[index2][E_BINTREE_TREE_VALUE];
+		data[index][E_BINTREE_TREE_POINTER] = data[index2][E_BINTREE_TREE_POINTER];
+		if (left != BINTREE_NO_BRANCH) data[left][E_BINTREE_TREE_PARENT] = index;
+		if (right != BINTREE_NO_BRANCH) data[right][E_BINTREE_TREE_PARENT] = index;
+		if (parent != BINTREE_NO_BRANCH)
+		{
+			if (data[parent][E_BINTREE_TREE_LEFT] == index2) data[parent][E_BINTREE_TREE_LEFT] = index;
+			else if (data[parent][E_BINTREE_TREE_RIGHT] == index2) data[parent][E_BINTREE_TREE_RIGHT] = index;
+		}
+		index++;
+		index2++;
+	}
+	return count - 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_FindMin
+Params:
+	BinaryTree:data<> - Array to search.
+	offset - Start of branch to search.
+Return:
+	-
+Notes:
+	Finds the smallest value on a branch
+-*----------------------------------------------------------------------------*/
+
+static stock Bintree_FindMin(BinaryTree:data<>, offset)
+{
+	new
+		branch;
+	while ((branch = data[offset][E_BINTREE_TREE_LEFT]) != BINTREE_NO_BRANCH) offset = branch;
+	return offset;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_FindMax
+Params:
+	BinaryTree:data<> - Array to search.
+	offset - Start of branch to search.
+Return:
+	-
+Notes:
+	Finds the largest value on a branch
+-*----------------------------------------------------------------------------*/
+
+static stock Bintree_FindMax(BinaryTree:data<>, offset)
+{
+	new
+		branch;
+	while ((branch = data[offset][E_BINTREE_TREE_RIGHT]) != BINTREE_NO_BRANCH) offset = branch;
+	return offset;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bintree_UpdatePointers
+Params:
+	BinaryTree:data<> - Data to modify.
+	offset - Pointer to modify values after.
+	mod - Value to modify by.
+Return:
+	-
+Notes:
+	Used for updating pointers when the target data has been modifed (i.e. a
+	value has been removed from the array and the array shifted).
+-*----------------------------------------------------------------------------*/
+
+stock Bintree_UpdatePointers(BinaryTree:data<>, offset, size, mod = -1)
+{
+	for (new i = 0; i < size; i++)
+	{
+		if (data[i][E_BINTREE_TREE_POINTER] > offset) data[i][E_BINTREE_TREE_POINTER] += mod;
+	}
+}

+ 310 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_bit.inc

@@ -0,0 +1,310 @@
+/*----------------------------------------------------------------------------*-
+					===========================
+					Y Sever Includes - Bit Core
+					===========================
+Description:
+	Provides functions for bit manipulation and bit arrays greater than 32bits.
+	The arrays are usually bigger than required due to cell boundaries but this
+	shouldn't cause a major problem (bit tests on the 101st bit of a 100 bit
+	array won't return 0 for out of bounds, but the 129th will).
+	
+	Note that y_commands has a few optimisations which bypass the code in here
+	so any modifications to bit array layouts will need to be reflected there.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.2
+Changelog:
+	01/12/08:
+		Rewrote most of the code to use shifts and ands not divs and mods.
+	24/06/07:
+		Added Bit_GetBit
+	18/06/07:
+		Added Bit_GetCount
+	30/04/07:
+		Added Bit_SetAll
+	15/04/07:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		Bit_Set - Sets a slot to the given value.
+		Bit_Get - Gets a slot state.
+		Bit_SetAll - Sets all the slots in an array to the same thing.
+		Bit_GetAll - Gets the number of 1s in a bit array.
+	Static:
+		-
+	Inline:
+		Bit_Bits - Gets the number of cells required for a bit array.
+		Bit_Let - Sets a slot to 1.
+		Bit_Vet - Sets a slot to 0.
+		Bit_GetBits - Gets the bit at a slot unsafely.
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	CELLSHIFT - Number of bits that can hold "cellbits"
+Enums:
+	-
+Macros:
+	-
+Tags:
+	Bit - Bit array type.
+Variables:
+	Global:
+		-
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+// This is redefined below, don't worry.  It's like this so the function
+// prototypes can use a familiar syntax.
+#define BitArray:%1<%2> Bit:%1[%2]
+
+#if cellbits == 32
+	#define CELLSHIFT (5)
+#else
+	#if cellbits == 64
+		#define CELLSHIFT (6)
+	#else
+		#if cellbits == 16
+			#define CELLSHIFT (4)
+		#else
+			#error Unkown cell size
+		#endif
+	#endif
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Bits
+Params:
+	size - Number of bits required.
+Return:
+	Number of cells required for the bit array.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Bit_Bits(%1) (((%1)+cellbits-1)/cellbits)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Slot
+Params:
+	value - Value to get the slot for.
+Return:
+	The true array slot for this value.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Bit_Slot(%1) ((_:%1)>>>CELLSHIFT)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Mask
+Params:
+	value - Value to get the mask for
+Return:
+	The bit in the array slot to use.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Bit_Mask(%1) (Bit:(1<<((_:%1)&cellbits-1)))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_GetBit
+Params:
+	Bit:array[] - Array of bits.
+	slot - Bit slot.
+Return:
+	State of the provided slot, 0 on fail.
+Notes:
+	Unsafe but faster for when you're sure you're within range.
+-*----------------------------------------------------------------------------*/
+
+#define Bit_GetBit(%1,%2) (%1[(%2)>>>CELLSHIFT]&Bit:(1<<((%2)&cellbits-1)))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Get
+Params:
+	Bit:array[] - Array of bits.
+	slot - Bit slot.
+	size - Size of array.
+Return:
+	State of the provided slot, 0 on fail.
+Notes:
+	-
+
+native Bit_Get(BitArray:array<>, slot);
+
+-*----------------------------------------------------------------------------*/
+
+#define Bit_Get(%1,%2) bool:Bit_GetBit(Bit:%1,_:%2)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Let
+Params:
+	Bit:array[] - Array of bits.
+	slot - Bit slot.
+Return:
+	-
+Notes:
+	Sets the slot to 1.
+-*----------------------------------------------------------------------------*/
+
+#define Bit_Let(%1,%2) %1[(%2)>>>CELLSHIFT]|=Bit:(1<<((%2)&cellbits-1))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Vet
+Params:
+	Bit:array[] - Array of bits.
+	slot - Bit slot.
+Return:
+	-
+Notes:
+	Sets the slot to 0.
+-*----------------------------------------------------------------------------*/
+
+#define Bit_Vet(%1,%2) %1[(%2)>>>CELLSHIFT]&=Bit:~(1<<((%2)&cellbits-1))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_Set
+Params:
+	Bit:array[] - Array of bits.
+	slot - Bit slot.
+	bool:set - State to set the slot to.
+	size - Size of array.
+Return:
+	-
+Notes:
+	-
+
+native Bit_Set(BitArray:array<>, slot, bool:set, size = sizeof (array));
+
+-*----------------------------------------------------------------------------*/
+
+stock Bit_Set(BitArray:array<>, slot, bool:set, size = sizeof (array))
+{
+	if (slot >>> CELLSHIFT >= size) return;
+	if (set) Bit_Let(array, slot);
+	else Bit_Vet(array, slot);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_SetAll
+Params:
+	Bit:array[] - Array to set all values of.
+	bool:set - Wether to set them all 0 or 1.
+	size - Size of array.
+Return:
+	-
+Notes:
+	-
+
+native Bit_SetAll(BitArray:array<>, bool:set, size = sizeof (array));
+
+-*----------------------------------------------------------------------------*/
+
+stock Bit_SetAll(BitArray:array<>, bool:set, size = sizeof (array))
+{
+	new
+		Bit:val = (set) ? (Bit:0xFFFFFFFF) : (Bit:0);
+	for (new i = 0; i != size; ++i) array[i] = val;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Bit_GetCount
+Params:
+	Bit:array[] - Array to count.
+	size - Size of array.
+Return:
+	Number of 1s in the array.
+Notes:
+	Code from:
+	http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
+
+native Bit_Count(BitArray:array<>, size = sizeof (array));
+
+-*----------------------------------------------------------------------------*/
+
+stock Bit_GetCount(BitArray:array<>, size = sizeof (array))
+{
+	new
+		count,
+		v;
+	for (new i = 0; i != size; ++i)
+	{
+		v = _:array[i];
+		v = v - ((v >>> 1) & 0x55555555);
+		v = (v & 0x33333333) + ((v >>> 2) & 0x33333333);
+		count += ((v + (v >>> 4) & 0xF0F0F0F) * 0x1010101) >>> 24;
+	}
+	return count;
+}
+
+#define bits<%1> \
+	Bit_Bits(%1)
+
+#define bitsof(%0) (sizeof(%0)*cellbits)
+
+#undef BitArray
+#define BitArray:%1<%2> Bit:%1[bits<%2>]

+ 1294 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_classes.inc

@@ -0,0 +1,1294 @@
+/*----------------------------------------------------------------------------*-
+					======================================
+					 y_classes - Advanced class selection 
+					======================================
+Description:
+	Allows greater control over classes so not everyone has every class.  Uses
+	a form of compression for locations.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.1
+Changelog:
+	02/01/08:
+		First '08 edit - Fixed minus numbers in spawn points.
+	18/11/07:
+		Improved location compression to allow larger areas.
+		Moved position code to Class_OnPlayerSpawn to reduce overhead.
+	10/10/07:
+		Fixed spawn data problem.
+	31/08/07:
+		Added cheap master system - YSI_SLAVE_CLASSs can't be master.
+	05/08/07:
+		Fixed a few bugs with repeated selection.
+	04/08/07:
+		First version.
+Functions:
+	Public:
+		Class_AddRemote - Adds a class to the remote master.
+		Class_Remote - Updates settings remotely.
+	Core:
+		Class_Class - Sets up the system.
+		Class_OnPlayerRequestSpawn - Called when a player requests a spawn.
+		Class_OnPlayerRequestClass - Called when a player requests a class.
+		Class_OnPlayerConnect - Called when a player connects.
+	Stock:
+		Class_Delete - Removes a class.
+		Class_SetPlayer - Sets whether or not a player can use a class.
+		Class_Disable - Disables a class.
+		Class_Enable - Enables a disabled class.
+		Class_AddForGroup - Adds a class to the system for only one group.
+		Class_Add - Adds a class to the system.
+		Class_AddEx - Adds a class to the system with group selection and setting.
+		Class_AddWithGroupSet - Adds a class and sets their group on selection.
+		Class_AllowReselection - Allows or disallows people to return to reselect a class.
+		Class_RequireSpawnLogin - Require people to login before spawning.
+		Class_RequireSelectionLogin - Require people to login before selecting.
+		Class_RequireSelectionReg - Require people to register before selecting.
+		Class_RequireSpawnReg - Require people to register before spawning.
+	Static:
+		Class_AddClass - Adds a class, wrapped by API and remote functions.
+	Inline:
+		Class_IsActive - Checks a class is active.
+		Class_Enabled - Checks a class is enabled.
+		Class_IsValid - Checks a class is valid.
+		Class_X - Gets a classes x position.
+		Class_Y - Gets a classes y position.
+		Class_Z - Gets a classes z position.
+		Class_A - Gets a classes angle.
+		Class_Skin - Gets a classes skin.
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	MAX_CLASSES - Maximum number of classes storeable by the system.
+	CLASS_LEFT - Flag for last internal class viewed.
+	CLASS_MIDDLE - Flag for last internal class viewed.
+	CLASS_RIGHT - Flag for last internal class viewed.
+Enums:
+	e_CLASS_FLAGS - Small data for individual classes.
+	E_CLASS - Class data structure.
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-
+	Static:
+		YSI_g_sClasses - Data for classes.
+		YSI_g_sPlayerClass - Player's current classes.
+		YSI_g_sLeft - Handle for the first internal class.
+		YSI_g_sMiddle - Handle for the second internal class.
+		YSI_g_sRight - Handle for the third internal class.
+		YSI_g_sClassCount - Number of classes stored.
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+#include <YSI\y_bit>
+#include <YSI\y_debug>
+
+// Simple hookable callbacks.
+#define ALS_PREFIX Class
+#include <YSI\y_als>
+
+// Only the gamemode can run this.
+#if defined FILTERSCRIPT
+	#define YSIM_C_ENABLE
+	
+	#define OnPlayerRequestClassEx OnPlayerRequestClassExFS
+	#define OnPlayerRequestSpawnEx OnPlayerRequestSpawnExFS
+#else
+	#define YSIM_S_ENABLE
+	
+	#define OnPlayerRequestClassEx OnPlayerRequestClassExGM
+	#define OnPlayerRequestSpawnEx OnPlayerRequestSpawnExGM
+#endif
+
+#include <YSI\y_master>
+
+#if !defined MAX_CLASSES
+	#define MAX_CLASSES                 (256)
+#endif
+
+#if !defined MAX_CLASS_SPAWN_WEAPONS
+	#define MAX_CLASS_SPAWN_WEAPONS     (13)
+#endif
+
+#if !defined WEAPON_ARMOUR
+	#define WEAPON_ARMOUR               (100)
+#endif
+
+#define INFINATE_ARMOUR                 (0x00800000)
+
+#define _CLASS_WEAPON_CODE if((n-w)&0x01)while(w!=n&&s<MAX_CLASS_SPAWN_WEAPONS){cw=getarg(w++);if(cw==WEAPON_ARMOUR)weapons[MAX_CLASS_SPAWN_WEAPONS]=WEAPON_ARMOUR|(100<<8);else if(w==n)printf("*** Internal Error: Insufficient class weapon data.");else weapons[s++]=(cw&0xFF)|(getarg(w++)<<8);}else while(w!=n&&s<MAX_CLASS_SPAWN_WEAPONS){cw=getarg(w++);if(cw==WEAPON_ARMOUR)weapons[MAX_CLASS_SPAWN_WEAPONS]=WEAPON_ARMOUR|(getarg(w++)<<8);else weapons[s++]=(cw&0xFF)|(getarg(w++)<<8);}
+
+#define _GROUP_MAKE_NAME_CLASSES<%0...%1>   %0Class%1
+#define _GROUP_MAKE_LIMIT_CLASSES           MAX_CLASSES
+
+//forward Class_ResolveGroups(class, Group:forgroup, bool:cp);
+
+#include <YSI\y_groups>
+#include <YSI\y_playerarray>
+
+#include <YSI\y_iterate>
+
+enum e_CLASS_FLAGS (<<= 1)
+{
+	e_CLASS_FLAGS_SKIN   = 0x0000FFFF,
+	e_CLASS_FLAGS_ACTIVE = 0x01000000,
+	e_CLASS_FLAGS_ENABLED,
+	e_CLASS_FLAGS_DEFAULT
+}
+
+enum E_CLASS
+{
+	e_CLASS_FLAGS:E_CLASS_FLAGS,
+	Float:E_CLASS_X,
+	Float:E_CLASS_Y,
+	Float:E_CLASS_Z,
+	Float:E_CLASS_A,
+	E_CLASS_WEAPONS[MAX_CLASS_SPAWN_WEAPONS + 1],
+	//#if defined _YSI_SYSTEM_GROUPS
+	E_CLASS_GROUP,
+	//#endif
+	PlayerArray:E_CLASS_PLAYERS<MAX_PLAYERS>
+	//Bit:E_CLASS_PLAYERS[PLAYER_BIT_ARRAY]
+}
+
+enum e_CLASS_OPTION (<<= 1)
+{
+	e_CLASS_OPTION_NORE = 1,
+	e_CLASS_OPTION_LOGIN_SELECT,
+	e_CLASS_OPTION_LOGIN_SPAWN,
+	e_CLASS_OPTION_REG_SELECT,
+	e_CLASS_OPTION_REG_SPAWN,
+	e_CLASS_OPTION_HAS_RC_CALLBACK,
+	e_CLASS_OPTION_HAS_RS_CALLBACK
+}
+
+enum e_PLAYER_CLASS (<<= 1)
+{
+	e_PLAYER_CLASS_SKIN  = 0x000FFFFF,
+	e_PLAYER_CLASS_PRESS = 0x00E00000,
+	e_PLAYER_CLASS_RIGHT = 0x00200000,
+	e_PLAYER_CLASS_MIDDLE,
+	e_PLAYER_CLASS_LEFT,
+	e_PLAYER_CLASS_EVER,
+	e_PLAYER_CLASS_DENY,
+	e_PLAYER_CLASS_SPAWNED,
+	e_PLAYER_CLASS_SELECT,
+	e_PLAYER_CLASS_RETURN,
+	e_PLAYER_CLASS_AFTER_RETURN,
+	e_PLAYER_CLASS_TEMP_SPAWN
+}
+
+#define e_PLAYER_CLASS_SPAWN_CHECK      (e_PLAYER_CLASS_AFTER_RETURN|e_PLAYER_CLASS_TEMP_SPAWN)
+
+#define CLASS_MOVE_LEFT                 (e_PLAYER_CLASS:-1)
+#define CLASS_MOVE_RIGHT                (e_PLAYER_CLASS:1)
+
+static stock
+	YSI_g_sClasses[MAX_CLASSES][E_CLASS],
+	e_PLAYER_CLASS:YSI_g_sPlayerClass[MAX_PLAYERS],
+	YSI_g_sLeft,
+	YSI_g_sMiddle,
+	YSI_g_sRight,
+	YSI_g_sClassCount,
+	e_CLASS_OPTION:YSI_g_sClassOptions,
+	YSI_g_sLastRefuse[MAX_PLAYERS];
+
+forward OnPlayerRequestSpawnEx(playerid, classid);
+forward OnPlayerRequestClassEx(playerid, classid);
+
+ALS_DATA<>
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_IsActive
+Params:
+	classid - Class to check.
+Return:
+	-
+Notes:
+	Checks if a class is currently in use.
+-*----------------------------------------------------------------------------*/
+
+#define Class_IsActive(%1) \
+	(YSI_g_sClasses[(%1)][E_CLASS_FLAGS] & e_CLASS_FLAGS_ACTIVE)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Enabled
+Params:
+	classid - Class to check.
+Return:
+	-
+Notes:
+	Checks if a class is currently available for viewing.
+-*----------------------------------------------------------------------------*/
+
+#define Class_Enabled(%1) \
+	(YSI_g_sClasses[(%1)][E_CLASS_FLAGS] & e_CLASS_FLAGS_ENABLED)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_IsValid
+Params:
+	classid - Class to check.
+Return:
+	-
+Notes:
+	Checks if a number is a valid classid and active.
+-*----------------------------------------------------------------------------*/
+
+#define Class_IsValid(%1) \
+	((%1) >= 0 && (%1) < MAX_CLASSES && Class_IsActive((%1)))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_X
+Params:
+	classid - Class to get X location for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Class_X(%1) \
+	YSI_g_sClasses[(%1)][E_CLASS_X]
+	//(float(YSI_g_sClasses[(%1)][E_CLASS_XY] >> 16) / 10.0)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Y
+Params:
+	classid - Class to get Y location for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Class_Y(%1) \
+	YSI_g_sClasses[(%1)][E_CLASS_Y]
+	//(float((YSI_g_sClasses[(%1)][E_CLASS_XY] & 0x7FFF) | ((YSI_g_sClasses[(%1)][E_CLASS_XY] & 0x8000) ? (0xFFFF8000) : (0))) / 10.0)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Z
+Params:
+	classid - Class to get Z location for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Class_Z(%1) \
+	YSI_g_sClasses[(%1)][E_CLASS_Z]
+	//(float(YSI_g_sClasses[(%1)][E_CLASS_ZA] >> 16) / 10.0)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_A
+Params:
+	classid - Class to get angle for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Class_A(%1) \
+	YSI_g_sClasses[(%1)][E_CLASS_A]
+	//(float((YSI_g_sClasses[(%1)][E_CLASS_ZA] & 0x7FFF) | (YSI_g_sClasses[(%1)][E_CLASS_ZA] & 0x8000) ? (0xFFFF8000) : (0)) / 10.0)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Skin
+Params:
+	classid - Class to get skin for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Class_Skin(%1) \
+	(YSI_g_sClasses[(%1)][E_CLASS_FLAGS] & e_CLASS_FLAGS_SKIN)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Class
+Params:
+	-
+Return:
+	-
+Notes:
+	Creates three real player classes so you can scroll correctly with the
+	direction being detected.
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+	{
+#else
+	public OnGameModeInit()
+	{
+		// This code placement is not generic.
+		YSI_g_sLeft = AddPlayerClass(0, 1958.0, 1343.0, 15.0, 269.0, 0, 0, 0, 0, 0, 0);
+		YSI_g_sMiddle = AddPlayerClass(0, 1958.0, 1343.0, 15.0, 269.0, 0, 0, 0, 0, 0, 0);
+		YSI_g_sRight = AddPlayerClass(0, 1958.0, 1343.0, 15.0, 269.0, 0, 0, 0, 0, 0, 0);
+		YSI_g_sClassOptions = ((funcidx("OnPlayerRequestClassExGM") == -1) ? (e_CLASS_OPTION:0) : (e_CLASS_OPTION_HAS_RC_CALLBACK)) | ((funcidx("OnPlayerRequestSpawnExGM") == -1) ? (e_CLASS_OPTION:0) : (e_CLASS_OPTION_HAS_RS_CALLBACK));
+#endif
+		ALS_DETECT<PlayerConnect>
+		//ALS_DETECT<PlayerRequestClass>
+		//ALS_DETECT<PlayerRequestSpawn>
+		ALS_DETECT<PlayerSpawn>
+		ALS_DETECT<PlayerDeath>
+		CallLocalFunction("Class_OnScriptInit", "");
+		return 1;
+	}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit Class_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit Class_OnScriptInit
+#endif
+forward Class_OnScriptInit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_OnPlayerRequestSpawn
+Params:
+	playerid - Player who selected a spawn.
+Return:
+	-
+Notes:
+	Has inbuilt protection for a bug where selections aren't correctly
+	debounced so you can press shift twice at once which can mess up some
+	scripts (e.g. the example team selection script).  Calls
+	OnPlayerRequestSpawnEx with an additional class parameter.
+-*----------------------------------------------------------------------------*/
+
+stock Class_ResolveGroups(class, Group:forgroup, bool:cp) <YSI_has_groups:n>
+{
+	P:3("Class_AddClass<n>: call Resolve %d %d %d", class, forgroup, cp);
+	if (!cp) PA_Init(YSI_g_sClasses[class][E_CLASS_PLAYERS], true);
+	else if (forgroup) {}
+	//Bit_SetAll(YSI_g_sClasses[class][E_CLASS_PLAYERS], true, bits<MAX_PLAYERS>);
+}
+
+stock Class_ResolveGroups(class, Group:forgroup, bool:cp) <>
+{
+	P:3("Class_AddClass<>: call Resolve %d %d %d", class, forgroup, cp);
+	if (!cp) PA_Init(YSI_g_sClasses[class][E_CLASS_PLAYERS], true);
+	else if (forgroup) {}
+	//Bit_SetAll(YSI_g_sClasses[class][E_CLASS_PLAYERS], true, bits<MAX_PLAYERS>);
+}
+
+RA:Class_OnPlayerRequestSpawn(playerid)
+{
+	P:2("Class_OnPlayerRequestSpawn called");
+	if (YSI_g_sClassCount)
+	{
+		new
+			e_PLAYER_CLASS:playerclass = YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_SKIN;
+		if (!Class_Enabled(playerclass) || PA!(YSI_g_sClasses[playerclass][E_CLASS_PLAYERS], playerid))
+		{
+			ALS_CALL<PlayerRequestSpawn>
+		}
+		// Don't need this line anymore - it's all done in OnPlayerRequestClass
+		// OnPlayerSpawn.
+		//SetSpawnInfo(playerid, NO_TEAM, Class_Skin(playerclass), Class_X(playerclass), Class_Y(playerclass), Class_Z(playerclass), Class_A(playerclass), 0, 0, 0, 0, 0, 0);
+		new
+			time = GetTickCount();
+		if ((time - YSI_g_sLastRefuse[playerid]) >= 1000)
+		{
+			CallRemoteFunction("OnPlayerRequestSpawnExFS", "ii", playerid, playerclass);
+			new
+				ret = !(YSI_g_sClassOptions & e_CLASS_OPTION_HAS_RS_CALLBACK)|| CallLocalFunction("OnPlayerRequestSpawnExGM", "ii", playerid, playerclass);
+			P:4("Class_OnPlayerRequestSpawn() return: %d", ret);
+			if (ret)
+			{
+				//#if defined _YSI_SYSTEM_GROUPS
+				new
+					Group:newgroup = YSI_g_sClasses[playerclass][E_CLASS_GROUP];
+				P:4("Class_OnPlayerRequestSpawn() newgroup: %d", newgroup);
+				if (newgroup != -1) Class_ResolveGroups(playerid, newgroup, true); //Group_AddPlayer(newgroup, playerid);
+				//#endif
+				if (ret == 1)
+				{
+					//ALS_CALL<PlayerRequestSpawn>
+					return 1;
+				}
+				else if(ret == -1)
+				{
+					YSI_g_sPlayerClass[playerid] |= e_PLAYER_CLASS_SKIN;
+					// The order is VERY important here - this will actually
+					// call the function further down (directly below in fact).
+					OnPlayerRequestClass(playerid, YSI_g_sLeft);
+				}
+			}
+		}
+		YSI_g_sLastRefuse[playerid] = time;
+		return 0;
+	}
+	//ALS_CALL<PlayerRequestSpawn>
+	return 1;
+}
+
+/*#if defined _ALS_OnPlayerRequestSpawn
+	#undef OnPlayerRequestSpawn
+#else
+	#define _ALS_OnPlayerRequestSpawn
+#endif
+#define OnPlayerRequestSpawn Class_OnPlayerRequestSpawn
+ALS_FORWARD<PlayerRequestSpawn>*/
+
+#if defined _ALS_OnPlayerRequestSpawn
+	#undef OnPlayerRequestSpawn
+#else
+	#define _ALS_OnPlayerRequestSpawn
+#endif
+#define OnPlayerRequestSpawn(%0) OnPlayerRequestSpawnEx(%0,classid)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_OnPlayerRequestClass
+Params:
+	playerid - Player who requested a class.
+	class - Class they requested.
+Return:
+	-
+Notes:
+	The input is one of the three real classes used to detect selected
+	direction of alteration.  Scans for a class the player is allowed to use
+	and hot swaps it out.  Uses SetPlayerSkin AND SetSpawnInfo to combat bugs
+	with calling this from OnPlayerRequestSpawn (e.g. the example team script).
+	Calls OnPlayerRequestClassEx with the current internal class not the real
+	one.
+-*----------------------------------------------------------------------------*/
+
+static stock e_PLAYER_CLASS:Class_FindNew(playerid, e_PLAYER_CLASS:playerclass, e_PLAYER_CLASS:dir)
+{
+	if (playerclass >= e_PLAYER_CLASS:YSI_g_sClassCount)
+	{
+		playerclass = -dir;
+	}
+	new
+		e_PLAYER_CLASS:old = playerclass % e_PLAYER_CLASS:YSI_g_sClassCount;
+	do
+	{
+		playerclass = (playerclass + dir) % e_PLAYER_CLASS:YSI_g_sClassCount;
+		//P:4("Class_OnPlayerRequestClass() playerclass: %d", playerclass);
+		/*if (playerclass < e_PLAYER_CLASS:0)
+		{
+			playerclass = e_PLAYER_CLASS:(YSI_g_sClassCount - 1);
+		}
+		else if (playerclass >= e_PLAYER_CLASS:YSI_g_sClassCount)
+		{
+			playerclass = e_PLAYER_CLASS:0;
+		}*/
+		P:4("Class_FindNew: %d %d", playerclass, playerid);
+	}
+	while (playerclass != old && (!Class_Enabled(playerclass) || PA!(YSI_g_sClasses[playerclass][E_CLASS_PLAYERS], playerid)));
+	return playerclass;
+}
+
+RA:Class_OnPlayerRequestClass(playerid, classid)
+{
+	P:2("Class_OnPlayerRequestClass() start");
+	//YSI_g_sPlayerClass[playerid] |= e_PLAYER_CLASS_SELECT;
+	new
+		e_PLAYER_CLASS:playerclass = YSI_g_sPlayerClass[playerid],
+		e_PLAYER_CLASS:dir = CLASS_MOVE_RIGHT;
+	if ((YSI_g_sClassOptions & e_CLASS_OPTION_NORE) && (playerclass & e_PLAYER_CLASS_SPAWNED))
+	{
+		//YSI_g_sPlayerClass[playerid] &= ~e_PLAYER_CLASS_AFTER_RETURN;
+		// People aren't allowed to return to class selection.
+		SpawnPlayer(playerid);
+		return 1;
+	}
+	// Spawned from returning to class selection but not meant to.
+	P:3("Class_OnPlayerRequestClass(): Spawn check %d %d", (playerclass & e_PLAYER_CLASS_SPAWN_CHECK), e_PLAYER_CLASS_SPAWN_CHECK);
+	if ((playerclass & e_PLAYER_CLASS_SPAWN_CHECK) == e_PLAYER_CLASS_SPAWN_CHECK)
+	{
+		YSI_g_sPlayerClass[playerid] &= ~e_PLAYER_CLASS_SPAWN_CHECK;
+		// People aren't allowed to return to class selection.
+		playerclass &= e_PLAYER_CLASS_SKIN;
+		SetSpawnInfo(playerid, NO_TEAM, Class_Skin(e_PLAYER_CLASS:playerclass), Class_X(e_PLAYER_CLASS:playerclass), Class_Y(e_PLAYER_CLASS:playerclass), Class_Z(e_PLAYER_CLASS:playerclass), Class_A(e_PLAYER_CLASS:playerclass), 0, 0, 0, 0, 0, 0);
+		SpawnPlayer(playerid);
+		return 1;
+	}
+	if (playerclass & e_PLAYER_CLASS_DENY)
+	{
+		TogglePlayerControllable(playerid, false);
+		TogglePlayerSpectating(playerid, true);
+		return 0;
+	}
+	switch (playerclass & e_PLAYER_CLASS_PRESS)
+	{
+		case e_PLAYER_CLASS_RIGHT:
+		{
+			if (classid == YSI_g_sMiddle)
+			{
+				// Went from the right to the middle - that's a move left.
+				dir = CLASS_MOVE_LEFT;
+			}
+		}
+		case e_PLAYER_CLASS_MIDDLE:
+		{
+			if (classid == YSI_g_sLeft)
+			{
+				// Went from the middle to the left - that's a move left.
+				dir = CLASS_MOVE_LEFT;
+			}
+		}
+		default:
+		{
+			if (classid == YSI_g_sRight)
+			{
+				// Went from the left to the right - that's a wrap move left.
+				dir = CLASS_MOVE_LEFT;
+			}
+		}
+	}
+	if (classid == YSI_g_sMiddle) YSI_g_sPlayerClass[playerid] = e_PLAYER_CLASS_MIDDLE | (playerclass & (e_PLAYER_CLASS_AFTER_RETURN | e_PLAYER_CLASS_EVER));
+	else if (classid == YSI_g_sLeft) YSI_g_sPlayerClass[playerid] = e_PLAYER_CLASS_LEFT | (playerclass & (e_PLAYER_CLASS_AFTER_RETURN | e_PLAYER_CLASS_EVER));
+	else if (classid == YSI_g_sRight) YSI_g_sPlayerClass[playerid] = e_PLAYER_CLASS_RIGHT | (playerclass & (e_PLAYER_CLASS_AFTER_RETURN | e_PLAYER_CLASS_EVER));
+	if (playerclass & (e_PLAYER_CLASS_SPAWNED | e_PLAYER_CLASS_RETURN))
+	{
+		playerclass = e_PLAYER_CLASS_SKIN;
+	}
+	else
+	{
+		playerclass &= e_PLAYER_CLASS_SKIN;
+	}
+	if (!YSI_g_sClassCount)
+	{
+		SetSpawnInfo(playerid, NO_TEAM, 0, 1958.0, 1343.0, 15.0, 269.0, 0, 0, 0, 0, 0, 0);
+		SetPlayerSkin(playerid, 0);
+		P:1("*** Internal Error! No YSI classes found");
+	}
+	else
+	{
+		// Find the next available skin for this player.  I'm still not sure how
+		// this handles the case where you can't use any skin.  I'll have to
+		// look in to that.
+		playerclass = Class_FindNew(playerid, playerclass, dir);
+		P:4("Class_OnPlayerRequestClass() selected: %d", playerclass);
+	}
+	return Class_Goto(playerid, _:playerclass);
+	//ALS_CALL_EX<PlayerRequestClass, ret>
+}
+
+/*#if defined _ALS_OnPlayerRequestClass
+	#undef OnPlayerRequestClass
+#else
+	#define _ALS_OnPlayerRequestClass
+#endif
+#define OnPlayerRequestClass Class_OnPlayerRequestClass
+ALS_FORWARD<PlayerRequestClass>*/
+
+#if defined _ALS_OnPlayerRequestClass
+	#undef OnPlayerRequestClass
+#else
+	#define _ALS_OnPlayerRequestClass
+#endif
+#define OnPlayerRequestClass OnPlayerRequestClassEx
+
+RF:Class_Goto[ii](playerid, playerclass)
+{
+	// This now sets the REAL spawn information, including spawn location.
+	// 0.2 code
+	//SetSpawnInfo(playerid, NO_TEAM, Class_Skin(e_PLAYER_CLASS:playerclass), Class_X(e_PLAYER_CLASS:playerclass), Class_Y(e_PLAYER_CLASS:playerclass), Class_Z(e_PLAYER_CLASS:playerclass), Class_A(e_PLAYER_CLASS:playerclass), weapon1 & 0xFF, weapon1 >>> 8, weapon2 & 0xFF, weapon2 >>> 8, weapon3 & 0xFF, weapon3 >>> 8);
+	// 0.3 code
+	SetSpawnInfo(playerid, NO_TEAM, Class_Skin(e_PLAYER_CLASS:playerclass), Class_X(e_PLAYER_CLASS:playerclass), Class_Y(e_PLAYER_CLASS:playerclass), Class_Z(e_PLAYER_CLASS:playerclass), Class_A(e_PLAYER_CLASS:playerclass), 0, 0, 0, 0, 0, 0);
+	SetPlayerSkin(playerid, Class_Skin(e_PLAYER_CLASS:playerclass));
+	YSI_g_sPlayerClass[playerid] = (YSI_g_sPlayerClass[playerid] & (e_PLAYER_CLASS_PRESS | e_PLAYER_CLASS_EVER | e_PLAYER_CLASS_AFTER_RETURN)) | e_PLAYER_CLASS:playerclass | e_PLAYER_CLASS_SELECT;
+	// Save the last viewed class so that we know which direction the person
+	// went next time OnPlayerRequestClass is called.
+	P:2("Class_Goto() end");
+	// Call the OnPlayerRequestClassEx functions.
+	CallRemoteFunction("OnPlayerRequestClassExFS", "ii", playerid, playerclass);
+	return !(YSI_g_sClassOptions & e_CLASS_OPTION_HAS_RC_CALLBACK) || CallLocalFunction("OnPlayerRequestClassExGM", "ii", playerid, playerclass);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_OnPlayerConnect
+Params:
+	playerid - Player who joined.
+Return:
+	-
+Notes:
+	Resets the player's current class.
+-*----------------------------------------------------------------------------*/
+
+RA:Class_OnPlayerConnect(playerid)
+{
+	P:3("Class_OnPlayerConnect called");
+	YSI_g_sPlayerClass[playerid] = e_PLAYER_CLASS_SKIN;
+	ALS_CALL<PlayerConnect>
+}
+
+#if defined _ALS_OnPlayerConnect
+	#undef OnPlayerConnect
+#else
+	#define _ALS_OnPlayerConnect
+#endif
+#define OnPlayerConnect Class_OnPlayerConnect
+ALS_FORWARD<PlayerConnect>
+
+RF@v:Class_ReturnToSelection[i](playerid)
+{
+	// All of these lines are required to correctly send the player back to the
+	// class selection, unfortunately they also cause nasty side effects.
+	//TogglePlayerControllable(playerid, true);
+	/*if (YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_EVER)
+	{
+		//TogglePlayerControllable(playerid, true);
+		//YSI_g_sPlayerClass[playerid] &= e_PLAYER_CLASS_SPAWNED;
+		//SetPlayerHealth(playerid, 0.0);
+	}*/
+	ForceClassSelection(playerid);
+	//YSI_g_sPlayerClass[playerid] &= ~(e_PLAYER_CLASS_DENY | e_PLAYER_CLASS_SPAWNED);
+	//TogglePlayerControllable(playerid, true);
+	//YSI_g_sPlayerClass[playerid] &= e_PLAYER_CLASS_SPAWNED;
+	//ForceClassSelection(playerid);
+	TogglePlayerSpectating(playerid, false);
+	SetPlayerHealth(playerid, 0.0);
+	TogglePlayerControllable(playerid, false);
+	//YSI_g_sPlayerClass[playerid] = YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_PRESS | e_PLAYER_CLASS_SKIN;
+	Class_Goto(playerid, Class_FindNew(playerid, e_PLAYER_CLASS_SKIN, CLASS_MOVE_RIGHT));
+	YSI_g_sPlayerClass[playerid] |= e_PLAYER_CLASS_RETURN | e_PLAYER_CLASS_AFTER_RETURN;
+}
+
+RF@v:Class_DenySelection[i](playerid)
+{
+	//SpawnPlayer(playerid);
+	//TogglePlayerControllable(playerid, false);
+	TogglePlayerSpectating(playerid, true);
+	SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
+	SpawnPlayer(playerid);
+	YSI_g_sPlayerClass[playerid] = (YSI_g_sPlayerClass[playerid] | e_PLAYER_CLASS_DENY) & ~e_PLAYER_CLASS_SELECT;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_OnPlayerDeath
+Params:
+	playerid - Player who dies.
+	reason - The reason they died.
+Return:
+	-
+Notes:
+	Catches and hides fake deaths caused by the spawn system.
+-*----------------------------------------------------------------------------*/
+
+RA:Class_OnPlayerDeath(playerid, killerid, reason)
+{
+	P:2("Class_OnPlayerDeath called");
+	//new
+	//	time = GetTickCount();
+	if ((YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_SPAWN_CHECK) == e_PLAYER_CLASS_SPAWN_CHECK)// || (time - YSI_g_sLastRefuse[playerid]) < 200)
+	{
+		P:3("Class_OnPlayerDeath: Inner");
+		new
+			e_PLAYER_CLASS:playerclass = YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_SKIN;
+		// Fake death to get the ForceClassSelection out the system.
+		SetSpawnInfo(playerid, NO_TEAM, Class_Skin(e_PLAYER_CLASS:playerclass), Class_X(e_PLAYER_CLASS:playerclass), Class_Y(e_PLAYER_CLASS:playerclass), Class_Z(e_PLAYER_CLASS:playerclass), Class_A(e_PLAYER_CLASS:playerclass), 0, 0, 0, 0, 0, 0);
+		//SpawnPlayer(playerid);
+		//SetPlayerHealth(playerid, 100.0);
+		//YSI_g_sPlayerClass[playerid] &= ~e_PLAYER_CLASS_SPAWN_CHECK;
+		//YSI_g_sLastRefuse[playerid] = time;
+		return 1;
+	}
+	ALS_CALL<PlayerDeath>
+}
+
+#if defined _ALS_OnPlayerDeath
+	#undef OnPlayerDeath
+#else
+	#define _ALS_OnPlayerDeath
+#endif
+#define OnPlayerDeath Class_OnPlayerDeath
+ALS_FORWARD<PlayerDeath>
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_OnPlayerSpawn
+Params:
+	playerid - Player who spawned.
+Return:
+	-
+Notes:
+	Sets a player's position based on skin.
+-*----------------------------------------------------------------------------*/
+
+RA:Class_OnPlayerSpawn(playerid)
+{
+	P:2("Class_OnPlayerSpawn called: %d %d", YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_AFTER_RETURN, e_PLAYER_CLASS_AFTER_RETURN);
+	if (YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_AFTER_RETURN)
+	{
+		// Fake spawn.
+		//SetPlayer
+		YSI_g_sPlayerClass[playerid] |= e_PLAYER_CLASS_TEMP_SPAWN;
+		return 1;
+	}
+	YSI_g_sPlayerClass[playerid] = (YSI_g_sPlayerClass[playerid] | e_PLAYER_CLASS_SPAWNED | e_PLAYER_CLASS_EVER) & ~e_PLAYER_CLASS_SELECT;
+	new
+		playerclass = YSI_g_sPlayerClass[playerid] & e_PLAYER_CLASS_SKIN,
+		weapon;
+	for (new i = 0; i != MAX_CLASS_SPAWN_WEAPONS; ++i)
+	{
+		weapon = YSI_g_sClasses[playerclass][E_CLASS_WEAPONS][i];
+		//if (weapon == WEAPON_ARMOUR) SetPlayerArmour(playerid, 100.0);
+		if (weapon)
+		{
+			GivePlayerWeapon(playerid, weapon & 0xFF, weapon >>> 8);
+		}
+		else
+		{
+			break;
+		}
+	}
+	weapon = YSI_g_sClasses[playerclass][E_CLASS_WEAPONS][MAX_CLASS_SPAWN_WEAPONS];
+	P:5("Class_OnPlayerSpawn: Armour %d %d %d", weapon, weapon & 0xFF, WEAPON_ARMOUR);
+	if ((weapon & 0xFF) == WEAPON_ARMOUR)
+	{
+		weapon >>>= 8;
+		if (weapon == 0x00800000)
+		{
+			// INFINITY
+			SetPlayerArmour(playerid, Float:0x7F800000);
+		}
+		else
+		{
+			SetPlayerArmour(playerid, weapon);
+		}
+	}
+	ALS_CALL<PlayerSpawn>
+}
+
+#if defined _ALS_OnPlayerSpawn
+	#undef OnPlayerSpawn
+#else
+	#define _ALS_OnPlayerSpawn
+#endif
+#define OnPlayerSpawn Class_OnPlayerSpawn
+ALS_FORWARD<PlayerSpawn>
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Add
+Params:
+	skin - Skin of the class.
+	Float:x - X spawn location.
+	Float:y - Y spawn location.
+	Float:z - Z spawn location.
+	Float:a - A spawn location.
+	... - Spawn weapons and ammo (weapon then ammo)
+Return:
+	-
+Notes:
+	Pretty much AddPlayerClass but allows greater control over the classes.
+	Now has infinate (MAX_CLASS_SPAWN_WEAPONS) spawn weapons.  This is one of
+	the few API functions which is not entirely remote.  This is because it has
+	variable parameters which is need to collect in to a single array to pass to
+	the remote function.
+-*----------------------------------------------------------------------------*/
+
+stock Class_Add(skin, Float:x, Float:y, Float:z, Float:a, ...)
+{
+	new
+		n = numargs(),
+		w = 5,
+		s,
+		weapons[MAX_CLASS_SPAWN_WEAPONS + 1],
+		cw;
+	// Should have an odd number of parameters
+	//if (!(num & 0x01)) --num;
+	// Armour now has a parameter - how much armour to give them!
+	_CLASS_WEAPON_CODE
+	/*if (num & 0x01)
+	{
+		// Odd number of parameters - good.
+		while (weap != num && slot < MAX_CLASS_SPAWN_WEAPONS)
+		{
+			cw = getarg(weap++);
+			if (cw == WEAPON_ARMOUR)
+			{
+				// Default armour value.
+				weapons[MAX_CLASS_SPAWN_WEAPONS] = WEAPON_ARMOUR | (getarg(weap++) << 8);
+			}
+			else
+			{
+				// Store both weapon data and ammo data in one variable.
+				weapons[slot++] = (cw & 0xFF) | (getarg(weap++) << 8);
+			}
+		}
+	}
+	else
+	{
+		// Got an even number of parameters - look for the odd one being armour.
+		while (weap != num && slot < MAX_CLASS_SPAWN_WEAPONS)
+		{
+			cw = getarg(weap++);
+			if (cw == WEAPON_ARMOUR)
+			{
+				// Default armour value.
+				weapons[MAX_CLASS_SPAWN_WEAPONS] = WEAPON_ARMOUR | (100 << 8);
+			}
+			else if (weap == num)
+			{
+				// Something went wrong - there was no armour but was also not
+				// enough data for the other weapons.
+				printf("*** Internal Error: Insufficient class weapon data.");
+			}
+			else
+			{
+				// Store both weapon data and ammo data in one variable.
+				weapons[slot++] = (cw & 0xFF) | (getarg(weap++) << 8);
+			}
+		}
+	}*/
+	return Class_AddClass(skin, x, y, z, a, weapons, MAX_CLASS_SPAWN_WEAPONS + 1, -1, -1);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_AddEx
+Params:
+	forgroup - Group that can use the skin.
+	setgroup - Group to add the player to on selection.
+	skin - Skin of the class.
+	Float:x - X spawn location.
+	Float:y - Y spawn location.
+	Float:z - Z spawn location.
+	Float:a - A spawn location.
+	... - Spawn weapons and ammo (weapon then ammo)
+Return:
+	-
+Notes:
+	Pretty much AddPlayerClass but allows greater control over the classes.
+	Now has infinate (MAX_CLASS_SPAWN_WEAPONS) spawn weapons.
+-*----------------------------------------------------------------------------*/
+
+stock Class_AddEx(Group:forgroup, Group:setgroup, skin, Float:x, Float:y, Float:z, Float:a, ...)
+{
+	new
+		n = numargs(),
+		w = 7,
+		s,
+		weapons[MAX_CLASS_SPAWN_WEAPONS + 1],
+		cw;
+	_CLASS_WEAPON_CODE
+	return Class_AddClass(skin, x, y, z, a, weapons, MAX_CLASS_SPAWN_WEAPONS + 1, forgroup, asgroup);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_AddClass
+Params:
+	skin - Skin of the class.
+	Float:x - X spawn location.
+	Float:y - Y spawn location.
+	Float:z - Z spawn location.
+	Float:a - A spawn location.
+	weapons[] - Array of spawn weapon data.
+	count - Number of weapons added.
+	forgroup - Group that can use the class.
+	asgroup - Group to assign people to with this class.
+Return:
+	-
+Notes:
+	Does the hard work.
+-*----------------------------------------------------------------------------*/
+
+RF@pc:Class_AddClass[iffffaiii](s,Float:x,Float:y,Float:z,Float:a,w[],c,Group:f,Group:g)<s,x,y,z,a,w,c,f,g>
+{
+	new
+		i;
+	while (i < MAX_CLASSES)
+	{
+		if (!Class_IsActive(i)) break;
+		i++;
+	}
+	if (i == MAX_CLASSES) return -1;
+	YSI_g_sClasses[i][E_CLASS_FLAGS] = 	e_CLASS_FLAGS_ACTIVE | e_CLASS_FLAGS_ENABLED | e_CLASS_FLAGS:s;
+	YSI_g_sClasses[i][E_CLASS_X] = x;
+	YSI_g_sClasses[i][E_CLASS_Y] = y;
+	YSI_g_sClasses[i][E_CLASS_Z] = z;
+	YSI_g_sClasses[i][E_CLASS_A] = a;
+	new
+		j;
+	// This may be better with a memcpy.
+	while (j < c)
+	{
+		P:5("Class_AddClass: weapon %d %d %d", j, c, w[j]);
+		YSI_g_sClasses[i][E_CLASS_WEAPONS][j] = w[j];
+		++j;
+	}
+	//Bit_SetAll(YSI_g_sClasses[class][E_CLASS_PLAYERS], false, bits<MAX_PLAYERS>);
+	PA_Init(YSI_g_sClasses[i][E_CLASS_PLAYERS]);
+	Class_ResolveGroups(i, f, false);
+	YSI_g_sClasses[i][E_CLASS_GROUP] = g;
+	//YSI_g_sClasses[i][E_CLASS_WEAPONS][MAX_CLASS_SPAWN_WEAPONS] = w[MAX_CLASS_SPAWN_WEAPONS];
+	YSI_g_sClassCount++;
+	//setproperty(0, "LReqClass", i);
+	//#if !defined YSI_CLASS_INVERT
+	//	Bit_SetAll(YSI_g_sClasses[i][E_CLASS_PLAYERS], true, bits<MAX_PLAYERS>);
+	//#endif
+	return i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_AddForGroup
+Params:
+	group - Group to allow to use the class.
+	skin - Skin of the class.
+	Float:x - X spawn location.
+	Float:y - Y spawn location.
+	Float:z - Z spawn location.
+	Float:a - A spawn location.
+	... - Weapon data.
+Return:
+	-
+Notes:
+	Adds a class only people in the specified group can use.
+-*----------------------------------------------------------------------------*/
+
+//#if defined _YSI_SYSTEM_GROUPS
+	stock Class_AddForGroup(Group:group, skin, Float:x, Float:y, Float:z, Float:a, ...)
+	{
+		new
+			n = numargs(),
+			w = 6,
+			s,
+			weapons[MAX_CLASS_SPAWN_WEAPONS + 1],
+			cw;
+		_CLASS_WEAPON_CODE
+		return Class_AddClass(skin, x, y, z, a, weapons, MAX_CLASS_SPAWN_WEAPONS + 1, group, -1);
+	}
+/*#else
+	#define Class_AddForGroup(%1,%2) \
+		Class_Add(%2)
+#endif*/
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_AddWithGroupSet
+Params:
+	group - Group to make players who use this group.
+	skin - Skin of the class.
+	Float:x - X spawn location.
+	Float:y - Y spawn location.
+	Float:z - Z spawn location.
+	Float:a - A spawn location.
+	... - Spawn weapons.
+Return:
+	-
+Notes:
+	Adds a class which puts you in the specified group when selected.
+-*----------------------------------------------------------------------------*/
+
+//#if defined _YSI_SYSTEM_GROUPS
+	stock Class_AddWithGroupSet(Group:group, skin, Float:x, Float:y, Float:z, Float:a, ...)
+	{
+		new
+			n = numargs(),
+			w = 6,
+			s,
+			weapons[MAX_CLASS_SPAWN_WEAPONS + 1],
+			cw;
+		_CLASS_WEAPON_CODE
+		return Class_AddClass(skin, x, y, z, a, weapons, MAX_CLASS_SPAWN_WEAPONS + 1, -1, group);
+	}
+/*#else
+	#define Class_AddWithGroupSet(%1,%2) \
+		Class_Add(%2)
+#endif*/
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Enable
+Params:
+	classid - Class to re-enable.
+Return:
+	-
+Notes:
+	Reallow use of this class.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_Enable[i](classid)
+{
+	if (Class_IsValid(classid)) YSI_g_sClasses[classid][E_CLASS_FLAGS] |= e_CLASS_FLAGS_ENABLED;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Disable
+Params:
+	classid - Class to disable.
+Return:
+	-
+Notes:
+	Stop people being able to use this class.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_Disable[i](classid)
+{
+	if (Class_IsValid(classid))
+	{
+		YSI_g_sClasses[classid][E_CLASS_FLAGS] &= ~e_CLASS_FLAGS_ENABLED;
+		foreach (Player, playerid)
+		{
+			new
+				e_PLAYER_CLASS:curclass = YSI_g_sPlayerClass[playerid];
+			if (curclass & e_PLAYER_CLASS_SELECT)
+			{
+				if (e_PLAYER_CLASS:classid == curclass & e_PLAYER_CLASS_SKIN) Class_Goto(playerid, Class_FindNew(playerid, e_PLAYER_CLASS:classid, CLASS_MOVE_RIGHT));
+			}
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Remote
+Params:
+	allow - Wether or not to allow changing class.
+Return:
+	-
+Notes:
+	Sets wether or not people can change class after first spawning.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_AllowReselection[i](allow)
+{
+	if (allow) YSI_g_sClassOptions &= ~e_CLASS_OPTION_NORE;
+	else YSI_g_sClassOptions |= e_CLASS_OPTION_NORE;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_Delete
+Params:
+	classid - Class to delete.
+Return:
+	-
+Notes:
+	Completely removes a class from the system.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_Delete[i](classid)
+{
+	if (Class_IsValid(classid))
+	{
+		YSI_g_sClasses[classid][E_CLASS_FLAGS] = e_CLASS_FLAGS:0;
+		foreach (Player, playerid)
+		{
+			new
+				e_PLAYER_CLASS:curclass = YSI_g_sPlayerClass[playerid];
+			P:4("Class_Delete: %d %d %d", playerid, curclass, e_PLAYER_CLASS_SELECT);
+			if (curclass & e_PLAYER_CLASS_SELECT)
+			{
+				if (e_PLAYER_CLASS:classid == curclass & e_PLAYER_CLASS_SKIN) Class_Goto(playerid, Class_FindNew(playerid, e_PLAYER_CLASS:classid, CLASS_MOVE_RIGHT));
+			}
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_SetPlayer
+Params:
+	classid - Class to set permissions for.
+	playerid - Player to set for.
+	set - Whether or not they can use this class.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@pv:Class_SetPlayer[iii](cl,pid,bool:s)<cl,pid,s>
+{
+	P:5("Class_SetPlayer %d %d %d", cl, pid, s);
+	if (Class_IsValid(cl) && 0 <= pid < MAX_PLAYERS)
+	{
+		if (s) PA+(YSI_g_sClasses[cl][E_CLASS_PLAYERS], pid);
+		else
+		{
+			PA-(YSI_g_sClasses[cl][E_CLASS_PLAYERS], pid);
+			new
+				e_PLAYER_CLASS:curclass = YSI_g_sPlayerClass[pid];
+			if (curclass & e_PLAYER_CLASS_SELECT)
+			{
+				P:1("WARNING");
+				if (e_PLAYER_CLASS:cl == curclass & e_PLAYER_CLASS_SKIN) Class_Goto(pid, Class_FindNew(pid, e_PLAYER_CLASS:cl, CLASS_MOVE_RIGHT));
+			}
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_GetPlayer
+Params:
+	classid - Class to set permissions for.
+	playerid - Player to set for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Class_GetPlayer[ii](cl,pid)
+{
+	if (Class_IsValid(cl) && 0 <= pid < MAX_PLAYERS)
+	{
+		return PA=(YSI_g_sClasses[cl][E_CLASS_PLAYERS], pid);
+	}
+	return false;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_RequireSelectionLogin
+Params:
+	allow - Wether or not people must login.
+Return:
+	-
+Notes:
+	Don't let registered people select a class till they log in.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_RequireSelectionLogin[i](allow)
+{
+	if (allow) YSI_g_sClassOptions |= e_CLASS_OPTION_LOGIN_SELECT;
+	else YSI_g_sClassOptions &= ~e_CLASS_OPTION_LOGIN_SELECT;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_RequireSpawnLogin
+Params:
+	allow - Wether or not people must login.
+Return:
+	-
+Notes:
+	Don't let registered people spawn till they log in.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_RequireSpawnLogin[i](allow)
+{
+	if (allow) YSI_g_sClassOptions |= e_CLASS_OPTION_LOGIN_SPAWN;
+	else YSI_g_sClassOptions &= ~e_CLASS_OPTION_LOGIN_SPAWN;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_RequireSelectionReg
+Params:
+	allow - Wether or not people must register.
+Return:
+	-
+Notes:
+	Don't let people select a class till they register.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_RequireSelectionReg[i](allow)
+{
+	if (allow) YSI_g_sClassOptions |= e_CLASS_OPTION_REG_SELECT;
+	else YSI_g_sClassOptions &= ~e_CLASS_OPTION_REG_SELECT;
+}
+
+#define Class_RequireSelectionRegistration Class_RequireSelectionReg
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Class_RequireSpawnReg
+Params:
+	allow - Wether or not people must register.
+Return:
+	-
+Notes:
+	Don't let people spawn till they register.
+-*----------------------------------------------------------------------------*/
+
+RF@v:Class_RequireSpawnReg[i](allow)
+{
+	if (allow) YSI_g_sClassOptions |= e_CLASS_OPTION_REG_SPAWN;
+	else YSI_g_sClassOptions &= ~e_CLASS_OPTION_REG_SPAWN;
+}
+
+#define Class_RequireSpawnRegistration Class_RequireSpawnReg
+
+// Clean up - there's no way to do this like in the master system as people can
+// use any arbitrary string here, not just a restricted set of numbers.
+#undef ALS_PREFIX
+
+#define YSI_GROUPS_LAST 22
+#include <YSI\internal\y_grouprevert>

+ 59 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_colors.inc

@@ -0,0 +1,59 @@
+/*----------------------------------------------------------------------------*-
+					==========================
+					 y_colours - X11 colours!
+					==========================
+Description:
+	This holds the colour information that used to be part of the text system
+	but which is far more useful than just for text.  This now supports the full
+	set of X11 colours, both by name and by definition.  You can also define
+	your own if you so choose (up to 32 - should be enough given that this
+	includes the X11 colours).
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\y_colours>

+ 5173 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_colours.inc

@@ -0,0 +1,5173 @@
+/*----------------------------------------------------------------------------*-
+					==========================
+					 y_colours - X11 colours!
+					==========================
+Description:
+	This holds the colour information that used to be part of the text system
+	but which is far more useful than just for text.  This now supports the full
+	set of X11 colours, both by name and by definition.  You can also define
+	your own if you so choose (up to 32 - should be enough given that this
+	includes the X11 colours).
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <YSI\y_stringhash>
+
+#if !defined MAX_TEXT_COLOURS
+	#define MAX_TEXT_COLOURS	        (32)
+#endif
+
+#if !defined NO_X11_COLOURS && !defined NO_X11_COLORS
+	#define MK_RGB(%0,%1,%2)            ((%0) << 24 | (%1) << 16 | (%0) << 8)
+	
+	#define X11_SNOW                    MK_RGB(255, 250, 250)
+	#define X11_GHOSTWHITE              MK_RGB(248, 248, 255)
+	#define X11_GHOST_WHITE             MK_RGB(248, 248, 255)
+	#define X11_WHITESMOKE              MK_RGB(245, 245, 245)
+	#define X11_WHITE_SMOKE             MK_RGB(245, 245, 245)
+	#define X11_GAINSBORO               MK_RGB(220, 220, 220)
+	#define X11_FLORALWHITE             MK_RGB(255, 250, 240)
+	#define X11_FLORAL_WHITE            MK_RGB(255, 250, 240)
+	#define X11_OLDLACE                 MK_RGB(253, 245, 230)
+	#define X11_OLD_LACE                MK_RGB(253, 245, 230)
+	#define X11_LINEN                   MK_RGB(250, 240, 230)
+	#define X11_ANTIQUEWHITE            MK_RGB(250, 235, 215)
+	#define X11_ANTIQUE_WHITE           MK_RGB(250, 235, 215)
+	#define X11_PAPAYAWHIP              MK_RGB(255, 239, 213)
+	#define X11_PAPAYA_WHIP             MK_RGB(255, 239, 213)
+	#define X11_BLANCHEDALMOND          MK_RGB(255, 235, 205)
+	#define X11_BLANCHED_ALMOND         MK_RGB(255, 235, 205)
+	#define X11_BISQUE                  MK_RGB(255, 228, 196)
+	#define X11_PEACHPUFF               MK_RGB(255, 218, 185)
+	#define X11_PEACH_PUFF              MK_RGB(255, 218, 185)
+	#define X11_NAVAJOWHITE             MK_RGB(255, 222, 173)
+	#define X11_NAVAJO_WHITE            MK_RGB(255, 222, 173)
+	#define X11_MOCCASIN                MK_RGB(255, 228, 181)
+	#define X11_CORNSILK                MK_RGB(255, 248, 220)
+	#define X11_IVORY                   MK_RGB(255, 255, 240)
+	#define X11_LEMONCHIFFON            MK_RGB(255, 250, 205)
+	#define X11_LEMON_CHIFFON           MK_RGB(255, 250, 205)
+	#define X11_SEASHELL                MK_RGB(255, 245, 238)
+	#define X11_HONEYDEW                MK_RGB(240, 255, 240)
+	#define X11_MINTCREAM               MK_RGB(245, 255, 250)
+	#define X11_MINT_CREAM              MK_RGB(245, 255, 250)
+	#define X11_AZURE                   MK_RGB(240, 255, 255)
+	#define X11_ALICEBLUE               MK_RGB(240, 248, 255)
+	#define X11_ALICE_BLUE              MK_RGB(240, 248, 255)
+	#define X11_LAVENDER                MK_RGB(230, 230, 250)
+	#define X11_LAVENDERBLUSH           MK_RGB(255, 240, 245)
+	#define X11_LAVENDER_BLUSH          MK_RGB(255, 240, 245)
+	#define X11_MISTYROSE               MK_RGB(255, 228, 225)
+	#define X11_MISTY_ROSE              MK_RGB(255, 228, 225)
+	#define X11_WHITE                   MK_RGB(255, 255, 255)
+	#define X11_BLACK                   MK_RGB(  0,   0,   0)
+	#define X11_DARKSLATEGRAY           MK_RGB( 47,  79,  79)
+	#define X11_DARK_SLATE_GRAY         MK_RGB( 47,  79,  79)
+	#define X11_DARKSLATEGREY           MK_RGB( 47,  79,  79)
+	#define X11_DARK_SLATE_GREY         MK_RGB( 47,  79,  79)
+	#define X11_DIMGRAY                 MK_RGB(105, 105, 105)
+	#define X11_DIM_GRAY                MK_RGB(105, 105, 105)
+	#define X11_DIMGREY                 MK_RGB(105, 105, 105)
+	#define X11_DIM_GREY                MK_RGB(105, 105, 105)
+	#define X11_SLATEGRAY               MK_RGB(112, 128, 144)
+	#define X11_SLATE_GRAY              MK_RGB(112, 128, 144)
+	#define X11_SLATEGREY               MK_RGB(112, 128, 144)
+	#define X11_SLATE_GREY              MK_RGB(112, 128, 144)
+	#define X11_LIGHTSLATEGRAY          MK_RGB(119, 136, 153)
+	#define X11_LIGHT_SLATE_GRAY        MK_RGB(119, 136, 153)
+	#define X11_LIGHTSLATEGREY          MK_RGB(119, 136, 153)
+	#define X11_LIGHT_SLATE_GREY        MK_RGB(119, 136, 153)
+	#define X11_GRAY                    MK_RGB(190, 190, 190)
+	#define X11_GREY                    MK_RGB(190, 190, 190)
+	#define X11_LIGHTGREY               MK_RGB(211, 211, 211)
+	#define X11_LIGHT_GREY              MK_RGB(211, 211, 211)
+	#define X11_LIGHTGRAY               MK_RGB(211, 211, 211)
+	#define X11_LIGHT_GRAY              MK_RGB(211, 211, 211)
+	#define X11_MIDNIGHTBLUE            MK_RGB( 25,  25, 112)
+	#define X11_MIDNIGHT_BLUE           MK_RGB( 25,  25, 112)
+	#define X11_NAVY                    MK_RGB(  0,   0, 128)
+	#define X11_NAVYBLUE                MK_RGB(  0,   0, 128)
+	#define X11_NAVY_BLUE               MK_RGB(  0,   0, 128)
+	#define X11_CORNFLOWERBLUE          MK_RGB(100, 149, 237)
+	#define X11_CORNFLOWER_BLUE         MK_RGB(100, 149, 237)
+	#define X11_DARKSLATEBLUE           MK_RGB( 72,  61, 139)
+	#define X11_DARK_SLATE_BLUE         MK_RGB( 72,  61, 139)
+	#define X11_SLATEBLUE               MK_RGB(106,  90, 205)
+	#define X11_SLATE_BLUE              MK_RGB(106,  90, 205)
+	#define X11_MEDIUMSLATEBLUE         MK_RGB(123, 104, 238)
+	#define X11_MEDIUM_SLATE_BLUE       MK_RGB(123, 104, 238)
+	#define X11_LIGHTSLATEBLUE          MK_RGB(132, 112, 255)
+	#define X11_LIGHT_SLATE_BLUE        MK_RGB(132, 112, 255)
+	#define X11_MEDIUMBLUE              MK_RGB(  0,   0, 205)
+	#define X11_MEDIUM_BLUE             MK_RGB(  0,   0, 205)
+	#define X11_ROYALBLUE               MK_RGB( 65, 105, 225)
+	#define X11_ROYAL_BLUE              MK_RGB( 65, 105, 225)
+	#define X11_BLUE                    MK_RGB(  0,   0, 255)
+	#define X11_DODGERBLUE              MK_RGB( 30, 144, 255)
+	#define X11_DODGER_BLUE             MK_RGB( 30, 144, 255)
+	#define X11_DEEPSKYBLUE             MK_RGB(  0, 191, 255)
+	#define X11_DEEP_SKY_BLUE           MK_RGB(  0, 191, 255)
+	#define X11_SKYBLUE                 MK_RGB(135, 206, 235)
+	#define X11_SKY_BLUE                MK_RGB(135, 206, 235)
+	#define X11_LIGHTSKYBLUE            MK_RGB(135, 206, 250)
+	#define X11_LIGHT_SKY_BLUE          MK_RGB(135, 206, 250)
+	#define X11_STEELBLUE               MK_RGB( 70, 130, 180)
+	#define X11_STEEL_BLUE              MK_RGB( 70, 130, 180)
+	#define X11_LIGHTSTEELBLUE          MK_RGB(176, 196, 222)
+	#define X11_LIGHT_STEEL_BLUE        MK_RGB(176, 196, 222)
+	#define X11_LIGHTBLUE               MK_RGB(173, 216, 230)
+	#define X11_LIGHT_BLUE              MK_RGB(173, 216, 230)
+	#define X11_POWDERBLUE              MK_RGB(176, 224, 230)
+	#define X11_POWDER_BLUE             MK_RGB(176, 224, 230)
+	#define X11_PALETURQUOISE           MK_RGB(175, 238, 238)
+	#define X11_PALE_TURQUOISE          MK_RGB(175, 238, 238)
+	#define X11_DARKTURQUOISE           MK_RGB(  0, 206, 209)
+	#define X11_DARK_TURQUOISE          MK_RGB(  0, 206, 209)
+	#define X11_MEDIUMTURQUOISE         MK_RGB( 72, 209, 204)
+	#define X11_MEDIUM_TURQUOISE        MK_RGB( 72, 209, 204)
+	#define X11_TURQUOISE               MK_RGB( 64, 224, 208)
+	#define X11_CYAN                    MK_RGB(  0, 255, 255)
+	#define X11_LIGHTCYAN               MK_RGB(224, 255, 255)
+	#define X11_LIGHT_CYAN              MK_RGB(224, 255, 255)
+	#define X11_CADETBLUE               MK_RGB( 95, 158, 160)
+	#define X11_CADET_BLUE              MK_RGB( 95, 158, 160)
+	#define X11_MEDIUMAQUAMARINE        MK_RGB(102, 205, 170)
+	#define X11_MEDIUM_AQUAMARINE       MK_RGB(102, 205, 170)
+	#define X11_AQUAMARINE              MK_RGB(127, 255, 212)
+	#define X11_DARKGREEN               MK_RGB(  0, 100,   0)
+	#define X11_DARK_GREEN              MK_RGB(  0, 100,   0)
+	#define X11_DARKOLIVEGREEN          MK_RGB( 85, 107,  47)
+	#define X11_DARK_OLIVE_GREEN        MK_RGB( 85, 107,  47)
+	#define X11_DARKSEAGREEN            MK_RGB(143, 188, 143)
+	#define X11_DARK_SEA_GREEN          MK_RGB(143, 188, 143)
+	#define X11_SEAGREEN                MK_RGB( 46, 139,  87)
+	#define X11_SEA_GREEN               MK_RGB( 46, 139,  87)
+	#define X11_MEDIUMSEAGREEN          MK_RGB( 60, 179, 113)
+	#define X11_MEDIUM_SEA_GREEN        MK_RGB( 60, 179, 113)
+	#define X11_LIGHTSEAGREEN           MK_RGB( 32, 178, 170)
+	#define X11_LIGHT_SEA_GREEN         MK_RGB( 32, 178, 170)
+	#define X11_PALEGREEN               MK_RGB(152, 251, 152)
+	#define X11_PALE_GREEN              MK_RGB(152, 251, 152)
+	#define X11_SPRINGGREEN             MK_RGB(  0, 255, 127)
+	#define X11_SPRING_GREEN            MK_RGB(  0, 255, 127)
+	#define X11_LAWNGREEN               MK_RGB(124, 252,   0)
+	#define X11_LAWN_GREEN              MK_RGB(124, 252,   0)
+	#define X11_GREEN                   MK_RGB(  0, 255,   0)
+	#define X11_CHARTREUSE              MK_RGB(127, 255,   0)
+	#define X11_MEDIUMSPRINGGREEN       MK_RGB(  0, 250, 154)
+	#define X11_MEDIUM_SPRING_GREEN     MK_RGB(  0, 250, 154)
+	#define X11_GREENYELLOW             MK_RGB(173, 255,  47)
+	#define X11_GREEN_YELLOW            MK_RGB(173, 255,  47)
+	#define X11_LIMEGREEN               MK_RGB( 50, 205,  50)
+	#define X11_LIME_GREEN              MK_RGB( 50, 205,  50)
+	#define X11_YELLOWGREEN             MK_RGB(154, 205,  50)
+	#define X11_YELLOW_GREEN            MK_RGB(154, 205,  50)
+	#define X11_FORESTGREEN             MK_RGB( 34, 139,  34)
+	#define X11_FOREST_GREEN            MK_RGB( 34, 139,  34)
+	#define X11_OLIVEDRAB               MK_RGB(107, 142,  35)
+	#define X11_OLIVE_DRAB              MK_RGB(107, 142,  35)
+	#define X11_DARKKHAKI               MK_RGB(189, 183, 107)
+	#define X11_DARK_KHAKI              MK_RGB(189, 183, 107)
+	#define X11_KHAKI                   MK_RGB(240, 230, 140)
+	#define X11_PALEGOLDENROD           MK_RGB(238, 232, 170)
+	#define X11_PALE_GOLDENROD          MK_RGB(238, 232, 170)
+	#define X11_LIGHTGOLDENRODYELLOW    MK_RGB(250, 250, 210)
+	#define X11_LIGHT_GOLDENROD_YELLOW  MK_RGB(250, 250, 210)
+	#define X11_LIGHTYELLOW             MK_RGB(255, 255, 224)
+	#define X11_LIGHT_YELLOW            MK_RGB(255, 255, 224)
+	#define X11_YELLOW                  MK_RGB(255, 255,   0)
+	#define X11_GOLD                    MK_RGB(255, 215,   0)
+	#define X11_LIGHTGOLDENROD          MK_RGB(238, 221, 130)
+	#define X11_LIGHT_GOLDENROD         MK_RGB(238, 221, 130)
+	#define X11_GOLDENROD               MK_RGB(218, 165,  32)
+	#define X11_DARKGOLDENROD           MK_RGB(184, 134,  11)
+	#define X11_DARK_GOLDENROD          MK_RGB(184, 134,  11)
+	#define X11_ROSYBROWN               MK_RGB(188, 143, 143)
+	#define X11_ROSY_BROWN              MK_RGB(188, 143, 143)
+	#define X11_INDIANRED               MK_RGB(205,  92,  92)
+	#define X11_INDIAN_RED              MK_RGB(205,  92,  92)
+	#define X11_SADDLEBROWN             MK_RGB(139,  69,  19)
+	#define X11_SADDLE_BROWN            MK_RGB(139,  69,  19)
+	#define X11_SIENNA                  MK_RGB(160,  82,  45)
+	#define X11_PERU                    MK_RGB(205, 133,  63)
+	#define X11_BURLYWOOD               MK_RGB(222, 184, 135)
+	#define X11_BEIGE                   MK_RGB(245, 245, 220)
+	#define X11_WHEAT                   MK_RGB(245, 222, 179)
+	#define X11_SANDYBROWN              MK_RGB(244, 164,  96)
+	#define X11_SANDY_BROWN             MK_RGB(244, 164,  96)
+	#define X11_TAN                     MK_RGB(210, 180, 140)
+	#define X11_CHOCOLATE               MK_RGB(210, 105,  30)
+	#define X11_FIREBRICK               MK_RGB(178,  34,  34)
+	#define X11_BROWN                   MK_RGB(165,  42,  42)
+	#define X11_DARKSALMON              MK_RGB(233, 150, 122)
+	#define X11_DARK_SALMON             MK_RGB(233, 150, 122)
+	#define X11_SALMON                  MK_RGB(250, 128, 114)
+	#define X11_LIGHTSALMON             MK_RGB(255, 160, 122)
+	#define X11_LIGHT_SALMON            MK_RGB(255, 160, 122)
+	#define X11_ORANGE                  MK_RGB(255, 165,   0)
+	#define X11_DARKORANGE              MK_RGB(255, 140,   0)
+	#define X11_DARK_ORANGE             MK_RGB(255, 140,   0)
+	#define X11_CORAL                   MK_RGB(255, 127,  80)
+	#define X11_LIGHTCORAL              MK_RGB(240, 128, 128)
+	#define X11_LIGHT_CORAL             MK_RGB(240, 128, 128)
+	#define X11_TOMATO                  MK_RGB(255,  99,  71)
+	#define X11_ORANGERED               MK_RGB(255,  69,   0)
+	#define X11_ORANGE_RED              MK_RGB(255,  69,   0)
+	#define X11_RED                     MK_RGB(255,   0,   0)
+	#define X11_HOTPINK                 MK_RGB(255, 105, 180)
+	#define X11_HOT_PINK                MK_RGB(255, 105, 180)
+	#define X11_DEEPPINK                MK_RGB(255,  20, 147)
+	#define X11_DEEP_PINK               MK_RGB(255,  20, 147)
+	#define X11_PINK                    MK_RGB(255, 192, 203)
+	#define X11_LIGHTPINK               MK_RGB(255, 182, 193)
+	#define X11_LIGHT_PINK              MK_RGB(255, 182, 193)
+	#define X11_PALEVIOLETRED           MK_RGB(219, 112, 147)
+	#define X11_PALE_VIOLET_RED         MK_RGB(219, 112, 147)
+	#define X11_MAROON                  MK_RGB(176,  48,  96)
+	#define X11_MEDIUMVIOLETRED         MK_RGB(199,  21, 133)
+	#define X11_MEDIUM_VIOLET_RED       MK_RGB(199,  21, 133)
+	#define X11_VIOLETRED               MK_RGB(208,  32, 144)
+	#define X11_VIOLET_RED              MK_RGB(208,  32, 144)
+	#define X11_MAGENTA                 MK_RGB(255,   0, 255)
+	#define X11_VIOLET                  MK_RGB(238, 130, 238)
+	#define X11_PLUM                    MK_RGB(221, 160, 221)
+	#define X11_ORCHID                  MK_RGB(218, 112, 214)
+	#define X11_MEDIUMORCHID            MK_RGB(186,  85, 211)
+	#define X11_MEDIUM_ORCHID           MK_RGB(186,  85, 211)
+	#define X11_DARKORCHID              MK_RGB(153,  50, 204)
+	#define X11_DARK_ORCHID             MK_RGB(153,  50, 204)
+	#define X11_DARKVIOLET              MK_RGB(148,   0, 211)
+	#define X11_DARK_VIOLET             MK_RGB(148,   0, 211)
+	#define X11_BLUEVIOLET              MK_RGB(138,  43, 226)
+	#define X11_BLUE_VIOLET             MK_RGB(138,  43, 226)
+	#define X11_PURPLE                  MK_RGB(160,  32, 240)
+	#define X11_MEDIUMPURPLE            MK_RGB(147, 112, 219)
+	#define X11_MEDIUM_PURPLE           MK_RGB(147, 112, 219)
+	#define X11_THISTLE                 MK_RGB(216, 191, 216)
+	#define X11_SNOW1                   MK_RGB(255, 250, 250)
+	#define X11_SNOW_1                  MK_RGB(255, 250, 250)
+	#define X11_SNOW2                   MK_RGB(238, 233, 233)
+	#define X11_SNOW_2                  MK_RGB(238, 233, 233)
+	#define X11_SNOW3                   MK_RGB(205, 201, 201)
+	#define X11_SNOW_3                  MK_RGB(205, 201, 201)
+	#define X11_SNOW4                   MK_RGB(139, 137, 137)
+	#define X11_SNOW_4                  MK_RGB(139, 137, 137)
+	#define X11_SEASHELL1               MK_RGB(255, 245, 238)
+	#define X11_SEASHELL_1              MK_RGB(255, 245, 238)
+	#define X11_SEASHELL2               MK_RGB(238, 229, 222)
+	#define X11_SEASHELL_2              MK_RGB(238, 229, 222)
+	#define X11_SEASHELL3               MK_RGB(205, 197, 191)
+	#define X11_SEASHELL_3              MK_RGB(205, 197, 191)
+	#define X11_SEASHELL4               MK_RGB(139, 134, 130)
+	#define X11_SEASHELL_4              MK_RGB(139, 134, 130)
+	#define X11_ANTIQUEWHITE1           MK_RGB(255, 239, 219)
+	#define X11_ANTIQUE_WHITE_1         MK_RGB(255, 239, 219)
+	#define X11_ANTIQUEWHITE2           MK_RGB(238, 223, 204)
+	#define X11_ANTIQUE_WHITE_2         MK_RGB(238, 223, 204)
+	#define X11_ANTIQUEWHITE3           MK_RGB(205, 192, 176)
+	#define X11_ANTIQUE_WHITE_3         MK_RGB(205, 192, 176)
+	#define X11_ANTIQUEWHITE4           MK_RGB(139, 131, 120)
+	#define X11_ANTIQUE_WHITE_4         MK_RGB(139, 131, 120)
+	#define X11_BISQUE1                 MK_RGB(255, 228, 196)
+	#define X11_BISQUE_1                MK_RGB(255, 228, 196)
+	#define X11_BISQUE2                 MK_RGB(238, 213, 183)
+	#define X11_BISQUE_2                MK_RGB(238, 213, 183)
+	#define X11_BISQUE3                 MK_RGB(205, 183, 158)
+	#define X11_BISQUE_3                MK_RGB(205, 183, 158)
+	#define X11_BISQUE4                 MK_RGB(139, 125, 107)
+	#define X11_BISQUE_4                MK_RGB(139, 125, 107)
+	#define X11_PEACHPUFF1              MK_RGB(255, 218, 185)
+	#define X11_PEACH_PUFF_1            MK_RGB(255, 218, 185)
+	#define X11_PEACHPUFF2              MK_RGB(238, 203, 173)
+	#define X11_PEACH_PUFF_2            MK_RGB(238, 203, 173)
+	#define X11_PEACHPUFF3              MK_RGB(205, 175, 149)
+	#define X11_PEACH_PUFF_3            MK_RGB(205, 175, 149)
+	#define X11_PEACHPUFF4              MK_RGB(139, 119, 101)
+	#define X11_PEACH_PUFF_4            MK_RGB(139, 119, 101)
+	#define X11_NAVAJOWHITE1            MK_RGB(255, 222, 173)
+	#define X11_NAVAJO_WHITE_1          MK_RGB(255, 222, 173)
+	#define X11_NAVAJOWHITE2            MK_RGB(238, 207, 161)
+	#define X11_NAVAJO_WHITE_2          MK_RGB(238, 207, 161)
+	#define X11_NAVAJOWHITE3            MK_RGB(205, 179, 139)
+	#define X11_NAVAJO_WHITE_3          MK_RGB(205, 179, 139)
+	#define X11_NAVAJOWHITE4            MK_RGB(139, 121,  94)
+	#define X11_NAVAJO_WHITE_4          MK_RGB(139, 121,  94)
+	#define X11_LEMONCHIFFON1           MK_RGB(255, 250, 205)
+	#define X11_LEMON_CHIFFON_1         MK_RGB(255, 250, 205)
+	#define X11_LEMONCHIFFON2           MK_RGB(238, 233, 191)
+	#define X11_LEMON_CHIFFON_2         MK_RGB(238, 233, 191)
+	#define X11_LEMONCHIFFON3           MK_RGB(205, 201, 165)
+	#define X11_LEMON_CHIFFON_3         MK_RGB(205, 201, 165)
+	#define X11_LEMONCHIFFON4           MK_RGB(139, 137, 112)
+	#define X11_LEMON_CHIFFON_4         MK_RGB(139, 137, 112)
+	#define X11_CORNSILK1               MK_RGB(255, 248, 220)
+	#define X11_CORNSILK_1              MK_RGB(255, 248, 220)
+	#define X11_CORNSILK2               MK_RGB(238, 232, 205)
+	#define X11_CORNSILK_2              MK_RGB(238, 232, 205)
+	#define X11_CORNSILK3               MK_RGB(205, 200, 177)
+	#define X11_CORNSILK_3              MK_RGB(205, 200, 177)
+	#define X11_CORNSILK4               MK_RGB(139, 136, 120)
+	#define X11_CORNSILK_4              MK_RGB(139, 136, 120)
+	#define X11_IVORY1                  MK_RGB(255, 255, 240)
+	#define X11_IVORY_1                 MK_RGB(255, 255, 240)
+	#define X11_IVORY2                  MK_RGB(238, 238, 224)
+	#define X11_IVORY_2                 MK_RGB(238, 238, 224)
+	#define X11_IVORY3                  MK_RGB(205, 205, 193)
+	#define X11_IVORY_3                 MK_RGB(205, 205, 193)
+	#define X11_IVORY4                  MK_RGB(139, 139, 131)
+	#define X11_IVORY_4                 MK_RGB(139, 139, 131)
+	#define X11_HONEYDEW1               MK_RGB(240, 255, 240)
+	#define X11_HONEYDEW_1              MK_RGB(240, 255, 240)
+	#define X11_HONEYDEW2               MK_RGB(224, 238, 224)
+	#define X11_HONEYDEW_2              MK_RGB(224, 238, 224)
+	#define X11_HONEYDEW3               MK_RGB(193, 205, 193)
+	#define X11_HONEYDEW_3              MK_RGB(193, 205, 193)
+	#define X11_HONEYDEW4               MK_RGB(131, 139, 131)
+	#define X11_HONEYDEW_4              MK_RGB(131, 139, 131)
+	#define X11_LAVENDERBLUSH1          MK_RGB(255, 240, 245)
+	#define X11_LAVENDER_BLUSH_1        MK_RGB(255, 240, 245)
+	#define X11_LAVENDERBLUSH2          MK_RGB(238, 224, 229)
+	#define X11_LAVENDER_BLUSH_2        MK_RGB(238, 224, 229)
+	#define X11_LAVENDERBLUSH3          MK_RGB(205, 193, 197)
+	#define X11_LAVENDER_BLUSH_3        MK_RGB(205, 193, 197)
+	#define X11_LAVENDERBLUSH4          MK_RGB(139, 131, 134)
+	#define X11_LAVENDER_BLUSH_4        MK_RGB(139, 131, 134)
+	#define X11_MISTYROSE1              MK_RGB(255, 228, 225)
+	#define X11_MISTY_ROSE_1            MK_RGB(255, 228, 225)
+	#define X11_MISTYROSE2              MK_RGB(238, 213, 210)
+	#define X11_MISTY_ROSE_2            MK_RGB(238, 213, 210)
+	#define X11_MISTYROSE3              MK_RGB(205, 183, 181)
+	#define X11_MISTY_ROSE_3            MK_RGB(205, 183, 181)
+	#define X11_MISTYROSE4              MK_RGB(139, 125, 123)
+	#define X11_MISTY_ROSE_4            MK_RGB(139, 125, 123)
+	#define X11_AZURE1                  MK_RGB(240, 255, 255)
+	#define X11_AZURE_1                 MK_RGB(240, 255, 255)
+	#define X11_AZURE2                  MK_RGB(224, 238, 238)
+	#define X11_AZURE_2                 MK_RGB(224, 238, 238)
+	#define X11_AZURE3                  MK_RGB(193, 205, 205)
+	#define X11_AZURE_3                 MK_RGB(193, 205, 205)
+	#define X11_AZURE4                  MK_RGB(131, 139, 139)
+	#define X11_AZURE_4                 MK_RGB(131, 139, 139)
+	#define X11_SLATEBLUE1              MK_RGB(131, 111, 255)
+	#define X11_SLATE_BLUE_1            MK_RGB(131, 111, 255)
+	#define X11_SLATEBLUE2              MK_RGB(122, 103, 238)
+	#define X11_SLATE_BLUE_2            MK_RGB(122, 103, 238)
+	#define X11_SLATEBLUE3              MK_RGB(105,  89, 205)
+	#define X11_SLATE_BLUE_3            MK_RGB(105,  89, 205)
+	#define X11_SLATEBLUE4              MK_RGB( 71,  60, 139)
+	#define X11_SLATE_BLUE_4            MK_RGB( 71,  60, 139)
+	#define X11_ROYALBLUE1              MK_RGB( 72, 118, 255)
+	#define X11_ROYAL_BLUE_1            MK_RGB( 72, 118, 255)
+	#define X11_ROYALBLUE2              MK_RGB( 67, 110, 238)
+	#define X11_ROYAL_BLUE_2            MK_RGB( 67, 110, 238)
+	#define X11_ROYALBLUE3              MK_RGB( 58,  95, 205)
+	#define X11_ROYAL_BLUE_3            MK_RGB( 58,  95, 205)
+	#define X11_ROYALBLUE4              MK_RGB( 39,  64, 139)
+	#define X11_ROYAL_BLUE_4            MK_RGB( 39,  64, 139)
+	#define X11_BLUE1                   MK_RGB(  0,   0, 255)
+	#define X11_BLUE_1                  MK_RGB(  0,   0, 255)
+	#define X11_BLUE2                   MK_RGB(  0,   0, 238)
+	#define X11_BLUE_2                  MK_RGB(  0,   0, 238)
+	#define X11_BLUE3                   MK_RGB(  0,   0, 205)
+	#define X11_BLUE_3                  MK_RGB(  0,   0, 205)
+	#define X11_BLUE4                   MK_RGB(  0,   0, 139)
+	#define X11_BLUE_4                  MK_RGB(  0,   0, 139)
+	#define X11_DODGERBLUE1             MK_RGB( 30, 144, 255)
+	#define X11_DODGER_BLUE_1           MK_RGB( 30, 144, 255)
+	#define X11_DODGERBLUE2             MK_RGB( 28, 134, 238)
+	#define X11_DODGER_BLUE_2           MK_RGB( 28, 134, 238)
+	#define X11_DODGERBLUE3             MK_RGB( 24, 116, 205)
+	#define X11_DODGER_BLUE_3           MK_RGB( 24, 116, 205)
+	#define X11_DODGERBLUE4             MK_RGB( 16,  78, 139)
+	#define X11_DODGER_BLUE_4           MK_RGB( 16,  78, 139)
+	#define X11_STEELBLUE1              MK_RGB( 99, 184, 255)
+	#define X11_STEEL_BLUE_1            MK_RGB( 99, 184, 255)
+	#define X11_STEELBLUE2              MK_RGB( 92, 172, 238)
+	#define X11_STEEL_BLUE_2            MK_RGB( 92, 172, 238)
+	#define X11_STEELBLUE3              MK_RGB( 79, 148, 205)
+	#define X11_STEEL_BLUE_3            MK_RGB( 79, 148, 205)
+	#define X11_STEELBLUE4              MK_RGB( 54, 100, 139)
+	#define X11_STEEL_BLUE_4            MK_RGB( 54, 100, 139)
+	#define X11_DEEPSKYBLUE1            MK_RGB(  0, 191, 255)
+	#define X11_DEEP_SKY_BLUE_1         MK_RGB(  0, 191, 255)
+	#define X11_DEEPSKYBLUE2            MK_RGB(  0, 178, 238)
+	#define X11_DEEP_SKY_BLUE_2         MK_RGB(  0, 178, 238)
+	#define X11_DEEPSKYBLUE3            MK_RGB(  0, 154, 205)
+	#define X11_DEEP_SKY_BLUE_3         MK_RGB(  0, 154, 205)
+	#define X11_DEEPSKYBLUE4            MK_RGB(  0, 104, 139)
+	#define X11_DEEP_SKY_BLUE_4         MK_RGB(  0, 104, 139)
+	#define X11_SKYBLUE1                MK_RGB(135, 206, 255)
+	#define X11_SKY_BLUE_1              MK_RGB(135, 206, 255)
+	#define X11_SKYBLUE2                MK_RGB(126, 192, 238)
+	#define X11_SKY_BLUE_2              MK_RGB(126, 192, 238)
+	#define X11_SKYBLUE3                MK_RGB(108, 166, 205)
+	#define X11_SKY_BLUE_3              MK_RGB(108, 166, 205)
+	#define X11_SKYBLUE4                MK_RGB( 74, 112, 139)
+	#define X11_SKY_BLUE_4              MK_RGB( 74, 112, 139)
+	#define X11_LIGHTSKYBLUE1           MK_RGB(176, 226, 255)
+	#define X11_LIGHT_SKY_BLUE_1        MK_RGB(176, 226, 255)
+	#define X11_LIGHTSKYBLUE2           MK_RGB(164, 211, 238)
+	#define X11_LIGHT_SKY_BLUE_2        MK_RGB(164, 211, 238)
+	#define X11_LIGHTSKYBLUE3           MK_RGB(141, 182, 205)
+	#define X11_LIGHT_SKY_BLUE_3        MK_RGB(141, 182, 205)
+	#define X11_LIGHTSKYBLUE4           MK_RGB( 96, 123, 139)
+	#define X11_LIGHT_SKY_BLUE_4        MK_RGB( 96, 123, 139)
+	#define X11_SLATEGRAY1              MK_RGB(198, 226, 255)
+	#define X11_SLATE_GRAY_1            MK_RGB(198, 226, 255)
+	#define X11_SLATEGRAY2              MK_RGB(185, 211, 238)
+	#define X11_SLATE_GRAY_2            MK_RGB(185, 211, 238)
+	#define X11_SLATEGRAY3              MK_RGB(159, 182, 205)
+	#define X11_SLATE_GRAY_3            MK_RGB(159, 182, 205)
+	#define X11_SLATEGRAY4              MK_RGB(108, 123, 139)
+	#define X11_SLATE_GRAY_4            MK_RGB(108, 123, 139)
+	#define X11_LIGHTSTEELBLUE1         MK_RGB(202, 225, 255)
+	#define X11_LIGHT_STEEL_BLUE_1      MK_RGB(202, 225, 255)
+	#define X11_LIGHTSTEELBLUE2         MK_RGB(188, 210, 238)
+	#define X11_LIGHT_STEEL_BLUE_2      MK_RGB(188, 210, 238)
+	#define X11_LIGHTSTEELBLUE3         MK_RGB(162, 181, 205)
+	#define X11_LIGHT_STEEL_BLUE_3      MK_RGB(162, 181, 205)
+	#define X11_LIGHTSTEELBLUE4         MK_RGB(110, 123, 139)
+	#define X11_LIGHT_STEEL_BLUE_4      MK_RGB(110, 123, 139)
+	#define X11_LIGHTBLUE1              MK_RGB(191, 239, 255)
+	#define X11_LIGHT_BLUE_1            MK_RGB(191, 239, 255)
+	#define X11_LIGHTBLUE2              MK_RGB(178, 223, 238)
+	#define X11_LIGHT_BLUE_2            MK_RGB(178, 223, 238)
+	#define X11_LIGHTBLUE3              MK_RGB(154, 192, 205)
+	#define X11_LIGHT_BLUE_3            MK_RGB(154, 192, 205)
+	#define X11_LIGHTBLUE4              MK_RGB(104, 131, 139)
+	#define X11_LIGHT_BLUE_4            MK_RGB(104, 131, 139)
+	#define X11_LIGHTCYAN1              MK_RGB(224, 255, 255)
+	#define X11_LIGHT_CYAN_1            MK_RGB(224, 255, 255)
+	#define X11_LIGHTCYAN2              MK_RGB(209, 238, 238)
+	#define X11_LIGHT_CYAN_2            MK_RGB(209, 238, 238)
+	#define X11_LIGHTCYAN3              MK_RGB(180, 205, 205)
+	#define X11_LIGHT_CYAN_3            MK_RGB(180, 205, 205)
+	#define X11_LIGHTCYAN4              MK_RGB(122, 139, 139)
+	#define X11_LIGHT_CYAN_4            MK_RGB(122, 139, 139)
+	#define X11_PALETURQUOISE1          MK_RGB(187, 255, 255)
+	#define X11_PALE_TURQUOISE_1        MK_RGB(187, 255, 255)
+	#define X11_PALETURQUOISE2          MK_RGB(174, 238, 238)
+	#define X11_PALE_TURQUOISE_2        MK_RGB(174, 238, 238)
+	#define X11_PALETURQUOISE3          MK_RGB(150, 205, 205)
+	#define X11_PALE_TURQUOISE_3        MK_RGB(150, 205, 205)
+	#define X11_PALETURQUOISE4          MK_RGB(102, 139, 139)
+	#define X11_PALE_TURQUOISE_4        MK_RGB(102, 139, 139)
+	#define X11_CADETBLUE1              MK_RGB(152, 245, 255)
+	#define X11_CADET_BLUE_1            MK_RGB(152, 245, 255)
+	#define X11_CADETBLUE2              MK_RGB(142, 229, 238)
+	#define X11_CADET_BLUE_2            MK_RGB(142, 229, 238)
+	#define X11_CADETBLUE3              MK_RGB(122, 197, 205)
+	#define X11_CADET_BLUE_3            MK_RGB(122, 197, 205)
+	#define X11_CADETBLUE4              MK_RGB( 83, 134, 139)
+	#define X11_CADET_BLUE_4            MK_RGB( 83, 134, 139)
+	#define X11_TURQUOISE1              MK_RGB(  0, 245, 255)
+	#define X11_TURQUOISE_1             MK_RGB(  0, 245, 255)
+	#define X11_TURQUOISE2              MK_RGB(  0, 229, 238)
+	#define X11_TURQUOISE_2             MK_RGB(  0, 229, 238)
+	#define X11_TURQUOISE3              MK_RGB(  0, 197, 205)
+	#define X11_TURQUOISE_3             MK_RGB(  0, 197, 205)
+	#define X11_TURQUOISE4              MK_RGB(  0, 134, 139)
+	#define X11_TURQUOISE_4             MK_RGB(  0, 134, 139)
+	#define X11_CYAN1                   MK_RGB(  0, 255, 255)
+	#define X11_CYAN_1                  MK_RGB(  0, 255, 255)
+	#define X11_CYAN2                   MK_RGB(  0, 238, 238)
+	#define X11_CYAN_2                  MK_RGB(  0, 238, 238)
+	#define X11_CYAN3                   MK_RGB(  0, 205, 205)
+	#define X11_CYAN_3                  MK_RGB(  0, 205, 205)
+	#define X11_CYAN4                   MK_RGB(  0, 139, 139)
+	#define X11_CYAN_4                  MK_RGB(  0, 139, 139)
+	#define X11_DARKSLATEGRAY1          MK_RGB(151, 255, 255)
+	#define X11_DARK_SLATE_GRAY_1       MK_RGB(151, 255, 255)
+	#define X11_DARKSLATEGRAY2          MK_RGB(141, 238, 238)
+	#define X11_DARK_SLATE_GRAY_2       MK_RGB(141, 238, 238)
+	#define X11_DARKSLATEGRAY3          MK_RGB(121, 205, 205)
+	#define X11_DARK_SLATE_GRAY_3       MK_RGB(121, 205, 205)
+	#define X11_DARKSLATEGRAY4          MK_RGB( 82, 139, 139)
+	#define X11_DARK_SLATE_GRAY_4       MK_RGB( 82, 139, 139)
+	#define X11_AQUAMARINE1             MK_RGB(127, 255, 212)
+	#define X11_AQUAMARINE_1            MK_RGB(127, 255, 212)
+	#define X11_AQUAMARINE2             MK_RGB(118, 238, 198)
+	#define X11_AQUAMARINE_2            MK_RGB(118, 238, 198)
+	#define X11_AQUAMARINE3             MK_RGB(102, 205, 170)
+	#define X11_AQUAMARINE_3            MK_RGB(102, 205, 170)
+	#define X11_AQUAMARINE4             MK_RGB( 69, 139, 116)
+	#define X11_AQUAMARINE_4            MK_RGB( 69, 139, 116)
+	#define X11_DARKSEAGREEN1           MK_RGB(193, 255, 193)
+	#define X11_DARK_SEA_GREEN_1        MK_RGB(193, 255, 193)
+	#define X11_DARKSEAGREEN2           MK_RGB(180, 238, 180)
+	#define X11_DARK_SEA_GREEN_2        MK_RGB(180, 238, 180)
+	#define X11_DARKSEAGREEN3           MK_RGB(155, 205, 155)
+	#define X11_DARK_SEA_GREEN_3        MK_RGB(155, 205, 155)
+	#define X11_DARKSEAGREEN4           MK_RGB(105, 139, 105)
+	#define X11_DARK_SEA_GREEN_4        MK_RGB(105, 139, 105)
+	#define X11_SEAGREEN1               MK_RGB( 84, 255, 159)
+	#define X11_SEA_GREEN_1             MK_RGB( 84, 255, 159)
+	#define X11_SEAGREEN2               MK_RGB( 78, 238, 148)
+	#define X11_SEA_GREEN_2             MK_RGB( 78, 238, 148)
+	#define X11_SEAGREEN3               MK_RGB( 67, 205, 128)
+	#define X11_SEA_GREEN_3             MK_RGB( 67, 205, 128)
+	#define X11_SEAGREEN4               MK_RGB( 46, 139,  87)
+	#define X11_SEA_GREEN_4             MK_RGB( 46, 139,  87)
+	#define X11_PALEGREEN1              MK_RGB(154, 255, 154)
+	#define X11_PALE_GREEN_1            MK_RGB(154, 255, 154)
+	#define X11_PALEGREEN2              MK_RGB(144, 238, 144)
+	#define X11_PALE_GREEN_2            MK_RGB(144, 238, 144)
+	#define X11_PALEGREEN3              MK_RGB(124, 205, 124)
+	#define X11_PALE_GREEN_3            MK_RGB(124, 205, 124)
+	#define X11_PALEGREEN4              MK_RGB( 84, 139,  84)
+	#define X11_PALE_GREEN_4            MK_RGB( 84, 139,  84)
+	#define X11_SPRINGGREEN1            MK_RGB(  0, 255, 127)
+	#define X11_SPRING_GREEN_1          MK_RGB(  0, 255, 127)
+	#define X11_SPRINGGREEN2            MK_RGB(  0, 238, 118)
+	#define X11_SPRING_GREEN_2          MK_RGB(  0, 238, 118)
+	#define X11_SPRINGGREEN3            MK_RGB(  0, 205, 102)
+	#define X11_SPRING_GREEN_3          MK_RGB(  0, 205, 102)
+	#define X11_SPRINGGREEN4            MK_RGB(  0, 139,  69)
+	#define X11_SPRING_GREEN_4          MK_RGB(  0, 139,  69)
+	#define X11_GREEN1                  MK_RGB(  0, 255,   0)
+	#define X11_GREEN_1                 MK_RGB(  0, 255,   0)
+	#define X11_GREEN2                  MK_RGB(  0, 238,   0)
+	#define X11_GREEN_2                 MK_RGB(  0, 238,   0)
+	#define X11_GREEN3                  MK_RGB(  0, 205,   0)
+	#define X11_GREEN_3                 MK_RGB(  0, 205,   0)
+	#define X11_GREEN4                  MK_RGB(  0, 139,   0)
+	#define X11_GREEN_4                 MK_RGB(  0, 139,   0)
+	#define X11_CHARTREUSE1             MK_RGB(127, 255,   0)
+	#define X11_CHARTREUSE_1            MK_RGB(127, 255,   0)
+	#define X11_CHARTREUSE2             MK_RGB(118, 238,   0)
+	#define X11_CHARTREUSE_2            MK_RGB(118, 238,   0)
+	#define X11_CHARTREUSE3             MK_RGB(102, 205,   0)
+	#define X11_CHARTREUSE_3            MK_RGB(102, 205,   0)
+	#define X11_CHARTREUSE4             MK_RGB( 69, 139,   0)
+	#define X11_CHARTREUSE_4            MK_RGB( 69, 139,   0)
+	#define X11_OLIVEDRAB1              MK_RGB(192, 255,  62)
+	#define X11_OLIVE_DRAB_1            MK_RGB(192, 255,  62)
+	#define X11_OLIVEDRAB2              MK_RGB(179, 238,  58)
+	#define X11_OLIVE_DRAB_2            MK_RGB(179, 238,  58)
+	#define X11_OLIVEDRAB3              MK_RGB(154, 205,  50)
+	#define X11_OLIVE_DRAB_3            MK_RGB(154, 205,  50)
+	#define X11_OLIVEDRAB4              MK_RGB(105, 139,  34)
+	#define X11_OLIVE_DRAB_4            MK_RGB(105, 139,  34)
+	#define X11_DARKOLIVEGREEN1         MK_RGB(202, 255, 112)
+	#define X11_DARK_OLIVE_GREEN_1      MK_RGB(202, 255, 112)
+	#define X11_DARKOLIVEGREEN2         MK_RGB(188, 238, 104)
+	#define X11_DARK_OLIVE_GREEN_2      MK_RGB(188, 238, 104)
+	#define X11_DARKOLIVEGREEN3         MK_RGB(162, 205,  90)
+	#define X11_DARK_OLIVE_GREEN_3      MK_RGB(162, 205,  90)
+	#define X11_DARKOLIVEGREEN4         MK_RGB(110, 139,  61)
+	#define X11_DARK_OLIVE_GREEN_4      MK_RGB(110, 139,  61)
+	#define X11_KHAKI1                  MK_RGB(255, 246, 143)
+	#define X11_KHAKI_1                 MK_RGB(255, 246, 143)
+	#define X11_KHAKI2                  MK_RGB(238, 230, 133)
+	#define X11_KHAKI_2                 MK_RGB(238, 230, 133)
+	#define X11_KHAKI3                  MK_RGB(205, 198, 115)
+	#define X11_KHAKI_3                 MK_RGB(205, 198, 115)
+	#define X11_KHAKI4                  MK_RGB(139, 134,  78)
+	#define X11_KHAKI_4                 MK_RGB(139, 134,  78)
+	#define X11_LIGHTGOLDENROD1         MK_RGB(255, 236, 139)
+	#define X11_LIGHT_GOLDENROD_1       MK_RGB(255, 236, 139)
+	#define X11_LIGHTGOLDENROD2         MK_RGB(238, 220, 130)
+	#define X11_LIGHT_GOLDENROD_2       MK_RGB(238, 220, 130)
+	#define X11_LIGHTGOLDENROD3         MK_RGB(205, 190, 112)
+	#define X11_LIGHT_GOLDENROD_3       MK_RGB(205, 190, 112)
+	#define X11_LIGHTGOLDENROD4         MK_RGB(139, 129,  76)
+	#define X11_LIGHT_GOLDENROD_4       MK_RGB(139, 129,  76)
+	#define X11_LIGHTYELLOW1            MK_RGB(255, 255, 224)
+	#define X11_LIGHT_YELLOW_1          MK_RGB(255, 255, 224)
+	#define X11_LIGHTYELLOW2            MK_RGB(238, 238, 209)
+	#define X11_LIGHT_YELLOW_2          MK_RGB(238, 238, 209)
+	#define X11_LIGHTYELLOW3            MK_RGB(205, 205, 180)
+	#define X11_LIGHT_YELLOW_3          MK_RGB(205, 205, 180)
+	#define X11_LIGHTYELLOW4            MK_RGB(139, 139, 122)
+	#define X11_LIGHT_YELLOW_4          MK_RGB(139, 139, 122)
+	#define X11_YELLOW1                 MK_RGB(255, 255,   0)
+	#define X11_YELLOW_1                MK_RGB(255, 255,   0)
+	#define X11_YELLOW2                 MK_RGB(238, 238,   0)
+	#define X11_YELLOW_2                MK_RGB(238, 238,   0)
+	#define X11_YELLOW3                 MK_RGB(205, 205,   0)
+	#define X11_YELLOW_3                MK_RGB(205, 205,   0)
+	#define X11_YELLOW4                 MK_RGB(139, 139,   0)
+	#define X11_YELLOW_4                MK_RGB(139, 139,   0)
+	#define X11_GOLD1                   MK_RGB(255, 215,   0)
+	#define X11_GOLD_1                  MK_RGB(255, 215,   0)
+	#define X11_GOLD2                   MK_RGB(238, 201,   0)
+	#define X11_GOLD_2                  MK_RGB(238, 201,   0)
+	#define X11_GOLD3                   MK_RGB(205, 173,   0)
+	#define X11_GOLD_3                  MK_RGB(205, 173,   0)
+	#define X11_GOLD4                   MK_RGB(139, 117,   0)
+	#define X11_GOLD_4                  MK_RGB(139, 117,   0)
+	#define X11_GOLDENROD1              MK_RGB(255, 193,  37)
+	#define X11_GOLDENROD_1             MK_RGB(255, 193,  37)
+	#define X11_GOLDENROD2              MK_RGB(238, 180,  34)
+	#define X11_GOLDENROD_2             MK_RGB(238, 180,  34)
+	#define X11_GOLDENROD3              MK_RGB(205, 155,  29)
+	#define X11_GOLDENROD_3             MK_RGB(205, 155,  29)
+	#define X11_GOLDENROD4              MK_RGB(139, 105,  20)
+	#define X11_GOLDENROD_4             MK_RGB(139, 105,  20)
+	#define X11_DARKGOLDENROD1          MK_RGB(255, 185,  15)
+	#define X11_DARK_GOLDENROD_1        MK_RGB(255, 185,  15)
+	#define X11_DARKGOLDENROD2          MK_RGB(238, 173,  14)
+	#define X11_DARK_GOLDENROD_2        MK_RGB(238, 173,  14)
+	#define X11_DARKGOLDENROD3          MK_RGB(205, 149,  12)
+	#define X11_DARK_GOLDENROD_3        MK_RGB(205, 149,  12)
+	#define X11_DARKGOLDENROD4          MK_RGB(139, 101,   8)
+	#define X11_DARK_GOLDENROD_4        MK_RGB(139, 101,   8)
+	#define X11_ROSYBROWN1              MK_RGB(255, 193, 193)
+	#define X11_ROSY_BROWN_1            MK_RGB(255, 193, 193)
+	#define X11_ROSYBROWN2              MK_RGB(238, 180, 180)
+	#define X11_ROSY_BROWN_2            MK_RGB(238, 180, 180)
+	#define X11_ROSYBROWN3              MK_RGB(205, 155, 155)
+	#define X11_ROSY_BROWN_3            MK_RGB(205, 155, 155)
+	#define X11_ROSYBROWN4              MK_RGB(139, 105, 105)
+	#define X11_ROSY_BROWN_4            MK_RGB(139, 105, 105)
+	#define X11_INDIANRED1              MK_RGB(255, 106, 106)
+	#define X11_INDIAN_RED_1            MK_RGB(255, 106, 106)
+	#define X11_INDIANRED2              MK_RGB(238,  99,  99)
+	#define X11_INDIAN_RED_2            MK_RGB(238,  99,  99)
+	#define X11_INDIANRED3              MK_RGB(205,  85,  85)
+	#define X11_INDIAN_RED_3            MK_RGB(205,  85,  85)
+	#define X11_INDIANRED4              MK_RGB(139,  58,  58)
+	#define X11_INDIAN_RED_4            MK_RGB(139,  58,  58)
+	#define X11_SIENNA1                 MK_RGB(255, 130,  71)
+	#define X11_SIENNA_1                MK_RGB(255, 130,  71)
+	#define X11_SIENNA2                 MK_RGB(238, 121,  66)
+	#define X11_SIENNA_2                MK_RGB(238, 121,  66)
+	#define X11_SIENNA3                 MK_RGB(205, 104,  57)
+	#define X11_SIENNA_3                MK_RGB(205, 104,  57)
+	#define X11_SIENNA4                 MK_RGB(139,  71,  38)
+	#define X11_SIENNA_4                MK_RGB(139,  71,  38)
+	#define X11_BURLYWOOD1              MK_RGB(255, 211, 155)
+	#define X11_BURLYWOOD_1             MK_RGB(255, 211, 155)
+	#define X11_BURLYWOOD2              MK_RGB(238, 197, 145)
+	#define X11_BURLYWOOD_2             MK_RGB(238, 197, 145)
+	#define X11_BURLYWOOD3              MK_RGB(205, 170, 125)
+	#define X11_BURLYWOOD_3             MK_RGB(205, 170, 125)
+	#define X11_BURLYWOOD4              MK_RGB(139, 115,  85)
+	#define X11_BURLYWOOD_4             MK_RGB(139, 115,  85)
+	#define X11_WHEAT1                  MK_RGB(255, 231, 186)
+	#define X11_WHEAT_1                 MK_RGB(255, 231, 186)
+	#define X11_WHEAT2                  MK_RGB(238, 216, 174)
+	#define X11_WHEAT_2                 MK_RGB(238, 216, 174)
+	#define X11_WHEAT3                  MK_RGB(205, 186, 150)
+	#define X11_WHEAT_3                 MK_RGB(205, 186, 150)
+	#define X11_WHEAT4                  MK_RGB(139, 126, 102)
+	#define X11_WHEAT_4                 MK_RGB(139, 126, 102)
+	#define X11_TAN1                    MK_RGB(255, 165,  79)
+	#define X11_TAN_1                   MK_RGB(255, 165,  79)
+	#define X11_TAN2                    MK_RGB(238, 154,  73)
+	#define X11_TAN_2                   MK_RGB(238, 154,  73)
+	#define X11_TAN3                    MK_RGB(205, 133,  63)
+	#define X11_TAN_3                   MK_RGB(205, 133,  63)
+	#define X11_TAN4                    MK_RGB(139,  90,  43)
+	#define X11_TAN_4                   MK_RGB(139,  90,  43)
+	#define X11_CHOCOLATE1              MK_RGB(255, 127,  36)
+	#define X11_CHOCOLATE_1             MK_RGB(255, 127,  36)
+	#define X11_CHOCOLATE2              MK_RGB(238, 118,  33)
+	#define X11_CHOCOLATE_2             MK_RGB(238, 118,  33)
+	#define X11_CHOCOLATE3              MK_RGB(205, 102,  29)
+	#define X11_CHOCOLATE_3             MK_RGB(205, 102,  29)
+	#define X11_CHOCOLATE4              MK_RGB(139,  69,  19)
+	#define X11_CHOCOLATE_4             MK_RGB(139,  69,  19)
+	#define X11_FIREBRICK1              MK_RGB(255,  48,  48)
+	#define X11_FIREBRICK_1             MK_RGB(255,  48,  48)
+	#define X11_FIREBRICK2              MK_RGB(238,  44,  44)
+	#define X11_FIREBRICK_2             MK_RGB(238,  44,  44)
+	#define X11_FIREBRICK3              MK_RGB(205,  38,  38)
+	#define X11_FIREBRICK_3             MK_RGB(205,  38,  38)
+	#define X11_FIREBRICK4              MK_RGB(139,  26,  26)
+	#define X11_FIREBRICK_4             MK_RGB(139,  26,  26)
+	#define X11_BROWN1                  MK_RGB(255,  64,  64)
+	#define X11_BROWN_1                 MK_RGB(255,  64,  64)
+	#define X11_BROWN2                  MK_RGB(238,  59,  59)
+	#define X11_BROWN_2                 MK_RGB(238,  59,  59)
+	#define X11_BROWN3                  MK_RGB(205,  51,  51)
+	#define X11_BROWN_3                 MK_RGB(205,  51,  51)
+	#define X11_BROWN4                  MK_RGB(139,  35,  35)
+	#define X11_BROWN_4                 MK_RGB(139,  35,  35)
+	#define X11_SALMON1                 MK_RGB(255, 140, 105)
+	#define X11_SALMON_1                MK_RGB(255, 140, 105)
+	#define X11_SALMON2                 MK_RGB(238, 130,  98)
+	#define X11_SALMON_2                MK_RGB(238, 130,  98)
+	#define X11_SALMON3                 MK_RGB(205, 112,  84)
+	#define X11_SALMON_3                MK_RGB(205, 112,  84)
+	#define X11_SALMON4                 MK_RGB(139,  76,  57)
+	#define X11_SALMON_4                MK_RGB(139,  76,  57)
+	#define X11_LIGHTSALMON1            MK_RGB(255, 160, 122)
+	#define X11_LIGHT_SALMON_1          MK_RGB(255, 160, 122)
+	#define X11_LIGHTSALMON2            MK_RGB(238, 149, 114)
+	#define X11_LIGHT_SALMON_2          MK_RGB(238, 149, 114)
+	#define X11_LIGHTSALMON3            MK_RGB(205, 129,  98)
+	#define X11_LIGHT_SALMON_3          MK_RGB(205, 129,  98)
+	#define X11_LIGHTSALMON4            MK_RGB(139,  87,  66)
+	#define X11_LIGHT_SALMON_4          MK_RGB(139,  87,  66)
+	#define X11_ORANGE1                 MK_RGB(255, 165,   0)
+	#define X11_ORANGE_1                MK_RGB(255, 165,   0)
+	#define X11_ORANGE2                 MK_RGB(238, 154,   0)
+	#define X11_ORANGE_2                MK_RGB(238, 154,   0)
+	#define X11_ORANGE3                 MK_RGB(205, 133,   0)
+	#define X11_ORANGE_3                MK_RGB(205, 133,   0)
+	#define X11_ORANGE4                 MK_RGB(139,  90,   0)
+	#define X11_ORANGE_4                MK_RGB(139,  90,   0)
+	#define X11_DARKORANGE1             MK_RGB(255, 127,   0)
+	#define X11_DARK_ORANGE_1           MK_RGB(255, 127,   0)
+	#define X11_DARKORANGE2             MK_RGB(238, 118,   0)
+	#define X11_DARK_ORANGE_2           MK_RGB(238, 118,   0)
+	#define X11_DARKORANGE3             MK_RGB(205, 102,   0)
+	#define X11_DARK_ORANGE_3           MK_RGB(205, 102,   0)
+	#define X11_DARKORANGE4             MK_RGB(139,  69,   0)
+	#define X11_DARK_ORANGE_4           MK_RGB(139,  69,   0)
+	#define X11_CORAL1                  MK_RGB(255, 114,  86)
+	#define X11_CORAL_1                 MK_RGB(255, 114,  86)
+	#define X11_CORAL2                  MK_RGB(238, 106,  80)
+	#define X11_CORAL_2                 MK_RGB(238, 106,  80)
+	#define X11_CORAL3                  MK_RGB(205,  91,  69)
+	#define X11_CORAL_3                 MK_RGB(205,  91,  69)
+	#define X11_CORAL4                  MK_RGB(139,  62,  47)
+	#define X11_CORAL_4                 MK_RGB(139,  62,  47)
+	#define X11_TOMATO1                 MK_RGB(255,  99,  71)
+	#define X11_TOMATO_1                MK_RGB(255,  99,  71)
+	#define X11_TOMATO2                 MK_RGB(238,  92,  66)
+	#define X11_TOMATO_2                MK_RGB(238,  92,  66)
+	#define X11_TOMATO3                 MK_RGB(205,  79,  57)
+	#define X11_TOMATO_3                MK_RGB(205,  79,  57)
+	#define X11_TOMATO4                 MK_RGB(139,  54,  38)
+	#define X11_TOMATO_4                MK_RGB(139,  54,  38)
+	#define X11_ORANGERED1              MK_RGB(255,  69,   0)
+	#define X11_ORANGE_RED_1            MK_RGB(255,  69,   0)
+	#define X11_ORANGERED2              MK_RGB(238,  64,   0)
+	#define X11_ORANGE_RED_2            MK_RGB(238,  64,   0)
+	#define X11_ORANGERED3              MK_RGB(205,  55,   0)
+	#define X11_ORANGE_RED_3            MK_RGB(205,  55,   0)
+	#define X11_ORANGERED4              MK_RGB(139,  37,   0)
+	#define X11_ORANGE_RED_4            MK_RGB(139,  37,   0)
+	#define X11_RED1                    MK_RGB(255,   0,   0)
+	#define X11_RED_1                   MK_RGB(255,   0,   0)
+	#define X11_RED2                    MK_RGB(238,   0,   0)
+	#define X11_RED_2                   MK_RGB(238,   0,   0)
+	#define X11_RED3                    MK_RGB(205,   0,   0)
+	#define X11_RED_3                   MK_RGB(205,   0,   0)
+	#define X11_RED4                    MK_RGB(139,   0,   0)
+	#define X11_RED_4                   MK_RGB(139,   0,   0)
+	#define X11_DEEPPINK1               MK_RGB(255,  20, 147)
+	#define X11_DEEP_PINK_1             MK_RGB(255,  20, 147)
+	#define X11_DEEPPINK2               MK_RGB(238,  18, 137)
+	#define X11_DEEP_PINK_2             MK_RGB(238,  18, 137)
+	#define X11_DEEPPINK3               MK_RGB(205,  16, 118)
+	#define X11_DEEP_PINK_3             MK_RGB(205,  16, 118)
+	#define X11_DEEPPINK4               MK_RGB(139,  10,  80)
+	#define X11_DEEP_PINK_4             MK_RGB(139,  10,  80)
+	#define X11_HOTPINK1                MK_RGB(255, 110, 180)
+	#define X11_HOT_PINK_1              MK_RGB(255, 110, 180)
+	#define X11_HOTPINK2                MK_RGB(238, 106, 167)
+	#define X11_HOT_PINK_2              MK_RGB(238, 106, 167)
+	#define X11_HOTPINK3                MK_RGB(205,  96, 144)
+	#define X11_HOT_PINK_3              MK_RGB(205,  96, 144)
+	#define X11_HOTPINK4                MK_RGB(139,  58,  98)
+	#define X11_HOT_PINK_4              MK_RGB(139,  58,  98)
+	#define X11_PINK1                   MK_RGB(255, 181, 197)
+	#define X11_PINK_1                  MK_RGB(255, 181, 197)
+	#define X11_PINK2                   MK_RGB(238, 169, 184)
+	#define X11_PINK_2                  MK_RGB(238, 169, 184)
+	#define X11_PINK3                   MK_RGB(205, 145, 158)
+	#define X11_PINK_3                  MK_RGB(205, 145, 158)
+	#define X11_PINK4                   MK_RGB(139,  99, 108)
+	#define X11_PINK_4                  MK_RGB(139,  99, 108)
+	#define X11_LIGHTPINK1              MK_RGB(255, 174, 185)
+	#define X11_LIGHT_PINK_1            MK_RGB(255, 174, 185)
+	#define X11_LIGHTPINK2              MK_RGB(238, 162, 173)
+	#define X11_LIGHT_PINK_2            MK_RGB(238, 162, 173)
+	#define X11_LIGHTPINK3              MK_RGB(205, 140, 149)
+	#define X11_LIGHT_PINK_3            MK_RGB(205, 140, 149)
+	#define X11_LIGHTPINK4              MK_RGB(139,  95, 101)
+	#define X11_LIGHT_PINK_4            MK_RGB(139,  95, 101)
+	#define X11_PALEVIOLETRED1          MK_RGB(255, 130, 171)
+	#define X11_PALE_VIOLET_RED_1       MK_RGB(255, 130, 171)
+	#define X11_PALEVIOLETRED2          MK_RGB(238, 121, 159)
+	#define X11_PALE_VIOLET_RED_2       MK_RGB(238, 121, 159)
+	#define X11_PALEVIOLETRED3          MK_RGB(205, 104, 137)
+	#define X11_PALE_VIOLET_RED_3       MK_RGB(205, 104, 137)
+	#define X11_PALEVIOLETRED4          MK_RGB(139,  71,  93)
+	#define X11_PALE_VIOLET_RED_4       MK_RGB(139,  71,  93)
+	#define X11_MAROON1                 MK_RGB(255,  52, 179)
+	#define X11_MAROON_1                MK_RGB(255,  52, 179)
+	#define X11_MAROON2                 MK_RGB(238,  48, 167)
+	#define X11_MAROON_2                MK_RGB(238,  48, 167)
+	#define X11_MAROON3                 MK_RGB(205,  41, 144)
+	#define X11_MAROON_3                MK_RGB(205,  41, 144)
+	#define X11_MAROON4                 MK_RGB(139,  28,  98)
+	#define X11_MAROON_4                MK_RGB(139,  28,  98)
+	#define X11_VIOLETRED1              MK_RGB(255,  62, 150)
+	#define X11_VIOLET_RED_1            MK_RGB(255,  62, 150)
+	#define X11_VIOLETRED2              MK_RGB(238,  58, 140)
+	#define X11_VIOLET_RED_2            MK_RGB(238,  58, 140)
+	#define X11_VIOLETRED3              MK_RGB(205,  50, 120)
+	#define X11_VIOLET_RED_3            MK_RGB(205,  50, 120)
+	#define X11_VIOLETRED4              MK_RGB(139,  34,  82)
+	#define X11_VIOLET_RED_4            MK_RGB(139,  34,  82)
+	#define X11_MAGENTA1                MK_RGB(255,   0, 255)
+	#define X11_MAGENTA_1               MK_RGB(255,   0, 255)
+	#define X11_MAGENTA2                MK_RGB(238,   0, 238)
+	#define X11_MAGENTA_2               MK_RGB(238,   0, 238)
+	#define X11_MAGENTA3                MK_RGB(205,   0, 205)
+	#define X11_MAGENTA_3               MK_RGB(205,   0, 205)
+	#define X11_MAGENTA4                MK_RGB(139,   0, 139)
+	#define X11_MAGENTA_4               MK_RGB(139,   0, 139)
+	#define X11_ORCHID1                 MK_RGB(255, 131, 250)
+	#define X11_ORCHID_1                MK_RGB(255, 131, 250)
+	#define X11_ORCHID2                 MK_RGB(238, 122, 233)
+	#define X11_ORCHID_2                MK_RGB(238, 122, 233)
+	#define X11_ORCHID3                 MK_RGB(205, 105, 201)
+	#define X11_ORCHID_3                MK_RGB(205, 105, 201)
+	#define X11_ORCHID4                 MK_RGB(139,  71, 137)
+	#define X11_ORCHID_4                MK_RGB(139,  71, 137)
+	#define X11_PLUM1                   MK_RGB(255, 187, 255)
+	#define X11_PLUM_1                  MK_RGB(255, 187, 255)
+	#define X11_PLUM2                   MK_RGB(238, 174, 238)
+	#define X11_PLUM_2                  MK_RGB(238, 174, 238)
+	#define X11_PLUM3                   MK_RGB(205, 150, 205)
+	#define X11_PLUM_3                  MK_RGB(205, 150, 205)
+	#define X11_PLUM4                   MK_RGB(139, 102, 139)
+	#define X11_PLUM_4                  MK_RGB(139, 102, 139)
+	#define X11_MEDIUMORCHID1           MK_RGB(224, 102, 255)
+	#define X11_MEDIUM_ORCHID_1         MK_RGB(224, 102, 255)
+	#define X11_MEDIUMORCHID2           MK_RGB(209,  95, 238)
+	#define X11_MEDIUM_ORCHID_2         MK_RGB(209,  95, 238)
+	#define X11_MEDIUMORCHID3           MK_RGB(180,  82, 205)
+	#define X11_MEDIUM_ORCHID_3         MK_RGB(180,  82, 205)
+	#define X11_MEDIUMORCHID4           MK_RGB(122,  55, 139)
+	#define X11_MEDIUM_ORCHID_4         MK_RGB(122,  55, 139)
+	#define X11_DARKORCHID1             MK_RGB(191,  62, 255)
+	#define X11_DARK_ORCHID_1           MK_RGB(191,  62, 255)
+	#define X11_DARKORCHID2             MK_RGB(178,  58, 238)
+	#define X11_DARK_ORCHID_2           MK_RGB(178,  58, 238)
+	#define X11_DARKORCHID3             MK_RGB(154,  50, 205)
+	#define X11_DARK_ORCHID_3           MK_RGB(154,  50, 205)
+	#define X11_DARKORCHID4             MK_RGB(104,  34, 139)
+	#define X11_DARK_ORCHID_4           MK_RGB(104,  34, 139)
+	#define X11_PURPLE1                 MK_RGB(155,  48, 255)
+	#define X11_PURPLE_1                MK_RGB(155,  48, 255)
+	#define X11_PURPLE2                 MK_RGB(145,  44, 238)
+	#define X11_PURPLE_2                MK_RGB(145,  44, 238)
+	#define X11_PURPLE3                 MK_RGB(125,  38, 205)
+	#define X11_PURPLE_3                MK_RGB(125,  38, 205)
+	#define X11_PURPLE4                 MK_RGB( 85,  26, 139)
+	#define X11_PURPLE_4                MK_RGB( 85,  26, 139)
+	#define X11_MEDIUMPURPLE1           MK_RGB(171, 130, 255)
+	#define X11_MEDIUM_PURPLE_1         MK_RGB(171, 130, 255)
+	#define X11_MEDIUMPURPLE2           MK_RGB(159, 121, 238)
+	#define X11_MEDIUM_PURPLE_2         MK_RGB(159, 121, 238)
+	#define X11_MEDIUMPURPLE3           MK_RGB(137, 104, 205)
+	#define X11_MEDIUM_PURPLE_3         MK_RGB(137, 104, 205)
+	#define X11_MEDIUMPURPLE4           MK_RGB( 93,  71, 139)
+	#define X11_MEDIUM_PURPLE_4         MK_RGB( 93,  71, 139)
+	#define X11_THISTLE1                MK_RGB(255, 225, 255)
+	#define X11_THISTLE_1               MK_RGB(255, 225, 255)
+	#define X11_THISTLE2                MK_RGB(238, 210, 238)
+	#define X11_THISTLE_2               MK_RGB(238, 210, 238)
+	#define X11_THISTLE3                MK_RGB(205, 181, 205)
+	#define X11_THISTLE_3               MK_RGB(205, 181, 205)
+	#define X11_THISTLE4                MK_RGB(139, 123, 139)
+	#define X11_THISTLE_4               MK_RGB(139, 123, 139)
+	#define X11_GRAY0                   MK_RGB(  0,   0,   0)
+	#define X11_GRAY_0                  MK_RGB(  0,   0,   0)
+	#define X11_GREY0                   MK_RGB(  0,   0,   0)
+	#define X11_GREY_0                  MK_RGB(  0,   0,   0)
+	#define X11_GRAY1                   MK_RGB(  3,   3,   3)
+	#define X11_GRAY_1                  MK_RGB(  3,   3,   3)
+	#define X11_GREY1                   MK_RGB(  3,   3,   3)
+	#define X11_GREY_1                  MK_RGB(  3,   3,   3)
+	#define X11_GRAY2                   MK_RGB(  5,   5,   5)
+	#define X11_GRAY_2                  MK_RGB(  5,   5,   5)
+	#define X11_GREY2                   MK_RGB(  5,   5,   5)
+	#define X11_GREY_2                  MK_RGB(  5,   5,   5)
+	#define X11_GRAY3                   MK_RGB(  8,   8,   8)
+	#define X11_GRAY_3                  MK_RGB(  8,   8,   8)
+	#define X11_GREY3                   MK_RGB(  8,   8,   8)
+	#define X11_GREY_3                  MK_RGB(  8,   8,   8)
+	#define X11_GRAY4                   MK_RGB( 10,  10,  10)
+	#define X11_GRAY_4                  MK_RGB( 10,  10,  10)
+	#define X11_GREY4                   MK_RGB( 10,  10,  10)
+	#define X11_GREY_4                  MK_RGB( 10,  10,  10)
+	#define X11_GRAY5                   MK_RGB( 13,  13,  13)
+	#define X11_GRAY_5                  MK_RGB( 13,  13,  13)
+	#define X11_GREY5                   MK_RGB( 13,  13,  13)
+	#define X11_GREY_5                  MK_RGB( 13,  13,  13)
+	#define X11_GRAY6                   MK_RGB( 15,  15,  15)
+	#define X11_GRAY_6                  MK_RGB( 15,  15,  15)
+	#define X11_GREY6                   MK_RGB( 15,  15,  15)
+	#define X11_GREY_6                  MK_RGB( 15,  15,  15)
+	#define X11_GRAY7                   MK_RGB( 18,  18,  18)
+	#define X11_GRAY_7                  MK_RGB( 18,  18,  18)
+	#define X11_GREY7                   MK_RGB( 18,  18,  18)
+	#define X11_GREY_7                  MK_RGB( 18,  18,  18)
+	#define X11_GRAY8                   MK_RGB( 20,  20,  20)
+	#define X11_GRAY_8                  MK_RGB( 20,  20,  20)
+	#define X11_GREY8                   MK_RGB( 20,  20,  20)
+	#define X11_GREY_8                  MK_RGB( 20,  20,  20)
+	#define X11_GRAY9                   MK_RGB( 23,  23,  23)
+	#define X11_GRAY_9                  MK_RGB( 23,  23,  23)
+	#define X11_GREY9                   MK_RGB( 23,  23,  23)
+	#define X11_GREY_9                  MK_RGB( 23,  23,  23)
+	#define X11_GRAY10                  MK_RGB( 26,  26,  26)
+	#define X11_GRAY_10                 MK_RGB( 26,  26,  26)
+	#define X11_GREY10                  MK_RGB( 26,  26,  26)
+	#define X11_GREY_10                 MK_RGB( 26,  26,  26)
+	#define X11_GRAY11                  MK_RGB( 28,  28,  28)
+	#define X11_GRAY_11                 MK_RGB( 28,  28,  28)
+	#define X11_GREY11                  MK_RGB( 28,  28,  28)
+	#define X11_GREY_11                 MK_RGB( 28,  28,  28)
+	#define X11_GRAY12                  MK_RGB( 31,  31,  31)
+	#define X11_GRAY_12                 MK_RGB( 31,  31,  31)
+	#define X11_GREY12                  MK_RGB( 31,  31,  31)
+	#define X11_GREY_12                 MK_RGB( 31,  31,  31)
+	#define X11_GRAY13                  MK_RGB( 33,  33,  33)
+	#define X11_GRAY_13                 MK_RGB( 33,  33,  33)
+	#define X11_GREY13                  MK_RGB( 33,  33,  33)
+	#define X11_GREY_13                 MK_RGB( 33,  33,  33)
+	#define X11_GRAY14                  MK_RGB( 36,  36,  36)
+	#define X11_GRAY_14                 MK_RGB( 36,  36,  36)
+	#define X11_GREY14                  MK_RGB( 36,  36,  36)
+	#define X11_GREY_14                 MK_RGB( 36,  36,  36)
+	#define X11_GRAY15                  MK_RGB( 38,  38,  38)
+	#define X11_GRAY_15                 MK_RGB( 38,  38,  38)
+	#define X11_GREY15                  MK_RGB( 38,  38,  38)
+	#define X11_GREY_15                 MK_RGB( 38,  38,  38)
+	#define X11_GRAY16                  MK_RGB( 41,  41,  41)
+	#define X11_GRAY_16                 MK_RGB( 41,  41,  41)
+	#define X11_GREY16                  MK_RGB( 41,  41,  41)
+	#define X11_GREY_16                 MK_RGB( 41,  41,  41)
+	#define X11_GRAY17                  MK_RGB( 43,  43,  43)
+	#define X11_GRAY_17                 MK_RGB( 43,  43,  43)
+	#define X11_GREY17                  MK_RGB( 43,  43,  43)
+	#define X11_GREY_17                 MK_RGB( 43,  43,  43)
+	#define X11_GRAY18                  MK_RGB( 46,  46,  46)
+	#define X11_GRAY_18                 MK_RGB( 46,  46,  46)
+	#define X11_GREY18                  MK_RGB( 46,  46,  46)
+	#define X11_GREY_18                 MK_RGB( 46,  46,  46)
+	#define X11_GRAY19                  MK_RGB( 48,  48,  48)
+	#define X11_GRAY_19                 MK_RGB( 48,  48,  48)
+	#define X11_GREY19                  MK_RGB( 48,  48,  48)
+	#define X11_GREY_19                 MK_RGB( 48,  48,  48)
+	#define X11_GRAY20                  MK_RGB( 51,  51,  51)
+	#define X11_GRAY_20                 MK_RGB( 51,  51,  51)
+	#define X11_GREY20                  MK_RGB( 51,  51,  51)
+	#define X11_GREY_20                 MK_RGB( 51,  51,  51)
+	#define X11_GRAY21                  MK_RGB( 54,  54,  54)
+	#define X11_GRAY_21                 MK_RGB( 54,  54,  54)
+	#define X11_GREY21                  MK_RGB( 54,  54,  54)
+	#define X11_GREY_21                 MK_RGB( 54,  54,  54)
+	#define X11_GRAY22                  MK_RGB( 56,  56,  56)
+	#define X11_GRAY_22                 MK_RGB( 56,  56,  56)
+	#define X11_GREY22                  MK_RGB( 56,  56,  56)
+	#define X11_GREY_22                 MK_RGB( 56,  56,  56)
+	#define X11_GRAY23                  MK_RGB( 59,  59,  59)
+	#define X11_GRAY_23                 MK_RGB( 59,  59,  59)
+	#define X11_GREY23                  MK_RGB( 59,  59,  59)
+	#define X11_GREY_23                 MK_RGB( 59,  59,  59)
+	#define X11_GRAY24                  MK_RGB( 61,  61,  61)
+	#define X11_GRAY_24                 MK_RGB( 61,  61,  61)
+	#define X11_GREY24                  MK_RGB( 61,  61,  61)
+	#define X11_GREY_24                 MK_RGB( 61,  61,  61)
+	#define X11_GRAY25                  MK_RGB( 64,  64,  64)
+	#define X11_GRAY_25                 MK_RGB( 64,  64,  64)
+	#define X11_GREY25                  MK_RGB( 64,  64,  64)
+	#define X11_GREY_25                 MK_RGB( 64,  64,  64)
+	#define X11_GRAY26                  MK_RGB( 66,  66,  66)
+	#define X11_GRAY_26                 MK_RGB( 66,  66,  66)
+	#define X11_GREY26                  MK_RGB( 66,  66,  66)
+	#define X11_GREY_26                 MK_RGB( 66,  66,  66)
+	#define X11_GRAY27                  MK_RGB( 69,  69,  69)
+	#define X11_GRAY_27                 MK_RGB( 69,  69,  69)
+	#define X11_GREY27                  MK_RGB( 69,  69,  69)
+	#define X11_GREY_27                 MK_RGB( 69,  69,  69)
+	#define X11_GRAY28                  MK_RGB( 71,  71,  71)
+	#define X11_GRAY_28                 MK_RGB( 71,  71,  71)
+	#define X11_GREY28                  MK_RGB( 71,  71,  71)
+	#define X11_GREY_28                 MK_RGB( 71,  71,  71)
+	#define X11_GRAY29                  MK_RGB( 74,  74,  74)
+	#define X11_GRAY_29                 MK_RGB( 74,  74,  74)
+	#define X11_GREY29                  MK_RGB( 74,  74,  74)
+	#define X11_GREY_29                 MK_RGB( 74,  74,  74)
+	#define X11_GRAY30                  MK_RGB( 77,  77,  77)
+	#define X11_GRAY_30                 MK_RGB( 77,  77,  77)
+	#define X11_GREY30                  MK_RGB( 77,  77,  77)
+	#define X11_GREY_30                 MK_RGB( 77,  77,  77)
+	#define X11_GRAY31                  MK_RGB( 79,  79,  79)
+	#define X11_GRAY_31                 MK_RGB( 79,  79,  79)
+	#define X11_GREY31                  MK_RGB( 79,  79,  79)
+	#define X11_GREY_31                 MK_RGB( 79,  79,  79)
+	#define X11_GRAY32                  MK_RGB( 82,  82,  82)
+	#define X11_GRAY_32                 MK_RGB( 82,  82,  82)
+	#define X11_GREY32                  MK_RGB( 82,  82,  82)
+	#define X11_GREY_32                 MK_RGB( 82,  82,  82)
+	#define X11_GRAY33                  MK_RGB( 84,  84,  84)
+	#define X11_GRAY_33                 MK_RGB( 84,  84,  84)
+	#define X11_GREY33                  MK_RGB( 84,  84,  84)
+	#define X11_GREY_33                 MK_RGB( 84,  84,  84)
+	#define X11_GRAY34                  MK_RGB( 87,  87,  87)
+	#define X11_GRAY_34                 MK_RGB( 87,  87,  87)
+	#define X11_GREY34                  MK_RGB( 87,  87,  87)
+	#define X11_GREY_34                 MK_RGB( 87,  87,  87)
+	#define X11_GRAY35                  MK_RGB( 89,  89,  89)
+	#define X11_GRAY_35                 MK_RGB( 89,  89,  89)
+	#define X11_GREY35                  MK_RGB( 89,  89,  89)
+	#define X11_GREY_35                 MK_RGB( 89,  89,  89)
+	#define X11_GRAY36                  MK_RGB( 92,  92,  92)
+	#define X11_GRAY_36                 MK_RGB( 92,  92,  92)
+	#define X11_GREY36                  MK_RGB( 92,  92,  92)
+	#define X11_GREY_36                 MK_RGB( 92,  92,  92)
+	#define X11_GRAY37                  MK_RGB( 94,  94,  94)
+	#define X11_GRAY_37                 MK_RGB( 94,  94,  94)
+	#define X11_GREY37                  MK_RGB( 94,  94,  94)
+	#define X11_GREY_37                 MK_RGB( 94,  94,  94)
+	#define X11_GRAY38                  MK_RGB( 97,  97,  97)
+	#define X11_GRAY_38                 MK_RGB( 97,  97,  97)
+	#define X11_GREY38                  MK_RGB( 97,  97,  97)
+	#define X11_GREY_38                 MK_RGB( 97,  97,  97)
+	#define X11_GRAY39                  MK_RGB( 99,  99,  99)
+	#define X11_GRAY_39                 MK_RGB( 99,  99,  99)
+	#define X11_GREY39                  MK_RGB( 99,  99,  99)
+	#define X11_GREY_39                 MK_RGB( 99,  99,  99)
+	#define X11_GRAY40                  MK_RGB(102, 102, 102)
+	#define X11_GRAY_40                 MK_RGB(102, 102, 102)
+	#define X11_GREY40                  MK_RGB(102, 102, 102)
+	#define X11_GREY_40                 MK_RGB(102, 102, 102)
+	#define X11_GRAY41                  MK_RGB(105, 105, 105)
+	#define X11_GRAY_41                 MK_RGB(105, 105, 105)
+	#define X11_GREY41                  MK_RGB(105, 105, 105)
+	#define X11_GREY_41                 MK_RGB(105, 105, 105)
+	#define X11_GRAY42                  MK_RGB(107, 107, 107)
+	#define X11_GRAY_42                 MK_RGB(107, 107, 107)
+	#define X11_GREY42                  MK_RGB(107, 107, 107)
+	#define X11_GREY_42                 MK_RGB(107, 107, 107)
+	#define X11_GRAY43                  MK_RGB(110, 110, 110)
+	#define X11_GRAY_43                 MK_RGB(110, 110, 110)
+	#define X11_GREY43                  MK_RGB(110, 110, 110)
+	#define X11_GREY_43                 MK_RGB(110, 110, 110)
+	#define X11_GRAY44                  MK_RGB(112, 112, 112)
+	#define X11_GRAY_44                 MK_RGB(112, 112, 112)
+	#define X11_GREY44                  MK_RGB(112, 112, 112)
+	#define X11_GREY_44                 MK_RGB(112, 112, 112)
+	#define X11_GRAY45                  MK_RGB(115, 115, 115)
+	#define X11_GRAY_45                 MK_RGB(115, 115, 115)
+	#define X11_GREY45                  MK_RGB(115, 115, 115)
+	#define X11_GREY_45                 MK_RGB(115, 115, 115)
+	#define X11_GRAY46                  MK_RGB(117, 117, 117)
+	#define X11_GRAY_46                 MK_RGB(117, 117, 117)
+	#define X11_GREY46                  MK_RGB(117, 117, 117)
+	#define X11_GREY_46                 MK_RGB(117, 117, 117)
+	#define X11_GRAY47                  MK_RGB(120, 120, 120)
+	#define X11_GRAY_47                 MK_RGB(120, 120, 120)
+	#define X11_GREY47                  MK_RGB(120, 120, 120)
+	#define X11_GREY_47                 MK_RGB(120, 120, 120)
+	#define X11_GRAY48                  MK_RGB(122, 122, 122)
+	#define X11_GRAY_48                 MK_RGB(122, 122, 122)
+	#define X11_GREY48                  MK_RGB(122, 122, 122)
+	#define X11_GREY_48                 MK_RGB(122, 122, 122)
+	#define X11_GRAY49                  MK_RGB(125, 125, 125)
+	#define X11_GRAY_49                 MK_RGB(125, 125, 125)
+	#define X11_GREY49                  MK_RGB(125, 125, 125)
+	#define X11_GREY_49                 MK_RGB(125, 125, 125)
+	#define X11_GRAY50                  MK_RGB(127, 127, 127)
+	#define X11_GRAY_50                 MK_RGB(127, 127, 127)
+	#define X11_GREY50                  MK_RGB(127, 127, 127)
+	#define X11_GREY_50                 MK_RGB(127, 127, 127)
+	#define X11_GRAY51                  MK_RGB(130, 130, 130)
+	#define X11_GRAY_51                 MK_RGB(130, 130, 130)
+	#define X11_GREY51                  MK_RGB(130, 130, 130)
+	#define X11_GREY_51                 MK_RGB(130, 130, 130)
+	#define X11_GRAY52                  MK_RGB(133, 133, 133)
+	#define X11_GRAY_52                 MK_RGB(133, 133, 133)
+	#define X11_GREY52                  MK_RGB(133, 133, 133)
+	#define X11_GREY_52                 MK_RGB(133, 133, 133)
+	#define X11_GRAY53                  MK_RGB(135, 135, 135)
+	#define X11_GRAY_53                 MK_RGB(135, 135, 135)
+	#define X11_GREY53                  MK_RGB(135, 135, 135)
+	#define X11_GREY_53                 MK_RGB(135, 135, 135)
+	#define X11_GRAY54                  MK_RGB(138, 138, 138)
+	#define X11_GRAY_54                 MK_RGB(138, 138, 138)
+	#define X11_GREY54                  MK_RGB(138, 138, 138)
+	#define X11_GREY_54                 MK_RGB(138, 138, 138)
+	#define X11_GRAY55                  MK_RGB(140, 140, 140)
+	#define X11_GRAY_55                 MK_RGB(140, 140, 140)
+	#define X11_GREY55                  MK_RGB(140, 140, 140)
+	#define X11_GREY_55                 MK_RGB(140, 140, 140)
+	#define X11_GRAY56                  MK_RGB(143, 143, 143)
+	#define X11_GRAY_56                 MK_RGB(143, 143, 143)
+	#define X11_GREY56                  MK_RGB(143, 143, 143)
+	#define X11_GREY_56                 MK_RGB(143, 143, 143)
+	#define X11_GRAY57                  MK_RGB(145, 145, 145)
+	#define X11_GRAY_57                 MK_RGB(145, 145, 145)
+	#define X11_GREY57                  MK_RGB(145, 145, 145)
+	#define X11_GREY_57                 MK_RGB(145, 145, 145)
+	#define X11_GRAY58                  MK_RGB(148, 148, 148)
+	#define X11_GRAY_58                 MK_RGB(148, 148, 148)
+	#define X11_GREY58                  MK_RGB(148, 148, 148)
+	#define X11_GREY_58                 MK_RGB(148, 148, 148)
+	#define X11_GRAY59                  MK_RGB(150, 150, 150)
+	#define X11_GRAY_59                 MK_RGB(150, 150, 150)
+	#define X11_GREY59                  MK_RGB(150, 150, 150)
+	#define X11_GREY_59                 MK_RGB(150, 150, 150)
+	#define X11_GRAY60                  MK_RGB(153, 153, 153)
+	#define X11_GRAY_60                 MK_RGB(153, 153, 153)
+	#define X11_GREY60                  MK_RGB(153, 153, 153)
+	#define X11_GREY_60                 MK_RGB(153, 153, 153)
+	#define X11_GRAY61                  MK_RGB(156, 156, 156)
+	#define X11_GRAY_61                 MK_RGB(156, 156, 156)
+	#define X11_GREY61                  MK_RGB(156, 156, 156)
+	#define X11_GREY_61                 MK_RGB(156, 156, 156)
+	#define X11_GRAY62                  MK_RGB(158, 158, 158)
+	#define X11_GRAY_62                 MK_RGB(158, 158, 158)
+	#define X11_GREY62                  MK_RGB(158, 158, 158)
+	#define X11_GREY_62                 MK_RGB(158, 158, 158)
+	#define X11_GRAY63                  MK_RGB(161, 161, 161)
+	#define X11_GRAY_63                 MK_RGB(161, 161, 161)
+	#define X11_GREY63                  MK_RGB(161, 161, 161)
+	#define X11_GREY_63                 MK_RGB(161, 161, 161)
+	#define X11_GRAY64                  MK_RGB(163, 163, 163)
+	#define X11_GRAY_64                 MK_RGB(163, 163, 163)
+	#define X11_GREY64                  MK_RGB(163, 163, 163)
+	#define X11_GREY_64                 MK_RGB(163, 163, 163)
+	#define X11_GRAY65                  MK_RGB(166, 166, 166)
+	#define X11_GRAY_65                 MK_RGB(166, 166, 166)
+	#define X11_GREY65                  MK_RGB(166, 166, 166)
+	#define X11_GREY_65                 MK_RGB(166, 166, 166)
+	#define X11_GRAY66                  MK_RGB(168, 168, 168)
+	#define X11_GRAY_66                 MK_RGB(168, 168, 168)
+	#define X11_GREY66                  MK_RGB(168, 168, 168)
+	#define X11_GREY_66                 MK_RGB(168, 168, 168)
+	#define X11_GRAY67                  MK_RGB(171, 171, 171)
+	#define X11_GRAY_67                 MK_RGB(171, 171, 171)
+	#define X11_GREY67                  MK_RGB(171, 171, 171)
+	#define X11_GREY_67                 MK_RGB(171, 171, 171)
+	#define X11_GRAY68                  MK_RGB(173, 173, 173)
+	#define X11_GRAY_68                 MK_RGB(173, 173, 173)
+	#define X11_GREY68                  MK_RGB(173, 173, 173)
+	#define X11_GREY_68                 MK_RGB(173, 173, 173)
+	#define X11_GRAY69                  MK_RGB(176, 176, 176)
+	#define X11_GRAY_69                 MK_RGB(176, 176, 176)
+	#define X11_GREY69                  MK_RGB(176, 176, 176)
+	#define X11_GREY_69                 MK_RGB(176, 176, 176)
+	#define X11_GRAY70                  MK_RGB(179, 179, 179)
+	#define X11_GRAY_70                 MK_RGB(179, 179, 179)
+	#define X11_GREY70                  MK_RGB(179, 179, 179)
+	#define X11_GREY_70                 MK_RGB(179, 179, 179)
+	#define X11_GRAY71                  MK_RGB(181, 181, 181)
+	#define X11_GRAY_71                 MK_RGB(181, 181, 181)
+	#define X11_GREY71                  MK_RGB(181, 181, 181)
+	#define X11_GREY_71                 MK_RGB(181, 181, 181)
+	#define X11_GRAY72                  MK_RGB(184, 184, 184)
+	#define X11_GRAY_72                 MK_RGB(184, 184, 184)
+	#define X11_GREY72                  MK_RGB(184, 184, 184)
+	#define X11_GREY_72                 MK_RGB(184, 184, 184)
+	#define X11_GRAY73                  MK_RGB(186, 186, 186)
+	#define X11_GRAY_73                 MK_RGB(186, 186, 186)
+	#define X11_GREY73                  MK_RGB(186, 186, 186)
+	#define X11_GREY_73                 MK_RGB(186, 186, 186)
+	#define X11_GRAY74                  MK_RGB(189, 189, 189)
+	#define X11_GRAY_74                 MK_RGB(189, 189, 189)
+	#define X11_GREY74                  MK_RGB(189, 189, 189)
+	#define X11_GREY_74                 MK_RGB(189, 189, 189)
+	#define X11_GRAY75                  MK_RGB(191, 191, 191)
+	#define X11_GRAY_75                 MK_RGB(191, 191, 191)
+	#define X11_GREY75                  MK_RGB(191, 191, 191)
+	#define X11_GREY_75                 MK_RGB(191, 191, 191)
+	#define X11_GRAY76                  MK_RGB(194, 194, 194)
+	#define X11_GRAY_76                 MK_RGB(194, 194, 194)
+	#define X11_GREY76                  MK_RGB(194, 194, 194)
+	#define X11_GREY_76                 MK_RGB(194, 194, 194)
+	#define X11_GRAY77                  MK_RGB(196, 196, 196)
+	#define X11_GRAY_77                 MK_RGB(196, 196, 196)
+	#define X11_GREY77                  MK_RGB(196, 196, 196)
+	#define X11_GREY_77                 MK_RGB(196, 196, 196)
+	#define X11_GRAY78                  MK_RGB(199, 199, 199)
+	#define X11_GRAY_78                 MK_RGB(199, 199, 199)
+	#define X11_GREY78                  MK_RGB(199, 199, 199)
+	#define X11_GREY_78                 MK_RGB(199, 199, 199)
+	#define X11_GRAY79                  MK_RGB(201, 201, 201)
+	#define X11_GRAY_79                 MK_RGB(201, 201, 201)
+	#define X11_GREY79                  MK_RGB(201, 201, 201)
+	#define X11_GREY_79                 MK_RGB(201, 201, 201)
+	#define X11_GRAY80                  MK_RGB(204, 204, 204)
+	#define X11_GRAY_80                 MK_RGB(204, 204, 204)
+	#define X11_GREY80                  MK_RGB(204, 204, 204)
+	#define X11_GREY_80                 MK_RGB(204, 204, 204)
+	#define X11_GRAY81                  MK_RGB(207, 207, 207)
+	#define X11_GRAY_81                 MK_RGB(207, 207, 207)
+	#define X11_GREY81                  MK_RGB(207, 207, 207)
+	#define X11_GREY_81                 MK_RGB(207, 207, 207)
+	#define X11_GRAY82                  MK_RGB(209, 209, 209)
+	#define X11_GRAY_82                 MK_RGB(209, 209, 209)
+	#define X11_GREY82                  MK_RGB(209, 209, 209)
+	#define X11_GREY_82                 MK_RGB(209, 209, 209)
+	#define X11_GRAY83                  MK_RGB(212, 212, 212)
+	#define X11_GRAY_83                 MK_RGB(212, 212, 212)
+	#define X11_GREY83                  MK_RGB(212, 212, 212)
+	#define X11_GREY_83                 MK_RGB(212, 212, 212)
+	#define X11_GRAY84                  MK_RGB(214, 214, 214)
+	#define X11_GRAY_84                 MK_RGB(214, 214, 214)
+	#define X11_GREY84                  MK_RGB(214, 214, 214)
+	#define X11_GREY_84                 MK_RGB(214, 214, 214)
+	#define X11_GRAY85                  MK_RGB(217, 217, 217)
+	#define X11_GRAY_85                 MK_RGB(217, 217, 217)
+	#define X11_GREY85                  MK_RGB(217, 217, 217)
+	#define X11_GREY_85                 MK_RGB(217, 217, 217)
+	#define X11_GRAY86                  MK_RGB(219, 219, 219)
+	#define X11_GRAY_86                 MK_RGB(219, 219, 219)
+	#define X11_GREY86                  MK_RGB(219, 219, 219)
+	#define X11_GREY_86                 MK_RGB(219, 219, 219)
+	#define X11_GRAY87                  MK_RGB(222, 222, 222)
+	#define X11_GRAY_87                 MK_RGB(222, 222, 222)
+	#define X11_GREY87                  MK_RGB(222, 222, 222)
+	#define X11_GREY_87                 MK_RGB(222, 222, 222)
+	#define X11_GRAY88                  MK_RGB(224, 224, 224)
+	#define X11_GRAY_88                 MK_RGB(224, 224, 224)
+	#define X11_GREY88                  MK_RGB(224, 224, 224)
+	#define X11_GREY_88                 MK_RGB(224, 224, 224)
+	#define X11_GRAY89                  MK_RGB(227, 227, 227)
+	#define X11_GRAY_89                 MK_RGB(227, 227, 227)
+	#define X11_GREY89                  MK_RGB(227, 227, 227)
+	#define X11_GREY_89                 MK_RGB(227, 227, 227)
+	#define X11_GRAY90                  MK_RGB(229, 229, 229)
+	#define X11_GRAY_90                 MK_RGB(229, 229, 229)
+	#define X11_GREY90                  MK_RGB(229, 229, 229)
+	#define X11_GREY_90                 MK_RGB(229, 229, 229)
+	#define X11_GRAY91                  MK_RGB(232, 232, 232)
+	#define X11_GRAY_91                 MK_RGB(232, 232, 232)
+	#define X11_GREY91                  MK_RGB(232, 232, 232)
+	#define X11_GREY_91                 MK_RGB(232, 232, 232)
+	#define X11_GRAY92                  MK_RGB(235, 235, 235)
+	#define X11_GRAY_92                 MK_RGB(235, 235, 235)
+	#define X11_GREY92                  MK_RGB(235, 235, 235)
+	#define X11_GREY_92                 MK_RGB(235, 235, 235)
+	#define X11_GRAY93                  MK_RGB(237, 237, 237)
+	#define X11_GRAY_93                 MK_RGB(237, 237, 237)
+	#define X11_GREY93                  MK_RGB(237, 237, 237)
+	#define X11_GREY_93                 MK_RGB(237, 237, 237)
+	#define X11_GRAY94                  MK_RGB(240, 240, 240)
+	#define X11_GRAY_94                 MK_RGB(240, 240, 240)
+	#define X11_GREY94                  MK_RGB(240, 240, 240)
+	#define X11_GREY_94                 MK_RGB(240, 240, 240)
+	#define X11_GRAY95                  MK_RGB(242, 242, 242)
+	#define X11_GRAY_95                 MK_RGB(242, 242, 242)
+	#define X11_GREY95                  MK_RGB(242, 242, 242)
+	#define X11_GREY_95                 MK_RGB(242, 242, 242)
+	#define X11_GRAY96                  MK_RGB(245, 245, 245)
+	#define X11_GRAY_96                 MK_RGB(245, 245, 245)
+	#define X11_GREY96                  MK_RGB(245, 245, 245)
+	#define X11_GREY_96                 MK_RGB(245, 245, 245)
+	#define X11_GRAY97                  MK_RGB(247, 247, 247)
+	#define X11_GRAY_97                 MK_RGB(247, 247, 247)
+	#define X11_GREY97                  MK_RGB(247, 247, 247)
+	#define X11_GREY_97                 MK_RGB(247, 247, 247)
+	#define X11_GRAY98                  MK_RGB(250, 250, 250)
+	#define X11_GRAY_98                 MK_RGB(250, 250, 250)
+	#define X11_GREY98                  MK_RGB(250, 250, 250)
+	#define X11_GREY_98                 MK_RGB(250, 250, 250)
+	#define X11_GRAY99                  MK_RGB(252, 252, 252)
+	#define X11_GRAY_99                 MK_RGB(252, 252, 252)
+	#define X11_GREY99                  MK_RGB(252, 252, 252)
+	#define X11_GREY_99                 MK_RGB(252, 252, 252)
+	#define X11_GRAY100                 MK_RGB(255, 255, 255)
+	#define X11_GRAY_100                MK_RGB(255, 255, 255)
+	#define X11_GREY100                 MK_RGB(255, 255, 255)
+	#define X11_GREY_100                MK_RGB(255, 255, 255)
+	#define X11_DARKGREY                MK_RGB(169, 169, 169)
+	#define X11_DARK_GREY               MK_RGB(169, 169, 169)
+	#define X11_DARKGRAY                MK_RGB(169, 169, 169)
+	#define X11_DARK_GRAY               MK_RGB(169, 169, 169)
+	#define X11_DARKBLUE                MK_RGB(  0,   0, 139)
+	#define X11_DARK_BLUE               MK_RGB(  0,   0, 139)
+	#define X11_DARKCYAN                MK_RGB(  0, 139, 139)
+	#define X11_DARK_CYAN               MK_RGB(  0, 139, 139)
+	#define X11_DARKMAGENTA             MK_RGB(139,   0, 139)
+	#define X11_DARK_MAGENTA            MK_RGB(139,   0, 139)
+	#define X11_DARKRED                 MK_RGB(139,   0,   0)
+	#define X11_DARK_RED                MK_RGB(139,   0,   0)
+	#define X11_LIGHTGREEN              MK_RGB(144, 238, 144)
+	#define X11_LIGHT_GREEN             MK_RGB(144, 238, 144)
+#endif
+
+#define COLOUR_NAME_HASH(%0)            YHash((%0),false,hash_bernstein)
+#define COLOR_NAME_HASH                 COLOUR_NAME_HASH
+
+static stock
+	YSI_g_sColours[MAX_TEXT_COLOURS][2];
+
+#define SetColor SetColour
+stock SetColour(const name[], color)
+{
+	return SetColourHash(COLOUR_NAME_HASH(name), color);
+}
+
+#define SetColorHash SetColourHash
+stock SetColourHash(hash, color)
+{
+	color &= 0xFFFFFF00;
+	#if !defined NO_X11_COLOURS && !defined NO_X11_COLORS
+		new
+			id = GetColourHash(hash);
+		if (id != 0)
+		{
+			for (new i = 0; i != MAX_TEXT_COLOURS; ++i)
+			{
+				new
+					iColor = YSI_g_sColours[i][0];
+				if (iColor == hash)
+				{
+					YSI_g_sColours[i][1] = color;
+					return i;
+				}
+				else if (iColor == 0)
+				{
+					// Tried to rename an X11 colour.
+					return -1;
+				}
+			}
+		}
+	#endif
+	for (new i = 0; i != MAX_TEXT_COLOURS; ++i)
+	{
+		new
+			iColor = YSI_g_sColours[i][0];
+		if (iColor == hash || iColor == 0)
+		{
+			YSI_g_sColours[i][0] = hash;
+			YSI_g_sColours[i][1] = color;
+			return i;
+		}
+	}
+	return -1;
+}
+
+// This now uses REVERSE bernstein hash for switch compatibility.
+
+#define GetColor GetColour
+stock GetColour(const name[], alpha = 0xAA)
+{
+	return GetColourHash(COLOUR_NAME_HASH(name), alpha);
+}
+
+#define GetColorHash GetColourHash
+stock GetColourHash(hash, alpha = 0xAA)
+{
+	alpha &= 0xFF;
+	// Do the REVERSE hash from YHash
+	#if !defined NO_X11_COLOURS && !defined NO_X11_COLORS
+		switch (hash)
+		{
+			case _I(S,N,O,W):
+				return alpha | X11_SNOW;
+			case _I(G,H,O,S,T,W,H,I,T,E):
+				return alpha | X11_GHOST_WHITE;
+			case _I(G,H,O,S,T,_,W,H,I,T,E):
+				return alpha | X11_GHOST_WHITE;
+			case _I(G,H,O,S,T, ,W,H,I,T,E):
+				return alpha | X11_GHOST_WHITE;
+			case _I(W,H,I,T,E,S,M,O,K,E):
+				return alpha | X11_WHITE_SMOKE;
+			case _I(W,H,I,T,E,_,S,M,O,K,E):
+				return alpha | X11_WHITE_SMOKE;
+			case _I(W,H,I,T,E, ,S,M,O,K,E):
+				return alpha | X11_WHITE_SMOKE;
+			case _I(G,A,I,N,S,B,O,R,O):
+				return alpha | X11_GAINSBORO;
+			case _I(F,L,O,R,A,L,W,H,I,T,E):
+				return alpha | X11_FLORAL_WHITE;
+			case _I(F,L,O,R,A,L,_,W,H,I,T,E):
+				return alpha | X11_FLORAL_WHITE;
+			case _I(F,L,O,R,A,L, ,W,H,I,T,E):
+				return alpha | X11_FLORAL_WHITE;
+			case _I(O,L,D,L,A,C,E):
+				return alpha | X11_OLD_LACE;
+			case _I(O,L,D,_,L,A,C,E):
+				return alpha | X11_OLD_LACE;
+			case _I(O,L,D, ,L,A,C,E):
+				return alpha | X11_OLD_LACE;
+			case _I(L,I,N,E,N):
+				return alpha | X11_LINEN;
+			case _I(A,N,T,I,Q,U,E,W,H,I,T,E):
+				return alpha | X11_ANTIQUE_WHITE;
+			case _I(A,N,T,I,Q,U,E,_,W,H,I,T,E):
+				return alpha | X11_ANTIQUE_WHITE;
+			case _I(A,N,T,I,Q,U,E, ,W,H,I,T,E):
+				return alpha | X11_ANTIQUE_WHITE;
+			case _I(P,A,P,A,Y,A,W,H,I,P):
+				return alpha | X11_PAPAYA_WHIP;
+			case _I(P,A,P,A,Y,A,_,W,H,I,P):
+				return alpha | X11_PAPAYA_WHIP;
+			case _I(P,A,P,A,Y,A, ,W,H,I,P):
+				return alpha | X11_PAPAYA_WHIP;
+			case _I(B,L,A,N,C,H,E,D,A,L,M,O,N,D):
+				return alpha | X11_BLANCHED_ALMOND;
+			case _I(B,L,A,N,C,H,E,D,_,A,L,M,O,N,D):
+				return alpha | X11_BLANCHED_ALMOND;
+			case _I(B,L,A,N,C,H,E,D, ,A,L,M,O,N,D):
+				return alpha | X11_BLANCHED_ALMOND;
+			case _I(B,I,S,Q,U,E):
+				return alpha | X11_BISQUE;
+			case _I(P,E,A,C,H,P,U,F,F):
+				return alpha | X11_PEACH_PUFF;
+			case _I(P,E,A,C,H,_,P,U,F,F):
+				return alpha | X11_PEACH_PUFF;
+			case _I(P,E,A,C,H, ,P,U,F,F):
+				return alpha | X11_PEACH_PUFF;
+			case _I(N,A,V,A,J,O,W,H,I,T,E):
+				return alpha | X11_NAVAJO_WHITE;
+			case _I(N,A,V,A,J,O,_,W,H,I,T,E):
+				return alpha | X11_NAVAJO_WHITE;
+			case _I(N,A,V,A,J,O, ,W,H,I,T,E):
+				return alpha | X11_NAVAJO_WHITE;
+			case _I(M,O,C,C,A,S,I,N):
+				return alpha | X11_MOCCASIN;
+			case _I(C,O,R,N,S,I,L,K):
+				return alpha | X11_CORNSILK;
+			case _I(I,V,O,R,Y):
+				return alpha | X11_IVORY;
+			case _I(L,E,M,O,N,C,H,I,F,F,O,N):
+				return alpha | X11_LEMON_CHIFFON;
+			case _I(L,E,M,O,N,_,C,H,I,F,F,O,N):
+				return alpha | X11_LEMON_CHIFFON;
+			case _I(L,E,M,O,N, ,C,H,I,F,F,O,N):
+				return alpha | X11_LEMON_CHIFFON;
+			case _I(S,E,A,S,H,E,L,L):
+				return alpha | X11_SEASHELL;
+			case _I(H,O,N,E,Y,D,E,W):
+				return alpha | X11_HONEYDEW;
+			case _I(M,I,N,T,C,R,E,A,M):
+				return alpha | X11_MINT_CREAM;
+			case _I(M,I,N,T,_,C,R,E,A,M):
+				return alpha | X11_MINT_CREAM;
+			case _I(M,I,N,T, ,C,R,E,A,M):
+				return alpha | X11_MINT_CREAM;
+			case _I(A,Z,U,R,E):
+				return alpha | X11_AZURE;
+			case _I(A,L,I,C,E,B,L,U,E):
+				return alpha | X11_ALICE_BLUE;
+			case _I(A,L,I,C,E,_,B,L,U,E):
+				return alpha | X11_ALICE_BLUE;
+			case _I(A,L,I,C,E, ,B,L,U,E):
+				return alpha | X11_ALICE_BLUE;
+			case _I(L,A,V,E,N,D,E,R):
+				return alpha | X11_LAVENDER;
+			case _I(L,A,V,E,N,D,E,R,B,L,U,S,H):
+				return alpha | X11_LAVENDER_BLUSH;
+			case _I(L,A,V,E,N,D,E,R,_,B,L,U,S,H):
+				return alpha | X11_LAVENDER_BLUSH;
+			case _I(L,A,V,E,N,D,E,R, ,B,L,U,S,H):
+				return alpha | X11_LAVENDER_BLUSH;
+			case _I(M,I,S,T,Y,R,O,S,E):
+				return alpha | X11_MISTY_ROSE;
+			case _I(M,I,S,T,Y,_,R,O,S,E):
+				return alpha | X11_MISTY_ROSE;
+			case _I(M,I,S,T,Y, ,R,O,S,E):
+				return alpha | X11_MISTY_ROSE;
+			case _I(W,H,I,T,E):
+				return alpha | X11_WHITE;
+			case _I(B,L,A,C,K):
+				return alpha | X11_BLACK;
+			case _I(D,A,R,K,S,L,A,T,E,G,R,A,Y):
+				return alpha | X11_DARK_SLATE_GRAY;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,G,R,A,Y):
+				return alpha | X11_DARK_SLATE_GRAY;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,G,R,A,Y):
+				return alpha | X11_DARK_SLATE_GRAY;
+			case _I(D,A,R,K,S,L,A,T,E,G,R,E,Y):
+				return alpha | X11_DARK_SLATE_GREY;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,G,R,E,Y):
+				return alpha | X11_DARK_SLATE_GREY;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,G,R,E,Y):
+				return alpha | X11_DARK_SLATE_GREY;
+			case _I(D,I,M,G,R,A,Y):
+				return alpha | X11_DIM_GRAY;
+			case _I(D,I,M,_,G,R,A,Y):
+				return alpha | X11_DIM_GRAY;
+			case _I(D,I,M, ,G,R,A,Y):
+				return alpha | X11_DIM_GRAY;
+			case _I(D,I,M,G,R,E,Y):
+				return alpha | X11_DIM_GREY;
+			case _I(D,I,M,_,G,R,E,Y):
+				return alpha | X11_DIM_GREY;
+			case _I(D,I,M, ,G,R,E,Y):
+				return alpha | X11_DIM_GREY;
+			case _I(S,L,A,T,E,G,R,A,Y):
+				return alpha | X11_SLATE_GRAY;
+			case _I(S,L,A,T,E,_,G,R,A,Y):
+				return alpha | X11_SLATE_GRAY;
+			case _I(S,L,A,T,E, ,G,R,A,Y):
+				return alpha | X11_SLATE_GRAY;
+			case _I(S,L,A,T,E,G,R,E,Y):
+				return alpha | X11_SLATE_GREY;
+			case _I(S,L,A,T,E,_,G,R,E,Y):
+				return alpha | X11_SLATE_GREY;
+			case _I(S,L,A,T,E, ,G,R,E,Y):
+				return alpha | X11_SLATE_GREY;
+			case _I(L,I,G,H,T,S,L,A,T,E,G,R,A,Y):
+				return alpha | X11_LIGHT_SLATE_GRAY;
+			case _I(L,I,G,H,T,_,S,L,A,T,E,_,G,R,A,Y):
+				return alpha | X11_LIGHT_SLATE_GRAY;
+			case _I(L,I,G,H,T, ,S,L,A,T,E, ,G,R,A,Y):
+				return alpha | X11_LIGHT_SLATE_GRAY;
+			case _I(L,I,G,H,T,S,L,A,T,E,G,R,E,Y):
+				return alpha | X11_LIGHT_SLATE_GREY;
+			case _I(L,I,G,H,T,_,S,L,A,T,E,_,G,R,E,Y):
+				return alpha | X11_LIGHT_SLATE_GREY;
+			case _I(L,I,G,H,T, ,S,L,A,T,E, ,G,R,E,Y):
+				return alpha | X11_LIGHT_SLATE_GREY;
+			case _I(G,R,A,Y):
+				return alpha | X11_GRAY;
+			case _I(G,R,E,Y):
+				return alpha | X11_GREY;
+			case _I(L,I,G,H,T,G,R,E,Y):
+				return alpha | X11_LIGHT_GREY;
+			case _I(L,I,G,H,T,_,G,R,E,Y):
+				return alpha | X11_LIGHT_GREY;
+			case _I(L,I,G,H,T, ,G,R,E,Y):
+				return alpha | X11_LIGHT_GREY;
+			case _I(L,I,G,H,T,G,R,A,Y):
+				return alpha | X11_LIGHT_GRAY;
+			case _I(L,I,G,H,T,_,G,R,A,Y):
+				return alpha | X11_LIGHT_GRAY;
+			case _I(L,I,G,H,T, ,G,R,A,Y):
+				return alpha | X11_LIGHT_GRAY;
+			case _I(M,I,D,N,I,G,H,T,B,L,U,E):
+				return alpha | X11_MIDNIGHT_BLUE;
+			case _I(M,I,D,N,I,G,H,T,_,B,L,U,E):
+				return alpha | X11_MIDNIGHT_BLUE;
+			case _I(M,I,D,N,I,G,H,T, ,B,L,U,E):
+				return alpha | X11_MIDNIGHT_BLUE;
+			case _I(N,A,V,Y):
+				return alpha | X11_NAVY;
+			case _I(N,A,V,Y,B,L,U,E):
+				return alpha | X11_NAVY_BLUE;
+			case _I(N,A,V,Y,_,B,L,U,E):
+				return alpha | X11_NAVY_BLUE;
+			case _I(N,A,V,Y, ,B,L,U,E):
+				return alpha | X11_NAVY_BLUE;
+			case _I(C,O,R,N,F,L,O,W,E,R,B,L,U,E):
+				return alpha | X11_CORNFLOWER_BLUE;
+			case _I(C,O,R,N,F,L,O,W,E,R,_,B,L,U,E):
+				return alpha | X11_CORNFLOWER_BLUE;
+			case _I(C,O,R,N,F,L,O,W,E,R, ,B,L,U,E):
+				return alpha | X11_CORNFLOWER_BLUE;
+			case _I(D,A,R,K,S,L,A,T,E,B,L,U,E):
+				return alpha | X11_DARK_SLATE_BLUE;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,B,L,U,E):
+				return alpha | X11_DARK_SLATE_BLUE;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,B,L,U,E):
+				return alpha | X11_DARK_SLATE_BLUE;
+			case _I(S,L,A,T,E,B,L,U,E):
+				return alpha | X11_SLATE_BLUE;
+			case _I(S,L,A,T,E,_,B,L,U,E):
+				return alpha | X11_SLATE_BLUE;
+			case _I(S,L,A,T,E, ,B,L,U,E):
+				return alpha | X11_SLATE_BLUE;
+			case _I(M,E,D,I,U,M,S,L,A,T,E,B,L,U,E):
+				return alpha | X11_MEDIUM_SLATE_BLUE;
+			case _I(M,E,D,I,U,M,_,S,L,A,T,E,_,B,L,U,E):
+				return alpha | X11_MEDIUM_SLATE_BLUE;
+			case _I(M,E,D,I,U,M, ,S,L,A,T,E, ,B,L,U,E):
+				return alpha | X11_MEDIUM_SLATE_BLUE;
+			case _I(L,I,G,H,T,S,L,A,T,E,B,L,U,E):
+				return alpha | X11_LIGHT_SLATE_BLUE;
+			case _I(L,I,G,H,T,_,S,L,A,T,E,_,B,L,U,E):
+				return alpha | X11_LIGHT_SLATE_BLUE;
+			case _I(L,I,G,H,T, ,S,L,A,T,E, ,B,L,U,E):
+				return alpha | X11_LIGHT_SLATE_BLUE;
+			case _I(M,E,D,I,U,M,B,L,U,E):
+				return alpha | X11_MEDIUM_BLUE;
+			case _I(M,E,D,I,U,M,_,B,L,U,E):
+				return alpha | X11_MEDIUM_BLUE;
+			case _I(M,E,D,I,U,M, ,B,L,U,E):
+				return alpha | X11_MEDIUM_BLUE;
+			case _I(R,O,Y,A,L,B,L,U,E):
+				return alpha | X11_ROYAL_BLUE;
+			case _I(R,O,Y,A,L,_,B,L,U,E):
+				return alpha | X11_ROYAL_BLUE;
+			case _I(R,O,Y,A,L, ,B,L,U,E):
+				return alpha | X11_ROYAL_BLUE;
+			case _I(B,L,U,E):
+				return alpha | X11_BLUE;
+			case _I(D,O,D,G,E,R,B,L,U,E):
+				return alpha | X11_DODGER_BLUE;
+			case _I(D,O,D,G,E,R,_,B,L,U,E):
+				return alpha | X11_DODGER_BLUE;
+			case _I(D,O,D,G,E,R, ,B,L,U,E):
+				return alpha | X11_DODGER_BLUE;
+			case _I(D,E,E,P,S,K,Y,B,L,U,E):
+				return alpha | X11_DEEP_SKY_BLUE;
+			case _I(D,E,E,P,_,S,K,Y,_,B,L,U,E):
+				return alpha | X11_DEEP_SKY_BLUE;
+			case _I(D,E,E,P, ,S,K,Y, ,B,L,U,E):
+				return alpha | X11_DEEP_SKY_BLUE;
+			case _I(S,K,Y,B,L,U,E):
+				return alpha | X11_SKY_BLUE;
+			case _I(S,K,Y,_,B,L,U,E):
+				return alpha | X11_SKY_BLUE;
+			case _I(S,K,Y, ,B,L,U,E):
+				return alpha | X11_SKY_BLUE;
+			case _I(L,I,G,H,T,S,K,Y,B,L,U,E):
+				return alpha | X11_LIGHT_SKY_BLUE;
+			case _I(L,I,G,H,T,_,S,K,Y,_,B,L,U,E):
+				return alpha | X11_LIGHT_SKY_BLUE;
+			case _I(L,I,G,H,T, ,S,K,Y, ,B,L,U,E):
+				return alpha | X11_LIGHT_SKY_BLUE;
+			case _I(S,T,E,E,L,B,L,U,E):
+				return alpha | X11_STEEL_BLUE;
+			case _I(S,T,E,E,L,_,B,L,U,E):
+				return alpha | X11_STEEL_BLUE;
+			case _I(S,T,E,E,L, ,B,L,U,E):
+				return alpha | X11_STEEL_BLUE;
+			case _I(L,I,G,H,T,S,T,E,E,L,B,L,U,E):
+				return alpha | X11_LIGHT_STEEL_BLUE;
+			case _I(L,I,G,H,T,_,S,T,E,E,L,_,B,L,U,E):
+				return alpha | X11_LIGHT_STEEL_BLUE;
+			case _I(L,I,G,H,T, ,S,T,E,E,L, ,B,L,U,E):
+				return alpha | X11_LIGHT_STEEL_BLUE;
+			case _I(L,I,G,H,T,B,L,U,E):
+				return alpha | X11_LIGHT_BLUE;
+			case _I(L,I,G,H,T,_,B,L,U,E):
+				return alpha | X11_LIGHT_BLUE;
+			case _I(L,I,G,H,T, ,B,L,U,E):
+				return alpha | X11_LIGHT_BLUE;
+			case _I(P,O,W,D,E,R,B,L,U,E):
+				return alpha | X11_POWDER_BLUE;
+			case _I(P,O,W,D,E,R,_,B,L,U,E):
+				return alpha | X11_POWDER_BLUE;
+			case _I(P,O,W,D,E,R, ,B,L,U,E):
+				return alpha | X11_POWDER_BLUE;
+			case _I(P,A,L,E,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_PALE_TURQUOISE;
+			case _I(P,A,L,E,_,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_PALE_TURQUOISE;
+			case _I(P,A,L,E, ,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_PALE_TURQUOISE;
+			case _I(D,A,R,K,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_DARK_TURQUOISE;
+			case _I(D,A,R,K,_,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_DARK_TURQUOISE;
+			case _I(D,A,R,K, ,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_DARK_TURQUOISE;
+			case _I(M,E,D,I,U,M,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_MEDIUM_TURQUOISE;
+			case _I(M,E,D,I,U,M,_,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_MEDIUM_TURQUOISE;
+			case _I(M,E,D,I,U,M, ,T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_MEDIUM_TURQUOISE;
+			case _I(T,U,R,Q,U,O,I,S,E):
+				return alpha | X11_TURQUOISE;
+			case _I(C,Y,A,N):
+				return alpha | X11_CYAN;
+			case _I(L,I,G,H,T,C,Y,A,N):
+				return alpha | X11_LIGHT_CYAN;
+			case _I(L,I,G,H,T,_,C,Y,A,N):
+				return alpha | X11_LIGHT_CYAN;
+			case _I(L,I,G,H,T, ,C,Y,A,N):
+				return alpha | X11_LIGHT_CYAN;
+			case _I(C,A,D,E,T,B,L,U,E):
+				return alpha | X11_CADET_BLUE;
+			case _I(C,A,D,E,T,_,B,L,U,E):
+				return alpha | X11_CADET_BLUE;
+			case _I(C,A,D,E,T, ,B,L,U,E):
+				return alpha | X11_CADET_BLUE;
+			case _I(M,E,D,I,U,M,A,Q,U,A,M,A,R,I,N,E):
+				return alpha | X11_MEDIUM_AQUAMARINE;
+			case _I(M,E,D,I,U,M,_,A,Q,U,A,M,A,R,I,N,E):
+				return alpha | X11_MEDIUM_AQUAMARINE;
+			case _I(M,E,D,I,U,M, ,A,Q,U,A,M,A,R,I,N,E):
+				return alpha | X11_MEDIUM_AQUAMARINE;
+			case _I(A,Q,U,A,M,A,R,I,N,E):
+				return alpha | X11_AQUAMARINE;
+			case _I(D,A,R,K,G,R,E,E,N):
+				return alpha | X11_DARK_GREEN;
+			case _I(D,A,R,K,_,G,R,E,E,N):
+				return alpha | X11_DARK_GREEN;
+			case _I(D,A,R,K, ,G,R,E,E,N):
+				return alpha | X11_DARK_GREEN;
+			case _I(D,A,R,K,O,L,I,V,E,G,R,E,E,N):
+				return alpha | X11_DARK_OLIVE_GREEN;
+			case _I(D,A,R,K,_,O,L,I,V,E,_,G,R,E,E,N):
+				return alpha | X11_DARK_OLIVE_GREEN;
+			case _I(D,A,R,K, ,O,L,I,V,E, ,G,R,E,E,N):
+				return alpha | X11_DARK_OLIVE_GREEN;
+			case _I(D,A,R,K,S,E,A,G,R,E,E,N):
+				return alpha | X11_DARK_SEA_GREEN;
+			case _I(D,A,R,K,_,S,E,A,_,G,R,E,E,N):
+				return alpha | X11_DARK_SEA_GREEN;
+			case _I(D,A,R,K, ,S,E,A, ,G,R,E,E,N):
+				return alpha | X11_DARK_SEA_GREEN;
+			case _I(S,E,A,G,R,E,E,N):
+				return alpha | X11_SEA_GREEN;
+			case _I(S,E,A,_,G,R,E,E,N):
+				return alpha | X11_SEA_GREEN;
+			case _I(S,E,A, ,G,R,E,E,N):
+				return alpha | X11_SEA_GREEN;
+			case _I(M,E,D,I,U,M,S,E,A,G,R,E,E,N):
+				return alpha | X11_MEDIUM_SEA_GREEN;
+			case _I(M,E,D,I,U,M,_,S,E,A,_,G,R,E,E,N):
+				return alpha | X11_MEDIUM_SEA_GREEN;
+			case _I(M,E,D,I,U,M, ,S,E,A, ,G,R,E,E,N):
+				return alpha | X11_MEDIUM_SEA_GREEN;
+			case _I(L,I,G,H,T,S,E,A,G,R,E,E,N):
+				return alpha | X11_LIGHT_SEA_GREEN;
+			case _I(L,I,G,H,T,_,S,E,A,_,G,R,E,E,N):
+				return alpha | X11_LIGHT_SEA_GREEN;
+			case _I(L,I,G,H,T, ,S,E,A, ,G,R,E,E,N):
+				return alpha | X11_LIGHT_SEA_GREEN;
+			case _I(P,A,L,E,G,R,E,E,N):
+				return alpha | X11_PALE_GREEN;
+			case _I(P,A,L,E,_,G,R,E,E,N):
+				return alpha | X11_PALE_GREEN;
+			case _I(P,A,L,E, ,G,R,E,E,N):
+				return alpha | X11_PALE_GREEN;
+			case _I(S,P,R,I,N,G,G,R,E,E,N):
+				return alpha | X11_SPRING_GREEN;
+			case _I(S,P,R,I,N,G,_,G,R,E,E,N):
+				return alpha | X11_SPRING_GREEN;
+			case _I(S,P,R,I,N,G, ,G,R,E,E,N):
+				return alpha | X11_SPRING_GREEN;
+			case _I(L,A,W,N,G,R,E,E,N):
+				return alpha | X11_LAWN_GREEN;
+			case _I(L,A,W,N,_,G,R,E,E,N):
+				return alpha | X11_LAWN_GREEN;
+			case _I(L,A,W,N, ,G,R,E,E,N):
+				return alpha | X11_LAWN_GREEN;
+			case _I(G,R,E,E,N):
+				return alpha | X11_GREEN;
+			case _I(C,H,A,R,T,R,E,U,S,E):
+				return alpha | X11_CHARTREUSE;
+			case _I(M,E,D,I,U,M,S,P,R,I,N,G,G,R,E,E,N):
+				return alpha | X11_MEDIUM_SPRING_GREEN;
+			case _I(M,E,D,I,U,M,_,S,P,R,I,N,G,_,G,R,E,E,N):
+				return alpha | X11_MEDIUM_SPRING_GREEN;
+			case _I(M,E,D,I,U,M, ,S,P,R,I,N,G, ,G,R,E,E,N):
+				return alpha | X11_MEDIUM_SPRING_GREEN;
+			case _I(G,R,E,E,N,Y,E,L,L,O,W):
+				return alpha | X11_GREEN_YELLOW;
+			case _I(G,R,E,E,N,_,Y,E,L,L,O,W):
+				return alpha | X11_GREEN_YELLOW;
+			case _I(G,R,E,E,N, ,Y,E,L,L,O,W):
+				return alpha | X11_GREEN_YELLOW;
+			case _I(L,I,M,E,G,R,E,E,N):
+				return alpha | X11_LIME_GREEN;
+			case _I(L,I,M,E,_,G,R,E,E,N):
+				return alpha | X11_LIME_GREEN;
+			case _I(L,I,M,E, ,G,R,E,E,N):
+				return alpha | X11_LIME_GREEN;
+			case _I(Y,E,L,L,O,W,G,R,E,E,N):
+				return alpha | X11_YELLOW_GREEN;
+			case _I(Y,E,L,L,O,W,_,G,R,E,E,N):
+				return alpha | X11_YELLOW_GREEN;
+			case _I(Y,E,L,L,O,W, ,G,R,E,E,N):
+				return alpha | X11_YELLOW_GREEN;
+			case _I(F,O,R,E,S,T,G,R,E,E,N):
+				return alpha | X11_FOREST_GREEN;
+			case _I(F,O,R,E,S,T,_,G,R,E,E,N):
+				return alpha | X11_FOREST_GREEN;
+			case _I(F,O,R,E,S,T, ,G,R,E,E,N):
+				return alpha | X11_FOREST_GREEN;
+			case _I(O,L,I,V,E,D,R,A,B):
+				return alpha | X11_OLIVE_DRAB;
+			case _I(O,L,I,V,E,_,D,R,A,B):
+				return alpha | X11_OLIVE_DRAB;
+			case _I(O,L,I,V,E, ,D,R,A,B):
+				return alpha | X11_OLIVE_DRAB;
+			case _I(D,A,R,K,K,H,A,K,I):
+				return alpha | X11_DARK_KHAKI;
+			case _I(D,A,R,K,_,K,H,A,K,I):
+				return alpha | X11_DARK_KHAKI;
+			case _I(D,A,R,K, ,K,H,A,K,I):
+				return alpha | X11_DARK_KHAKI;
+			case _I(K,H,A,K,I):
+				return alpha | X11_KHAKI;
+			case _I(P,A,L,E,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_PALE_GOLDENROD;
+			case _I(P,A,L,E,_,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_PALE_GOLDENROD;
+			case _I(P,A,L,E, ,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_PALE_GOLDENROD;
+			case _I(L,I,G,H,T,G,O,L,D,E,N,R,O,D,Y,E,L,L,O,W):
+				return alpha | X11_LIGHT_GOLDENROD_YELLOW;
+			case _I(L,I,G,H,T,_,G,O,L,D,E,N,R,O,D,_,Y,E,L,L,O,W):
+				return alpha | X11_LIGHT_GOLDENROD_YELLOW;
+			case _I(L,I,G,H,T, ,G,O,L,D,E,N,R,O,D, ,Y,E,L,L,O,W):
+				return alpha | X11_LIGHT_GOLDENROD_YELLOW;
+			case _I(L,I,G,H,T,Y,E,L,L,O,W):
+				return alpha | X11_LIGHT_YELLOW;
+			case _I(L,I,G,H,T,_,Y,E,L,L,O,W):
+				return alpha | X11_LIGHT_YELLOW;
+			case _I(L,I,G,H,T, ,Y,E,L,L,O,W):
+				return alpha | X11_LIGHT_YELLOW;
+			case _I(Y,E,L,L,O,W):
+				return alpha | X11_YELLOW;
+			case _I(G,O,L,D):
+				return alpha | X11_GOLD;
+			case _I(L,I,G,H,T,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_LIGHT_GOLDENROD;
+			case _I(L,I,G,H,T,_,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_LIGHT_GOLDENROD;
+			case _I(L,I,G,H,T, ,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_LIGHT_GOLDENROD;
+			case _I(G,O,L,D,E,N,R,O,D):
+				return alpha | X11_GOLDENROD;
+			case _I(D,A,R,K,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_DARK_GOLDENROD;
+			case _I(D,A,R,K,_,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_DARK_GOLDENROD;
+			case _I(D,A,R,K, ,G,O,L,D,E,N,R,O,D):
+				return alpha | X11_DARK_GOLDENROD;
+			case _I(R,O,S,Y,B,R,O,W,N):
+				return alpha | X11_ROSY_BROWN;
+			case _I(R,O,S,Y,_,B,R,O,W,N):
+				return alpha | X11_ROSY_BROWN;
+			case _I(R,O,S,Y, ,B,R,O,W,N):
+				return alpha | X11_ROSY_BROWN;
+			case _I(I,N,D,I,A,N,R,E,D):
+				return alpha | X11_INDIAN_RED;
+			case _I(I,N,D,I,A,N,_,R,E,D):
+				return alpha | X11_INDIAN_RED;
+			case _I(I,N,D,I,A,N, ,R,E,D):
+				return alpha | X11_INDIAN_RED;
+			case _I(S,A,D,D,L,E,B,R,O,W,N):
+				return alpha | X11_SADDLE_BROWN;
+			case _I(S,A,D,D,L,E,_,B,R,O,W,N):
+				return alpha | X11_SADDLE_BROWN;
+			case _I(S,A,D,D,L,E, ,B,R,O,W,N):
+				return alpha | X11_SADDLE_BROWN;
+			case _I(S,I,E,N,N,A):
+				return alpha | X11_SIENNA;
+			case _I(P,E,R,U):
+				return alpha | X11_PERU;
+			case _I(B,U,R,L,Y,W,O,O,D):
+				return alpha | X11_BURLYWOOD;
+			case _I(B,E,I,G,E):
+				return alpha | X11_BEIGE;
+			case _I(W,H,E,A,T):
+				return alpha | X11_WHEAT;
+			case _I(S,A,N,D,Y,B,R,O,W,N):
+				return alpha | X11_SANDY_BROWN;
+			case _I(S,A,N,D,Y,_,B,R,O,W,N):
+				return alpha | X11_SANDY_BROWN;
+			case _I(S,A,N,D,Y, ,B,R,O,W,N):
+				return alpha | X11_SANDY_BROWN;
+			case _I(T,A,N):
+				return alpha | X11_TAN;
+			case _I(C,H,O,C,O,L,A,T,E):
+				return alpha | X11_CHOCOLATE;
+			case _I(F,I,R,E,B,R,I,C,K):
+				return alpha | X11_FIREBRICK;
+			case _I(B,R,O,W,N):
+				return alpha | X11_BROWN;
+			case _I(D,A,R,K,S,A,L,M,O,N):
+				return alpha | X11_DARK_SALMON;
+			case _I(D,A,R,K,_,S,A,L,M,O,N):
+				return alpha | X11_DARK_SALMON;
+			case _I(D,A,R,K, ,S,A,L,M,O,N):
+				return alpha | X11_DARK_SALMON;
+			case _I(S,A,L,M,O,N):
+				return alpha | X11_SALMON;
+			case _I(L,I,G,H,T,S,A,L,M,O,N):
+				return alpha | X11_LIGHT_SALMON;
+			case _I(L,I,G,H,T,_,S,A,L,M,O,N):
+				return alpha | X11_LIGHT_SALMON;
+			case _I(L,I,G,H,T, ,S,A,L,M,O,N):
+				return alpha | X11_LIGHT_SALMON;
+			case _I(O,R,A,N,G,E):
+				return alpha | X11_ORANGE;
+			case _I(D,A,R,K,O,R,A,N,G,E):
+				return alpha | X11_DARK_ORANGE;
+			case _I(D,A,R,K,_,O,R,A,N,G,E):
+				return alpha | X11_DARK_ORANGE;
+			case _I(D,A,R,K, ,O,R,A,N,G,E):
+				return alpha | X11_DARK_ORANGE;
+			case _I(C,O,R,A,L):
+				return alpha | X11_CORAL;
+			case _I(L,I,G,H,T,C,O,R,A,L):
+				return alpha | X11_LIGHT_CORAL;
+			case _I(L,I,G,H,T,_,C,O,R,A,L):
+				return alpha | X11_LIGHT_CORAL;
+			case _I(L,I,G,H,T, ,C,O,R,A,L):
+				return alpha | X11_LIGHT_CORAL;
+			case _I(T,O,M,A,T,O):
+				return alpha | X11_TOMATO;
+			case _I(O,R,A,N,G,E,R,E,D):
+				return alpha | X11_ORANGE_RED;
+			case _I(O,R,A,N,G,E,_,R,E,D):
+				return alpha | X11_ORANGE_RED;
+			case _I(O,R,A,N,G,E, ,R,E,D):
+				return alpha | X11_ORANGE_RED;
+			case _I(R,E,D):
+				return alpha | X11_RED;
+			case _I(H,O,T,P,I,N,K):
+				return alpha | X11_HOT_PINK;
+			case _I(H,O,T,_,P,I,N,K):
+				return alpha | X11_HOT_PINK;
+			case _I(H,O,T, ,P,I,N,K):
+				return alpha | X11_HOT_PINK;
+			case _I(D,E,E,P,P,I,N,K):
+				return alpha | X11_DEEP_PINK;
+			case _I(D,E,E,P,_,P,I,N,K):
+				return alpha | X11_DEEP_PINK;
+			case _I(D,E,E,P, ,P,I,N,K):
+				return alpha | X11_DEEP_PINK;
+			case _I(P,I,N,K):
+				return alpha | X11_PINK;
+			case _I(L,I,G,H,T,P,I,N,K):
+				return alpha | X11_LIGHT_PINK;
+			case _I(L,I,G,H,T,_,P,I,N,K):
+				return alpha | X11_LIGHT_PINK;
+			case _I(L,I,G,H,T, ,P,I,N,K):
+				return alpha | X11_LIGHT_PINK;
+			case _I(P,A,L,E,V,I,O,L,E,T,R,E,D):
+				return alpha | X11_PALE_VIOLET_RED;
+			case _I(P,A,L,E,_,V,I,O,L,E,T,_,R,E,D):
+				return alpha | X11_PALE_VIOLET_RED;
+			case _I(P,A,L,E, ,V,I,O,L,E,T, ,R,E,D):
+				return alpha | X11_PALE_VIOLET_RED;
+			case _I(M,A,R,O,O,N):
+				return alpha | X11_MAROON;
+			case _I(M,E,D,I,U,M,V,I,O,L,E,T,R,E,D):
+				return alpha | X11_MEDIUM_VIOLET_RED;
+			case _I(M,E,D,I,U,M,_,V,I,O,L,E,T,_,R,E,D):
+				return alpha | X11_MEDIUM_VIOLET_RED;
+			case _I(M,E,D,I,U,M, ,V,I,O,L,E,T, ,R,E,D):
+				return alpha | X11_MEDIUM_VIOLET_RED;
+			case _I(V,I,O,L,E,T,R,E,D):
+				return alpha | X11_VIOLET_RED;
+			case _I(V,I,O,L,E,T,_,R,E,D):
+				return alpha | X11_VIOLET_RED;
+			case _I(V,I,O,L,E,T, ,R,E,D):
+				return alpha | X11_VIOLET_RED;
+			case _I(M,A,G,E,N,T,A):
+				return alpha | X11_MAGENTA;
+			case _I(V,I,O,L,E,T):
+				return alpha | X11_VIOLET;
+			case _I(P,L,U,M):
+				return alpha | X11_PLUM;
+			case _I(O,R,C,H,I,D):
+				return alpha | X11_ORCHID;
+			case _I(M,E,D,I,U,M,O,R,C,H,I,D):
+				return alpha | X11_MEDIUM_ORCHID;
+			case _I(M,E,D,I,U,M,_,O,R,C,H,I,D):
+				return alpha | X11_MEDIUM_ORCHID;
+			case _I(M,E,D,I,U,M, ,O,R,C,H,I,D):
+				return alpha | X11_MEDIUM_ORCHID;
+			case _I(D,A,R,K,O,R,C,H,I,D):
+				return alpha | X11_DARK_ORCHID;
+			case _I(D,A,R,K,_,O,R,C,H,I,D):
+				return alpha | X11_DARK_ORCHID;
+			case _I(D,A,R,K, ,O,R,C,H,I,D):
+				return alpha | X11_DARK_ORCHID;
+			case _I(D,A,R,K,V,I,O,L,E,T):
+				return alpha | X11_DARK_VIOLET;
+			case _I(D,A,R,K,_,V,I,O,L,E,T):
+				return alpha | X11_DARK_VIOLET;
+			case _I(D,A,R,K, ,V,I,O,L,E,T):
+				return alpha | X11_DARK_VIOLET;
+			case _I(B,L,U,E,V,I,O,L,E,T):
+				return alpha | X11_BLUE_VIOLET;
+			case _I(B,L,U,E,_,V,I,O,L,E,T):
+				return alpha | X11_BLUE_VIOLET;
+			case _I(B,L,U,E, ,V,I,O,L,E,T):
+				return alpha | X11_BLUE_VIOLET;
+			case _I(P,U,R,P,L,E):
+				return alpha | X11_PURPLE;
+			case _I(M,E,D,I,U,M,P,U,R,P,L,E):
+				return alpha | X11_MEDIUM_PURPLE;
+			case _I(M,E,D,I,U,M,_,P,U,R,P,L,E):
+				return alpha | X11_MEDIUM_PURPLE;
+			case _I(M,E,D,I,U,M, ,P,U,R,P,L,E):
+				return alpha | X11_MEDIUM_PURPLE;
+			case _I(T,H,I,S,T,L,E):
+				return alpha | X11_THISTLE;
+			case _I(S,N,O,W,1):
+				return alpha | X11_SNOW_1;
+			case _I(S,N,O,W,_,1):
+				return alpha | X11_SNOW_1;
+			case _I(S,N,O,W, ,1):
+				return alpha | X11_SNOW_1;
+			case _I(S,N,O,W,2):
+				return alpha | X11_SNOW_2;
+			case _I(S,N,O,W,_,2):
+				return alpha | X11_SNOW_2;
+			case _I(S,N,O,W, ,2):
+				return alpha | X11_SNOW_2;
+			case _I(S,N,O,W,3):
+				return alpha | X11_SNOW_3;
+			case _I(S,N,O,W,_,3):
+				return alpha | X11_SNOW_3;
+			case _I(S,N,O,W, ,3):
+				return alpha | X11_SNOW_3;
+			case _I(S,N,O,W,4):
+				return alpha | X11_SNOW_4;
+			case _I(S,N,O,W,_,4):
+				return alpha | X11_SNOW_4;
+			case _I(S,N,O,W, ,4):
+				return alpha | X11_SNOW_4;
+			case _I(S,E,A,S,H,E,L,L,1):
+				return alpha | X11_SEASHELL_1;
+			case _I(S,E,A,S,H,E,L,L,_,1):
+				return alpha | X11_SEASHELL_1;
+			case _I(S,E,A,S,H,E,L,L, ,1):
+				return alpha | X11_SEASHELL_1;
+			case _I(S,E,A,S,H,E,L,L,2):
+				return alpha | X11_SEASHELL_2;
+			case _I(S,E,A,S,H,E,L,L,_,2):
+				return alpha | X11_SEASHELL_2;
+			case _I(S,E,A,S,H,E,L,L, ,2):
+				return alpha | X11_SEASHELL_2;
+			case _I(S,E,A,S,H,E,L,L,3):
+				return alpha | X11_SEASHELL_3;
+			case _I(S,E,A,S,H,E,L,L,_,3):
+				return alpha | X11_SEASHELL_3;
+			case _I(S,E,A,S,H,E,L,L, ,3):
+				return alpha | X11_SEASHELL_3;
+			case _I(S,E,A,S,H,E,L,L,4):
+				return alpha | X11_SEASHELL_4;
+			case _I(S,E,A,S,H,E,L,L,_,4):
+				return alpha | X11_SEASHELL_4;
+			case _I(S,E,A,S,H,E,L,L, ,4):
+				return alpha | X11_SEASHELL_4;
+			case _I(A,N,T,I,Q,U,E,W,H,I,T,E,1):
+				return alpha | X11_ANTIQUE_WHITE_1;
+			case _I(A,N,T,I,Q,U,E,_,W,H,I,T,E,_,1):
+				return alpha | X11_ANTIQUE_WHITE_1;
+			case _I(A,N,T,I,Q,U,E, ,W,H,I,T,E, ,1):
+				return alpha | X11_ANTIQUE_WHITE_1;
+			case _I(A,N,T,I,Q,U,E,W,H,I,T,E,2):
+				return alpha | X11_ANTIQUE_WHITE_2;
+			case _I(A,N,T,I,Q,U,E,_,W,H,I,T,E,_,2):
+				return alpha | X11_ANTIQUE_WHITE_2;
+			case _I(A,N,T,I,Q,U,E, ,W,H,I,T,E, ,2):
+				return alpha | X11_ANTIQUE_WHITE_2;
+			case _I(A,N,T,I,Q,U,E,W,H,I,T,E,3):
+				return alpha | X11_ANTIQUE_WHITE_3;
+			case _I(A,N,T,I,Q,U,E,_,W,H,I,T,E,_,3):
+				return alpha | X11_ANTIQUE_WHITE_3;
+			case _I(A,N,T,I,Q,U,E, ,W,H,I,T,E, ,3):
+				return alpha | X11_ANTIQUE_WHITE_3;
+			case _I(A,N,T,I,Q,U,E,W,H,I,T,E,4):
+				return alpha | X11_ANTIQUE_WHITE_4;
+			case _I(A,N,T,I,Q,U,E,_,W,H,I,T,E,_,4):
+				return alpha | X11_ANTIQUE_WHITE_4;
+			case _I(A,N,T,I,Q,U,E, ,W,H,I,T,E, ,4):
+				return alpha | X11_ANTIQUE_WHITE_4;
+			case _I(B,I,S,Q,U,E,1):
+				return alpha | X11_BISQUE_1;
+			case _I(B,I,S,Q,U,E,_,1):
+				return alpha | X11_BISQUE_1;
+			case _I(B,I,S,Q,U,E, ,1):
+				return alpha | X11_BISQUE_1;
+			case _I(B,I,S,Q,U,E,2):
+				return alpha | X11_BISQUE_2;
+			case _I(B,I,S,Q,U,E,_,2):
+				return alpha | X11_BISQUE_2;
+			case _I(B,I,S,Q,U,E, ,2):
+				return alpha | X11_BISQUE_2;
+			case _I(B,I,S,Q,U,E,3):
+				return alpha | X11_BISQUE_3;
+			case _I(B,I,S,Q,U,E,_,3):
+				return alpha | X11_BISQUE_3;
+			case _I(B,I,S,Q,U,E, ,3):
+				return alpha | X11_BISQUE_3;
+			case _I(B,I,S,Q,U,E,4):
+				return alpha | X11_BISQUE_4;
+			case _I(B,I,S,Q,U,E,_,4):
+				return alpha | X11_BISQUE_4;
+			case _I(B,I,S,Q,U,E, ,4):
+				return alpha | X11_BISQUE_4;
+			case _I(P,E,A,C,H,P,U,F,F,1):
+				return alpha | X11_PEACH_PUFF_1;
+			case _I(P,E,A,C,H,_,P,U,F,F,_,1):
+				return alpha | X11_PEACH_PUFF_1;
+			case _I(P,E,A,C,H, ,P,U,F,F, ,1):
+				return alpha | X11_PEACH_PUFF_1;
+			case _I(P,E,A,C,H,P,U,F,F,2):
+				return alpha | X11_PEACH_PUFF_2;
+			case _I(P,E,A,C,H,_,P,U,F,F,_,2):
+				return alpha | X11_PEACH_PUFF_2;
+			case _I(P,E,A,C,H, ,P,U,F,F, ,2):
+				return alpha | X11_PEACH_PUFF_2;
+			case _I(P,E,A,C,H,P,U,F,F,3):
+				return alpha | X11_PEACH_PUFF_3;
+			case _I(P,E,A,C,H,_,P,U,F,F,_,3):
+				return alpha | X11_PEACH_PUFF_3;
+			case _I(P,E,A,C,H, ,P,U,F,F, ,3):
+				return alpha | X11_PEACH_PUFF_3;
+			case _I(P,E,A,C,H,P,U,F,F,4):
+				return alpha | X11_PEACH_PUFF_4;
+			case _I(P,E,A,C,H,_,P,U,F,F,_,4):
+				return alpha | X11_PEACH_PUFF_4;
+			case _I(P,E,A,C,H, ,P,U,F,F, ,4):
+				return alpha | X11_PEACH_PUFF_4;
+			case _I(N,A,V,A,J,O,W,H,I,T,E,1):
+				return alpha | X11_NAVAJO_WHITE_1;
+			case _I(N,A,V,A,J,O,_,W,H,I,T,E,_,1):
+				return alpha | X11_NAVAJO_WHITE_1;
+			case _I(N,A,V,A,J,O, ,W,H,I,T,E, ,1):
+				return alpha | X11_NAVAJO_WHITE_1;
+			case _I(N,A,V,A,J,O,W,H,I,T,E,2):
+				return alpha | X11_NAVAJO_WHITE_2;
+			case _I(N,A,V,A,J,O,_,W,H,I,T,E,_,2):
+				return alpha | X11_NAVAJO_WHITE_2;
+			case _I(N,A,V,A,J,O, ,W,H,I,T,E, ,2):
+				return alpha | X11_NAVAJO_WHITE_2;
+			case _I(N,A,V,A,J,O,W,H,I,T,E,3):
+				return alpha | X11_NAVAJO_WHITE_3;
+			case _I(N,A,V,A,J,O,_,W,H,I,T,E,_,3):
+				return alpha | X11_NAVAJO_WHITE_3;
+			case _I(N,A,V,A,J,O, ,W,H,I,T,E, ,3):
+				return alpha | X11_NAVAJO_WHITE_3;
+			case _I(N,A,V,A,J,O,W,H,I,T,E,4):
+				return alpha | X11_NAVAJO_WHITE_4;
+			case _I(N,A,V,A,J,O,_,W,H,I,T,E,_,4):
+				return alpha | X11_NAVAJO_WHITE_4;
+			case _I(N,A,V,A,J,O, ,W,H,I,T,E, ,4):
+				return alpha | X11_NAVAJO_WHITE_4;
+			case _I(L,E,M,O,N,C,H,I,F,F,O,N,1):
+				return alpha | X11_LEMON_CHIFFON_1;
+			case _I(L,E,M,O,N,_,C,H,I,F,F,O,N,_,1):
+				return alpha | X11_LEMON_CHIFFON_1;
+			case _I(L,E,M,O,N, ,C,H,I,F,F,O,N, ,1):
+				return alpha | X11_LEMON_CHIFFON_1;
+			case _I(L,E,M,O,N,C,H,I,F,F,O,N,2):
+				return alpha | X11_LEMON_CHIFFON_2;
+			case _I(L,E,M,O,N,_,C,H,I,F,F,O,N,_,2):
+				return alpha | X11_LEMON_CHIFFON_2;
+			case _I(L,E,M,O,N, ,C,H,I,F,F,O,N, ,2):
+				return alpha | X11_LEMON_CHIFFON_2;
+			case _I(L,E,M,O,N,C,H,I,F,F,O,N,3):
+				return alpha | X11_LEMON_CHIFFON_3;
+			case _I(L,E,M,O,N,_,C,H,I,F,F,O,N,_,3):
+				return alpha | X11_LEMON_CHIFFON_3;
+			case _I(L,E,M,O,N, ,C,H,I,F,F,O,N, ,3):
+				return alpha | X11_LEMON_CHIFFON_3;
+			case _I(L,E,M,O,N,C,H,I,F,F,O,N,4):
+				return alpha | X11_LEMON_CHIFFON_4;
+			case _I(L,E,M,O,N,_,C,H,I,F,F,O,N,_,4):
+				return alpha | X11_LEMON_CHIFFON_4;
+			case _I(L,E,M,O,N, ,C,H,I,F,F,O,N, ,4):
+				return alpha | X11_LEMON_CHIFFON_4;
+			case _I(C,O,R,N,S,I,L,K,1):
+				return alpha | X11_CORNSILK_1;
+			case _I(C,O,R,N,S,I,L,K,_,1):
+				return alpha | X11_CORNSILK_1;
+			case _I(C,O,R,N,S,I,L,K, ,1):
+				return alpha | X11_CORNSILK_1;
+			case _I(C,O,R,N,S,I,L,K,2):
+				return alpha | X11_CORNSILK_2;
+			case _I(C,O,R,N,S,I,L,K,_,2):
+				return alpha | X11_CORNSILK_2;
+			case _I(C,O,R,N,S,I,L,K, ,2):
+				return alpha | X11_CORNSILK_2;
+			case _I(C,O,R,N,S,I,L,K,3):
+				return alpha | X11_CORNSILK_3;
+			case _I(C,O,R,N,S,I,L,K,_,3):
+				return alpha | X11_CORNSILK_3;
+			case _I(C,O,R,N,S,I,L,K, ,3):
+				return alpha | X11_CORNSILK_3;
+			case _I(C,O,R,N,S,I,L,K,4):
+				return alpha | X11_CORNSILK_4;
+			case _I(C,O,R,N,S,I,L,K,_,4):
+				return alpha | X11_CORNSILK_4;
+			case _I(C,O,R,N,S,I,L,K, ,4):
+				return alpha | X11_CORNSILK_4;
+			case _I(I,V,O,R,Y,1):
+				return alpha | X11_IVORY_1;
+			case _I(I,V,O,R,Y,_,1):
+				return alpha | X11_IVORY_1;
+			case _I(I,V,O,R,Y, ,1):
+				return alpha | X11_IVORY_1;
+			case _I(I,V,O,R,Y,2):
+				return alpha | X11_IVORY_2;
+			case _I(I,V,O,R,Y,_,2):
+				return alpha | X11_IVORY_2;
+			case _I(I,V,O,R,Y, ,2):
+				return alpha | X11_IVORY_2;
+			case _I(I,V,O,R,Y,3):
+				return alpha | X11_IVORY_3;
+			case _I(I,V,O,R,Y,_,3):
+				return alpha | X11_IVORY_3;
+			case _I(I,V,O,R,Y, ,3):
+				return alpha | X11_IVORY_3;
+			case _I(I,V,O,R,Y,4):
+				return alpha | X11_IVORY_4;
+			case _I(I,V,O,R,Y,_,4):
+				return alpha | X11_IVORY_4;
+			case _I(I,V,O,R,Y, ,4):
+				return alpha | X11_IVORY_4;
+			case _I(H,O,N,E,Y,D,E,W,1):
+				return alpha | X11_HONEYDEW_1;
+			case _I(H,O,N,E,Y,D,E,W,_,1):
+				return alpha | X11_HONEYDEW_1;
+			case _I(H,O,N,E,Y,D,E,W, ,1):
+				return alpha | X11_HONEYDEW_1;
+			case _I(H,O,N,E,Y,D,E,W,2):
+				return alpha | X11_HONEYDEW_2;
+			case _I(H,O,N,E,Y,D,E,W,_,2):
+				return alpha | X11_HONEYDEW_2;
+			case _I(H,O,N,E,Y,D,E,W, ,2):
+				return alpha | X11_HONEYDEW_2;
+			case _I(H,O,N,E,Y,D,E,W,3):
+				return alpha | X11_HONEYDEW_3;
+			case _I(H,O,N,E,Y,D,E,W,_,3):
+				return alpha | X11_HONEYDEW_3;
+			case _I(H,O,N,E,Y,D,E,W, ,3):
+				return alpha | X11_HONEYDEW_3;
+			case _I(H,O,N,E,Y,D,E,W,4):
+				return alpha | X11_HONEYDEW_4;
+			case _I(H,O,N,E,Y,D,E,W,_,4):
+				return alpha | X11_HONEYDEW_4;
+			case _I(H,O,N,E,Y,D,E,W, ,4):
+				return alpha | X11_HONEYDEW_4;
+			case _I(L,A,V,E,N,D,E,R,B,L,U,S,H,1):
+				return alpha | X11_LAVENDER_BLUSH_1;
+			case _I(L,A,V,E,N,D,E,R,_,B,L,U,S,H,_,1):
+				return alpha | X11_LAVENDER_BLUSH_1;
+			case _I(L,A,V,E,N,D,E,R, ,B,L,U,S,H, ,1):
+				return alpha | X11_LAVENDER_BLUSH_1;
+			case _I(L,A,V,E,N,D,E,R,B,L,U,S,H,2):
+				return alpha | X11_LAVENDER_BLUSH_2;
+			case _I(L,A,V,E,N,D,E,R,_,B,L,U,S,H,_,2):
+				return alpha | X11_LAVENDER_BLUSH_2;
+			case _I(L,A,V,E,N,D,E,R, ,B,L,U,S,H, ,2):
+				return alpha | X11_LAVENDER_BLUSH_2;
+			case _I(L,A,V,E,N,D,E,R,B,L,U,S,H,3):
+				return alpha | X11_LAVENDER_BLUSH_3;
+			case _I(L,A,V,E,N,D,E,R,_,B,L,U,S,H,_,3):
+				return alpha | X11_LAVENDER_BLUSH_3;
+			case _I(L,A,V,E,N,D,E,R, ,B,L,U,S,H, ,3):
+				return alpha | X11_LAVENDER_BLUSH_3;
+			case _I(L,A,V,E,N,D,E,R,B,L,U,S,H,4):
+				return alpha | X11_LAVENDER_BLUSH_4;
+			case _I(L,A,V,E,N,D,E,R,_,B,L,U,S,H,_,4):
+				return alpha | X11_LAVENDER_BLUSH_4;
+			case _I(L,A,V,E,N,D,E,R, ,B,L,U,S,H, ,4):
+				return alpha | X11_LAVENDER_BLUSH_4;
+			case _I(M,I,S,T,Y,R,O,S,E,1):
+				return alpha | X11_MISTY_ROSE_1;
+			case _I(M,I,S,T,Y,_,R,O,S,E,_,1):
+				return alpha | X11_MISTY_ROSE_1;
+			case _I(M,I,S,T,Y, ,R,O,S,E, ,1):
+				return alpha | X11_MISTY_ROSE_1;
+			case _I(M,I,S,T,Y,R,O,S,E,2):
+				return alpha | X11_MISTY_ROSE_2;
+			case _I(M,I,S,T,Y,_,R,O,S,E,_,2):
+				return alpha | X11_MISTY_ROSE_2;
+			case _I(M,I,S,T,Y, ,R,O,S,E, ,2):
+				return alpha | X11_MISTY_ROSE_2;
+			case _I(M,I,S,T,Y,R,O,S,E,3):
+				return alpha | X11_MISTY_ROSE_3;
+			case _I(M,I,S,T,Y,_,R,O,S,E,_,3):
+				return alpha | X11_MISTY_ROSE_3;
+			case _I(M,I,S,T,Y, ,R,O,S,E, ,3):
+				return alpha | X11_MISTY_ROSE_3;
+			case _I(M,I,S,T,Y,R,O,S,E,4):
+				return alpha | X11_MISTY_ROSE_4;
+			case _I(M,I,S,T,Y,_,R,O,S,E,_,4):
+				return alpha | X11_MISTY_ROSE_4;
+			case _I(M,I,S,T,Y, ,R,O,S,E, ,4):
+				return alpha | X11_MISTY_ROSE_4;
+			case _I(A,Z,U,R,E,1):
+				return alpha | X11_AZURE_1;
+			case _I(A,Z,U,R,E,_,1):
+				return alpha | X11_AZURE_1;
+			case _I(A,Z,U,R,E, ,1):
+				return alpha | X11_AZURE_1;
+			case _I(A,Z,U,R,E,2):
+				return alpha | X11_AZURE_2;
+			case _I(A,Z,U,R,E,_,2):
+				return alpha | X11_AZURE_2;
+			case _I(A,Z,U,R,E, ,2):
+				return alpha | X11_AZURE_2;
+			case _I(A,Z,U,R,E,3):
+				return alpha | X11_AZURE_3;
+			case _I(A,Z,U,R,E,_,3):
+				return alpha | X11_AZURE_3;
+			case _I(A,Z,U,R,E, ,3):
+				return alpha | X11_AZURE_3;
+			case _I(A,Z,U,R,E,4):
+				return alpha | X11_AZURE_4;
+			case _I(A,Z,U,R,E,_,4):
+				return alpha | X11_AZURE_4;
+			case _I(A,Z,U,R,E, ,4):
+				return alpha | X11_AZURE_4;
+			case _I(S,L,A,T,E,B,L,U,E,1):
+				return alpha | X11_SLATE_BLUE_1;
+			case _I(S,L,A,T,E,_,B,L,U,E,_,1):
+				return alpha | X11_SLATE_BLUE_1;
+			case _I(S,L,A,T,E, ,B,L,U,E, ,1):
+				return alpha | X11_SLATE_BLUE_1;
+			case _I(S,L,A,T,E,B,L,U,E,2):
+				return alpha | X11_SLATE_BLUE_2;
+			case _I(S,L,A,T,E,_,B,L,U,E,_,2):
+				return alpha | X11_SLATE_BLUE_2;
+			case _I(S,L,A,T,E, ,B,L,U,E, ,2):
+				return alpha | X11_SLATE_BLUE_2;
+			case _I(S,L,A,T,E,B,L,U,E,3):
+				return alpha | X11_SLATE_BLUE_3;
+			case _I(S,L,A,T,E,_,B,L,U,E,_,3):
+				return alpha | X11_SLATE_BLUE_3;
+			case _I(S,L,A,T,E, ,B,L,U,E, ,3):
+				return alpha | X11_SLATE_BLUE_3;
+			case _I(S,L,A,T,E,B,L,U,E,4):
+				return alpha | X11_SLATE_BLUE_4;
+			case _I(S,L,A,T,E,_,B,L,U,E,_,4):
+				return alpha | X11_SLATE_BLUE_4;
+			case _I(S,L,A,T,E, ,B,L,U,E, ,4):
+				return alpha | X11_SLATE_BLUE_4;
+			case _I(R,O,Y,A,L,B,L,U,E,1):
+				return alpha | X11_ROYAL_BLUE_1;
+			case _I(R,O,Y,A,L,_,B,L,U,E,_,1):
+				return alpha | X11_ROYAL_BLUE_1;
+			case _I(R,O,Y,A,L, ,B,L,U,E, ,1):
+				return alpha | X11_ROYAL_BLUE_1;
+			case _I(R,O,Y,A,L,B,L,U,E,2):
+				return alpha | X11_ROYAL_BLUE_2;
+			case _I(R,O,Y,A,L,_,B,L,U,E,_,2):
+				return alpha | X11_ROYAL_BLUE_2;
+			case _I(R,O,Y,A,L, ,B,L,U,E, ,2):
+				return alpha | X11_ROYAL_BLUE_2;
+			case _I(R,O,Y,A,L,B,L,U,E,3):
+				return alpha | X11_ROYAL_BLUE_3;
+			case _I(R,O,Y,A,L,_,B,L,U,E,_,3):
+				return alpha | X11_ROYAL_BLUE_3;
+			case _I(R,O,Y,A,L, ,B,L,U,E, ,3):
+				return alpha | X11_ROYAL_BLUE_3;
+			case _I(R,O,Y,A,L,B,L,U,E,4):
+				return alpha | X11_ROYAL_BLUE_4;
+			case _I(R,O,Y,A,L,_,B,L,U,E,_,4):
+				return alpha | X11_ROYAL_BLUE_4;
+			case _I(R,O,Y,A,L, ,B,L,U,E, ,4):
+				return alpha | X11_ROYAL_BLUE_4;
+			case _I(B,L,U,E,1):
+				return alpha | X11_BLUE_1;
+			case _I(B,L,U,E,_,1):
+				return alpha | X11_BLUE_1;
+			case _I(B,L,U,E, ,1):
+				return alpha | X11_BLUE_1;
+			case _I(B,L,U,E,2):
+				return alpha | X11_BLUE_2;
+			case _I(B,L,U,E,_,2):
+				return alpha | X11_BLUE_2;
+			case _I(B,L,U,E, ,2):
+				return alpha | X11_BLUE_2;
+			case _I(B,L,U,E,3):
+				return alpha | X11_BLUE_3;
+			case _I(B,L,U,E,_,3):
+				return alpha | X11_BLUE_3;
+			case _I(B,L,U,E, ,3):
+				return alpha | X11_BLUE_3;
+			case _I(B,L,U,E,4):
+				return alpha | X11_BLUE_4;
+			case _I(B,L,U,E,_,4):
+				return alpha | X11_BLUE_4;
+			case _I(B,L,U,E, ,4):
+				return alpha | X11_BLUE_4;
+			case _I(D,O,D,G,E,R,B,L,U,E,1):
+				return alpha | X11_DODGER_BLUE_1;
+			case _I(D,O,D,G,E,R,_,B,L,U,E,_,1):
+				return alpha | X11_DODGER_BLUE_1;
+			case _I(D,O,D,G,E,R, ,B,L,U,E, ,1):
+				return alpha | X11_DODGER_BLUE_1;
+			case _I(D,O,D,G,E,R,B,L,U,E,2):
+				return alpha | X11_DODGER_BLUE_2;
+			case _I(D,O,D,G,E,R,_,B,L,U,E,_,2):
+				return alpha | X11_DODGER_BLUE_2;
+			case _I(D,O,D,G,E,R, ,B,L,U,E, ,2):
+				return alpha | X11_DODGER_BLUE_2;
+			case _I(D,O,D,G,E,R,B,L,U,E,3):
+				return alpha | X11_DODGER_BLUE_3;
+			case _I(D,O,D,G,E,R,_,B,L,U,E,_,3):
+				return alpha | X11_DODGER_BLUE_3;
+			case _I(D,O,D,G,E,R, ,B,L,U,E, ,3):
+				return alpha | X11_DODGER_BLUE_3;
+			case _I(D,O,D,G,E,R,B,L,U,E,4):
+				return alpha | X11_DODGER_BLUE_4;
+			case _I(D,O,D,G,E,R,_,B,L,U,E,_,4):
+				return alpha | X11_DODGER_BLUE_4;
+			case _I(D,O,D,G,E,R, ,B,L,U,E, ,4):
+				return alpha | X11_DODGER_BLUE_4;
+			case _I(S,T,E,E,L,B,L,U,E,1):
+				return alpha | X11_STEEL_BLUE_1;
+			case _I(S,T,E,E,L,_,B,L,U,E,_,1):
+				return alpha | X11_STEEL_BLUE_1;
+			case _I(S,T,E,E,L, ,B,L,U,E, ,1):
+				return alpha | X11_STEEL_BLUE_1;
+			case _I(S,T,E,E,L,B,L,U,E,2):
+				return alpha | X11_STEEL_BLUE_2;
+			case _I(S,T,E,E,L,_,B,L,U,E,_,2):
+				return alpha | X11_STEEL_BLUE_2;
+			case _I(S,T,E,E,L, ,B,L,U,E, ,2):
+				return alpha | X11_STEEL_BLUE_2;
+			case _I(S,T,E,E,L,B,L,U,E,3):
+				return alpha | X11_STEEL_BLUE_3;
+			case _I(S,T,E,E,L,_,B,L,U,E,_,3):
+				return alpha | X11_STEEL_BLUE_3;
+			case _I(S,T,E,E,L, ,B,L,U,E, ,3):
+				return alpha | X11_STEEL_BLUE_3;
+			case _I(S,T,E,E,L,B,L,U,E,4):
+				return alpha | X11_STEEL_BLUE_4;
+			case _I(S,T,E,E,L,_,B,L,U,E,_,4):
+				return alpha | X11_STEEL_BLUE_4;
+			case _I(S,T,E,E,L, ,B,L,U,E, ,4):
+				return alpha | X11_STEEL_BLUE_4;
+			case _I(D,E,E,P,S,K,Y,B,L,U,E,1):
+				return alpha | X11_DEEP_SKY_BLUE_1;
+			case _I(D,E,E,P,_,S,K,Y,_,B,L,U,E,_,1):
+				return alpha | X11_DEEP_SKY_BLUE_1;
+			case _I(D,E,E,P, ,S,K,Y, ,B,L,U,E, ,1):
+				return alpha | X11_DEEP_SKY_BLUE_1;
+			case _I(D,E,E,P,S,K,Y,B,L,U,E,2):
+				return alpha | X11_DEEP_SKY_BLUE_2;
+			case _I(D,E,E,P,_,S,K,Y,_,B,L,U,E,_,2):
+				return alpha | X11_DEEP_SKY_BLUE_2;
+			case _I(D,E,E,P, ,S,K,Y, ,B,L,U,E, ,2):
+				return alpha | X11_DEEP_SKY_BLUE_2;
+			case _I(D,E,E,P,S,K,Y,B,L,U,E,3):
+				return alpha | X11_DEEP_SKY_BLUE_3;
+			case _I(D,E,E,P,_,S,K,Y,_,B,L,U,E,_,3):
+				return alpha | X11_DEEP_SKY_BLUE_3;
+			case _I(D,E,E,P, ,S,K,Y, ,B,L,U,E, ,3):
+				return alpha | X11_DEEP_SKY_BLUE_3;
+			case _I(D,E,E,P,S,K,Y,B,L,U,E,4):
+				return alpha | X11_DEEP_SKY_BLUE_4;
+			case _I(D,E,E,P,_,S,K,Y,_,B,L,U,E,_,4):
+				return alpha | X11_DEEP_SKY_BLUE_4;
+			case _I(D,E,E,P, ,S,K,Y, ,B,L,U,E, ,4):
+				return alpha | X11_DEEP_SKY_BLUE_4;
+			case _I(S,K,Y,B,L,U,E,1):
+				return alpha | X11_SKY_BLUE_1;
+			case _I(S,K,Y,_,B,L,U,E,_,1):
+				return alpha | X11_SKY_BLUE_1;
+			case _I(S,K,Y, ,B,L,U,E, ,1):
+				return alpha | X11_SKY_BLUE_1;
+			case _I(S,K,Y,B,L,U,E,2):
+				return alpha | X11_SKY_BLUE_2;
+			case _I(S,K,Y,_,B,L,U,E,_,2):
+				return alpha | X11_SKY_BLUE_2;
+			case _I(S,K,Y, ,B,L,U,E, ,2):
+				return alpha | X11_SKY_BLUE_2;
+			case _I(S,K,Y,B,L,U,E,3):
+				return alpha | X11_SKY_BLUE_3;
+			case _I(S,K,Y,_,B,L,U,E,_,3):
+				return alpha | X11_SKY_BLUE_3;
+			case _I(S,K,Y, ,B,L,U,E, ,3):
+				return alpha | X11_SKY_BLUE_3;
+			case _I(S,K,Y,B,L,U,E,4):
+				return alpha | X11_SKY_BLUE_4;
+			case _I(S,K,Y,_,B,L,U,E,_,4):
+				return alpha | X11_SKY_BLUE_4;
+			case _I(S,K,Y, ,B,L,U,E, ,4):
+				return alpha | X11_SKY_BLUE_4;
+			case _I(L,I,G,H,T,S,K,Y,B,L,U,E,1):
+				return alpha | X11_LIGHT_SKY_BLUE_1;
+			case _I(L,I,G,H,T,_,S,K,Y,_,B,L,U,E,_,1):
+				return alpha | X11_LIGHT_SKY_BLUE_1;
+			case _I(L,I,G,H,T, ,S,K,Y, ,B,L,U,E, ,1):
+				return alpha | X11_LIGHT_SKY_BLUE_1;
+			case _I(L,I,G,H,T,S,K,Y,B,L,U,E,2):
+				return alpha | X11_LIGHT_SKY_BLUE_2;
+			case _I(L,I,G,H,T,_,S,K,Y,_,B,L,U,E,_,2):
+				return alpha | X11_LIGHT_SKY_BLUE_2;
+			case _I(L,I,G,H,T, ,S,K,Y, ,B,L,U,E, ,2):
+				return alpha | X11_LIGHT_SKY_BLUE_2;
+			case _I(L,I,G,H,T,S,K,Y,B,L,U,E,3):
+				return alpha | X11_LIGHT_SKY_BLUE_3;
+			case _I(L,I,G,H,T,_,S,K,Y,_,B,L,U,E,_,3):
+				return alpha | X11_LIGHT_SKY_BLUE_3;
+			case _I(L,I,G,H,T, ,S,K,Y, ,B,L,U,E, ,3):
+				return alpha | X11_LIGHT_SKY_BLUE_3;
+			case _I(L,I,G,H,T,S,K,Y,B,L,U,E,4):
+				return alpha | X11_LIGHT_SKY_BLUE_4;
+			case _I(L,I,G,H,T,_,S,K,Y,_,B,L,U,E,_,4):
+				return alpha | X11_LIGHT_SKY_BLUE_4;
+			case _I(L,I,G,H,T, ,S,K,Y, ,B,L,U,E, ,4):
+				return alpha | X11_LIGHT_SKY_BLUE_4;
+			case _I(S,L,A,T,E,G,R,A,Y,1):
+				return alpha | X11_SLATE_GRAY_1;
+			case _I(S,L,A,T,E,_,G,R,A,Y,_,1):
+				return alpha | X11_SLATE_GRAY_1;
+			case _I(S,L,A,T,E, ,G,R,A,Y, ,1):
+				return alpha | X11_SLATE_GRAY_1;
+			case _I(S,L,A,T,E,G,R,A,Y,2):
+				return alpha | X11_SLATE_GRAY_2;
+			case _I(S,L,A,T,E,_,G,R,A,Y,_,2):
+				return alpha | X11_SLATE_GRAY_2;
+			case _I(S,L,A,T,E, ,G,R,A,Y, ,2):
+				return alpha | X11_SLATE_GRAY_2;
+			case _I(S,L,A,T,E,G,R,A,Y,3):
+				return alpha | X11_SLATE_GRAY_3;
+			case _I(S,L,A,T,E,_,G,R,A,Y,_,3):
+				return alpha | X11_SLATE_GRAY_3;
+			case _I(S,L,A,T,E, ,G,R,A,Y, ,3):
+				return alpha | X11_SLATE_GRAY_3;
+			case _I(S,L,A,T,E,G,R,A,Y,4):
+				return alpha | X11_SLATE_GRAY_4;
+			case _I(S,L,A,T,E,_,G,R,A,Y,_,4):
+				return alpha | X11_SLATE_GRAY_4;
+			case _I(S,L,A,T,E, ,G,R,A,Y, ,4):
+				return alpha | X11_SLATE_GRAY_4;
+			case _I(L,I,G,H,T,S,T,E,E,L,B,L,U,E,1):
+				return alpha | X11_LIGHT_STEEL_BLUE_1;
+			case _I(L,I,G,H,T,_,S,T,E,E,L,_,B,L,U,E,_,1):
+				return alpha | X11_LIGHT_STEEL_BLUE_1;
+			case _I(L,I,G,H,T, ,S,T,E,E,L, ,B,L,U,E, ,1):
+				return alpha | X11_LIGHT_STEEL_BLUE_1;
+			case _I(L,I,G,H,T,S,T,E,E,L,B,L,U,E,2):
+				return alpha | X11_LIGHT_STEEL_BLUE_2;
+			case _I(L,I,G,H,T,_,S,T,E,E,L,_,B,L,U,E,_,2):
+				return alpha | X11_LIGHT_STEEL_BLUE_2;
+			case _I(L,I,G,H,T, ,S,T,E,E,L, ,B,L,U,E, ,2):
+				return alpha | X11_LIGHT_STEEL_BLUE_2;
+			case _I(L,I,G,H,T,S,T,E,E,L,B,L,U,E,3):
+				return alpha | X11_LIGHT_STEEL_BLUE_3;
+			case _I(L,I,G,H,T,_,S,T,E,E,L,_,B,L,U,E,_,3):
+				return alpha | X11_LIGHT_STEEL_BLUE_3;
+			case _I(L,I,G,H,T, ,S,T,E,E,L, ,B,L,U,E, ,3):
+				return alpha | X11_LIGHT_STEEL_BLUE_3;
+			case _I(L,I,G,H,T,S,T,E,E,L,B,L,U,E,4):
+				return alpha | X11_LIGHT_STEEL_BLUE_4;
+			case _I(L,I,G,H,T,_,S,T,E,E,L,_,B,L,U,E,_,4):
+				return alpha | X11_LIGHT_STEEL_BLUE_4;
+			case _I(L,I,G,H,T, ,S,T,E,E,L, ,B,L,U,E, ,4):
+				return alpha | X11_LIGHT_STEEL_BLUE_4;
+			case _I(L,I,G,H,T,B,L,U,E,1):
+				return alpha | X11_LIGHT_BLUE_1;
+			case _I(L,I,G,H,T,_,B,L,U,E,_,1):
+				return alpha | X11_LIGHT_BLUE_1;
+			case _I(L,I,G,H,T, ,B,L,U,E, ,1):
+				return alpha | X11_LIGHT_BLUE_1;
+			case _I(L,I,G,H,T,B,L,U,E,2):
+				return alpha | X11_LIGHT_BLUE_2;
+			case _I(L,I,G,H,T,_,B,L,U,E,_,2):
+				return alpha | X11_LIGHT_BLUE_2;
+			case _I(L,I,G,H,T, ,B,L,U,E, ,2):
+				return alpha | X11_LIGHT_BLUE_2;
+			case _I(L,I,G,H,T,B,L,U,E,3):
+				return alpha | X11_LIGHT_BLUE_3;
+			case _I(L,I,G,H,T,_,B,L,U,E,_,3):
+				return alpha | X11_LIGHT_BLUE_3;
+			case _I(L,I,G,H,T, ,B,L,U,E, ,3):
+				return alpha | X11_LIGHT_BLUE_3;
+			case _I(L,I,G,H,T,B,L,U,E,4):
+				return alpha | X11_LIGHT_BLUE_4;
+			case _I(L,I,G,H,T,_,B,L,U,E,_,4):
+				return alpha | X11_LIGHT_BLUE_4;
+			case _I(L,I,G,H,T, ,B,L,U,E, ,4):
+				return alpha | X11_LIGHT_BLUE_4;
+			case _I(L,I,G,H,T,C,Y,A,N,1):
+				return alpha | X11_LIGHT_CYAN_1;
+			case _I(L,I,G,H,T,_,C,Y,A,N,_,1):
+				return alpha | X11_LIGHT_CYAN_1;
+			case _I(L,I,G,H,T, ,C,Y,A,N, ,1):
+				return alpha | X11_LIGHT_CYAN_1;
+			case _I(L,I,G,H,T,C,Y,A,N,2):
+				return alpha | X11_LIGHT_CYAN_2;
+			case _I(L,I,G,H,T,_,C,Y,A,N,_,2):
+				return alpha | X11_LIGHT_CYAN_2;
+			case _I(L,I,G,H,T, ,C,Y,A,N, ,2):
+				return alpha | X11_LIGHT_CYAN_2;
+			case _I(L,I,G,H,T,C,Y,A,N,3):
+				return alpha | X11_LIGHT_CYAN_3;
+			case _I(L,I,G,H,T,_,C,Y,A,N,_,3):
+				return alpha | X11_LIGHT_CYAN_3;
+			case _I(L,I,G,H,T, ,C,Y,A,N, ,3):
+				return alpha | X11_LIGHT_CYAN_3;
+			case _I(L,I,G,H,T,C,Y,A,N,4):
+				return alpha | X11_LIGHT_CYAN_4;
+			case _I(L,I,G,H,T,_,C,Y,A,N,_,4):
+				return alpha | X11_LIGHT_CYAN_4;
+			case _I(L,I,G,H,T, ,C,Y,A,N, ,4):
+				return alpha | X11_LIGHT_CYAN_4;
+			case _I(P,A,L,E,T,U,R,Q,U,O,I,S,E,1):
+				return alpha | X11_PALE_TURQUOISE_1;
+			case _I(P,A,L,E,_,T,U,R,Q,U,O,I,S,E,_,1):
+				return alpha | X11_PALE_TURQUOISE_1;
+			case _I(P,A,L,E, ,T,U,R,Q,U,O,I,S,E, ,1):
+				return alpha | X11_PALE_TURQUOISE_1;
+			case _I(P,A,L,E,T,U,R,Q,U,O,I,S,E,2):
+				return alpha | X11_PALE_TURQUOISE_2;
+			case _I(P,A,L,E,_,T,U,R,Q,U,O,I,S,E,_,2):
+				return alpha | X11_PALE_TURQUOISE_2;
+			case _I(P,A,L,E, ,T,U,R,Q,U,O,I,S,E, ,2):
+				return alpha | X11_PALE_TURQUOISE_2;
+			case _I(P,A,L,E,T,U,R,Q,U,O,I,S,E,3):
+				return alpha | X11_PALE_TURQUOISE_3;
+			case _I(P,A,L,E,_,T,U,R,Q,U,O,I,S,E,_,3):
+				return alpha | X11_PALE_TURQUOISE_3;
+			case _I(P,A,L,E, ,T,U,R,Q,U,O,I,S,E, ,3):
+				return alpha | X11_PALE_TURQUOISE_3;
+			case _I(P,A,L,E,T,U,R,Q,U,O,I,S,E,4):
+				return alpha | X11_PALE_TURQUOISE_4;
+			case _I(P,A,L,E,_,T,U,R,Q,U,O,I,S,E,_,4):
+				return alpha | X11_PALE_TURQUOISE_4;
+			case _I(P,A,L,E, ,T,U,R,Q,U,O,I,S,E, ,4):
+				return alpha | X11_PALE_TURQUOISE_4;
+			case _I(C,A,D,E,T,B,L,U,E,1):
+				return alpha | X11_CADET_BLUE_1;
+			case _I(C,A,D,E,T,_,B,L,U,E,_,1):
+				return alpha | X11_CADET_BLUE_1;
+			case _I(C,A,D,E,T, ,B,L,U,E, ,1):
+				return alpha | X11_CADET_BLUE_1;
+			case _I(C,A,D,E,T,B,L,U,E,2):
+				return alpha | X11_CADET_BLUE_2;
+			case _I(C,A,D,E,T,_,B,L,U,E,_,2):
+				return alpha | X11_CADET_BLUE_2;
+			case _I(C,A,D,E,T, ,B,L,U,E, ,2):
+				return alpha | X11_CADET_BLUE_2;
+			case _I(C,A,D,E,T,B,L,U,E,3):
+				return alpha | X11_CADET_BLUE_3;
+			case _I(C,A,D,E,T,_,B,L,U,E,_,3):
+				return alpha | X11_CADET_BLUE_3;
+			case _I(C,A,D,E,T, ,B,L,U,E, ,3):
+				return alpha | X11_CADET_BLUE_3;
+			case _I(C,A,D,E,T,B,L,U,E,4):
+				return alpha | X11_CADET_BLUE_4;
+			case _I(C,A,D,E,T,_,B,L,U,E,_,4):
+				return alpha | X11_CADET_BLUE_4;
+			case _I(C,A,D,E,T, ,B,L,U,E, ,4):
+				return alpha | X11_CADET_BLUE_4;
+			case _I(T,U,R,Q,U,O,I,S,E,1):
+				return alpha | X11_TURQUOISE_1;
+			case _I(T,U,R,Q,U,O,I,S,E,_,1):
+				return alpha | X11_TURQUOISE_1;
+			case _I(T,U,R,Q,U,O,I,S,E, ,1):
+				return alpha | X11_TURQUOISE_1;
+			case _I(T,U,R,Q,U,O,I,S,E,2):
+				return alpha | X11_TURQUOISE_2;
+			case _I(T,U,R,Q,U,O,I,S,E,_,2):
+				return alpha | X11_TURQUOISE_2;
+			case _I(T,U,R,Q,U,O,I,S,E, ,2):
+				return alpha | X11_TURQUOISE_2;
+			case _I(T,U,R,Q,U,O,I,S,E,3):
+				return alpha | X11_TURQUOISE_3;
+			case _I(T,U,R,Q,U,O,I,S,E,_,3):
+				return alpha | X11_TURQUOISE_3;
+			case _I(T,U,R,Q,U,O,I,S,E, ,3):
+				return alpha | X11_TURQUOISE_3;
+			case _I(T,U,R,Q,U,O,I,S,E,4):
+				return alpha | X11_TURQUOISE_4;
+			case _I(T,U,R,Q,U,O,I,S,E,_,4):
+				return alpha | X11_TURQUOISE_4;
+			case _I(T,U,R,Q,U,O,I,S,E, ,4):
+				return alpha | X11_TURQUOISE_4;
+			case _I(C,Y,A,N,1):
+				return alpha | X11_CYAN_1;
+			case _I(C,Y,A,N,_,1):
+				return alpha | X11_CYAN_1;
+			case _I(C,Y,A,N, ,1):
+				return alpha | X11_CYAN_1;
+			case _I(C,Y,A,N,2):
+				return alpha | X11_CYAN_2;
+			case _I(C,Y,A,N,_,2):
+				return alpha | X11_CYAN_2;
+			case _I(C,Y,A,N, ,2):
+				return alpha | X11_CYAN_2;
+			case _I(C,Y,A,N,3):
+				return alpha | X11_CYAN_3;
+			case _I(C,Y,A,N,_,3):
+				return alpha | X11_CYAN_3;
+			case _I(C,Y,A,N, ,3):
+				return alpha | X11_CYAN_3;
+			case _I(C,Y,A,N,4):
+				return alpha | X11_CYAN_4;
+			case _I(C,Y,A,N,_,4):
+				return alpha | X11_CYAN_4;
+			case _I(C,Y,A,N, ,4):
+				return alpha | X11_CYAN_4;
+			case _I(D,A,R,K,S,L,A,T,E,G,R,A,Y,1):
+				return alpha | X11_DARK_SLATE_GRAY_1;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,G,R,A,Y,_,1):
+				return alpha | X11_DARK_SLATE_GRAY_1;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,G,R,A,Y, ,1):
+				return alpha | X11_DARK_SLATE_GRAY_1;
+			case _I(D,A,R,K,S,L,A,T,E,G,R,A,Y,2):
+				return alpha | X11_DARK_SLATE_GRAY_2;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,G,R,A,Y,_,2):
+				return alpha | X11_DARK_SLATE_GRAY_2;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,G,R,A,Y, ,2):
+				return alpha | X11_DARK_SLATE_GRAY_2;
+			case _I(D,A,R,K,S,L,A,T,E,G,R,A,Y,3):
+				return alpha | X11_DARK_SLATE_GRAY_3;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,G,R,A,Y,_,3):
+				return alpha | X11_DARK_SLATE_GRAY_3;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,G,R,A,Y, ,3):
+				return alpha | X11_DARK_SLATE_GRAY_3;
+			case _I(D,A,R,K,S,L,A,T,E,G,R,A,Y,4):
+				return alpha | X11_DARK_SLATE_GRAY_4;
+			case _I(D,A,R,K,_,S,L,A,T,E,_,G,R,A,Y,_,4):
+				return alpha | X11_DARK_SLATE_GRAY_4;
+			case _I(D,A,R,K, ,S,L,A,T,E, ,G,R,A,Y, ,4):
+				return alpha | X11_DARK_SLATE_GRAY_4;
+			case _I(A,Q,U,A,M,A,R,I,N,E,1):
+				return alpha | X11_AQUAMARINE_1;
+			case _I(A,Q,U,A,M,A,R,I,N,E,_,1):
+				return alpha | X11_AQUAMARINE_1;
+			case _I(A,Q,U,A,M,A,R,I,N,E, ,1):
+				return alpha | X11_AQUAMARINE_1;
+			case _I(A,Q,U,A,M,A,R,I,N,E,2):
+				return alpha | X11_AQUAMARINE_2;
+			case _I(A,Q,U,A,M,A,R,I,N,E,_,2):
+				return alpha | X11_AQUAMARINE_2;
+			case _I(A,Q,U,A,M,A,R,I,N,E, ,2):
+				return alpha | X11_AQUAMARINE_2;
+			case _I(A,Q,U,A,M,A,R,I,N,E,3):
+				return alpha | X11_AQUAMARINE_3;
+			case _I(A,Q,U,A,M,A,R,I,N,E,_,3):
+				return alpha | X11_AQUAMARINE_3;
+			case _I(A,Q,U,A,M,A,R,I,N,E, ,3):
+				return alpha | X11_AQUAMARINE_3;
+			case _I(A,Q,U,A,M,A,R,I,N,E,4):
+				return alpha | X11_AQUAMARINE_4;
+			case _I(A,Q,U,A,M,A,R,I,N,E,_,4):
+				return alpha | X11_AQUAMARINE_4;
+			case _I(A,Q,U,A,M,A,R,I,N,E, ,4):
+				return alpha | X11_AQUAMARINE_4;
+			case _I(D,A,R,K,S,E,A,G,R,E,E,N,1):
+				return alpha | X11_DARK_SEA_GREEN_1;
+			case _I(D,A,R,K,_,S,E,A,_,G,R,E,E,N,_,1):
+				return alpha | X11_DARK_SEA_GREEN_1;
+			case _I(D,A,R,K, ,S,E,A, ,G,R,E,E,N, ,1):
+				return alpha | X11_DARK_SEA_GREEN_1;
+			case _I(D,A,R,K,S,E,A,G,R,E,E,N,2):
+				return alpha | X11_DARK_SEA_GREEN_2;
+			case _I(D,A,R,K,_,S,E,A,_,G,R,E,E,N,_,2):
+				return alpha | X11_DARK_SEA_GREEN_2;
+			case _I(D,A,R,K, ,S,E,A, ,G,R,E,E,N, ,2):
+				return alpha | X11_DARK_SEA_GREEN_2;
+			case _I(D,A,R,K,S,E,A,G,R,E,E,N,3):
+				return alpha | X11_DARK_SEA_GREEN_3;
+			case _I(D,A,R,K,_,S,E,A,_,G,R,E,E,N,_,3):
+				return alpha | X11_DARK_SEA_GREEN_3;
+			case _I(D,A,R,K, ,S,E,A, ,G,R,E,E,N, ,3):
+				return alpha | X11_DARK_SEA_GREEN_3;
+			case _I(D,A,R,K,S,E,A,G,R,E,E,N,4):
+				return alpha | X11_DARK_SEA_GREEN_4;
+			case _I(D,A,R,K,_,S,E,A,_,G,R,E,E,N,_,4):
+				return alpha | X11_DARK_SEA_GREEN_4;
+			case _I(D,A,R,K, ,S,E,A, ,G,R,E,E,N, ,4):
+				return alpha | X11_DARK_SEA_GREEN_4;
+			case _I(S,E,A,G,R,E,E,N,1):
+				return alpha | X11_SEA_GREEN_1;
+			case _I(S,E,A,_,G,R,E,E,N,_,1):
+				return alpha | X11_SEA_GREEN_1;
+			case _I(S,E,A, ,G,R,E,E,N, ,1):
+				return alpha | X11_SEA_GREEN_1;
+			case _I(S,E,A,G,R,E,E,N,2):
+				return alpha | X11_SEA_GREEN_2;
+			case _I(S,E,A,_,G,R,E,E,N,_,2):
+				return alpha | X11_SEA_GREEN_2;
+			case _I(S,E,A, ,G,R,E,E,N, ,2):
+				return alpha | X11_SEA_GREEN_2;
+			case _I(S,E,A,G,R,E,E,N,3):
+				return alpha | X11_SEA_GREEN_3;
+			case _I(S,E,A,_,G,R,E,E,N,_,3):
+				return alpha | X11_SEA_GREEN_3;
+			case _I(S,E,A, ,G,R,E,E,N, ,3):
+				return alpha | X11_SEA_GREEN_3;
+			case _I(S,E,A,G,R,E,E,N,4):
+				return alpha | X11_SEA_GREEN_4;
+			case _I(S,E,A,_,G,R,E,E,N,_,4):
+				return alpha | X11_SEA_GREEN_4;
+			case _I(S,E,A, ,G,R,E,E,N, ,4):
+				return alpha | X11_SEA_GREEN_4;
+			case _I(P,A,L,E,G,R,E,E,N,1):
+				return alpha | X11_PALE_GREEN_1;
+			case _I(P,A,L,E,_,G,R,E,E,N,_,1):
+				return alpha | X11_PALE_GREEN_1;
+			case _I(P,A,L,E, ,G,R,E,E,N, ,1):
+				return alpha | X11_PALE_GREEN_1;
+			case _I(P,A,L,E,G,R,E,E,N,2):
+				return alpha | X11_PALE_GREEN_2;
+			case _I(P,A,L,E,_,G,R,E,E,N,_,2):
+				return alpha | X11_PALE_GREEN_2;
+			case _I(P,A,L,E, ,G,R,E,E,N, ,2):
+				return alpha | X11_PALE_GREEN_2;
+			case _I(P,A,L,E,G,R,E,E,N,3):
+				return alpha | X11_PALE_GREEN_3;
+			case _I(P,A,L,E,_,G,R,E,E,N,_,3):
+				return alpha | X11_PALE_GREEN_3;
+			case _I(P,A,L,E, ,G,R,E,E,N, ,3):
+				return alpha | X11_PALE_GREEN_3;
+			case _I(P,A,L,E,G,R,E,E,N,4):
+				return alpha | X11_PALE_GREEN_4;
+			case _I(P,A,L,E,_,G,R,E,E,N,_,4):
+				return alpha | X11_PALE_GREEN_4;
+			case _I(P,A,L,E, ,G,R,E,E,N, ,4):
+				return alpha | X11_PALE_GREEN_4;
+			case _I(S,P,R,I,N,G,G,R,E,E,N,1):
+				return alpha | X11_SPRING_GREEN_1;
+			case _I(S,P,R,I,N,G,_,G,R,E,E,N,_,1):
+				return alpha | X11_SPRING_GREEN_1;
+			case _I(S,P,R,I,N,G, ,G,R,E,E,N, ,1):
+				return alpha | X11_SPRING_GREEN_1;
+			case _I(S,P,R,I,N,G,G,R,E,E,N,2):
+				return alpha | X11_SPRING_GREEN_2;
+			case _I(S,P,R,I,N,G,_,G,R,E,E,N,_,2):
+				return alpha | X11_SPRING_GREEN_2;
+			case _I(S,P,R,I,N,G, ,G,R,E,E,N, ,2):
+				return alpha | X11_SPRING_GREEN_2;
+			case _I(S,P,R,I,N,G,G,R,E,E,N,3):
+				return alpha | X11_SPRING_GREEN_3;
+			case _I(S,P,R,I,N,G,_,G,R,E,E,N,_,3):
+				return alpha | X11_SPRING_GREEN_3;
+			case _I(S,P,R,I,N,G, ,G,R,E,E,N, ,3):
+				return alpha | X11_SPRING_GREEN_3;
+			case _I(S,P,R,I,N,G,G,R,E,E,N,4):
+				return alpha | X11_SPRING_GREEN_4;
+			case _I(S,P,R,I,N,G,_,G,R,E,E,N,_,4):
+				return alpha | X11_SPRING_GREEN_4;
+			case _I(S,P,R,I,N,G, ,G,R,E,E,N, ,4):
+				return alpha | X11_SPRING_GREEN_4;
+			case _I(G,R,E,E,N,1):
+				return alpha | X11_GREEN_1;
+			case _I(G,R,E,E,N,_,1):
+				return alpha | X11_GREEN_1;
+			case _I(G,R,E,E,N, ,1):
+				return alpha | X11_GREEN_1;
+			case _I(G,R,E,E,N,2):
+				return alpha | X11_GREEN_2;
+			case _I(G,R,E,E,N,_,2):
+				return alpha | X11_GREEN_2;
+			case _I(G,R,E,E,N, ,2):
+				return alpha | X11_GREEN_2;
+			case _I(G,R,E,E,N,3):
+				return alpha | X11_GREEN_3;
+			case _I(G,R,E,E,N,_,3):
+				return alpha | X11_GREEN_3;
+			case _I(G,R,E,E,N, ,3):
+				return alpha | X11_GREEN_3;
+			case _I(G,R,E,E,N,4):
+				return alpha | X11_GREEN_4;
+			case _I(G,R,E,E,N,_,4):
+				return alpha | X11_GREEN_4;
+			case _I(G,R,E,E,N, ,4):
+				return alpha | X11_GREEN_4;
+			case _I(C,H,A,R,T,R,E,U,S,E,1):
+				return alpha | X11_CHARTREUSE_1;
+			case _I(C,H,A,R,T,R,E,U,S,E,_,1):
+				return alpha | X11_CHARTREUSE_1;
+			case _I(C,H,A,R,T,R,E,U,S,E, ,1):
+				return alpha | X11_CHARTREUSE_1;
+			case _I(C,H,A,R,T,R,E,U,S,E,2):
+				return alpha | X11_CHARTREUSE_2;
+			case _I(C,H,A,R,T,R,E,U,S,E,_,2):
+				return alpha | X11_CHARTREUSE_2;
+			case _I(C,H,A,R,T,R,E,U,S,E, ,2):
+				return alpha | X11_CHARTREUSE_2;
+			case _I(C,H,A,R,T,R,E,U,S,E,3):
+				return alpha | X11_CHARTREUSE_3;
+			case _I(C,H,A,R,T,R,E,U,S,E,_,3):
+				return alpha | X11_CHARTREUSE_3;
+			case _I(C,H,A,R,T,R,E,U,S,E, ,3):
+				return alpha | X11_CHARTREUSE_3;
+			case _I(C,H,A,R,T,R,E,U,S,E,4):
+				return alpha | X11_CHARTREUSE_4;
+			case _I(C,H,A,R,T,R,E,U,S,E,_,4):
+				return alpha | X11_CHARTREUSE_4;
+			case _I(C,H,A,R,T,R,E,U,S,E, ,4):
+				return alpha | X11_CHARTREUSE_4;
+			case _I(O,L,I,V,E,D,R,A,B,1):
+				return alpha | X11_OLIVE_DRAB_1;
+			case _I(O,L,I,V,E,_,D,R,A,B,_,1):
+				return alpha | X11_OLIVE_DRAB_1;
+			case _I(O,L,I,V,E, ,D,R,A,B, ,1):
+				return alpha | X11_OLIVE_DRAB_1;
+			case _I(O,L,I,V,E,D,R,A,B,2):
+				return alpha | X11_OLIVE_DRAB_2;
+			case _I(O,L,I,V,E,_,D,R,A,B,_,2):
+				return alpha | X11_OLIVE_DRAB_2;
+			case _I(O,L,I,V,E, ,D,R,A,B, ,2):
+				return alpha | X11_OLIVE_DRAB_2;
+			case _I(O,L,I,V,E,D,R,A,B,3):
+				return alpha | X11_OLIVE_DRAB_3;
+			case _I(O,L,I,V,E,_,D,R,A,B,_,3):
+				return alpha | X11_OLIVE_DRAB_3;
+			case _I(O,L,I,V,E, ,D,R,A,B, ,3):
+				return alpha | X11_OLIVE_DRAB_3;
+			case _I(O,L,I,V,E,D,R,A,B,4):
+				return alpha | X11_OLIVE_DRAB_4;
+			case _I(O,L,I,V,E,_,D,R,A,B,_,4):
+				return alpha | X11_OLIVE_DRAB_4;
+			case _I(O,L,I,V,E, ,D,R,A,B, ,4):
+				return alpha | X11_OLIVE_DRAB_4;
+			case _I(D,A,R,K,O,L,I,V,E,G,R,E,E,N,1):
+				return alpha | X11_DARK_OLIVE_GREEN_1;
+			case _I(D,A,R,K,_,O,L,I,V,E,_,G,R,E,E,N,_,1):
+				return alpha | X11_DARK_OLIVE_GREEN_1;
+			case _I(D,A,R,K, ,O,L,I,V,E, ,G,R,E,E,N, ,1):
+				return alpha | X11_DARK_OLIVE_GREEN_1;
+			case _I(D,A,R,K,O,L,I,V,E,G,R,E,E,N,2):
+				return alpha | X11_DARK_OLIVE_GREEN_2;
+			case _I(D,A,R,K,_,O,L,I,V,E,_,G,R,E,E,N,_,2):
+				return alpha | X11_DARK_OLIVE_GREEN_2;
+			case _I(D,A,R,K, ,O,L,I,V,E, ,G,R,E,E,N, ,2):
+				return alpha | X11_DARK_OLIVE_GREEN_2;
+			case _I(D,A,R,K,O,L,I,V,E,G,R,E,E,N,3):
+				return alpha | X11_DARK_OLIVE_GREEN_3;
+			case _I(D,A,R,K,_,O,L,I,V,E,_,G,R,E,E,N,_,3):
+				return alpha | X11_DARK_OLIVE_GREEN_3;
+			case _I(D,A,R,K, ,O,L,I,V,E, ,G,R,E,E,N, ,3):
+				return alpha | X11_DARK_OLIVE_GREEN_3;
+			case _I(D,A,R,K,O,L,I,V,E,G,R,E,E,N,4):
+				return alpha | X11_DARK_OLIVE_GREEN_4;
+			case _I(D,A,R,K,_,O,L,I,V,E,_,G,R,E,E,N,_,4):
+				return alpha | X11_DARK_OLIVE_GREEN_4;
+			case _I(D,A,R,K, ,O,L,I,V,E, ,G,R,E,E,N, ,4):
+				return alpha | X11_DARK_OLIVE_GREEN_4;
+			case _I(K,H,A,K,I,1):
+				return alpha | X11_KHAKI_1;
+			case _I(K,H,A,K,I,_,1):
+				return alpha | X11_KHAKI_1;
+			case _I(K,H,A,K,I, ,1):
+				return alpha | X11_KHAKI_1;
+			case _I(K,H,A,K,I,2):
+				return alpha | X11_KHAKI_2;
+			case _I(K,H,A,K,I,_,2):
+				return alpha | X11_KHAKI_2;
+			case _I(K,H,A,K,I, ,2):
+				return alpha | X11_KHAKI_2;
+			case _I(K,H,A,K,I,3):
+				return alpha | X11_KHAKI_3;
+			case _I(K,H,A,K,I,_,3):
+				return alpha | X11_KHAKI_3;
+			case _I(K,H,A,K,I, ,3):
+				return alpha | X11_KHAKI_3;
+			case _I(K,H,A,K,I,4):
+				return alpha | X11_KHAKI_4;
+			case _I(K,H,A,K,I,_,4):
+				return alpha | X11_KHAKI_4;
+			case _I(K,H,A,K,I, ,4):
+				return alpha | X11_KHAKI_4;
+			case _I(L,I,G,H,T,G,O,L,D,E,N,R,O,D,1):
+				return alpha | X11_LIGHT_GOLDENROD_1;
+			case _I(L,I,G,H,T,_,G,O,L,D,E,N,R,O,D,_,1):
+				return alpha | X11_LIGHT_GOLDENROD_1;
+			case _I(L,I,G,H,T, ,G,O,L,D,E,N,R,O,D, ,1):
+				return alpha | X11_LIGHT_GOLDENROD_1;
+			case _I(L,I,G,H,T,G,O,L,D,E,N,R,O,D,2):
+				return alpha | X11_LIGHT_GOLDENROD_2;
+			case _I(L,I,G,H,T,_,G,O,L,D,E,N,R,O,D,_,2):
+				return alpha | X11_LIGHT_GOLDENROD_2;
+			case _I(L,I,G,H,T, ,G,O,L,D,E,N,R,O,D, ,2):
+				return alpha | X11_LIGHT_GOLDENROD_2;
+			case _I(L,I,G,H,T,G,O,L,D,E,N,R,O,D,3):
+				return alpha | X11_LIGHT_GOLDENROD_3;
+			case _I(L,I,G,H,T,_,G,O,L,D,E,N,R,O,D,_,3):
+				return alpha | X11_LIGHT_GOLDENROD_3;
+			case _I(L,I,G,H,T, ,G,O,L,D,E,N,R,O,D, ,3):
+				return alpha | X11_LIGHT_GOLDENROD_3;
+			case _I(L,I,G,H,T,G,O,L,D,E,N,R,O,D,4):
+				return alpha | X11_LIGHT_GOLDENROD_4;
+			case _I(L,I,G,H,T,_,G,O,L,D,E,N,R,O,D,_,4):
+				return alpha | X11_LIGHT_GOLDENROD_4;
+			case _I(L,I,G,H,T, ,G,O,L,D,E,N,R,O,D, ,4):
+				return alpha | X11_LIGHT_GOLDENROD_4;
+			case _I(L,I,G,H,T,Y,E,L,L,O,W,1):
+				return alpha | X11_LIGHT_YELLOW_1;
+			case _I(L,I,G,H,T,_,Y,E,L,L,O,W,_,1):
+				return alpha | X11_LIGHT_YELLOW_1;
+			case _I(L,I,G,H,T, ,Y,E,L,L,O,W, ,1):
+				return alpha | X11_LIGHT_YELLOW_1;
+			case _I(L,I,G,H,T,Y,E,L,L,O,W,2):
+				return alpha | X11_LIGHT_YELLOW_2;
+			case _I(L,I,G,H,T,_,Y,E,L,L,O,W,_,2):
+				return alpha | X11_LIGHT_YELLOW_2;
+			case _I(L,I,G,H,T, ,Y,E,L,L,O,W, ,2):
+				return alpha | X11_LIGHT_YELLOW_2;
+			case _I(L,I,G,H,T,Y,E,L,L,O,W,3):
+				return alpha | X11_LIGHT_YELLOW_3;
+			case _I(L,I,G,H,T,_,Y,E,L,L,O,W,_,3):
+				return alpha | X11_LIGHT_YELLOW_3;
+			case _I(L,I,G,H,T, ,Y,E,L,L,O,W, ,3):
+				return alpha | X11_LIGHT_YELLOW_3;
+			case _I(L,I,G,H,T,Y,E,L,L,O,W,4):
+				return alpha | X11_LIGHT_YELLOW_4;
+			case _I(L,I,G,H,T,_,Y,E,L,L,O,W,_,4):
+				return alpha | X11_LIGHT_YELLOW_4;
+			case _I(L,I,G,H,T, ,Y,E,L,L,O,W, ,4):
+				return alpha | X11_LIGHT_YELLOW_4;
+			case _I(Y,E,L,L,O,W,1):
+				return alpha | X11_YELLOW_1;
+			case _I(Y,E,L,L,O,W,_,1):
+				return alpha | X11_YELLOW_1;
+			case _I(Y,E,L,L,O,W, ,1):
+				return alpha | X11_YELLOW_1;
+			case _I(Y,E,L,L,O,W,2):
+				return alpha | X11_YELLOW_2;
+			case _I(Y,E,L,L,O,W,_,2):
+				return alpha | X11_YELLOW_2;
+			case _I(Y,E,L,L,O,W, ,2):
+				return alpha | X11_YELLOW_2;
+			case _I(Y,E,L,L,O,W,3):
+				return alpha | X11_YELLOW_3;
+			case _I(Y,E,L,L,O,W,_,3):
+				return alpha | X11_YELLOW_3;
+			case _I(Y,E,L,L,O,W, ,3):
+				return alpha | X11_YELLOW_3;
+			case _I(Y,E,L,L,O,W,4):
+				return alpha | X11_YELLOW_4;
+			case _I(Y,E,L,L,O,W,_,4):
+				return alpha | X11_YELLOW_4;
+			case _I(Y,E,L,L,O,W, ,4):
+				return alpha | X11_YELLOW_4;
+			case _I(G,O,L,D,1):
+				return alpha | X11_GOLD_1;
+			case _I(G,O,L,D,_,1):
+				return alpha | X11_GOLD_1;
+			case _I(G,O,L,D, ,1):
+				return alpha | X11_GOLD_1;
+			case _I(G,O,L,D,2):
+				return alpha | X11_GOLD_2;
+			case _I(G,O,L,D,_,2):
+				return alpha | X11_GOLD_2;
+			case _I(G,O,L,D, ,2):
+				return alpha | X11_GOLD_2;
+			case _I(G,O,L,D,3):
+				return alpha | X11_GOLD_3;
+			case _I(G,O,L,D,_,3):
+				return alpha | X11_GOLD_3;
+			case _I(G,O,L,D, ,3):
+				return alpha | X11_GOLD_3;
+			case _I(G,O,L,D,4):
+				return alpha | X11_GOLD_4;
+			case _I(G,O,L,D,_,4):
+				return alpha | X11_GOLD_4;
+			case _I(G,O,L,D, ,4):
+				return alpha | X11_GOLD_4;
+			case _I(G,O,L,D,E,N,R,O,D,1):
+				return alpha | X11_GOLDENROD_1;
+			case _I(G,O,L,D,E,N,R,O,D,_,1):
+				return alpha | X11_GOLDENROD_1;
+			case _I(G,O,L,D,E,N,R,O,D, ,1):
+				return alpha | X11_GOLDENROD_1;
+			case _I(G,O,L,D,E,N,R,O,D,2):
+				return alpha | X11_GOLDENROD_2;
+			case _I(G,O,L,D,E,N,R,O,D,_,2):
+				return alpha | X11_GOLDENROD_2;
+			case _I(G,O,L,D,E,N,R,O,D, ,2):
+				return alpha | X11_GOLDENROD_2;
+			case _I(G,O,L,D,E,N,R,O,D,3):
+				return alpha | X11_GOLDENROD_3;
+			case _I(G,O,L,D,E,N,R,O,D,_,3):
+				return alpha | X11_GOLDENROD_3;
+			case _I(G,O,L,D,E,N,R,O,D, ,3):
+				return alpha | X11_GOLDENROD_3;
+			case _I(G,O,L,D,E,N,R,O,D,4):
+				return alpha | X11_GOLDENROD_4;
+			case _I(G,O,L,D,E,N,R,O,D,_,4):
+				return alpha | X11_GOLDENROD_4;
+			case _I(G,O,L,D,E,N,R,O,D, ,4):
+				return alpha | X11_GOLDENROD_4;
+			case _I(D,A,R,K,G,O,L,D,E,N,R,O,D,1):
+				return alpha | X11_DARK_GOLDENROD_1;
+			case _I(D,A,R,K,_,G,O,L,D,E,N,R,O,D,_,1):
+				return alpha | X11_DARK_GOLDENROD_1;
+			case _I(D,A,R,K, ,G,O,L,D,E,N,R,O,D, ,1):
+				return alpha | X11_DARK_GOLDENROD_1;
+			case _I(D,A,R,K,G,O,L,D,E,N,R,O,D,2):
+				return alpha | X11_DARK_GOLDENROD_2;
+			case _I(D,A,R,K,_,G,O,L,D,E,N,R,O,D,_,2):
+				return alpha | X11_DARK_GOLDENROD_2;
+			case _I(D,A,R,K, ,G,O,L,D,E,N,R,O,D, ,2):
+				return alpha | X11_DARK_GOLDENROD_2;
+			case _I(D,A,R,K,G,O,L,D,E,N,R,O,D,3):
+				return alpha | X11_DARK_GOLDENROD_3;
+			case _I(D,A,R,K,_,G,O,L,D,E,N,R,O,D,_,3):
+				return alpha | X11_DARK_GOLDENROD_3;
+			case _I(D,A,R,K, ,G,O,L,D,E,N,R,O,D, ,3):
+				return alpha | X11_DARK_GOLDENROD_3;
+			case _I(D,A,R,K,G,O,L,D,E,N,R,O,D,4):
+				return alpha | X11_DARK_GOLDENROD_4;
+			case _I(D,A,R,K,_,G,O,L,D,E,N,R,O,D,_,4):
+				return alpha | X11_DARK_GOLDENROD_4;
+			case _I(D,A,R,K, ,G,O,L,D,E,N,R,O,D, ,4):
+				return alpha | X11_DARK_GOLDENROD_4;
+			case _I(R,O,S,Y,B,R,O,W,N,1):
+				return alpha | X11_ROSY_BROWN_1;
+			case _I(R,O,S,Y,_,B,R,O,W,N,_,1):
+				return alpha | X11_ROSY_BROWN_1;
+			case _I(R,O,S,Y, ,B,R,O,W,N, ,1):
+				return alpha | X11_ROSY_BROWN_1;
+			case _I(R,O,S,Y,B,R,O,W,N,2):
+				return alpha | X11_ROSY_BROWN_2;
+			case _I(R,O,S,Y,_,B,R,O,W,N,_,2):
+				return alpha | X11_ROSY_BROWN_2;
+			case _I(R,O,S,Y, ,B,R,O,W,N, ,2):
+				return alpha | X11_ROSY_BROWN_2;
+			case _I(R,O,S,Y,B,R,O,W,N,3):
+				return alpha | X11_ROSY_BROWN_3;
+			case _I(R,O,S,Y,_,B,R,O,W,N,_,3):
+				return alpha | X11_ROSY_BROWN_3;
+			case _I(R,O,S,Y, ,B,R,O,W,N, ,3):
+				return alpha | X11_ROSY_BROWN_3;
+			case _I(R,O,S,Y,B,R,O,W,N,4):
+				return alpha | X11_ROSY_BROWN_4;
+			case _I(R,O,S,Y,_,B,R,O,W,N,_,4):
+				return alpha | X11_ROSY_BROWN_4;
+			case _I(R,O,S,Y, ,B,R,O,W,N, ,4):
+				return alpha | X11_ROSY_BROWN_4;
+			case _I(I,N,D,I,A,N,R,E,D,1):
+				return alpha | X11_INDIAN_RED_1;
+			case _I(I,N,D,I,A,N,_,R,E,D,_,1):
+				return alpha | X11_INDIAN_RED_1;
+			case _I(I,N,D,I,A,N, ,R,E,D, ,1):
+				return alpha | X11_INDIAN_RED_1;
+			case _I(I,N,D,I,A,N,R,E,D,2):
+				return alpha | X11_INDIAN_RED_2;
+			case _I(I,N,D,I,A,N,_,R,E,D,_,2):
+				return alpha | X11_INDIAN_RED_2;
+			case _I(I,N,D,I,A,N, ,R,E,D, ,2):
+				return alpha | X11_INDIAN_RED_2;
+			case _I(I,N,D,I,A,N,R,E,D,3):
+				return alpha | X11_INDIAN_RED_3;
+			case _I(I,N,D,I,A,N,_,R,E,D,_,3):
+				return alpha | X11_INDIAN_RED_3;
+			case _I(I,N,D,I,A,N, ,R,E,D, ,3):
+				return alpha | X11_INDIAN_RED_3;
+			case _I(I,N,D,I,A,N,R,E,D,4):
+				return alpha | X11_INDIAN_RED_4;
+			case _I(I,N,D,I,A,N,_,R,E,D,_,4):
+				return alpha | X11_INDIAN_RED_4;
+			case _I(I,N,D,I,A,N, ,R,E,D, ,4):
+				return alpha | X11_INDIAN_RED_4;
+			case _I(S,I,E,N,N,A,1):
+				return alpha | X11_SIENNA_1;
+			case _I(S,I,E,N,N,A,_,1):
+				return alpha | X11_SIENNA_1;
+			case _I(S,I,E,N,N,A, ,1):
+				return alpha | X11_SIENNA_1;
+			case _I(S,I,E,N,N,A,2):
+				return alpha | X11_SIENNA_2;
+			case _I(S,I,E,N,N,A,_,2):
+				return alpha | X11_SIENNA_2;
+			case _I(S,I,E,N,N,A, ,2):
+				return alpha | X11_SIENNA_2;
+			case _I(S,I,E,N,N,A,3):
+				return alpha | X11_SIENNA_3;
+			case _I(S,I,E,N,N,A,_,3):
+				return alpha | X11_SIENNA_3;
+			case _I(S,I,E,N,N,A, ,3):
+				return alpha | X11_SIENNA_3;
+			case _I(S,I,E,N,N,A,4):
+				return alpha | X11_SIENNA_4;
+			case _I(S,I,E,N,N,A,_,4):
+				return alpha | X11_SIENNA_4;
+			case _I(S,I,E,N,N,A, ,4):
+				return alpha | X11_SIENNA_4;
+			case _I(B,U,R,L,Y,W,O,O,D,1):
+				return alpha | X11_BURLYWOOD_1;
+			case _I(B,U,R,L,Y,W,O,O,D,_,1):
+				return alpha | X11_BURLYWOOD_1;
+			case _I(B,U,R,L,Y,W,O,O,D, ,1):
+				return alpha | X11_BURLYWOOD_1;
+			case _I(B,U,R,L,Y,W,O,O,D,2):
+				return alpha | X11_BURLYWOOD_2;
+			case _I(B,U,R,L,Y,W,O,O,D,_,2):
+				return alpha | X11_BURLYWOOD_2;
+			case _I(B,U,R,L,Y,W,O,O,D, ,2):
+				return alpha | X11_BURLYWOOD_2;
+			case _I(B,U,R,L,Y,W,O,O,D,3):
+				return alpha | X11_BURLYWOOD_3;
+			case _I(B,U,R,L,Y,W,O,O,D,_,3):
+				return alpha | X11_BURLYWOOD_3;
+			case _I(B,U,R,L,Y,W,O,O,D, ,3):
+				return alpha | X11_BURLYWOOD_3;
+			case _I(B,U,R,L,Y,W,O,O,D,4):
+				return alpha | X11_BURLYWOOD_4;
+			case _I(B,U,R,L,Y,W,O,O,D,_,4):
+				return alpha | X11_BURLYWOOD_4;
+			case _I(B,U,R,L,Y,W,O,O,D, ,4):
+				return alpha | X11_BURLYWOOD_4;
+			case _I(W,H,E,A,T,1):
+				return alpha | X11_WHEAT_1;
+			case _I(W,H,E,A,T,_,1):
+				return alpha | X11_WHEAT_1;
+			case _I(W,H,E,A,T, ,1):
+				return alpha | X11_WHEAT_1;
+			case _I(W,H,E,A,T,2):
+				return alpha | X11_WHEAT_2;
+			case _I(W,H,E,A,T,_,2):
+				return alpha | X11_WHEAT_2;
+			case _I(W,H,E,A,T, ,2):
+				return alpha | X11_WHEAT_2;
+			case _I(W,H,E,A,T,3):
+				return alpha | X11_WHEAT_3;
+			case _I(W,H,E,A,T,_,3):
+				return alpha | X11_WHEAT_3;
+			case _I(W,H,E,A,T, ,3):
+				return alpha | X11_WHEAT_3;
+			case _I(W,H,E,A,T,4):
+				return alpha | X11_WHEAT_4;
+			case _I(W,H,E,A,T,_,4):
+				return alpha | X11_WHEAT_4;
+			case _I(W,H,E,A,T, ,4):
+				return alpha | X11_WHEAT_4;
+			case _I(T,A,N,1):
+				return alpha | X11_TAN_1;
+			case _I(T,A,N,_,1):
+				return alpha | X11_TAN_1;
+			case _I(T,A,N, ,1):
+				return alpha | X11_TAN_1;
+			case _I(T,A,N,2):
+				return alpha | X11_TAN_2;
+			case _I(T,A,N,_,2):
+				return alpha | X11_TAN_2;
+			case _I(T,A,N, ,2):
+				return alpha | X11_TAN_2;
+			case _I(T,A,N,3):
+				return alpha | X11_TAN_3;
+			case _I(T,A,N,_,3):
+				return alpha | X11_TAN_3;
+			case _I(T,A,N, ,3):
+				return alpha | X11_TAN_3;
+			case _I(T,A,N,4):
+				return alpha | X11_TAN_4;
+			case _I(T,A,N,_,4):
+				return alpha | X11_TAN_4;
+			case _I(T,A,N, ,4):
+				return alpha | X11_TAN_4;
+			case _I(C,H,O,C,O,L,A,T,E,1):
+				return alpha | X11_CHOCOLATE_1;
+			case _I(C,H,O,C,O,L,A,T,E,_,1):
+				return alpha | X11_CHOCOLATE_1;
+			case _I(C,H,O,C,O,L,A,T,E, ,1):
+				return alpha | X11_CHOCOLATE_1;
+			case _I(C,H,O,C,O,L,A,T,E,2):
+				return alpha | X11_CHOCOLATE_2;
+			case _I(C,H,O,C,O,L,A,T,E,_,2):
+				return alpha | X11_CHOCOLATE_2;
+			case _I(C,H,O,C,O,L,A,T,E, ,2):
+				return alpha | X11_CHOCOLATE_2;
+			case _I(C,H,O,C,O,L,A,T,E,3):
+				return alpha | X11_CHOCOLATE_3;
+			case _I(C,H,O,C,O,L,A,T,E,_,3):
+				return alpha | X11_CHOCOLATE_3;
+			case _I(C,H,O,C,O,L,A,T,E, ,3):
+				return alpha | X11_CHOCOLATE_3;
+			case _I(C,H,O,C,O,L,A,T,E,4):
+				return alpha | X11_CHOCOLATE_4;
+			case _I(C,H,O,C,O,L,A,T,E,_,4):
+				return alpha | X11_CHOCOLATE_4;
+			case _I(C,H,O,C,O,L,A,T,E, ,4):
+				return alpha | X11_CHOCOLATE_4;
+			case _I(F,I,R,E,B,R,I,C,K,1):
+				return alpha | X11_FIREBRICK_1;
+			case _I(F,I,R,E,B,R,I,C,K,_,1):
+				return alpha | X11_FIREBRICK_1;
+			case _I(F,I,R,E,B,R,I,C,K, ,1):
+				return alpha | X11_FIREBRICK_1;
+			case _I(F,I,R,E,B,R,I,C,K,2):
+				return alpha | X11_FIREBRICK_2;
+			case _I(F,I,R,E,B,R,I,C,K,_,2):
+				return alpha | X11_FIREBRICK_2;
+			case _I(F,I,R,E,B,R,I,C,K, ,2):
+				return alpha | X11_FIREBRICK_2;
+			case _I(F,I,R,E,B,R,I,C,K,3):
+				return alpha | X11_FIREBRICK_3;
+			case _I(F,I,R,E,B,R,I,C,K,_,3):
+				return alpha | X11_FIREBRICK_3;
+			case _I(F,I,R,E,B,R,I,C,K, ,3):
+				return alpha | X11_FIREBRICK_3;
+			case _I(F,I,R,E,B,R,I,C,K,4):
+				return alpha | X11_FIREBRICK_4;
+			case _I(F,I,R,E,B,R,I,C,K,_,4):
+				return alpha | X11_FIREBRICK_4;
+			case _I(F,I,R,E,B,R,I,C,K, ,4):
+				return alpha | X11_FIREBRICK_4;
+			case _I(B,R,O,W,N,1):
+				return alpha | X11_BROWN_1;
+			case _I(B,R,O,W,N,_,1):
+				return alpha | X11_BROWN_1;
+			case _I(B,R,O,W,N, ,1):
+				return alpha | X11_BROWN_1;
+			case _I(B,R,O,W,N,2):
+				return alpha | X11_BROWN_2;
+			case _I(B,R,O,W,N,_,2):
+				return alpha | X11_BROWN_2;
+			case _I(B,R,O,W,N, ,2):
+				return alpha | X11_BROWN_2;
+			case _I(B,R,O,W,N,3):
+				return alpha | X11_BROWN_3;
+			case _I(B,R,O,W,N,_,3):
+				return alpha | X11_BROWN_3;
+			case _I(B,R,O,W,N, ,3):
+				return alpha | X11_BROWN_3;
+			case _I(B,R,O,W,N,4):
+				return alpha | X11_BROWN_4;
+			case _I(B,R,O,W,N,_,4):
+				return alpha | X11_BROWN_4;
+			case _I(B,R,O,W,N, ,4):
+				return alpha | X11_BROWN_4;
+			case _I(S,A,L,M,O,N,1):
+				return alpha | X11_SALMON_1;
+			case _I(S,A,L,M,O,N,_,1):
+				return alpha | X11_SALMON_1;
+			case _I(S,A,L,M,O,N, ,1):
+				return alpha | X11_SALMON_1;
+			case _I(S,A,L,M,O,N,2):
+				return alpha | X11_SALMON_2;
+			case _I(S,A,L,M,O,N,_,2):
+				return alpha | X11_SALMON_2;
+			case _I(S,A,L,M,O,N, ,2):
+				return alpha | X11_SALMON_2;
+			case _I(S,A,L,M,O,N,3):
+				return alpha | X11_SALMON_3;
+			case _I(S,A,L,M,O,N,_,3):
+				return alpha | X11_SALMON_3;
+			case _I(S,A,L,M,O,N, ,3):
+				return alpha | X11_SALMON_3;
+			case _I(S,A,L,M,O,N,4):
+				return alpha | X11_SALMON_4;
+			case _I(S,A,L,M,O,N,_,4):
+				return alpha | X11_SALMON_4;
+			case _I(S,A,L,M,O,N, ,4):
+				return alpha | X11_SALMON_4;
+			case _I(L,I,G,H,T,S,A,L,M,O,N,1):
+				return alpha | X11_LIGHT_SALMON_1;
+			case _I(L,I,G,H,T,_,S,A,L,M,O,N,_,1):
+				return alpha | X11_LIGHT_SALMON_1;
+			case _I(L,I,G,H,T, ,S,A,L,M,O,N, ,1):
+				return alpha | X11_LIGHT_SALMON_1;
+			case _I(L,I,G,H,T,S,A,L,M,O,N,2):
+				return alpha | X11_LIGHT_SALMON_2;
+			case _I(L,I,G,H,T,_,S,A,L,M,O,N,_,2):
+				return alpha | X11_LIGHT_SALMON_2;
+			case _I(L,I,G,H,T, ,S,A,L,M,O,N, ,2):
+				return alpha | X11_LIGHT_SALMON_2;
+			case _I(L,I,G,H,T,S,A,L,M,O,N,3):
+				return alpha | X11_LIGHT_SALMON_3;
+			case _I(L,I,G,H,T,_,S,A,L,M,O,N,_,3):
+				return alpha | X11_LIGHT_SALMON_3;
+			case _I(L,I,G,H,T, ,S,A,L,M,O,N, ,3):
+				return alpha | X11_LIGHT_SALMON_3;
+			case _I(L,I,G,H,T,S,A,L,M,O,N,4):
+				return alpha | X11_LIGHT_SALMON_4;
+			case _I(L,I,G,H,T,_,S,A,L,M,O,N,_,4):
+				return alpha | X11_LIGHT_SALMON_4;
+			case _I(L,I,G,H,T, ,S,A,L,M,O,N, ,4):
+				return alpha | X11_LIGHT_SALMON_4;
+			case _I(O,R,A,N,G,E,1):
+				return alpha | X11_ORANGE_1;
+			case _I(O,R,A,N,G,E,_,1):
+				return alpha | X11_ORANGE_1;
+			case _I(O,R,A,N,G,E, ,1):
+				return alpha | X11_ORANGE_1;
+			case _I(O,R,A,N,G,E,2):
+				return alpha | X11_ORANGE_2;
+			case _I(O,R,A,N,G,E,_,2):
+				return alpha | X11_ORANGE_2;
+			case _I(O,R,A,N,G,E, ,2):
+				return alpha | X11_ORANGE_2;
+			case _I(O,R,A,N,G,E,3):
+				return alpha | X11_ORANGE_3;
+			case _I(O,R,A,N,G,E,_,3):
+				return alpha | X11_ORANGE_3;
+			case _I(O,R,A,N,G,E, ,3):
+				return alpha | X11_ORANGE_3;
+			case _I(O,R,A,N,G,E,4):
+				return alpha | X11_ORANGE_4;
+			case _I(O,R,A,N,G,E,_,4):
+				return alpha | X11_ORANGE_4;
+			case _I(O,R,A,N,G,E, ,4):
+				return alpha | X11_ORANGE_4;
+			case _I(D,A,R,K,O,R,A,N,G,E,1):
+				return alpha | X11_DARK_ORANGE_1;
+			case _I(D,A,R,K,_,O,R,A,N,G,E,_,1):
+				return alpha | X11_DARK_ORANGE_1;
+			case _I(D,A,R,K, ,O,R,A,N,G,E, ,1):
+				return alpha | X11_DARK_ORANGE_1;
+			case _I(D,A,R,K,O,R,A,N,G,E,2):
+				return alpha | X11_DARK_ORANGE_2;
+			case _I(D,A,R,K,_,O,R,A,N,G,E,_,2):
+				return alpha | X11_DARK_ORANGE_2;
+			case _I(D,A,R,K, ,O,R,A,N,G,E, ,2):
+				return alpha | X11_DARK_ORANGE_2;
+			case _I(D,A,R,K,O,R,A,N,G,E,3):
+				return alpha | X11_DARK_ORANGE_3;
+			case _I(D,A,R,K,_,O,R,A,N,G,E,_,3):
+				return alpha | X11_DARK_ORANGE_3;
+			case _I(D,A,R,K, ,O,R,A,N,G,E, ,3):
+				return alpha | X11_DARK_ORANGE_3;
+			case _I(D,A,R,K,O,R,A,N,G,E,4):
+				return alpha | X11_DARK_ORANGE_4;
+			case _I(D,A,R,K,_,O,R,A,N,G,E,_,4):
+				return alpha | X11_DARK_ORANGE_4;
+			case _I(D,A,R,K, ,O,R,A,N,G,E, ,4):
+				return alpha | X11_DARK_ORANGE_4;
+			case _I(C,O,R,A,L,1):
+				return alpha | X11_CORAL_1;
+			case _I(C,O,R,A,L,_,1):
+				return alpha | X11_CORAL_1;
+			case _I(C,O,R,A,L, ,1):
+				return alpha | X11_CORAL_1;
+			case _I(C,O,R,A,L,2):
+				return alpha | X11_CORAL_2;
+			case _I(C,O,R,A,L,_,2):
+				return alpha | X11_CORAL_2;
+			case _I(C,O,R,A,L, ,2):
+				return alpha | X11_CORAL_2;
+			case _I(C,O,R,A,L,3):
+				return alpha | X11_CORAL_3;
+			case _I(C,O,R,A,L,_,3):
+				return alpha | X11_CORAL_3;
+			case _I(C,O,R,A,L, ,3):
+				return alpha | X11_CORAL_3;
+			case _I(C,O,R,A,L,4):
+				return alpha | X11_CORAL_4;
+			case _I(C,O,R,A,L,_,4):
+				return alpha | X11_CORAL_4;
+			case _I(C,O,R,A,L, ,4):
+				return alpha | X11_CORAL_4;
+			case _I(T,O,M,A,T,O,1):
+				return alpha | X11_TOMATO_1;
+			case _I(T,O,M,A,T,O,_,1):
+				return alpha | X11_TOMATO_1;
+			case _I(T,O,M,A,T,O, ,1):
+				return alpha | X11_TOMATO_1;
+			case _I(T,O,M,A,T,O,2):
+				return alpha | X11_TOMATO_2;
+			case _I(T,O,M,A,T,O,_,2):
+				return alpha | X11_TOMATO_2;
+			case _I(T,O,M,A,T,O, ,2):
+				return alpha | X11_TOMATO_2;
+			case _I(T,O,M,A,T,O,3):
+				return alpha | X11_TOMATO_3;
+			case _I(T,O,M,A,T,O,_,3):
+				return alpha | X11_TOMATO_3;
+			case _I(T,O,M,A,T,O, ,3):
+				return alpha | X11_TOMATO_3;
+			case _I(T,O,M,A,T,O,4):
+				return alpha | X11_TOMATO_4;
+			case _I(T,O,M,A,T,O,_,4):
+				return alpha | X11_TOMATO_4;
+			case _I(T,O,M,A,T,O, ,4):
+				return alpha | X11_TOMATO_4;
+			case _I(O,R,A,N,G,E,R,E,D,1):
+				return alpha | X11_ORANGE_RED_1;
+			case _I(O,R,A,N,G,E,_,R,E,D,_,1):
+				return alpha | X11_ORANGE_RED_1;
+			case _I(O,R,A,N,G,E, ,R,E,D, ,1):
+				return alpha | X11_ORANGE_RED_1;
+			case _I(O,R,A,N,G,E,R,E,D,2):
+				return alpha | X11_ORANGE_RED_2;
+			case _I(O,R,A,N,G,E,_,R,E,D,_,2):
+				return alpha | X11_ORANGE_RED_2;
+			case _I(O,R,A,N,G,E, ,R,E,D, ,2):
+				return alpha | X11_ORANGE_RED_2;
+			case _I(O,R,A,N,G,E,R,E,D,3):
+				return alpha | X11_ORANGE_RED_3;
+			case _I(O,R,A,N,G,E,_,R,E,D,_,3):
+				return alpha | X11_ORANGE_RED_3;
+			case _I(O,R,A,N,G,E, ,R,E,D, ,3):
+				return alpha | X11_ORANGE_RED_3;
+			case _I(O,R,A,N,G,E,R,E,D,4):
+				return alpha | X11_ORANGE_RED_4;
+			case _I(O,R,A,N,G,E,_,R,E,D,_,4):
+				return alpha | X11_ORANGE_RED_4;
+			case _I(O,R,A,N,G,E, ,R,E,D, ,4):
+				return alpha | X11_ORANGE_RED_4;
+			case _I(R,E,D,1):
+				return alpha | X11_RED_1;
+			case _I(R,E,D,_,1):
+				return alpha | X11_RED_1;
+			case _I(R,E,D, ,1):
+				return alpha | X11_RED_1;
+			case _I(R,E,D,2):
+				return alpha | X11_RED_2;
+			case _I(R,E,D,_,2):
+				return alpha | X11_RED_2;
+			case _I(R,E,D, ,2):
+				return alpha | X11_RED_2;
+			case _I(R,E,D,3):
+				return alpha | X11_RED_3;
+			case _I(R,E,D,_,3):
+				return alpha | X11_RED_3;
+			case _I(R,E,D, ,3):
+				return alpha | X11_RED_3;
+			case _I(R,E,D,4):
+				return alpha | X11_RED_4;
+			case _I(R,E,D,_,4):
+				return alpha | X11_RED_4;
+			case _I(R,E,D, ,4):
+				return alpha | X11_RED_4;
+			case _I(D,E,E,P,P,I,N,K,1):
+				return alpha | X11_DEEP_PINK_1;
+			case _I(D,E,E,P,_,P,I,N,K,_,1):
+				return alpha | X11_DEEP_PINK_1;
+			case _I(D,E,E,P, ,P,I,N,K, ,1):
+				return alpha | X11_DEEP_PINK_1;
+			case _I(D,E,E,P,P,I,N,K,2):
+				return alpha | X11_DEEP_PINK_2;
+			case _I(D,E,E,P,_,P,I,N,K,_,2):
+				return alpha | X11_DEEP_PINK_2;
+			case _I(D,E,E,P, ,P,I,N,K, ,2):
+				return alpha | X11_DEEP_PINK_2;
+			case _I(D,E,E,P,P,I,N,K,3):
+				return alpha | X11_DEEP_PINK_3;
+			case _I(D,E,E,P,_,P,I,N,K,_,3):
+				return alpha | X11_DEEP_PINK_3;
+			case _I(D,E,E,P, ,P,I,N,K, ,3):
+				return alpha | X11_DEEP_PINK_3;
+			case _I(D,E,E,P,P,I,N,K,4):
+				return alpha | X11_DEEP_PINK_4;
+			case _I(D,E,E,P,_,P,I,N,K,_,4):
+				return alpha | X11_DEEP_PINK_4;
+			case _I(D,E,E,P, ,P,I,N,K, ,4):
+				return alpha | X11_DEEP_PINK_4;
+			case _I(H,O,T,P,I,N,K,1):
+				return alpha | X11_HOT_PINK_1;
+			case _I(H,O,T,_,P,I,N,K,_,1):
+				return alpha | X11_HOT_PINK_1;
+			case _I(H,O,T, ,P,I,N,K, ,1):
+				return alpha | X11_HOT_PINK_1;
+			case _I(H,O,T,P,I,N,K,2):
+				return alpha | X11_HOT_PINK_2;
+			case _I(H,O,T,_,P,I,N,K,_,2):
+				return alpha | X11_HOT_PINK_2;
+			case _I(H,O,T, ,P,I,N,K, ,2):
+				return alpha | X11_HOT_PINK_2;
+			case _I(H,O,T,P,I,N,K,3):
+				return alpha | X11_HOT_PINK_3;
+			case _I(H,O,T,_,P,I,N,K,_,3):
+				return alpha | X11_HOT_PINK_3;
+			case _I(H,O,T, ,P,I,N,K, ,3):
+				return alpha | X11_HOT_PINK_3;
+			case _I(H,O,T,P,I,N,K,4):
+				return alpha | X11_HOT_PINK_4;
+			case _I(H,O,T,_,P,I,N,K,_,4):
+				return alpha | X11_HOT_PINK_4;
+			case _I(H,O,T, ,P,I,N,K, ,4):
+				return alpha | X11_HOT_PINK_4;
+			case _I(P,I,N,K,1):
+				return alpha | X11_PINK_1;
+			case _I(P,I,N,K,_,1):
+				return alpha | X11_PINK_1;
+			case _I(P,I,N,K, ,1):
+				return alpha | X11_PINK_1;
+			case _I(P,I,N,K,2):
+				return alpha | X11_PINK_2;
+			case _I(P,I,N,K,_,2):
+				return alpha | X11_PINK_2;
+			case _I(P,I,N,K, ,2):
+				return alpha | X11_PINK_2;
+			case _I(P,I,N,K,3):
+				return alpha | X11_PINK_3;
+			case _I(P,I,N,K,_,3):
+				return alpha | X11_PINK_3;
+			case _I(P,I,N,K, ,3):
+				return alpha | X11_PINK_3;
+			case _I(P,I,N,K,4):
+				return alpha | X11_PINK_4;
+			case _I(P,I,N,K,_,4):
+				return alpha | X11_PINK_4;
+			case _I(P,I,N,K, ,4):
+				return alpha | X11_PINK_4;
+			case _I(L,I,G,H,T,P,I,N,K,1):
+				return alpha | X11_LIGHT_PINK_1;
+			case _I(L,I,G,H,T,_,P,I,N,K,_,1):
+				return alpha | X11_LIGHT_PINK_1;
+			case _I(L,I,G,H,T, ,P,I,N,K, ,1):
+				return alpha | X11_LIGHT_PINK_1;
+			case _I(L,I,G,H,T,P,I,N,K,2):
+				return alpha | X11_LIGHT_PINK_2;
+			case _I(L,I,G,H,T,_,P,I,N,K,_,2):
+				return alpha | X11_LIGHT_PINK_2;
+			case _I(L,I,G,H,T, ,P,I,N,K, ,2):
+				return alpha | X11_LIGHT_PINK_2;
+			case _I(L,I,G,H,T,P,I,N,K,3):
+				return alpha | X11_LIGHT_PINK_3;
+			case _I(L,I,G,H,T,_,P,I,N,K,_,3):
+				return alpha | X11_LIGHT_PINK_3;
+			case _I(L,I,G,H,T, ,P,I,N,K, ,3):
+				return alpha | X11_LIGHT_PINK_3;
+			case _I(L,I,G,H,T,P,I,N,K,4):
+				return alpha | X11_LIGHT_PINK_4;
+			case _I(L,I,G,H,T,_,P,I,N,K,_,4):
+				return alpha | X11_LIGHT_PINK_4;
+			case _I(L,I,G,H,T, ,P,I,N,K, ,4):
+				return alpha | X11_LIGHT_PINK_4;
+			case _I(P,A,L,E,V,I,O,L,E,T,R,E,D,1):
+				return alpha | X11_PALE_VIOLET_RED_1;
+			case _I(P,A,L,E,_,V,I,O,L,E,T,_,R,E,D,_,1):
+				return alpha | X11_PALE_VIOLET_RED_1;
+			case _I(P,A,L,E, ,V,I,O,L,E,T, ,R,E,D, ,1):
+				return alpha | X11_PALE_VIOLET_RED_1;
+			case _I(P,A,L,E,V,I,O,L,E,T,R,E,D,2):
+				return alpha | X11_PALE_VIOLET_RED_2;
+			case _I(P,A,L,E,_,V,I,O,L,E,T,_,R,E,D,_,2):
+				return alpha | X11_PALE_VIOLET_RED_2;
+			case _I(P,A,L,E, ,V,I,O,L,E,T, ,R,E,D, ,2):
+				return alpha | X11_PALE_VIOLET_RED_2;
+			case _I(P,A,L,E,V,I,O,L,E,T,R,E,D,3):
+				return alpha | X11_PALE_VIOLET_RED_3;
+			case _I(P,A,L,E,_,V,I,O,L,E,T,_,R,E,D,_,3):
+				return alpha | X11_PALE_VIOLET_RED_3;
+			case _I(P,A,L,E, ,V,I,O,L,E,T, ,R,E,D, ,3):
+				return alpha | X11_PALE_VIOLET_RED_3;
+			case _I(P,A,L,E,V,I,O,L,E,T,R,E,D,4):
+				return alpha | X11_PALE_VIOLET_RED_4;
+			case _I(P,A,L,E,_,V,I,O,L,E,T,_,R,E,D,_,4):
+				return alpha | X11_PALE_VIOLET_RED_4;
+			case _I(P,A,L,E, ,V,I,O,L,E,T, ,R,E,D, ,4):
+				return alpha | X11_PALE_VIOLET_RED_4;
+			case _I(M,A,R,O,O,N,1):
+				return alpha | X11_MAROON_1;
+			case _I(M,A,R,O,O,N,_,1):
+				return alpha | X11_MAROON_1;
+			case _I(M,A,R,O,O,N, ,1):
+				return alpha | X11_MAROON_1;
+			case _I(M,A,R,O,O,N,2):
+				return alpha | X11_MAROON_2;
+			case _I(M,A,R,O,O,N,_,2):
+				return alpha | X11_MAROON_2;
+			case _I(M,A,R,O,O,N, ,2):
+				return alpha | X11_MAROON_2;
+			case _I(M,A,R,O,O,N,3):
+				return alpha | X11_MAROON_3;
+			case _I(M,A,R,O,O,N,_,3):
+				return alpha | X11_MAROON_3;
+			case _I(M,A,R,O,O,N, ,3):
+				return alpha | X11_MAROON_3;
+			case _I(M,A,R,O,O,N,4):
+				return alpha | X11_MAROON_4;
+			case _I(M,A,R,O,O,N,_,4):
+				return alpha | X11_MAROON_4;
+			case _I(M,A,R,O,O,N, ,4):
+				return alpha | X11_MAROON_4;
+			case _I(V,I,O,L,E,T,R,E,D,1):
+				return alpha | X11_VIOLET_RED_1;
+			case _I(V,I,O,L,E,T,_,R,E,D,_,1):
+				return alpha | X11_VIOLET_RED_1;
+			case _I(V,I,O,L,E,T, ,R,E,D, ,1):
+				return alpha | X11_VIOLET_RED_1;
+			case _I(V,I,O,L,E,T,R,E,D,2):
+				return alpha | X11_VIOLET_RED_2;
+			case _I(V,I,O,L,E,T,_,R,E,D,_,2):
+				return alpha | X11_VIOLET_RED_2;
+			case _I(V,I,O,L,E,T, ,R,E,D, ,2):
+				return alpha | X11_VIOLET_RED_2;
+			case _I(V,I,O,L,E,T,R,E,D,3):
+				return alpha | X11_VIOLET_RED_3;
+			case _I(V,I,O,L,E,T,_,R,E,D,_,3):
+				return alpha | X11_VIOLET_RED_3;
+			case _I(V,I,O,L,E,T, ,R,E,D, ,3):
+				return alpha | X11_VIOLET_RED_3;
+			case _I(V,I,O,L,E,T,R,E,D,4):
+				return alpha | X11_VIOLET_RED_4;
+			case _I(V,I,O,L,E,T,_,R,E,D,_,4):
+				return alpha | X11_VIOLET_RED_4;
+			case _I(V,I,O,L,E,T, ,R,E,D, ,4):
+				return alpha | X11_VIOLET_RED_4;
+			case _I(M,A,G,E,N,T,A,1):
+				return alpha | X11_MAGENTA_1;
+			case _I(M,A,G,E,N,T,A,_,1):
+				return alpha | X11_MAGENTA_1;
+			case _I(M,A,G,E,N,T,A, ,1):
+				return alpha | X11_MAGENTA_1;
+			case _I(M,A,G,E,N,T,A,2):
+				return alpha | X11_MAGENTA_2;
+			case _I(M,A,G,E,N,T,A,_,2):
+				return alpha | X11_MAGENTA_2;
+			case _I(M,A,G,E,N,T,A, ,2):
+				return alpha | X11_MAGENTA_2;
+			case _I(M,A,G,E,N,T,A,3):
+				return alpha | X11_MAGENTA_3;
+			case _I(M,A,G,E,N,T,A,_,3):
+				return alpha | X11_MAGENTA_3;
+			case _I(M,A,G,E,N,T,A, ,3):
+				return alpha | X11_MAGENTA_3;
+			case _I(M,A,G,E,N,T,A,4):
+				return alpha | X11_MAGENTA_4;
+			case _I(M,A,G,E,N,T,A,_,4):
+				return alpha | X11_MAGENTA_4;
+			case _I(M,A,G,E,N,T,A, ,4):
+				return alpha | X11_MAGENTA_4;
+			case _I(O,R,C,H,I,D,1):
+				return alpha | X11_ORCHID_1;
+			case _I(O,R,C,H,I,D,_,1):
+				return alpha | X11_ORCHID_1;
+			case _I(O,R,C,H,I,D, ,1):
+				return alpha | X11_ORCHID_1;
+			case _I(O,R,C,H,I,D,2):
+				return alpha | X11_ORCHID_2;
+			case _I(O,R,C,H,I,D,_,2):
+				return alpha | X11_ORCHID_2;
+			case _I(O,R,C,H,I,D, ,2):
+				return alpha | X11_ORCHID_2;
+			case _I(O,R,C,H,I,D,3):
+				return alpha | X11_ORCHID_3;
+			case _I(O,R,C,H,I,D,_,3):
+				return alpha | X11_ORCHID_3;
+			case _I(O,R,C,H,I,D, ,3):
+				return alpha | X11_ORCHID_3;
+			case _I(O,R,C,H,I,D,4):
+				return alpha | X11_ORCHID_4;
+			case _I(O,R,C,H,I,D,_,4):
+				return alpha | X11_ORCHID_4;
+			case _I(O,R,C,H,I,D, ,4):
+				return alpha | X11_ORCHID_4;
+			case _I(P,L,U,M,1):
+				return alpha | X11_PLUM_1;
+			case _I(P,L,U,M,_,1):
+				return alpha | X11_PLUM_1;
+			case _I(P,L,U,M, ,1):
+				return alpha | X11_PLUM_1;
+			case _I(P,L,U,M,2):
+				return alpha | X11_PLUM_2;
+			case _I(P,L,U,M,_,2):
+				return alpha | X11_PLUM_2;
+			case _I(P,L,U,M, ,2):
+				return alpha | X11_PLUM_2;
+			case _I(P,L,U,M,3):
+				return alpha | X11_PLUM_3;
+			case _I(P,L,U,M,_,3):
+				return alpha | X11_PLUM_3;
+			case _I(P,L,U,M, ,3):
+				return alpha | X11_PLUM_3;
+			case _I(P,L,U,M,4):
+				return alpha | X11_PLUM_4;
+			case _I(P,L,U,M,_,4):
+				return alpha | X11_PLUM_4;
+			case _I(P,L,U,M, ,4):
+				return alpha | X11_PLUM_4;
+			case _I(M,E,D,I,U,M,O,R,C,H,I,D,1):
+				return alpha | X11_MEDIUM_ORCHID_1;
+			case _I(M,E,D,I,U,M,_,O,R,C,H,I,D,_,1):
+				return alpha | X11_MEDIUM_ORCHID_1;
+			case _I(M,E,D,I,U,M, ,O,R,C,H,I,D, ,1):
+				return alpha | X11_MEDIUM_ORCHID_1;
+			case _I(M,E,D,I,U,M,O,R,C,H,I,D,2):
+				return alpha | X11_MEDIUM_ORCHID_2;
+			case _I(M,E,D,I,U,M,_,O,R,C,H,I,D,_,2):
+				return alpha | X11_MEDIUM_ORCHID_2;
+			case _I(M,E,D,I,U,M, ,O,R,C,H,I,D, ,2):
+				return alpha | X11_MEDIUM_ORCHID_2;
+			case _I(M,E,D,I,U,M,O,R,C,H,I,D,3):
+				return alpha | X11_MEDIUM_ORCHID_3;
+			case _I(M,E,D,I,U,M,_,O,R,C,H,I,D,_,3):
+				return alpha | X11_MEDIUM_ORCHID_3;
+			case _I(M,E,D,I,U,M, ,O,R,C,H,I,D, ,3):
+				return alpha | X11_MEDIUM_ORCHID_3;
+			case _I(M,E,D,I,U,M,O,R,C,H,I,D,4):
+				return alpha | X11_MEDIUM_ORCHID_4;
+			case _I(M,E,D,I,U,M,_,O,R,C,H,I,D,_,4):
+				return alpha | X11_MEDIUM_ORCHID_4;
+			case _I(M,E,D,I,U,M, ,O,R,C,H,I,D, ,4):
+				return alpha | X11_MEDIUM_ORCHID_4;
+			case _I(D,A,R,K,O,R,C,H,I,D,1):
+				return alpha | X11_DARK_ORCHID_1;
+			case _I(D,A,R,K,_,O,R,C,H,I,D,_,1):
+				return alpha | X11_DARK_ORCHID_1;
+			case _I(D,A,R,K, ,O,R,C,H,I,D, ,1):
+				return alpha | X11_DARK_ORCHID_1;
+			case _I(D,A,R,K,O,R,C,H,I,D,2):
+				return alpha | X11_DARK_ORCHID_2;
+			case _I(D,A,R,K,_,O,R,C,H,I,D,_,2):
+				return alpha | X11_DARK_ORCHID_2;
+			case _I(D,A,R,K, ,O,R,C,H,I,D, ,2):
+				return alpha | X11_DARK_ORCHID_2;
+			case _I(D,A,R,K,O,R,C,H,I,D,3):
+				return alpha | X11_DARK_ORCHID_3;
+			case _I(D,A,R,K,_,O,R,C,H,I,D,_,3):
+				return alpha | X11_DARK_ORCHID_3;
+			case _I(D,A,R,K, ,O,R,C,H,I,D, ,3):
+				return alpha | X11_DARK_ORCHID_3;
+			case _I(D,A,R,K,O,R,C,H,I,D,4):
+				return alpha | X11_DARK_ORCHID_4;
+			case _I(D,A,R,K,_,O,R,C,H,I,D,_,4):
+				return alpha | X11_DARK_ORCHID_4;
+			case _I(D,A,R,K, ,O,R,C,H,I,D, ,4):
+				return alpha | X11_DARK_ORCHID_4;
+			case _I(P,U,R,P,L,E,1):
+				return alpha | X11_PURPLE_1;
+			case _I(P,U,R,P,L,E,_,1):
+				return alpha | X11_PURPLE_1;
+			case _I(P,U,R,P,L,E, ,1):
+				return alpha | X11_PURPLE_1;
+			case _I(P,U,R,P,L,E,2):
+				return alpha | X11_PURPLE_2;
+			case _I(P,U,R,P,L,E,_,2):
+				return alpha | X11_PURPLE_2;
+			case _I(P,U,R,P,L,E, ,2):
+				return alpha | X11_PURPLE_2;
+			case _I(P,U,R,P,L,E,3):
+				return alpha | X11_PURPLE_3;
+			case _I(P,U,R,P,L,E,_,3):
+				return alpha | X11_PURPLE_3;
+			case _I(P,U,R,P,L,E, ,3):
+				return alpha | X11_PURPLE_3;
+			case _I(P,U,R,P,L,E,4):
+				return alpha | X11_PURPLE_4;
+			case _I(P,U,R,P,L,E,_,4):
+				return alpha | X11_PURPLE_4;
+			case _I(P,U,R,P,L,E, ,4):
+				return alpha | X11_PURPLE_4;
+			case _I(M,E,D,I,U,M,P,U,R,P,L,E,1):
+				return alpha | X11_MEDIUM_PURPLE_1;
+			case _I(M,E,D,I,U,M,_,P,U,R,P,L,E,_,1):
+				return alpha | X11_MEDIUM_PURPLE_1;
+			case _I(M,E,D,I,U,M, ,P,U,R,P,L,E, ,1):
+				return alpha | X11_MEDIUM_PURPLE_1;
+			case _I(M,E,D,I,U,M,P,U,R,P,L,E,2):
+				return alpha | X11_MEDIUM_PURPLE_2;
+			case _I(M,E,D,I,U,M,_,P,U,R,P,L,E,_,2):
+				return alpha | X11_MEDIUM_PURPLE_2;
+			case _I(M,E,D,I,U,M, ,P,U,R,P,L,E, ,2):
+				return alpha | X11_MEDIUM_PURPLE_2;
+			case _I(M,E,D,I,U,M,P,U,R,P,L,E,3):
+				return alpha | X11_MEDIUM_PURPLE_3;
+			case _I(M,E,D,I,U,M,_,P,U,R,P,L,E,_,3):
+				return alpha | X11_MEDIUM_PURPLE_3;
+			case _I(M,E,D,I,U,M, ,P,U,R,P,L,E, ,3):
+				return alpha | X11_MEDIUM_PURPLE_3;
+			case _I(M,E,D,I,U,M,P,U,R,P,L,E,4):
+				return alpha | X11_MEDIUM_PURPLE_4;
+			case _I(M,E,D,I,U,M,_,P,U,R,P,L,E,_,4):
+				return alpha | X11_MEDIUM_PURPLE_4;
+			case _I(M,E,D,I,U,M, ,P,U,R,P,L,E, ,4):
+				return alpha | X11_MEDIUM_PURPLE_4;
+			case _I(T,H,I,S,T,L,E,1):
+				return alpha | X11_THISTLE_1;
+			case _I(T,H,I,S,T,L,E,_,1):
+				return alpha | X11_THISTLE_1;
+			case _I(T,H,I,S,T,L,E, ,1):
+				return alpha | X11_THISTLE_1;
+			case _I(T,H,I,S,T,L,E,2):
+				return alpha | X11_THISTLE_2;
+			case _I(T,H,I,S,T,L,E,_,2):
+				return alpha | X11_THISTLE_2;
+			case _I(T,H,I,S,T,L,E, ,2):
+				return alpha | X11_THISTLE_2;
+			case _I(T,H,I,S,T,L,E,3):
+				return alpha | X11_THISTLE_3;
+			case _I(T,H,I,S,T,L,E,_,3):
+				return alpha | X11_THISTLE_3;
+			case _I(T,H,I,S,T,L,E, ,3):
+				return alpha | X11_THISTLE_3;
+			case _I(T,H,I,S,T,L,E,4):
+				return alpha | X11_THISTLE_4;
+			case _I(T,H,I,S,T,L,E,_,4):
+				return alpha | X11_THISTLE_4;
+			case _I(T,H,I,S,T,L,E, ,4):
+				return alpha | X11_THISTLE_4;
+			case _I(G,R,A,Y,0):
+				return alpha | X11_GRAY_0;
+			case _I(G,R,A,Y,_,0):
+				return alpha | X11_GRAY_0;
+			case _I(G,R,A,Y, ,0):
+				return alpha | X11_GRAY_0;
+			case _I(G,R,E,Y,0):
+				return alpha | X11_GREY_0;
+			case _I(G,R,E,Y,_,0):
+				return alpha | X11_GREY_0;
+			case _I(G,R,E,Y, ,0):
+				return alpha | X11_GREY_0;
+			case _I(G,R,A,Y,1):
+				return alpha | X11_GRAY_1;
+			case _I(G,R,A,Y,_,1):
+				return alpha | X11_GRAY_1;
+			case _I(G,R,A,Y, ,1):
+				return alpha | X11_GRAY_1;
+			case _I(G,R,E,Y,1):
+				return alpha | X11_GREY_1;
+			case _I(G,R,E,Y,_,1):
+				return alpha | X11_GREY_1;
+			case _I(G,R,E,Y, ,1):
+				return alpha | X11_GREY_1;
+			case _I(G,R,A,Y,2):
+				return alpha | X11_GRAY_2;
+			case _I(G,R,A,Y,_,2):
+				return alpha | X11_GRAY_2;
+			case _I(G,R,A,Y, ,2):
+				return alpha | X11_GRAY_2;
+			case _I(G,R,E,Y,2):
+				return alpha | X11_GREY_2;
+			case _I(G,R,E,Y,_,2):
+				return alpha | X11_GREY_2;
+			case _I(G,R,E,Y, ,2):
+				return alpha | X11_GREY_2;
+			case _I(G,R,A,Y,3):
+				return alpha | X11_GRAY_3;
+			case _I(G,R,A,Y,_,3):
+				return alpha | X11_GRAY_3;
+			case _I(G,R,A,Y, ,3):
+				return alpha | X11_GRAY_3;
+			case _I(G,R,E,Y,3):
+				return alpha | X11_GREY_3;
+			case _I(G,R,E,Y,_,3):
+				return alpha | X11_GREY_3;
+			case _I(G,R,E,Y, ,3):
+				return alpha | X11_GREY_3;
+			case _I(G,R,A,Y,4):
+				return alpha | X11_GRAY_4;
+			case _I(G,R,A,Y,_,4):
+				return alpha | X11_GRAY_4;
+			case _I(G,R,A,Y, ,4):
+				return alpha | X11_GRAY_4;
+			case _I(G,R,E,Y,4):
+				return alpha | X11_GREY_4;
+			case _I(G,R,E,Y,_,4):
+				return alpha | X11_GREY_4;
+			case _I(G,R,E,Y, ,4):
+				return alpha | X11_GREY_4;
+			case _I(G,R,A,Y,5):
+				return alpha | X11_GRAY_5;
+			case _I(G,R,A,Y,_,5):
+				return alpha | X11_GRAY_5;
+			case _I(G,R,A,Y, ,5):
+				return alpha | X11_GRAY_5;
+			case _I(G,R,E,Y,5):
+				return alpha | X11_GREY_5;
+			case _I(G,R,E,Y,_,5):
+				return alpha | X11_GREY_5;
+			case _I(G,R,E,Y, ,5):
+				return alpha | X11_GREY_5;
+			case _I(G,R,A,Y,6):
+				return alpha | X11_GRAY_6;
+			case _I(G,R,A,Y,_,6):
+				return alpha | X11_GRAY_6;
+			case _I(G,R,A,Y, ,6):
+				return alpha | X11_GRAY_6;
+			case _I(G,R,E,Y,6):
+				return alpha | X11_GREY_6;
+			case _I(G,R,E,Y,_,6):
+				return alpha | X11_GREY_6;
+			case _I(G,R,E,Y, ,6):
+				return alpha | X11_GREY_6;
+			case _I(G,R,A,Y,7):
+				return alpha | X11_GRAY_7;
+			case _I(G,R,A,Y,_,7):
+				return alpha | X11_GRAY_7;
+			case _I(G,R,A,Y, ,7):
+				return alpha | X11_GRAY_7;
+			case _I(G,R,E,Y,7):
+				return alpha | X11_GREY_7;
+			case _I(G,R,E,Y,_,7):
+				return alpha | X11_GREY_7;
+			case _I(G,R,E,Y, ,7):
+				return alpha | X11_GREY_7;
+			case _I(G,R,A,Y,8):
+				return alpha | X11_GRAY_8;
+			case _I(G,R,A,Y,_,8):
+				return alpha | X11_GRAY_8;
+			case _I(G,R,A,Y, ,8):
+				return alpha | X11_GRAY_8;
+			case _I(G,R,E,Y,8):
+				return alpha | X11_GREY_8;
+			case _I(G,R,E,Y,_,8):
+				return alpha | X11_GREY_8;
+			case _I(G,R,E,Y, ,8):
+				return alpha | X11_GREY_8;
+			case _I(G,R,A,Y,9):
+				return alpha | X11_GRAY_9;
+			case _I(G,R,A,Y,_,9):
+				return alpha | X11_GRAY_9;
+			case _I(G,R,A,Y, ,9):
+				return alpha | X11_GRAY_9;
+			case _I(G,R,E,Y,9):
+				return alpha | X11_GREY_9;
+			case _I(G,R,E,Y,_,9):
+				return alpha | X11_GREY_9;
+			case _I(G,R,E,Y, ,9):
+				return alpha | X11_GREY_9;
+			case _I(G,R,A,Y,1,0):
+				return alpha | X11_GRAY_10;
+			case _I(G,R,A,Y,_,1,0):
+				return alpha | X11_GRAY_10;
+			case _I(G,R,A,Y, ,1,0):
+				return alpha | X11_GRAY_10;
+			case _I(G,R,E,Y,1,0):
+				return alpha | X11_GREY_10;
+			case _I(G,R,E,Y,_,1,0):
+				return alpha | X11_GREY_10;
+			case _I(G,R,E,Y, ,1,0):
+				return alpha | X11_GREY_10;
+			case _I(G,R,A,Y,1,1):
+				return alpha | X11_GRAY_11;
+			case _I(G,R,A,Y,_,1,1):
+				return alpha | X11_GRAY_11;
+			case _I(G,R,A,Y, ,1,1):
+				return alpha | X11_GRAY_11;
+			case _I(G,R,E,Y,1,1):
+				return alpha | X11_GREY_11;
+			case _I(G,R,E,Y,_,1,1):
+				return alpha | X11_GREY_11;
+			case _I(G,R,E,Y, ,1,1):
+				return alpha | X11_GREY_11;
+			case _I(G,R,A,Y,1,2):
+				return alpha | X11_GRAY_12;
+			case _I(G,R,A,Y,_,1,2):
+				return alpha | X11_GRAY_12;
+			case _I(G,R,A,Y, ,1,2):
+				return alpha | X11_GRAY_12;
+			case _I(G,R,E,Y,1,2):
+				return alpha | X11_GREY_12;
+			case _I(G,R,E,Y,_,1,2):
+				return alpha | X11_GREY_12;
+			case _I(G,R,E,Y, ,1,2):
+				return alpha | X11_GREY_12;
+			case _I(G,R,A,Y,1,3):
+				return alpha | X11_GRAY_13;
+			case _I(G,R,A,Y,_,1,3):
+				return alpha | X11_GRAY_13;
+			case _I(G,R,A,Y, ,1,3):
+				return alpha | X11_GRAY_13;
+			case _I(G,R,E,Y,1,3):
+				return alpha | X11_GREY_13;
+			case _I(G,R,E,Y,_,1,3):
+				return alpha | X11_GREY_13;
+			case _I(G,R,E,Y, ,1,3):
+				return alpha | X11_GREY_13;
+			case _I(G,R,A,Y,1,4):
+				return alpha | X11_GRAY_14;
+			case _I(G,R,A,Y,_,1,4):
+				return alpha | X11_GRAY_14;
+			case _I(G,R,A,Y, ,1,4):
+				return alpha | X11_GRAY_14;
+			case _I(G,R,E,Y,1,4):
+				return alpha | X11_GREY_14;
+			case _I(G,R,E,Y,_,1,4):
+				return alpha | X11_GREY_14;
+			case _I(G,R,E,Y, ,1,4):
+				return alpha | X11_GREY_14;
+			case _I(G,R,A,Y,1,5):
+				return alpha | X11_GRAY_15;
+			case _I(G,R,A,Y,_,1,5):
+				return alpha | X11_GRAY_15;
+			case _I(G,R,A,Y, ,1,5):
+				return alpha | X11_GRAY_15;
+			case _I(G,R,E,Y,1,5):
+				return alpha | X11_GREY_15;
+			case _I(G,R,E,Y,_,1,5):
+				return alpha | X11_GREY_15;
+			case _I(G,R,E,Y, ,1,5):
+				return alpha | X11_GREY_15;
+			case _I(G,R,A,Y,1,6):
+				return alpha | X11_GRAY_16;
+			case _I(G,R,A,Y,_,1,6):
+				return alpha | X11_GRAY_16;
+			case _I(G,R,A,Y, ,1,6):
+				return alpha | X11_GRAY_16;
+			case _I(G,R,E,Y,1,6):
+				return alpha | X11_GREY_16;
+			case _I(G,R,E,Y,_,1,6):
+				return alpha | X11_GREY_16;
+			case _I(G,R,E,Y, ,1,6):
+				return alpha | X11_GREY_16;
+			case _I(G,R,A,Y,1,7):
+				return alpha | X11_GRAY_17;
+			case _I(G,R,A,Y,_,1,7):
+				return alpha | X11_GRAY_17;
+			case _I(G,R,A,Y, ,1,7):
+				return alpha | X11_GRAY_17;
+			case _I(G,R,E,Y,1,7):
+				return alpha | X11_GREY_17;
+			case _I(G,R,E,Y,_,1,7):
+				return alpha | X11_GREY_17;
+			case _I(G,R,E,Y, ,1,7):
+				return alpha | X11_GREY_17;
+			case _I(G,R,A,Y,1,8):
+				return alpha | X11_GRAY_18;
+			case _I(G,R,A,Y,_,1,8):
+				return alpha | X11_GRAY_18;
+			case _I(G,R,A,Y, ,1,8):
+				return alpha | X11_GRAY_18;
+			case _I(G,R,E,Y,1,8):
+				return alpha | X11_GREY_18;
+			case _I(G,R,E,Y,_,1,8):
+				return alpha | X11_GREY_18;
+			case _I(G,R,E,Y, ,1,8):
+				return alpha | X11_GREY_18;
+			case _I(G,R,A,Y,1,9):
+				return alpha | X11_GRAY_19;
+			case _I(G,R,A,Y,_,1,9):
+				return alpha | X11_GRAY_19;
+			case _I(G,R,A,Y, ,1,9):
+				return alpha | X11_GRAY_19;
+			case _I(G,R,E,Y,1,9):
+				return alpha | X11_GREY_19;
+			case _I(G,R,E,Y,_,1,9):
+				return alpha | X11_GREY_19;
+			case _I(G,R,E,Y, ,1,9):
+				return alpha | X11_GREY_19;
+			case _I(G,R,A,Y,2,0):
+				return alpha | X11_GRAY_20;
+			case _I(G,R,A,Y,_,2,0):
+				return alpha | X11_GRAY_20;
+			case _I(G,R,A,Y, ,2,0):
+				return alpha | X11_GRAY_20;
+			case _I(G,R,E,Y,2,0):
+				return alpha | X11_GREY_20;
+			case _I(G,R,E,Y,_,2,0):
+				return alpha | X11_GREY_20;
+			case _I(G,R,E,Y, ,2,0):
+				return alpha | X11_GREY_20;
+			case _I(G,R,A,Y,2,1):
+				return alpha | X11_GRAY_21;
+			case _I(G,R,A,Y,_,2,1):
+				return alpha | X11_GRAY_21;
+			case _I(G,R,A,Y, ,2,1):
+				return alpha | X11_GRAY_21;
+			case _I(G,R,E,Y,2,1):
+				return alpha | X11_GREY_21;
+			case _I(G,R,E,Y,_,2,1):
+				return alpha | X11_GREY_21;
+			case _I(G,R,E,Y, ,2,1):
+				return alpha | X11_GREY_21;
+			case _I(G,R,A,Y,2,2):
+				return alpha | X11_GRAY_22;
+			case _I(G,R,A,Y,_,2,2):
+				return alpha | X11_GRAY_22;
+			case _I(G,R,A,Y, ,2,2):
+				return alpha | X11_GRAY_22;
+			case _I(G,R,E,Y,2,2):
+				return alpha | X11_GREY_22;
+			case _I(G,R,E,Y,_,2,2):
+				return alpha | X11_GREY_22;
+			case _I(G,R,E,Y, ,2,2):
+				return alpha | X11_GREY_22;
+			case _I(G,R,A,Y,2,3):
+				return alpha | X11_GRAY_23;
+			case _I(G,R,A,Y,_,2,3):
+				return alpha | X11_GRAY_23;
+			case _I(G,R,A,Y, ,2,3):
+				return alpha | X11_GRAY_23;
+			case _I(G,R,E,Y,2,3):
+				return alpha | X11_GREY_23;
+			case _I(G,R,E,Y,_,2,3):
+				return alpha | X11_GREY_23;
+			case _I(G,R,E,Y, ,2,3):
+				return alpha | X11_GREY_23;
+			case _I(G,R,A,Y,2,4):
+				return alpha | X11_GRAY_24;
+			case _I(G,R,A,Y,_,2,4):
+				return alpha | X11_GRAY_24;
+			case _I(G,R,A,Y, ,2,4):
+				return alpha | X11_GRAY_24;
+			case _I(G,R,E,Y,2,4):
+				return alpha | X11_GREY_24;
+			case _I(G,R,E,Y,_,2,4):
+				return alpha | X11_GREY_24;
+			case _I(G,R,E,Y, ,2,4):
+				return alpha | X11_GREY_24;
+			case _I(G,R,A,Y,2,5):
+				return alpha | X11_GRAY_25;
+			case _I(G,R,A,Y,_,2,5):
+				return alpha | X11_GRAY_25;
+			case _I(G,R,A,Y, ,2,5):
+				return alpha | X11_GRAY_25;
+			case _I(G,R,E,Y,2,5):
+				return alpha | X11_GREY_25;
+			case _I(G,R,E,Y,_,2,5):
+				return alpha | X11_GREY_25;
+			case _I(G,R,E,Y, ,2,5):
+				return alpha | X11_GREY_25;
+			case _I(G,R,A,Y,2,6):
+				return alpha | X11_GRAY_26;
+			case _I(G,R,A,Y,_,2,6):
+				return alpha | X11_GRAY_26;
+			case _I(G,R,A,Y, ,2,6):
+				return alpha | X11_GRAY_26;
+			case _I(G,R,E,Y,2,6):
+				return alpha | X11_GREY_26;
+			case _I(G,R,E,Y,_,2,6):
+				return alpha | X11_GREY_26;
+			case _I(G,R,E,Y, ,2,6):
+				return alpha | X11_GREY_26;
+			case _I(G,R,A,Y,2,7):
+				return alpha | X11_GRAY_27;
+			case _I(G,R,A,Y,_,2,7):
+				return alpha | X11_GRAY_27;
+			case _I(G,R,A,Y, ,2,7):
+				return alpha | X11_GRAY_27;
+			case _I(G,R,E,Y,2,7):
+				return alpha | X11_GREY_27;
+			case _I(G,R,E,Y,_,2,7):
+				return alpha | X11_GREY_27;
+			case _I(G,R,E,Y, ,2,7):
+				return alpha | X11_GREY_27;
+			case _I(G,R,A,Y,2,8):
+				return alpha | X11_GRAY_28;
+			case _I(G,R,A,Y,_,2,8):
+				return alpha | X11_GRAY_28;
+			case _I(G,R,A,Y, ,2,8):
+				return alpha | X11_GRAY_28;
+			case _I(G,R,E,Y,2,8):
+				return alpha | X11_GREY_28;
+			case _I(G,R,E,Y,_,2,8):
+				return alpha | X11_GREY_28;
+			case _I(G,R,E,Y, ,2,8):
+				return alpha | X11_GREY_28;
+			case _I(G,R,A,Y,2,9):
+				return alpha | X11_GRAY_29;
+			case _I(G,R,A,Y,_,2,9):
+				return alpha | X11_GRAY_29;
+			case _I(G,R,A,Y, ,2,9):
+				return alpha | X11_GRAY_29;
+			case _I(G,R,E,Y,2,9):
+				return alpha | X11_GREY_29;
+			case _I(G,R,E,Y,_,2,9):
+				return alpha | X11_GREY_29;
+			case _I(G,R,E,Y, ,2,9):
+				return alpha | X11_GREY_29;
+			case _I(G,R,A,Y,3,0):
+				return alpha | X11_GRAY_30;
+			case _I(G,R,A,Y,_,3,0):
+				return alpha | X11_GRAY_30;
+			case _I(G,R,A,Y, ,3,0):
+				return alpha | X11_GRAY_30;
+			case _I(G,R,E,Y,3,0):
+				return alpha | X11_GREY_30;
+			case _I(G,R,E,Y,_,3,0):
+				return alpha | X11_GREY_30;
+			case _I(G,R,E,Y, ,3,0):
+				return alpha | X11_GREY_30;
+			case _I(G,R,A,Y,3,1):
+				return alpha | X11_GRAY_31;
+			case _I(G,R,A,Y,_,3,1):
+				return alpha | X11_GRAY_31;
+			case _I(G,R,A,Y, ,3,1):
+				return alpha | X11_GRAY_31;
+			case _I(G,R,E,Y,3,1):
+				return alpha | X11_GREY_31;
+			case _I(G,R,E,Y,_,3,1):
+				return alpha | X11_GREY_31;
+			case _I(G,R,E,Y, ,3,1):
+				return alpha | X11_GREY_31;
+			case _I(G,R,A,Y,3,2):
+				return alpha | X11_GRAY_32;
+			case _I(G,R,A,Y,_,3,2):
+				return alpha | X11_GRAY_32;
+			case _I(G,R,A,Y, ,3,2):
+				return alpha | X11_GRAY_32;
+			case _I(G,R,E,Y,3,2):
+				return alpha | X11_GREY_32;
+			case _I(G,R,E,Y,_,3,2):
+				return alpha | X11_GREY_32;
+			case _I(G,R,E,Y, ,3,2):
+				return alpha | X11_GREY_32;
+			case _I(G,R,A,Y,3,3):
+				return alpha | X11_GRAY_33;
+			case _I(G,R,A,Y,_,3,3):
+				return alpha | X11_GRAY_33;
+			case _I(G,R,A,Y, ,3,3):
+				return alpha | X11_GRAY_33;
+			case _I(G,R,E,Y,3,3):
+				return alpha | X11_GREY_33;
+			case _I(G,R,E,Y,_,3,3):
+				return alpha | X11_GREY_33;
+			case _I(G,R,E,Y, ,3,3):
+				return alpha | X11_GREY_33;
+			case _I(G,R,A,Y,3,4):
+				return alpha | X11_GRAY_34;
+			case _I(G,R,A,Y,_,3,4):
+				return alpha | X11_GRAY_34;
+			case _I(G,R,A,Y, ,3,4):
+				return alpha | X11_GRAY_34;
+			case _I(G,R,E,Y,3,4):
+				return alpha | X11_GREY_34;
+			case _I(G,R,E,Y,_,3,4):
+				return alpha | X11_GREY_34;
+			case _I(G,R,E,Y, ,3,4):
+				return alpha | X11_GREY_34;
+			case _I(G,R,A,Y,3,5):
+				return alpha | X11_GRAY_35;
+			case _I(G,R,A,Y,_,3,5):
+				return alpha | X11_GRAY_35;
+			case _I(G,R,A,Y, ,3,5):
+				return alpha | X11_GRAY_35;
+			case _I(G,R,E,Y,3,5):
+				return alpha | X11_GREY_35;
+			case _I(G,R,E,Y,_,3,5):
+				return alpha | X11_GREY_35;
+			case _I(G,R,E,Y, ,3,5):
+				return alpha | X11_GREY_35;
+			case _I(G,R,A,Y,3,6):
+				return alpha | X11_GRAY_36;
+			case _I(G,R,A,Y,_,3,6):
+				return alpha | X11_GRAY_36;
+			case _I(G,R,A,Y, ,3,6):
+				return alpha | X11_GRAY_36;
+			case _I(G,R,E,Y,3,6):
+				return alpha | X11_GREY_36;
+			case _I(G,R,E,Y,_,3,6):
+				return alpha | X11_GREY_36;
+			case _I(G,R,E,Y, ,3,6):
+				return alpha | X11_GREY_36;
+			case _I(G,R,A,Y,3,7):
+				return alpha | X11_GRAY_37;
+			case _I(G,R,A,Y,_,3,7):
+				return alpha | X11_GRAY_37;
+			case _I(G,R,A,Y, ,3,7):
+				return alpha | X11_GRAY_37;
+			case _I(G,R,E,Y,3,7):
+				return alpha | X11_GREY_37;
+			case _I(G,R,E,Y,_,3,7):
+				return alpha | X11_GREY_37;
+			case _I(G,R,E,Y, ,3,7):
+				return alpha | X11_GREY_37;
+			case _I(G,R,A,Y,3,8):
+				return alpha | X11_GRAY_38;
+			case _I(G,R,A,Y,_,3,8):
+				return alpha | X11_GRAY_38;
+			case _I(G,R,A,Y, ,3,8):
+				return alpha | X11_GRAY_38;
+			case _I(G,R,E,Y,3,8):
+				return alpha | X11_GREY_38;
+			case _I(G,R,E,Y,_,3,8):
+				return alpha | X11_GREY_38;
+			case _I(G,R,E,Y, ,3,8):
+				return alpha | X11_GREY_38;
+			case _I(G,R,A,Y,3,9):
+				return alpha | X11_GRAY_39;
+			case _I(G,R,A,Y,_,3,9):
+				return alpha | X11_GRAY_39;
+			case _I(G,R,A,Y, ,3,9):
+				return alpha | X11_GRAY_39;
+			case _I(G,R,E,Y,3,9):
+				return alpha | X11_GREY_39;
+			case _I(G,R,E,Y,_,3,9):
+				return alpha | X11_GREY_39;
+			case _I(G,R,E,Y, ,3,9):
+				return alpha | X11_GREY_39;
+			case _I(G,R,A,Y,4,0):
+				return alpha | X11_GRAY_40;
+			case _I(G,R,A,Y,_,4,0):
+				return alpha | X11_GRAY_40;
+			case _I(G,R,A,Y, ,4,0):
+				return alpha | X11_GRAY_40;
+			case _I(G,R,E,Y,4,0):
+				return alpha | X11_GREY_40;
+			case _I(G,R,E,Y,_,4,0):
+				return alpha | X11_GREY_40;
+			case _I(G,R,E,Y, ,4,0):
+				return alpha | X11_GREY_40;
+			case _I(G,R,A,Y,4,1):
+				return alpha | X11_GRAY_41;
+			case _I(G,R,A,Y,_,4,1):
+				return alpha | X11_GRAY_41;
+			case _I(G,R,A,Y, ,4,1):
+				return alpha | X11_GRAY_41;
+			case _I(G,R,E,Y,4,1):
+				return alpha | X11_GREY_41;
+			case _I(G,R,E,Y,_,4,1):
+				return alpha | X11_GREY_41;
+			case _I(G,R,E,Y, ,4,1):
+				return alpha | X11_GREY_41;
+			case _I(G,R,A,Y,4,2):
+				return alpha | X11_GRAY_42;
+			case _I(G,R,A,Y,_,4,2):
+				return alpha | X11_GRAY_42;
+			case _I(G,R,A,Y, ,4,2):
+				return alpha | X11_GRAY_42;
+			case _I(G,R,E,Y,4,2):
+				return alpha | X11_GREY_42;
+			case _I(G,R,E,Y,_,4,2):
+				return alpha | X11_GREY_42;
+			case _I(G,R,E,Y, ,4,2):
+				return alpha | X11_GREY_42;
+			case _I(G,R,A,Y,4,3):
+				return alpha | X11_GRAY_43;
+			case _I(G,R,A,Y,_,4,3):
+				return alpha | X11_GRAY_43;
+			case _I(G,R,A,Y, ,4,3):
+				return alpha | X11_GRAY_43;
+			case _I(G,R,E,Y,4,3):
+				return alpha | X11_GREY_43;
+			case _I(G,R,E,Y,_,4,3):
+				return alpha | X11_GREY_43;
+			case _I(G,R,E,Y, ,4,3):
+				return alpha | X11_GREY_43;
+			case _I(G,R,A,Y,4,4):
+				return alpha | X11_GRAY_44;
+			case _I(G,R,A,Y,_,4,4):
+				return alpha | X11_GRAY_44;
+			case _I(G,R,A,Y, ,4,4):
+				return alpha | X11_GRAY_44;
+			case _I(G,R,E,Y,4,4):
+				return alpha | X11_GREY_44;
+			case _I(G,R,E,Y,_,4,4):
+				return alpha | X11_GREY_44;
+			case _I(G,R,E,Y, ,4,4):
+				return alpha | X11_GREY_44;
+			case _I(G,R,A,Y,4,5):
+				return alpha | X11_GRAY_45;
+			case _I(G,R,A,Y,_,4,5):
+				return alpha | X11_GRAY_45;
+			case _I(G,R,A,Y, ,4,5):
+				return alpha | X11_GRAY_45;
+			case _I(G,R,E,Y,4,5):
+				return alpha | X11_GREY_45;
+			case _I(G,R,E,Y,_,4,5):
+				return alpha | X11_GREY_45;
+			case _I(G,R,E,Y, ,4,5):
+				return alpha | X11_GREY_45;
+			case _I(G,R,A,Y,4,6):
+				return alpha | X11_GRAY_46;
+			case _I(G,R,A,Y,_,4,6):
+				return alpha | X11_GRAY_46;
+			case _I(G,R,A,Y, ,4,6):
+				return alpha | X11_GRAY_46;
+			case _I(G,R,E,Y,4,6):
+				return alpha | X11_GREY_46;
+			case _I(G,R,E,Y,_,4,6):
+				return alpha | X11_GREY_46;
+			case _I(G,R,E,Y, ,4,6):
+				return alpha | X11_GREY_46;
+			case _I(G,R,A,Y,4,7):
+				return alpha | X11_GRAY_47;
+			case _I(G,R,A,Y,_,4,7):
+				return alpha | X11_GRAY_47;
+			case _I(G,R,A,Y, ,4,7):
+				return alpha | X11_GRAY_47;
+			case _I(G,R,E,Y,4,7):
+				return alpha | X11_GREY_47;
+			case _I(G,R,E,Y,_,4,7):
+				return alpha | X11_GREY_47;
+			case _I(G,R,E,Y, ,4,7):
+				return alpha | X11_GREY_47;
+			case _I(G,R,A,Y,4,8):
+				return alpha | X11_GRAY_48;
+			case _I(G,R,A,Y,_,4,8):
+				return alpha | X11_GRAY_48;
+			case _I(G,R,A,Y, ,4,8):
+				return alpha | X11_GRAY_48;
+			case _I(G,R,E,Y,4,8):
+				return alpha | X11_GREY_48;
+			case _I(G,R,E,Y,_,4,8):
+				return alpha | X11_GREY_48;
+			case _I(G,R,E,Y, ,4,8):
+				return alpha | X11_GREY_48;
+			case _I(G,R,A,Y,4,9):
+				return alpha | X11_GRAY_49;
+			case _I(G,R,A,Y,_,4,9):
+				return alpha | X11_GRAY_49;
+			case _I(G,R,A,Y, ,4,9):
+				return alpha | X11_GRAY_49;
+			case _I(G,R,E,Y,4,9):
+				return alpha | X11_GREY_49;
+			case _I(G,R,E,Y,_,4,9):
+				return alpha | X11_GREY_49;
+			case _I(G,R,E,Y, ,4,9):
+				return alpha | X11_GREY_49;
+			case _I(G,R,A,Y,5,0):
+				return alpha | X11_GRAY_50;
+			case _I(G,R,A,Y,_,5,0):
+				return alpha | X11_GRAY_50;
+			case _I(G,R,A,Y, ,5,0):
+				return alpha | X11_GRAY_50;
+			case _I(G,R,E,Y,5,0):
+				return alpha | X11_GREY_50;
+			case _I(G,R,E,Y,_,5,0):
+				return alpha | X11_GREY_50;
+			case _I(G,R,E,Y, ,5,0):
+				return alpha | X11_GREY_50;
+			case _I(G,R,A,Y,5,1):
+				return alpha | X11_GRAY_51;
+			case _I(G,R,A,Y,_,5,1):
+				return alpha | X11_GRAY_51;
+			case _I(G,R,A,Y, ,5,1):
+				return alpha | X11_GRAY_51;
+			case _I(G,R,E,Y,5,1):
+				return alpha | X11_GREY_51;
+			case _I(G,R,E,Y,_,5,1):
+				return alpha | X11_GREY_51;
+			case _I(G,R,E,Y, ,5,1):
+				return alpha | X11_GREY_51;
+			case _I(G,R,A,Y,5,2):
+				return alpha | X11_GRAY_52;
+			case _I(G,R,A,Y,_,5,2):
+				return alpha | X11_GRAY_52;
+			case _I(G,R,A,Y, ,5,2):
+				return alpha | X11_GRAY_52;
+			case _I(G,R,E,Y,5,2):
+				return alpha | X11_GREY_52;
+			case _I(G,R,E,Y,_,5,2):
+				return alpha | X11_GREY_52;
+			case _I(G,R,E,Y, ,5,2):
+				return alpha | X11_GREY_52;
+			case _I(G,R,A,Y,5,3):
+				return alpha | X11_GRAY_53;
+			case _I(G,R,A,Y,_,5,3):
+				return alpha | X11_GRAY_53;
+			case _I(G,R,A,Y, ,5,3):
+				return alpha | X11_GRAY_53;
+			case _I(G,R,E,Y,5,3):
+				return alpha | X11_GREY_53;
+			case _I(G,R,E,Y,_,5,3):
+				return alpha | X11_GREY_53;
+			case _I(G,R,E,Y, ,5,3):
+				return alpha | X11_GREY_53;
+			case _I(G,R,A,Y,5,4):
+				return alpha | X11_GRAY_54;
+			case _I(G,R,A,Y,_,5,4):
+				return alpha | X11_GRAY_54;
+			case _I(G,R,A,Y, ,5,4):
+				return alpha | X11_GRAY_54;
+			case _I(G,R,E,Y,5,4):
+				return alpha | X11_GREY_54;
+			case _I(G,R,E,Y,_,5,4):
+				return alpha | X11_GREY_54;
+			case _I(G,R,E,Y, ,5,4):
+				return alpha | X11_GREY_54;
+			case _I(G,R,A,Y,5,5):
+				return alpha | X11_GRAY_55;
+			case _I(G,R,A,Y,_,5,5):
+				return alpha | X11_GRAY_55;
+			case _I(G,R,A,Y, ,5,5):
+				return alpha | X11_GRAY_55;
+			case _I(G,R,E,Y,5,5):
+				return alpha | X11_GREY_55;
+			case _I(G,R,E,Y,_,5,5):
+				return alpha | X11_GREY_55;
+			case _I(G,R,E,Y, ,5,5):
+				return alpha | X11_GREY_55;
+			case _I(G,R,A,Y,5,6):
+				return alpha | X11_GRAY_56;
+			case _I(G,R,A,Y,_,5,6):
+				return alpha | X11_GRAY_56;
+			case _I(G,R,A,Y, ,5,6):
+				return alpha | X11_GRAY_56;
+			case _I(G,R,E,Y,5,6):
+				return alpha | X11_GREY_56;
+			case _I(G,R,E,Y,_,5,6):
+				return alpha | X11_GREY_56;
+			case _I(G,R,E,Y, ,5,6):
+				return alpha | X11_GREY_56;
+			case _I(G,R,A,Y,5,7):
+				return alpha | X11_GRAY_57;
+			case _I(G,R,A,Y,_,5,7):
+				return alpha | X11_GRAY_57;
+			case _I(G,R,A,Y, ,5,7):
+				return alpha | X11_GRAY_57;
+			case _I(G,R,E,Y,5,7):
+				return alpha | X11_GREY_57;
+			case _I(G,R,E,Y,_,5,7):
+				return alpha | X11_GREY_57;
+			case _I(G,R,E,Y, ,5,7):
+				return alpha | X11_GREY_57;
+			case _I(G,R,A,Y,5,8):
+				return alpha | X11_GRAY_58;
+			case _I(G,R,A,Y,_,5,8):
+				return alpha | X11_GRAY_58;
+			case _I(G,R,A,Y, ,5,8):
+				return alpha | X11_GRAY_58;
+			case _I(G,R,E,Y,5,8):
+				return alpha | X11_GREY_58;
+			case _I(G,R,E,Y,_,5,8):
+				return alpha | X11_GREY_58;
+			case _I(G,R,E,Y, ,5,8):
+				return alpha | X11_GREY_58;
+			case _I(G,R,A,Y,5,9):
+				return alpha | X11_GRAY_59;
+			case _I(G,R,A,Y,_,5,9):
+				return alpha | X11_GRAY_59;
+			case _I(G,R,A,Y, ,5,9):
+				return alpha | X11_GRAY_59;
+			case _I(G,R,E,Y,5,9):
+				return alpha | X11_GREY_59;
+			case _I(G,R,E,Y,_,5,9):
+				return alpha | X11_GREY_59;
+			case _I(G,R,E,Y, ,5,9):
+				return alpha | X11_GREY_59;
+			case _I(G,R,A,Y,6,0):
+				return alpha | X11_GRAY_60;
+			case _I(G,R,A,Y,_,6,0):
+				return alpha | X11_GRAY_60;
+			case _I(G,R,A,Y, ,6,0):
+				return alpha | X11_GRAY_60;
+			case _I(G,R,E,Y,6,0):
+				return alpha | X11_GREY_60;
+			case _I(G,R,E,Y,_,6,0):
+				return alpha | X11_GREY_60;
+			case _I(G,R,E,Y, ,6,0):
+				return alpha | X11_GREY_60;
+			case _I(G,R,A,Y,6,1):
+				return alpha | X11_GRAY_61;
+			case _I(G,R,A,Y,_,6,1):
+				return alpha | X11_GRAY_61;
+			case _I(G,R,A,Y, ,6,1):
+				return alpha | X11_GRAY_61;
+			case _I(G,R,E,Y,6,1):
+				return alpha | X11_GREY_61;
+			case _I(G,R,E,Y,_,6,1):
+				return alpha | X11_GREY_61;
+			case _I(G,R,E,Y, ,6,1):
+				return alpha | X11_GREY_61;
+			case _I(G,R,A,Y,6,2):
+				return alpha | X11_GRAY_62;
+			case _I(G,R,A,Y,_,6,2):
+				return alpha | X11_GRAY_62;
+			case _I(G,R,A,Y, ,6,2):
+				return alpha | X11_GRAY_62;
+			case _I(G,R,E,Y,6,2):
+				return alpha | X11_GREY_62;
+			case _I(G,R,E,Y,_,6,2):
+				return alpha | X11_GREY_62;
+			case _I(G,R,E,Y, ,6,2):
+				return alpha | X11_GREY_62;
+			case _I(G,R,A,Y,6,3):
+				return alpha | X11_GRAY_63;
+			case _I(G,R,A,Y,_,6,3):
+				return alpha | X11_GRAY_63;
+			case _I(G,R,A,Y, ,6,3):
+				return alpha | X11_GRAY_63;
+			case _I(G,R,E,Y,6,3):
+				return alpha | X11_GREY_63;
+			case _I(G,R,E,Y,_,6,3):
+				return alpha | X11_GREY_63;
+			case _I(G,R,E,Y, ,6,3):
+				return alpha | X11_GREY_63;
+			case _I(G,R,A,Y,6,4):
+				return alpha | X11_GRAY_64;
+			case _I(G,R,A,Y,_,6,4):
+				return alpha | X11_GRAY_64;
+			case _I(G,R,A,Y, ,6,4):
+				return alpha | X11_GRAY_64;
+			case _I(G,R,E,Y,6,4):
+				return alpha | X11_GREY_64;
+			case _I(G,R,E,Y,_,6,4):
+				return alpha | X11_GREY_64;
+			case _I(G,R,E,Y, ,6,4):
+				return alpha | X11_GREY_64;
+			case _I(G,R,A,Y,6,5):
+				return alpha | X11_GRAY_65;
+			case _I(G,R,A,Y,_,6,5):
+				return alpha | X11_GRAY_65;
+			case _I(G,R,A,Y, ,6,5):
+				return alpha | X11_GRAY_65;
+			case _I(G,R,E,Y,6,5):
+				return alpha | X11_GREY_65;
+			case _I(G,R,E,Y,_,6,5):
+				return alpha | X11_GREY_65;
+			case _I(G,R,E,Y, ,6,5):
+				return alpha | X11_GREY_65;
+			case _I(G,R,A,Y,6,6):
+				return alpha | X11_GRAY_66;
+			case _I(G,R,A,Y,_,6,6):
+				return alpha | X11_GRAY_66;
+			case _I(G,R,A,Y, ,6,6):
+				return alpha | X11_GRAY_66;
+			case _I(G,R,E,Y,6,6):
+				return alpha | X11_GREY_66;
+			case _I(G,R,E,Y,_,6,6):
+				return alpha | X11_GREY_66;
+			case _I(G,R,E,Y, ,6,6):
+				return alpha | X11_GREY_66;
+			case _I(G,R,A,Y,6,7):
+				return alpha | X11_GRAY_67;
+			case _I(G,R,A,Y,_,6,7):
+				return alpha | X11_GRAY_67;
+			case _I(G,R,A,Y, ,6,7):
+				return alpha | X11_GRAY_67;
+			case _I(G,R,E,Y,6,7):
+				return alpha | X11_GREY_67;
+			case _I(G,R,E,Y,_,6,7):
+				return alpha | X11_GREY_67;
+			case _I(G,R,E,Y, ,6,7):
+				return alpha | X11_GREY_67;
+			case _I(G,R,A,Y,6,8):
+				return alpha | X11_GRAY_68;
+			case _I(G,R,A,Y,_,6,8):
+				return alpha | X11_GRAY_68;
+			case _I(G,R,A,Y, ,6,8):
+				return alpha | X11_GRAY_68;
+			case _I(G,R,E,Y,6,8):
+				return alpha | X11_GREY_68;
+			case _I(G,R,E,Y,_,6,8):
+				return alpha | X11_GREY_68;
+			case _I(G,R,E,Y, ,6,8):
+				return alpha | X11_GREY_68;
+			case _I(G,R,A,Y,6,9):
+				return alpha | X11_GRAY_69;
+			case _I(G,R,A,Y,_,6,9):
+				return alpha | X11_GRAY_69;
+			case _I(G,R,A,Y, ,6,9):
+				return alpha | X11_GRAY_69;
+			case _I(G,R,E,Y,6,9):
+				return alpha | X11_GREY_69;
+			case _I(G,R,E,Y,_,6,9):
+				return alpha | X11_GREY_69;
+			case _I(G,R,E,Y, ,6,9):
+				return alpha | X11_GREY_69;
+			case _I(G,R,A,Y,7,0):
+				return alpha | X11_GRAY_70;
+			case _I(G,R,A,Y,_,7,0):
+				return alpha | X11_GRAY_70;
+			case _I(G,R,A,Y, ,7,0):
+				return alpha | X11_GRAY_70;
+			case _I(G,R,E,Y,7,0):
+				return alpha | X11_GREY_70;
+			case _I(G,R,E,Y,_,7,0):
+				return alpha | X11_GREY_70;
+			case _I(G,R,E,Y, ,7,0):
+				return alpha | X11_GREY_70;
+			case _I(G,R,A,Y,7,1):
+				return alpha | X11_GRAY_71;
+			case _I(G,R,A,Y,_,7,1):
+				return alpha | X11_GRAY_71;
+			case _I(G,R,A,Y, ,7,1):
+				return alpha | X11_GRAY_71;
+			case _I(G,R,E,Y,7,1):
+				return alpha | X11_GREY_71;
+			case _I(G,R,E,Y,_,7,1):
+				return alpha | X11_GREY_71;
+			case _I(G,R,E,Y, ,7,1):
+				return alpha | X11_GREY_71;
+			case _I(G,R,A,Y,7,2):
+				return alpha | X11_GRAY_72;
+			case _I(G,R,A,Y,_,7,2):
+				return alpha | X11_GRAY_72;
+			case _I(G,R,A,Y, ,7,2):
+				return alpha | X11_GRAY_72;
+			case _I(G,R,E,Y,7,2):
+				return alpha | X11_GREY_72;
+			case _I(G,R,E,Y,_,7,2):
+				return alpha | X11_GREY_72;
+			case _I(G,R,E,Y, ,7,2):
+				return alpha | X11_GREY_72;
+			case _I(G,R,A,Y,7,3):
+				return alpha | X11_GRAY_73;
+			case _I(G,R,A,Y,_,7,3):
+				return alpha | X11_GRAY_73;
+			case _I(G,R,A,Y, ,7,3):
+				return alpha | X11_GRAY_73;
+			case _I(G,R,E,Y,7,3):
+				return alpha | X11_GREY_73;
+			case _I(G,R,E,Y,_,7,3):
+				return alpha | X11_GREY_73;
+			case _I(G,R,E,Y, ,7,3):
+				return alpha | X11_GREY_73;
+			case _I(G,R,A,Y,7,4):
+				return alpha | X11_GRAY_74;
+			case _I(G,R,A,Y,_,7,4):
+				return alpha | X11_GRAY_74;
+			case _I(G,R,A,Y, ,7,4):
+				return alpha | X11_GRAY_74;
+			case _I(G,R,E,Y,7,4):
+				return alpha | X11_GREY_74;
+			case _I(G,R,E,Y,_,7,4):
+				return alpha | X11_GREY_74;
+			case _I(G,R,E,Y, ,7,4):
+				return alpha | X11_GREY_74;
+			case _I(G,R,A,Y,7,5):
+				return alpha | X11_GRAY_75;
+			case _I(G,R,A,Y,_,7,5):
+				return alpha | X11_GRAY_75;
+			case _I(G,R,A,Y, ,7,5):
+				return alpha | X11_GRAY_75;
+			case _I(G,R,E,Y,7,5):
+				return alpha | X11_GREY_75;
+			case _I(G,R,E,Y,_,7,5):
+				return alpha | X11_GREY_75;
+			case _I(G,R,E,Y, ,7,5):
+				return alpha | X11_GREY_75;
+			case _I(G,R,A,Y,7,6):
+				return alpha | X11_GRAY_76;
+			case _I(G,R,A,Y,_,7,6):
+				return alpha | X11_GRAY_76;
+			case _I(G,R,A,Y, ,7,6):
+				return alpha | X11_GRAY_76;
+			case _I(G,R,E,Y,7,6):
+				return alpha | X11_GREY_76;
+			case _I(G,R,E,Y,_,7,6):
+				return alpha | X11_GREY_76;
+			case _I(G,R,E,Y, ,7,6):
+				return alpha | X11_GREY_76;
+			case _I(G,R,A,Y,7,7):
+				return alpha | X11_GRAY_77;
+			case _I(G,R,A,Y,_,7,7):
+				return alpha | X11_GRAY_77;
+			case _I(G,R,A,Y, ,7,7):
+				return alpha | X11_GRAY_77;
+			case _I(G,R,E,Y,7,7):
+				return alpha | X11_GREY_77;
+			case _I(G,R,E,Y,_,7,7):
+				return alpha | X11_GREY_77;
+			case _I(G,R,E,Y, ,7,7):
+				return alpha | X11_GREY_77;
+			case _I(G,R,A,Y,7,8):
+				return alpha | X11_GRAY_78;
+			case _I(G,R,A,Y,_,7,8):
+				return alpha | X11_GRAY_78;
+			case _I(G,R,A,Y, ,7,8):
+				return alpha | X11_GRAY_78;
+			case _I(G,R,E,Y,7,8):
+				return alpha | X11_GREY_78;
+			case _I(G,R,E,Y,_,7,8):
+				return alpha | X11_GREY_78;
+			case _I(G,R,E,Y, ,7,8):
+				return alpha | X11_GREY_78;
+			case _I(G,R,A,Y,7,9):
+				return alpha | X11_GRAY_79;
+			case _I(G,R,A,Y,_,7,9):
+				return alpha | X11_GRAY_79;
+			case _I(G,R,A,Y, ,7,9):
+				return alpha | X11_GRAY_79;
+			case _I(G,R,E,Y,7,9):
+				return alpha | X11_GREY_79;
+			case _I(G,R,E,Y,_,7,9):
+				return alpha | X11_GREY_79;
+			case _I(G,R,E,Y, ,7,9):
+				return alpha | X11_GREY_79;
+			case _I(G,R,A,Y,8,0):
+				return alpha | X11_GRAY_80;
+			case _I(G,R,A,Y,_,8,0):
+				return alpha | X11_GRAY_80;
+			case _I(G,R,A,Y, ,8,0):
+				return alpha | X11_GRAY_80;
+			case _I(G,R,E,Y,8,0):
+				return alpha | X11_GREY_80;
+			case _I(G,R,E,Y,_,8,0):
+				return alpha | X11_GREY_80;
+			case _I(G,R,E,Y, ,8,0):
+				return alpha | X11_GREY_80;
+			case _I(G,R,A,Y,8,1):
+				return alpha | X11_GRAY_81;
+			case _I(G,R,A,Y,_,8,1):
+				return alpha | X11_GRAY_81;
+			case _I(G,R,A,Y, ,8,1):
+				return alpha | X11_GRAY_81;
+			case _I(G,R,E,Y,8,1):
+				return alpha | X11_GREY_81;
+			case _I(G,R,E,Y,_,8,1):
+				return alpha | X11_GREY_81;
+			case _I(G,R,E,Y, ,8,1):
+				return alpha | X11_GREY_81;
+			case _I(G,R,A,Y,8,2):
+				return alpha | X11_GRAY_82;
+			case _I(G,R,A,Y,_,8,2):
+				return alpha | X11_GRAY_82;
+			case _I(G,R,A,Y, ,8,2):
+				return alpha | X11_GRAY_82;
+			case _I(G,R,E,Y,8,2):
+				return alpha | X11_GREY_82;
+			case _I(G,R,E,Y,_,8,2):
+				return alpha | X11_GREY_82;
+			case _I(G,R,E,Y, ,8,2):
+				return alpha | X11_GREY_82;
+			case _I(G,R,A,Y,8,3):
+				return alpha | X11_GRAY_83;
+			case _I(G,R,A,Y,_,8,3):
+				return alpha | X11_GRAY_83;
+			case _I(G,R,A,Y, ,8,3):
+				return alpha | X11_GRAY_83;
+			case _I(G,R,E,Y,8,3):
+				return alpha | X11_GREY_83;
+			case _I(G,R,E,Y,_,8,3):
+				return alpha | X11_GREY_83;
+			case _I(G,R,E,Y, ,8,3):
+				return alpha | X11_GREY_83;
+			case _I(G,R,A,Y,8,4):
+				return alpha | X11_GRAY_84;
+			case _I(G,R,A,Y,_,8,4):
+				return alpha | X11_GRAY_84;
+			case _I(G,R,A,Y, ,8,4):
+				return alpha | X11_GRAY_84;
+			case _I(G,R,E,Y,8,4):
+				return alpha | X11_GREY_84;
+			case _I(G,R,E,Y,_,8,4):
+				return alpha | X11_GREY_84;
+			case _I(G,R,E,Y, ,8,4):
+				return alpha | X11_GREY_84;
+			case _I(G,R,A,Y,8,5):
+				return alpha | X11_GRAY_85;
+			case _I(G,R,A,Y,_,8,5):
+				return alpha | X11_GRAY_85;
+			case _I(G,R,A,Y, ,8,5):
+				return alpha | X11_GRAY_85;
+			case _I(G,R,E,Y,8,5):
+				return alpha | X11_GREY_85;
+			case _I(G,R,E,Y,_,8,5):
+				return alpha | X11_GREY_85;
+			case _I(G,R,E,Y, ,8,5):
+				return alpha | X11_GREY_85;
+			case _I(G,R,A,Y,8,6):
+				return alpha | X11_GRAY_86;
+			case _I(G,R,A,Y,_,8,6):
+				return alpha | X11_GRAY_86;
+			case _I(G,R,A,Y, ,8,6):
+				return alpha | X11_GRAY_86;
+			case _I(G,R,E,Y,8,6):
+				return alpha | X11_GREY_86;
+			case _I(G,R,E,Y,_,8,6):
+				return alpha | X11_GREY_86;
+			case _I(G,R,E,Y, ,8,6):
+				return alpha | X11_GREY_86;
+			case _I(G,R,A,Y,8,7):
+				return alpha | X11_GRAY_87;
+			case _I(G,R,A,Y,_,8,7):
+				return alpha | X11_GRAY_87;
+			case _I(G,R,A,Y, ,8,7):
+				return alpha | X11_GRAY_87;
+			case _I(G,R,E,Y,8,7):
+				return alpha | X11_GREY_87;
+			case _I(G,R,E,Y,_,8,7):
+				return alpha | X11_GREY_87;
+			case _I(G,R,E,Y, ,8,7):
+				return alpha | X11_GREY_87;
+			case _I(G,R,A,Y,8,8):
+				return alpha | X11_GRAY_88;
+			case _I(G,R,A,Y,_,8,8):
+				return alpha | X11_GRAY_88;
+			case _I(G,R,A,Y, ,8,8):
+				return alpha | X11_GRAY_88;
+			case _I(G,R,E,Y,8,8):
+				return alpha | X11_GREY_88;
+			case _I(G,R,E,Y,_,8,8):
+				return alpha | X11_GREY_88;
+			case _I(G,R,E,Y, ,8,8):
+				return alpha | X11_GREY_88;
+			case _I(G,R,A,Y,8,9):
+				return alpha | X11_GRAY_89;
+			case _I(G,R,A,Y,_,8,9):
+				return alpha | X11_GRAY_89;
+			case _I(G,R,A,Y, ,8,9):
+				return alpha | X11_GRAY_89;
+			case _I(G,R,E,Y,8,9):
+				return alpha | X11_GREY_89;
+			case _I(G,R,E,Y,_,8,9):
+				return alpha | X11_GREY_89;
+			case _I(G,R,E,Y, ,8,9):
+				return alpha | X11_GREY_89;
+			case _I(G,R,A,Y,9,0):
+				return alpha | X11_GRAY_90;
+			case _I(G,R,A,Y,_,9,0):
+				return alpha | X11_GRAY_90;
+			case _I(G,R,A,Y, ,9,0):
+				return alpha | X11_GRAY_90;
+			case _I(G,R,E,Y,9,0):
+				return alpha | X11_GREY_90;
+			case _I(G,R,E,Y,_,9,0):
+				return alpha | X11_GREY_90;
+			case _I(G,R,E,Y, ,9,0):
+				return alpha | X11_GREY_90;
+			case _I(G,R,A,Y,9,1):
+				return alpha | X11_GRAY_91;
+			case _I(G,R,A,Y,_,9,1):
+				return alpha | X11_GRAY_91;
+			case _I(G,R,A,Y, ,9,1):
+				return alpha | X11_GRAY_91;
+			case _I(G,R,E,Y,9,1):
+				return alpha | X11_GREY_91;
+			case _I(G,R,E,Y,_,9,1):
+				return alpha | X11_GREY_91;
+			case _I(G,R,E,Y, ,9,1):
+				return alpha | X11_GREY_91;
+			case _I(G,R,A,Y,9,2):
+				return alpha | X11_GRAY_92;
+			case _I(G,R,A,Y,_,9,2):
+				return alpha | X11_GRAY_92;
+			case _I(G,R,A,Y, ,9,2):
+				return alpha | X11_GRAY_92;
+			case _I(G,R,E,Y,9,2):
+				return alpha | X11_GREY_92;
+			case _I(G,R,E,Y,_,9,2):
+				return alpha | X11_GREY_92;
+			case _I(G,R,E,Y, ,9,2):
+				return alpha | X11_GREY_92;
+			case _I(G,R,A,Y,9,3):
+				return alpha | X11_GRAY_93;
+			case _I(G,R,A,Y,_,9,3):
+				return alpha | X11_GRAY_93;
+			case _I(G,R,A,Y, ,9,3):
+				return alpha | X11_GRAY_93;
+			case _I(G,R,E,Y,9,3):
+				return alpha | X11_GREY_93;
+			case _I(G,R,E,Y,_,9,3):
+				return alpha | X11_GREY_93;
+			case _I(G,R,E,Y, ,9,3):
+				return alpha | X11_GREY_93;
+			case _I(G,R,A,Y,9,4):
+				return alpha | X11_GRAY_94;
+			case _I(G,R,A,Y,_,9,4):
+				return alpha | X11_GRAY_94;
+			case _I(G,R,A,Y, ,9,4):
+				return alpha | X11_GRAY_94;
+			case _I(G,R,E,Y,9,4):
+				return alpha | X11_GREY_94;
+			case _I(G,R,E,Y,_,9,4):
+				return alpha | X11_GREY_94;
+			case _I(G,R,E,Y, ,9,4):
+				return alpha | X11_GREY_94;
+			case _I(G,R,A,Y,9,5):
+				return alpha | X11_GRAY_95;
+			case _I(G,R,A,Y,_,9,5):
+				return alpha | X11_GRAY_95;
+			case _I(G,R,A,Y, ,9,5):
+				return alpha | X11_GRAY_95;
+			case _I(G,R,E,Y,9,5):
+				return alpha | X11_GREY_95;
+			case _I(G,R,E,Y,_,9,5):
+				return alpha | X11_GREY_95;
+			case _I(G,R,E,Y, ,9,5):
+				return alpha | X11_GREY_95;
+			case _I(G,R,A,Y,9,6):
+				return alpha | X11_GRAY_96;
+			case _I(G,R,A,Y,_,9,6):
+				return alpha | X11_GRAY_96;
+			case _I(G,R,A,Y, ,9,6):
+				return alpha | X11_GRAY_96;
+			case _I(G,R,E,Y,9,6):
+				return alpha | X11_GREY_96;
+			case _I(G,R,E,Y,_,9,6):
+				return alpha | X11_GREY_96;
+			case _I(G,R,E,Y, ,9,6):
+				return alpha | X11_GREY_96;
+			case _I(G,R,A,Y,9,7):
+				return alpha | X11_GRAY_97;
+			case _I(G,R,A,Y,_,9,7):
+				return alpha | X11_GRAY_97;
+			case _I(G,R,A,Y, ,9,7):
+				return alpha | X11_GRAY_97;
+			case _I(G,R,E,Y,9,7):
+				return alpha | X11_GREY_97;
+			case _I(G,R,E,Y,_,9,7):
+				return alpha | X11_GREY_97;
+			case _I(G,R,E,Y, ,9,7):
+				return alpha | X11_GREY_97;
+			case _I(G,R,A,Y,9,8):
+				return alpha | X11_GRAY_98;
+			case _I(G,R,A,Y,_,9,8):
+				return alpha | X11_GRAY_98;
+			case _I(G,R,A,Y, ,9,8):
+				return alpha | X11_GRAY_98;
+			case _I(G,R,E,Y,9,8):
+				return alpha | X11_GREY_98;
+			case _I(G,R,E,Y,_,9,8):
+				return alpha | X11_GREY_98;
+			case _I(G,R,E,Y, ,9,8):
+				return alpha | X11_GREY_98;
+			case _I(G,R,A,Y,9,9):
+				return alpha | X11_GRAY_99;
+			case _I(G,R,A,Y,_,9,9):
+				return alpha | X11_GRAY_99;
+			case _I(G,R,A,Y, ,9,9):
+				return alpha | X11_GRAY_99;
+			case _I(G,R,E,Y,9,9):
+				return alpha | X11_GREY_99;
+			case _I(G,R,E,Y,_,9,9):
+				return alpha | X11_GREY_99;
+			case _I(G,R,E,Y, ,9,9):
+				return alpha | X11_GREY_99;
+			case _I(G,R,A,Y,1,0,0):
+				return alpha | X11_GRAY_100;
+			case _I(G,R,A,Y,_,1,0,0):
+				return alpha | X11_GRAY_100;
+			case _I(G,R,A,Y, ,1,0,0):
+				return alpha | X11_GRAY_100;
+			case _I(G,R,E,Y,1,0,0):
+				return alpha | X11_GREY_100;
+			case _I(G,R,E,Y,_,1,0,0):
+				return alpha | X11_GREY_100;
+			case _I(G,R,E,Y, ,1,0,0):
+				return alpha | X11_GREY_100;
+			case _I(D,A,R,K,G,R,E,Y):
+				return alpha | X11_DARK_GREY;
+			case _I(D,A,R,K,_,G,R,E,Y):
+				return alpha | X11_DARK_GREY;
+			case _I(D,A,R,K, ,G,R,E,Y):
+				return alpha | X11_DARK_GREY;
+			case _I(D,A,R,K,G,R,A,Y):
+				return alpha | X11_DARK_GRAY;
+			case _I(D,A,R,K,_,G,R,A,Y):
+				return alpha | X11_DARK_GRAY;
+			case _I(D,A,R,K, ,G,R,A,Y):
+				return alpha | X11_DARK_GRAY;
+			case _I(D,A,R,K,B,L,U,E):
+				return alpha | X11_DARK_BLUE;
+			case _I(D,A,R,K,_,B,L,U,E):
+				return alpha | X11_DARK_BLUE;
+			case _I(D,A,R,K, ,B,L,U,E):
+				return alpha | X11_DARK_BLUE;
+			case _I(D,A,R,K,C,Y,A,N):
+				return alpha | X11_DARK_CYAN;
+			case _I(D,A,R,K,_,C,Y,A,N):
+				return alpha | X11_DARK_CYAN;
+			case _I(D,A,R,K, ,C,Y,A,N):
+				return alpha | X11_DARK_CYAN;
+			case _I(D,A,R,K,M,A,G,E,N,T,A):
+				return alpha | X11_DARK_MAGENTA;
+			case _I(D,A,R,K,_,M,A,G,E,N,T,A):
+				return alpha | X11_DARK_MAGENTA;
+			case _I(D,A,R,K, ,M,A,G,E,N,T,A):
+				return alpha | X11_DARK_MAGENTA;
+			case _I(D,A,R,K,R,E,D):
+				return alpha | X11_DARK_RED;
+			case _I(D,A,R,K,_,R,E,D):
+				return alpha | X11_DARK_RED;
+			case _I(D,A,R,K, ,R,E,D):
+				return alpha | X11_DARK_RED;
+			case _I(L,I,G,H,T,G,R,E,E,N):
+				return alpha | X11_LIGHT_GREEN;
+			case _I(L,I,G,H,T,_,G,R,E,E,N):
+				return alpha | X11_LIGHT_GREEN;
+			case _I(L,I,G,H,T, ,G,R,E,E,N):
+				return alpha | X11_LIGHT_GREEN;
+		}
+	#endif
+	// Do the default code here.
+	for (new i = 0; i != MAX_TEXT_COLOURS; ++i)
+	{
+		new
+			iColor = YSI_g_sColours[i][0];
+		if (iColor == hash)
+		{
+			return alpha | YSI_g_sColours[i][1];
+		}
+		else if (iColor == 0)
+		{
+			return 0;
+		}
+	}
+	return 0;
+}

+ 2252 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_commands.inc

@@ -0,0 +1,2252 @@
+/*----------------------------------------------------------------------------*-
+					================================
+					Y Sever Includes - Commands Core
+					================================
+Description:
+	Runs commands registered with the system and calls the required functions.
+	Also handles alternate names and prefixes.  Theory based very loosely on dcmd.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.1.4
+Changelog:
+	20/10/10:
+		Fixed a bug with insensitive commands - my fault for not testing.
+	06/01/08:
+		Improved master and /help support.
+	04/01/08:
+		Fixed bad element in Command_SetDeniedReturn.
+	12/08/07:
+		Added master support.
+	24/06/07:
+		Modifed a few functions to use Bit_GetBit for speed.
+	04/05/07:
+		Completed command use support.
+		Added invalid character protection.
+	02/05/07:
+		Added YSI_ prefix to all globals.
+	14/04/07:
+		Updated header documentation with more than changelog/functions.
+		Added function name requesting.
+	13/04/07:
+		Added function documentation.
+		Added wrapped functions for e_COMM_FLAG values missing them.
+		Added header function list.
+	12/04/07:
+		Added command removal.
+	11/04/07:
+		Changed system slightly to handle names and alt names separately.  Still need
+		a better way of ignoring names when alt names are used.
+	10/04/07:
+		First version.
+Functions:
+	Public:
+		Command_Add - Adds a command to the array for processing.
+		Command_Remove - Removes a command.
+		Command_Name - Gets the name of a command in a property.
+	Core:
+		Command_Process - Called from OnPlayerCommandText to process entered commands.
+		Command_Parse - Sorts added commands into a binary tree.
+		Command_Hash - Hashes a word for command hashing.
+		Command_ProcRem - Processes a help command in the master script.
+	Stock:
+		Command_SetDisconnectReturn - Sets the return value for unconnected players.
+		Command_UseShortCuts - Toggles use of per-player command shortcuts.
+		Command_SetDeniedReturn - Sets the return value for denied use commands.
+		Command_UseDeniedMessage - Toggles the use of an error message for denied.
+		Command_SetIllegalReturn - Sets the return value for illegal characters.
+		Command_UseAltNames - Toggles the use of ini defined alternate names.
+		Command_UsePrefix - Toggles the use of a global prefix.
+		Command_UseSpace - Toggles the use of a space between prefix and command.
+		Command_SetAltName - Sets the alternate name of a function.
+		Command_SetPrefix - Sets the pfexix to be typed.
+		Comamnd_SetPlayerUse - Sets wether or not a player can use a command.
+		Comamnd_SetPlayerUseByID - Sets wether or not a player can use a command.
+		Command_FindByName - Finds a command in a possibly sorted list.
+	Static:
+		Command_FindFast - Finds a function by binary search of function name.
+		Command_FindAlt - Finds a function by binary search of alternate name.
+		Command_SetSorted - Marks the binary tree as sorted.
+		Command_FindSlow - Finds a function by linear search of function name.
+		Command_Find - Finds a function from entered text.
+		Command_Prefix - Checks the entered prefix.
+		Command_ReturnName - Returns the name of a function.
+		Command_GetPlayerCount - Gets the number of commands a player can use.
+	Inline:
+		Command_Command - Not used, constructor.
+		Command_IsCleared - Checks a player is cleared to use a command.
+		Command_DisconnectReturn - Gets the return value for disconnected players.
+		Command_UsingShortCuts - Checks if short cuts are being used.
+		Command_DeniedReturn - Gets the return value for prohibited commands.
+		Command_IllegalReturn - Gets the return value for invalid characters.
+		Command_DeniedMessage - Checks if a level error message should be sent.
+		Command_IsSorted - Checks if the binary tree has been initialised.
+		Command_UsingAltNames - Checks if alt names are being used.
+		Command_UsingPrefix - Checks if the prefix is being used.
+		Command_UsingSpace - Checks if the space option is being used.
+		Command_CallFunction - Calls the required function.
+		ycmd - Adds a command to the system.
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	MAX_COMMAND_LENGTH - The maximum length of a command string.
+	COMMAND_NOT_FOUND - Indicates that a searched for string is not a function.
+Enums:
+	e_COMM_FLAG - Bit mappings for command options.
+	E_COMMANDS - Structure of the array holding the string data.
+Macros:
+	Command_(%1) - Forwards and declares a standard command for calling.
+	ycmd(%1) - Adds a command to the array (wrapper for Command_Add).
+Tags:
+	e_COMM_FLAG - Flag type.
+Variables:
+	Global:
+		-
+	Static:
+		YSI_g_sCommands - Holds all the textual data of the commands.
+		YSI_g_sSearchTree - Tree of hashes for function names.
+		YSI_g_sAltTree - Tree of hashes for alternate names.
+		YSI_g_sPrefix - The command prefix.
+		YSI_g_sPrefixLength - Length of the prefix.
+		YSI_g_sCommandIndex - Pointer to the next free index in the function array.
+		YSI_g_sAltCount - The number of commands with altnames.
+		YSI_g_sCommandFlags - Bit array of command options.
+Commands:
+	commands - Lists all commands available to you.
+Compile options:
+	COMMAND_SENSITIVE - Make commands case sensitive.
+	COMMAND_ACCURATE - Can use '@' in command names.
+	MAX_COMMANDS - The maximum number of commands which can be used.
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#if !defined MAX_COMMANDS
+	#define MAX_COMMANDS                (1024)
+#endif
+
+#define _GROUP_MAKE_NAME_CMD<%0...%1>   %0Command%1
+#define _GROUP_MAKE_LIMIT_CMD           MAX_COMMANDS
+
+#include <YSI\y_master>
+#include <YSI\y_groups>
+
+#include <YSI\y_debug>
+
+#include <YSI\y_bintree>
+#include <YSI\y_scripting>
+#include <YSI\y_playerarray>
+#include <YSI\y_utils>
+
+// Define the CMD: macro.  This uses the prefix "@yC_" as it's 32 bits so allows
+// for fast command string searching in the publics table and makes the commands
+// public without the need for the public keyword.
+/*#if YSIM_HAS_MASTER
+	#if YSIM_IS_CLIENT
+		#define YCMD:%1(%2) static stock yC@_%1(%2)
+	#else
+		#if YSIM_IS_SERVER
+			#define YCMD:%1(%2) forward @yC_%1(a,b[],c);@yC_%1(a,b[],c)U@(8,YSIM_RETURN,yC@_%1(a,b,c));static yC@_%1(%2)
+		#else
+			#define YCMD:%1(%2) forward @yC_%1(a,b[],c);@yC_%1(a,b[],c)<>{}@yC_%1(a,b[],c)<_YCM:y>U@(8,YSIM_RETURN,yC@_%1(a,b,c));static yC@_%1(%2)
+		#endif
+	#endif
+#else
+	#define YCMD:%1(%2) forward @yC_%1(%2);@yC_%1(%2)
+#endif*/
+
+#define YCMD:%0(%1) RC:%0(%1)
+
+// ZCMD compatibility.
+#define CMD:%0(%1) RC:%0(%1,_h_e_l_p_)if(_h_e_l_p_)return 0;else
+#define COMMAND CMD
+
+// This is opposite Scripting_FastString as that's in C, not packed, order.
+#define Command_FastString(%1,%2,%3,%4) \
+	(((%1) << 24) | ((%2) << 16) | ((%3) << 8) | ((%4) << 0))
+
+#define MAX_COMMAND_LENGTH              (32)
+
+#define COMMAND_NOT_FOUND               (-1)
+
+#if defined COMMAND_SENSITIVE
+	#define TOLOWER(%0) (%0)
+	#define COMMAND_END_CMP (0)
+#else
+	#if defined COMMAND_ACCURATE
+		#define TOLOWER(%0) tolower(%0)
+		#define COMMAND_END_CMP (0)
+	#else
+		#define TOLOWER(%0) ((%0) | 0x20)
+		#define COMMAND_END_CMP (0x20)
+	#endif
+#endif
+
+// Don't forget the Scripting_FastString below if you change this.
+#define COMMAND_FUNCTION_PREFIX         (Command_FastString('@', 'y', 'C', '_'))
+
+// Reset both of these when you remove a command.
+#define _Command_IsValid(%0) ((Command_GetPointer(%0)==(%0))||(YSI_g_sCommands[(%0)][E_COMMANDS_MASTERS]==-1))
+#define Command_IsValid(%0) ((0<=(%0)<MAX_COMMANDS)&&_Command_IsValid(%0))
+
+enum e_COMM_FLAG (<<= 1)
+{
+	e_COMM_FLAG_PROVIDER = 0x000000FF,
+	e_COMM_FLAG_SORTED = 0x00000100,
+	e_COMM_FLAG_PERMISSION_WARN,
+	e_COMM_FLAG_USE_ALTNAMES,
+	e_COMM_FLAG_PERMISSION_RET,
+	e_COMM_FLAG_USE_PREFIX,
+	e_COMM_FLAG_USE_SPACE,
+	e_COMM_FLAG_USE_SHORTCUTS,
+	e_COMM_FLAG_DISCONNECT,
+	e_COMM_FLAG_ILLEGAL,
+	e_COMM_FLAG_OPCT,
+	e_COMM_FLAG_OPC,
+	e_COMM_FLAG_COLLISION,
+	e_COMM_FLAG_UNKNOWN,
+	e_COMM_FLAG_MULPRO
+}
+
+enum E_COMMANDS
+{
+	E_COMMANDS_FUNCTION[MAX_COMMAND_LENGTH char],
+	PlayerArray:E_COMMANDS_PLAYERS<MAX_PLAYERS>,
+	E_COMMANDS_FUNC_POINTER,
+	E_COMMANDS_MASTERS
+}
+
+static stock
+	YSI_g_sCommands[MAX_COMMANDS][E_COMMANDS],
+	BinaryTree:YSI_g_sSearchTree<MAX_COMMANDS>,
+	e_COMM_FLAG:YSI_g_sCommandFlags = e_COMM_FLAG:0xFF,
+	YSI_g_sCommandIndex,
+	YSI_g_sCommandCount,
+	//YSI_g_sCommandDialog[MAX_PLAYERS] = {-1, ...},
+	YSI_g_sMaster23,
+	YSI_g_sPlayerProvider[MAX_PLAYERS char] = {-1, ...};
+
+/*Group:Command_InitialiseFromGroups(x)
+{
+	//Bit_SetAll(YSI_g_sCommands[x][E_COMMANDS_PLAYERS], true, bits<MAX_PLAYERS>);
+	PA_Init(YSI_g_sCommands[x][E_COMMANDS_PLAYERS], true, bits<MAX_PLAYERS>);
+}*/
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Name
+Params:
+	index - Index of the command to operate on.
+Return:
+	-
+Notes:
+	Gets the name of a function from the array.
+-*----------------------------------------------------------------------------*/
+
+#define Command_Name(%1) \
+	(YSI_g_sCommands[(%1)][E_COMMANDS_FUNCTION][1])
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetFuncName
+Params:
+	index - Index of the command to operate on.
+Return:
+	-
+Notes:
+	Gets the full function name for a slot - note that this may not be the right
+	function if this slot points to another one.
+-*----------------------------------------------------------------------------*/
+
+#define Command_GetFuncName(%1) \
+	(YSI_g_sCommands[(%1)][E_COMMANDS_FUNCTION])
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetPointer
+Params:
+	index - Index of the command to operate on.
+Return:
+	-
+Notes:
+	Gets the pointer for a function from the array.
+-*----------------------------------------------------------------------------*/
+
+#define Command_GetPointer(%1) \
+	(YSI_g_sCommands[(%1)][E_COMMANDS_FUNC_POINTER]&0x00FFFFFF)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetProvider
+Params:
+	index - Index of the command to operate on.
+Return:
+	-
+Notes:
+	Gets the unique script in which this version of the command is.
+-*----------------------------------------------------------------------------*/
+
+#define Command_Provider(%1) \
+	(YSI_g_sCommands[(%1)][E_COMMANDS_FUNC_POINTER]>>>24)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetProvider
+Params:
+	index - Index of the command to operate on.
+Return:
+	-
+Notes:
+	Gets the unique script in which this version of the command is.
+-*----------------------------------------------------------------------------*/
+
+#define Command_DefaultProvider() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_PROVIDER)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetFunction
+Params:
+	index - Index of the command to operate on.
+Return:
+	-
+Notes:
+	Gets the real function for this slot.
+-*----------------------------------------------------------------------------*/
+
+#define Command_GetFunction(%1) \
+	(Command_GetFuncName(Command_GetPointer((%1))))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_CheckPlayer
+Params:
+	index - Index of the command to operate on.
+	playerid - The player to check for.
+Return:
+	-
+Notes:
+	Gets wether a player can use a command.
+-*----------------------------------------------------------------------------*/
+
+#define Command_CheckPlayer(%1,%2) \
+	(YSI_g_sCommands[(%1)][E_COMMANDS_PLAYERS][Bit_Slot(%2)+1]&Bit_Mask(%2))
+	//(PA=([E_COMMANDS_PLAYERS], (%2)))
+	//(Bit_Get(YSI_g_sCommands[(%1)][E_COMMANDS_PLAYERS], (%2)))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_DeniedReturn
+Params:
+	-
+Return:
+	e_COMM_FLAG_PERMISSION_RET
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_DeniedReturn() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_PERMISSION_RET)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetDeniedReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@v:Command_SetDeniedReturn[i](bool:set)
+{
+	if (set)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_PERMISSION_RET;
+	}
+	else
+	{
+		YSI_g_sCommandFlags &= ~e_COMM_FLAG_PERMISSION_RET;
+	}
+}
+
+RF@v:Command_SetProvider[i](p)
+{
+	YSI_g_sCommandFlags = (YSI_g_sCommandFlags & ~e_COMM_FLAG_PROVIDER) | (e_COMM_FLAG:p & e_COMM_FLAG_PROVIDER) | e_COMM_FLAG_MULPRO;
+}
+
+RF:Command_GetProvider[]()
+{
+	return _:Command_DefaultProvider();
+}
+
+RF@v:Command_SetPlayerProvider[ii](playerid,p)
+{
+	if (0 <= playerid < MAX_PLAYERS)
+	{
+		YSI_g_sPlayerProvider{playerid} = p & 0xFF;
+	}
+}
+
+RF:Command_GetPlayerProvider[i](playerid)
+{
+	return YSI_g_sPlayerProvider{playerid};
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetDeniedReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Command_GetDeniedReturn[]()
+{
+	return bool:Command_DeniedReturn();
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_HasCollisions
+Params:
+	-
+Return:
+	e_COMM_FLAG_COLLISION
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_HasCollisions() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_COLLISION)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_HasCollisions
+Params:
+	-
+Return:
+	e_COMM_FLAG_MULPRO
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_HasMultipleProviders() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_MULPRO)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetCollisions
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_SetCollisions() \
+	YSI_g_sCommandFlags |= e_COMM_FLAG_COLLISION
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_IllegalReturn
+Params:
+	-
+Return:
+	e_COMM_FLAG_ILLEGAL
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_IllegalReturn() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_ILLEGAL)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetIllegalReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@v:Command_SetIllegalReturn[i](bool:set)
+{
+	if (set)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_ILLEGAL;
+	}
+	else
+	{
+		YSI_g_sCommandFlags &= ~e_COMM_FLAG_ILLEGAL;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetIllegalReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Command_GetIllegalReturn[]()
+{
+	return bool:Command_IllegalReturn();
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_IllegalReturn
+Params:
+	-
+Return:
+	e_COMM_FLAG_ILLEGAL
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_UnknownReturn() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_UNKNOWN)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetIllegalReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@v:Command_SetUnknownReturn[i](bool:set)
+{
+	if (set)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_UNKNOWN;
+	}
+	else
+	{
+		YSI_g_sCommandFlags &= ~e_COMM_FLAG_UNKNOWN;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetIllegalReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Command_GetUnknownReturn[]()
+{
+	return bool:Command_UnknownReturn();
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_DisconnectReturn
+Params:
+	-
+Return:
+	e_COMM_FLAG_DISCONNECT
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_DisconnectReturn() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_DISCONNECT)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetDisconnectReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@v:Command_SetDisconnectReturn[i](bool:set)
+{
+	if (set)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_DISCONNECT;
+	}
+	else
+	{
+		YSI_g_sCommandFlags &= ~e_COMM_FLAG_DISCONNECT;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetDisconnectReturn
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Command_GetDisconnectReturn[]()
+{
+	return bool:Command_DisconnectReturn();
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_DeniedDisplay
+Params:
+	-
+Return:
+	e_COMM_FLAG_PERMISSION_WARN
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_DeniedDisplay() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_PERMISSION_WARN)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetDeniedDisplay
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@v:Command_SetDeniedDisplay[i](bool:set)
+{
+	if (set)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_PERMISSION_WARN;
+	}
+	else
+	{
+		YSI_g_sCommandFlags &= ~e_COMM_FLAG_PERMISSION_WARN;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetDeniedDisplay
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Command_GetDeniedDisplay[]()
+{
+	return bool:Command_DeniedDisplay();
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetNameInt
+Params:
+	f - Command to get the name of.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+/*RF:Command_GetNameInt[i](f)
+{
+	if (f >= 0 && f < YSI_g_sCommandIndex)
+	{
+		setproperty(8, "", YSIM_STRING, Command_Name(f));
+		return 1;
+	}
+	return 0;
+}*/
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetName
+Params:
+	funcid - Command to get the name of.
+Return:
+	-
+Notes:
+
+native Command_GetName(funcid);
+
+-*----------------------------------------------------------------------------*/
+
+/*stock Command_GetName(funcid)
+{
+	new
+		buffer[32] = "";
+	if (Command_GetNameInt(funcid))
+	{
+		getproperty(8, "", YSIM_STRING, buffer);
+		strunpack(buffer, buffer);
+	}
+	return buffer;
+}*/
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_IsSorted
+Params:
+	-
+Return:
+	e_COMM_FLAG_SORTED
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_IsSorted() \
+	(YSI_g_sCommandFlags & e_COMM_FLAG_SORTED)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Generate
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@v:Command_Generate[]()
+{
+	P:2("Command_Generate called");
+	if (!Command_IsSorted())
+	{
+		P:3("Command_Generate: Count = %d", YSI_g_sCommandCount);
+		new
+			data[MAX_COMMANDS][E_BINTREE_INPUT];
+		// This is only called once, so we know YSI_g_sCommandCount will be
+		// accurate WRT the locations of commands.
+		for (new i = 0; i != YSI_g_sCommandCount; ++i)
+		{
+			data[i][E_BINTREE_INPUT_POINTER] = i;
+			new
+				hash = Command_PackHash(Command_Name(i));
+			// Check for an existing command with this hash.
+			if (!Command_HasCollisions())
+			{
+				for (new j = 0; j != i; ++j)
+				{
+					if (hash == data[j][E_BINTREE_INPUT_VALUE])
+					{
+						Command_SetCollisions();
+						break;
+					}
+				}
+			}
+			C:3(else printf("Command_Generate: Hash = %d", hash););
+			P:3("Command_Generate: Hash = %d", hash);
+			data[i][E_BINTREE_INPUT_VALUE] = hash;
+		}
+		Bintree_Generate(YSI_g_sSearchTree, data, YSI_g_sCommandCount);
+		P:4("Command_Generate: %d %d %d %d %d", YSI_g_sSearchTree[0][E_BINTREE_TREE_VALUE], YSI_g_sSearchTree[0][E_BINTREE_TREE_LEFT], YSI_g_sSearchTree[0][E_BINTREE_TREE_RIGHT], YSI_g_sSearchTree[0][E_BINTREE_TREE_PARENT], YSI_g_sSearchTree[0][E_BINTREE_TREE_POINTER]);
+		// Set sorted to true.
+		YSI_g_sCommandFlags |= e_COMM_FLAG_SORTED;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	OnScriptInit
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	// Set the default provider as any script.
+	//YSI_g_sCommandFlags = 0xFF;
+	P:1("Command_OnScriptInit called");
+	// Initialise the tree.
+	#if YSIM_NOT_CLIENT
+		Bintree_Reset(YSI_g_sSearchTree);
+		YSI_g_sMaster23 = getproperty(8, "x@");
+	#endif
+	// Make a list of unused commands.
+	for (new i = 0; i != MAX_COMMANDS - 1; ++i)
+	{
+		YSI_g_sCommands[i][E_COMMANDS_FUNC_POINTER] = i + 1;
+	}
+	YSI_g_sCommands[MAX_COMMANDS - 1][E_COMMANDS_FUNC_POINTER] = -1;
+	// Loop through all the possible commands.  Note that this may need to add
+	// commands to the remote command system if this is not the master system.
+	// The way the master system is designed means that we will know if we are
+	// master or not by the time this function is called.
+	new
+		buffer[32],
+		idx;
+	// This is the only place where Scripting_FastString is used instead of
+	// Commands_FastString as the strings in the AMX are not the same as packed
+	// strings - they are in different memory orders.
+	while ((idx = Scripting_GetPublicFast(idx, buffer, (Scripting_FastString('@', 'y', 'C', '_')))))
+	{
+		Command_Add(buffer, _@);
+		P:2("Command_OnScriptInit: Adding %s", buffer);
+	}
+	Command_Generate();
+	// Now that all commands have been added to the array, sort it.
+	// Now call the next constructor.
+	if (funcidx("Command_OnPlayerCommandText") != -1)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_OPCT;
+	}
+	if (funcidx("Command_OnPlayerConnect") != -1)
+	{
+		YSI_g_sCommandFlags |= e_COMM_FLAG_OPC;
+	}
+	CallLocalFunction("Command_OnScriptInit", "");
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit Command_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit Command_OnScriptInit
+#endif
+forward Command_OnScriptInit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	OnScriptClose
+Params:
+	script - ID of the closing script.
+Return:
+	-
+Notes:
+	Called when a script under the control of the master system ends.
+-*----------------------------------------------------------------------------*/
+
+#if YSIM_NOT_CLIENT
+	#if YSIM_CLOUD
+		public OnScriptClose(script) <>
+		{
+			CallLocalFunction("Command_OnScriptClose", "i", script);
+		}
+		
+		public OnScriptClose(script) <_YCM:y>
+	#elseif YSIM_IS_STUB
+		#error y_commands called with YSIM_IS_STUB.
+	#else
+		public OnScriptClose(script)
+	#endif
+	{
+		new
+			mask = ~(1 << script);
+		for (new i = 0; i != MAX_COMMANDS; ++i)
+		{
+			if (Command_GetPointer(i) == i && (YSI_g_sCommands[i][E_COMMANDS_MASTERS] &= mask) == 0)
+			{
+				for (new j = 0; j != MAX_COMMANDS; ++j)
+				{
+					// Remove all alternate names.
+					if (Command_GetPointer(j) == i)
+					{
+						YSI_g_sCommands[j][E_COMMANDS_FUNC_POINTER] = YSI_g_sCommandIndex;
+						YSI_g_sCommandIndex = j;
+						YSI_g_sCommands[j][E_COMMANDS_MASTERS] = 0;
+						//Bintree_Delete(YSI_g_sSearchTree, j, YSI_g_sCommandCount);
+						Command_RemoveFromBintree(j);
+						--YSI_g_sCommandCount;
+						//Bintree_Add(YSI_g_sSearchTree, YSI_g_sCommandIndex, hash, YSI_g_sCommandIndex);
+					}
+				}
+			}
+			/*new
+				p = i;
+			while (YSI_g_sCommands[p][E_COMMANDS_MASTERS] == -1)
+			{
+				p = Command_GetPointer(p);
+			}
+			if (YSI_g_sCommands[p][E_COMMANDS_FUNC_POINTER] == p && (YSI_g_sCommands[p][E_COMMANDS_MASTERS] &= mask) == 0)
+			{
+				// Remove all alternate versions of commands - done backwards by
+				// an alternate command checking its parent.  Can also handle
+				// alternate versions of alternate commands (note this is the
+				// only code that can currently).
+				YSI_g_sCommands[i][E_COMMANDS_MASTERS] = 0;
+				YSI_g_sCommands[i][E_COMMANDS_FUNC_POINTER] = YSI_g_sCommandIndex;
+				YSI_g_sCommandIndex = i;
+				// Mark it as invalid in this instance.
+				YSI_g_sCommands[i][E_COMMANDS_MASTERS] = 0;
+				// Reduce the number of commands.
+				--YSI_g_sCommandCount;
+			}*/
+		}
+		YSI_g_sMaster23 = getproperty(8, "x@");
+		// I can add better removal code later.  Done ^
+		CallLocalFunction("Command_OnScriptClose", "i", script);
+	}
+	
+	// Don't need ALS here as we did it supporting it at the start.
+	#undef OnScriptClose
+	#define OnScriptClose Command_OnScriptClose
+	forward Command_OnScriptClose(script);
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	OnPlayerConnect
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+// TODO: Rewrite!
+//RA:Command_OnPlayerConnect(playerid)
+
+#if YSIM_NOT_CLIENT
+	#if YSIM_CLOUD
+		public OnPlayerConnect(playerid) <>
+		{
+			YSI_g_sPlayerProvider{playerid} = 0xFF;
+			if (YSI_g_sCommandFlags & e_COMM_FLAG_OPC)
+			{
+				return CallLocalFunction("Command_OnPlayerConnect", "i", playerid);
+			}
+			return 1;
+		}
+		
+		public OnPlayerConnect(playerid) <_YCM:y>
+	#elseif YSIM_IS_STUB
+		#error y_commands called with YSIM_IS_STUB.
+	#else
+		public OnPlayerConnect(playerid)
+	#endif
+	{
+		//#if YSIM_NOT_CLIENT
+		//YSI_g_sCommandDialog[playerid] = -1;
+		YSI_g_sPlayerProvider{playerid} = 0xFF;
+		NO_GROUPS()
+		{
+			new
+				slot = Bit_Slot(playerid) + 1,
+				Bit:mask = Bit_Mask(playerid); //Bit:(1 << (playerid & (cellbits - 1)));
+			for (new i = 0; i != MAX_COMMANDS; ++i)
+			{
+				YSI_g_sCommands[i][E_COMMANDS_PLAYERS][slot] |= mask;
+				//PA+(YSI_g_sCommands[i][E_COMMANDS_PLAYERS], mask);
+			}
+		}
+		//#endif
+		// Groups will ALWAYS be called after this function - so this can reset
+		// player permissions however it likes with the group system then being
+		// able to override anything set in here.
+		if (YSI_g_sCommandFlags & e_COMM_FLAG_OPC)
+		{
+			return CallLocalFunction("Command_OnPlayerConnect", "i", playerid);
+		}
+		return 1;
+		//ALS_CALL<PlayerConnect, i>(playerid)
+	}
+	
+	#if defined _ALS_OnPlayerConnect
+		#undef OnPlayerConnect
+	#else
+		#define _ALS_OnPlayerConnect
+	#endif
+	#define OnPlayerConnect Command_OnPlayerConnect
+	forward Command_OnPlayerConnect(playerid);
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_
+Params:
+	command - Command to declare.
+Return:
+	-
+Notes:
+	Deprecated!
+-*----------------------------------------------------------------------------*/
+
+#define Command_(%1) \
+	CMD:%1(playerid,params[],help)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	ycmd
+Params:
+	command[] - Command to register.
+Return:
+	-
+Notes:
+	Deprecated!
+-*----------------------------------------------------------------------------*/
+
+#define ycmd(%1);
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_FindFast
+Params:
+	data[] - Function name to find.
+	value - Hash of function name.
+Return:
+	Position in functions array or COMMAND_NOT_FOUND.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+static stock Command_FindFast(data[], value, provider = 0xFF)
+{
+	new
+		leaf,
+		pointer;
+	P:5("Command_FindFast: Searching for %s", data);
+	while ((pointer = Bintree_FindValue(YSI_g_sSearchTree, value, leaf)) != BINTREE_NOT_FOUND)
+	{
+		new
+			p = YSI_g_sCommands[pointer][E_COMMANDS_FUNC_POINTER];
+		if (Command_HasMultipleProviders() && (p & 0xFF000000 != 0xFF000000) && (p >>> 24 != provider)) continue;
+		// Don't do an strcmp if there are no collisions.
+		if (!Command_HasCollisions()) return pointer;
+		//if (!strcmp(YSI_g_sCommands[i][E_COMMANDS_FUNCTION][1], funcname) &&
+		if (!strcmp(Command_Name(pointer), data)) return pointer;
+		//if (!strcmp(Command_Name(pointer), data) && (Command_GetProvider(pointer) == 0xFF || Command_GetProvider(pointer) == provider)) return pointer;
+	}
+	P:5("Command_FindFast: Not found");
+	return COMMAND_NOT_FOUND;
+}
+
+static stock Command_FindFastStrict(data[], value, provider)
+{
+	new
+		leaf,
+		pointer;
+	P:5("Command_FindFast: Searching for %s", data);
+	while ((pointer = Bintree_FindValue(YSI_g_sSearchTree, value, leaf)) != BINTREE_NOT_FOUND)
+	{
+		if (Command_HasMultipleProviders() && (YSI_g_sCommands[pointer][E_COMMANDS_FUNC_POINTER] >>> 24 != provider)) continue;
+		// Don't do an strcmp if there are no collisions.
+		if (!Command_HasCollisions()) return pointer;
+		if (!strcmp(Command_Name(pointer), data)) return pointer;
+	}
+	P:5("Command_FindFast: Not found");
+	return COMMAND_NOT_FOUND;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_FindSlow
+Params:
+	funcname[] - Function to find.
+Return:
+	-
+Notes:
+	Searches through the array for function linearly - used to set altnames
+	before the data has been sorted.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_FindSlow(funcname[], provider = 0xFF)
+{
+	for (new i = 0; i != MAX_COMMANDS; ++i)
+	{
+		new
+			p = YSI_g_sCommands[i][E_COMMANDS_FUNC_POINTER];
+		if (((p & 0x00FFFFFF == i) || (YSI_g_sCommands[i][E_COMMANDS_MASTERS] == -1)) &&
+			(!Command_HasMultipleProviders() || (p & 0xFF000000 == 0xFF000000) || (p >>> 24 == provider)) &&
+			!strcmp(Command_Name(i), funcname))
+		{
+			return i;
+		}
+	}
+	return COMMAND_NOT_FOUND;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_FindSlowStrict
+Params:
+	funcname[] - Function to find.
+Return:
+	-
+Notes:
+	Searches through the array for function linearly - used to set altnames
+	before the data has been sorted.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_FindSlowStrict(funcname[], provider)
+{
+	for (new i = 0; i != MAX_COMMANDS; ++i)
+	{
+		new
+			p = YSI_g_sCommands[i][E_COMMANDS_FUNC_POINTER];
+		// This needs additional checks that the item is valid.
+		if (((p & 0x00FFFFFF == i) || (YSI_g_sCommands[i][E_COMMANDS_MASTERS] == -1)) &&
+			(!Command_HasMultipleProviders() || (p >>> 24 == provider)) &&
+			!strcmp(Command_Name(i), funcname))
+		{
+			return i;
+		}
+	}
+	return COMMAND_NOT_FOUND;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_AddHash
+Params:
+	command[] - Command text to hash.
+	dest[] - Array to copy to.
+	idx - Point to start copying from.
+Return:
+	hash value.
+Notes:
+	Hashes a string and copies it to a destination at the same time.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_AddHash(command[], dest[], idx)
+{
+	// Skip the function name prefix.
+	new
+		hash = -1,
+		ch,
+		dx = 1,
+		end = idx + 28;
+	// Copy and hash at the same time.
+	do
+	{
+		/*ch = TOLOWER(command[idx++]);
+		// Always NULL terminate.
+		if ((dest[dx] = ch << 24) == COMMAND_END_CMP << 24)
+		{
+			// Fixes a bug with commands multiples of 4 chars long.
+			dest[dx] = 0;
+			break;
+		}*/
+		ch = TOLOWER(command[idx++]);
+		if (ch == COMMAND_END_CMP) break;
+		dest[dx] = ch << 24;
+		hash = hash * 33 + ch; //Command_ToUpper(ch);
+		ch = TOLOWER(command[idx++]);
+		if (ch == COMMAND_END_CMP) break;
+		dest[dx] |= ch << 16;
+		hash = hash * 33 + ch; //Command_ToUpper(ch);
+		ch = TOLOWER(command[idx++]);
+		if (ch == COMMAND_END_CMP) break;
+		dest[dx] |= ch << 8;
+		hash = hash * 33 + ch; //Command_ToUpper(ch);
+		ch = TOLOWER(command[idx++]);
+		if (ch == COMMAND_END_CMP) break;
+		dest[dx] |= ch << 0;
+		hash = hash * 33 + ch; //Command_ToUpper(ch);
+		++dx;
+	}
+	while (idx < end);
+	return hash;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_FastHash
+Params:
+	command[] - Command text to hash.
+Return:
+	hash value.
+Notes:
+	Just hashes the passed string.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_FastHash(command[])
+{
+	new
+		index = 0,
+		hash = -1,
+		ch;
+	while ((ch = command[index++])) hash = hash * 33 + TOLOWER(ch);
+	return hash;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_PackHash
+Params:
+	command[] - Command text to hash.
+Return:
+	hash value.
+Notes:
+	Hashes packed strings.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_PackHash(command[])
+{
+	new
+		index = 0,
+		hash = -1,
+		ch;
+	while ((ch = command[index++]))
+	{
+		P:4("Commands_PackHash: ch = 0x%04x%04x", ch >>> 16, ch & 0xFFFF);
+		if (ch & 0xFF000000)
+		{
+			hash = hash * 33 + TOLOWER(ch >>> 24);
+			P:5("Command_PackHash: Hash1 = %d", hash);
+		}
+		else
+		{
+			break;
+		}
+		if (ch & 0x00FF0000)
+		{
+			hash = hash * 33 + TOLOWER(ch >> 16 & 0xFF);
+			P:5("Command_PackHash: Hash2 = %d", hash);
+		}
+		else
+		{
+			break;
+		}
+		if (ch & 0x0000FF00)
+		{
+			hash = hash * 33 + TOLOWER(ch >> 8 & 0xFF);
+			P:5("Command_PackHash: Hash3 = %d", hash);
+		}
+		else
+		{
+			break;
+		}
+		if (ch & 0x000000FF)
+		{
+			hash = hash * 33 + TOLOWER(ch & 0xFF);
+			P:5("Command_PackHash: Hash4 = %d", hash);
+		}
+		else
+		{
+			break;
+		}
+	}
+	return hash;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Hash
+Params:
+	command[] - Command text to hash.
+	&index - Start point and variable to store end point to.
+	&length - Length of the hashed word.
+Return:
+	hash value.
+Notes:
+	Hashes a string using space delimiters and returns information such as the
+	length of the string hased and the start point of the next word.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_Hash(command[], &index, &length)
+{
+	new
+		hash = -1,
+		ch;
+	length = index;
+	while ((ch = command[index++]) > ' ') hash = hash * 33 + TOLOWER(ch);
+	length = index - length - 1;
+	while (ch)
+	{
+		if (ch > ' ')
+		{
+			break;
+		}
+		ch = command[index++];
+	}
+	--index;
+	return hash;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Find
+Params:
+	function[] - Function name to find.
+Return:
+	Position in functions array or COMMAND_NOT_FOUND.
+Notes:
+	Used by API functions to avoid repeated sorting checks.
+-*----------------------------------------------------------------------------*/
+
+static stock Command_Find(function[], provider = -1)
+{
+	if (provider == -1)
+	{
+		provider = _:Command_DefaultProvider();
+		// Find the ID of the command.
+		if (Command_IsSorted())
+		{
+			return Command_FindFast(function, Command_FastHash(function), provider);
+		}
+		else
+		{
+			return Command_FindSlow(function, provider);
+		}
+	}
+	else
+	{
+		provider &= 0xFF;
+		// Find the ID of the command.
+		if (Command_IsSorted())
+		{
+			return Command_FindFastStrict(function, Command_FastHash(function), provider);
+		}
+		else
+		{
+			return Command_FindSlowStrict(function, provider);
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetID
+Params:
+	function[] - Function name to find.
+Return:
+	The ID of the passed function.
+Notes:
+	-
+
+native Command_GetID(function[])
+
+-*----------------------------------------------------------------------------*/
+
+RF@p:Command_GetID[s](function[])<function>
+{
+	return Command_Find(function);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetPlayer
+Params:
+	command - Command to set for.
+	playerid - Player to set.
+	bool:set - Wether or not this player can use this command.
+Return:
+	-
+Notes:
+	-
+
+native bool:Command_SetPlayer(command, playerid, bool:set);
+
+-*----------------------------------------------------------------------------*/
+
+RF@pv:Command_SetPlayer[iii](c,p,bool:s)<c,p,s>
+{
+//	if (c < 0 || c >= YSI_g_sCommandIndex)
+	if (0 <= c < MAX_COMMANDS)
+	{
+		//Bit_Set(YSI_g_sCommands[c][E_COMMANDS_PLAYERS], p, s, bits<MAX_PLAYERS>);
+		if (s) PA+(YSI_g_sCommands[c][E_COMMANDS_PLAYERS], p);
+		else PA-(YSI_g_sCommands[c][E_COMMANDS_PLAYERS], p);
+		// Not in range,
+//		return false;
+	}
+//	return s;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_SetPlayerNamed
+Params:
+	funcname[] - Command to set for.
+	playerid - Player to set.
+	set - Wether or not this player can use this command.
+Return:
+	-
+Notes:
+	Like Command_SetPlayer but for a function name.
+
+native bool:Command_SetPlayerNamed(funcname[], playerid, bool:set);
+
+-*----------------------------------------------------------------------------*/
+
+RF@pv:Command_SetPlayerNamed[sii](f[],p,bool:s)<f,p,s>
+{
+	Command_SetPlayer(Command_Find(f), p, s);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetPlayer
+Params:
+	command - Command to get for.
+	playerid - Player to get.
+Return:
+	Wether this player can use this command.
+Notes:
+	-
+
+native bool:Command_GetPlayer(command, playerid);
+
+-*----------------------------------------------------------------------------*/
+
+RF@t:bool:Command_GetPlayer[ii](command, playerid)
+{
+	if (0 <= command < MAX_COMMANDS)
+	{
+		return bool:Command_CheckPlayer(command, playerid);
+	}
+	// Not in range,
+	return false;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetPlayerNamed
+Params:
+	funcname[] - Command to get for.
+	playerid - Player to get.
+Return:
+	-
+Notes:
+	Like Command_GetPlayer but for a function name.
+
+native bool:Command_GetPlayerNamed(funcname[], playerid);
+
+-*----------------------------------------------------------------------------*/
+
+RF@pt:bool:Command_GetPlayerNamed[si](func[], playerid)<func, playerid>
+{
+	return Command_GetPlayer(Command_Find(func), playerid);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Remove
+Params:
+	func - The slot of the command to remove.
+Return:
+	-
+Notes:
+
+native Command_Remove(func);
+
+-*----------------------------------------------------------------------------*/
+
+static stock Command_RemoveFromBintree(func)
+{
+	if (!Command_IsSorted()) return;
+	// This function has to find the right index in the binary tree, as that's
+	// not in the same order at all.
+	new
+		leaf,
+		hash = Command_PackHash(Command_Name(func));
+	// Find where in the binary tree this is referenced from.
+	while (Bintree_FindValue(YSI_g_sSearchTree, hash, _, leaf) != BINTREE_NOT_FOUND)
+	{
+		if (YSI_g_sSearchTree[leaf][E_BINTREE_TREE_POINTER] == func)
+		{
+			P:2("Command_RemoveFromBintree: Delete branch");
+			Bintree_Delete(YSI_g_sSearchTree, leaf, YSI_g_sCommandCount);
+			return;
+		}
+	}
+}
+
+RF:Command_Remove[i](func)
+{
+	P:2("Command_Remove called (%d)", func);
+	if (0 <= func < MAX_COMMANDS)
+	{
+		if (Command_GetPointer(func) == func)
+		{
+			for (new i = 0; i != MAX_COMMANDS; ++i)
+			{
+				// Remove all alternate names.
+				if (Command_GetPointer(i) == func)
+				{
+					// Add this to the list of unused functions.
+					YSI_g_sCommands[i][E_COMMANDS_FUNC_POINTER] = YSI_g_sCommandIndex;
+					YSI_g_sCommandIndex = i;
+					// Mark it as invalid in this instance.
+					YSI_g_sCommands[i][E_COMMANDS_MASTERS] = 0;
+					// Reduce the number of commands.
+					//Bintree_Delete(YSI_g_sSearchTree, i, YSI_g_sCommandCount);
+					Command_RemoveFromBintree(i);
+					--YSI_g_sCommandCount;
+				}
+			}
+		}
+		else if (YSI_g_sCommands[func][E_COMMANDS_MASTERS] == -1)
+		{
+			// Remove a single alternate name.
+			YSI_g_sCommands[func][E_COMMANDS_FUNC_POINTER] = YSI_g_sCommandIndex;
+			YSI_g_sCommandIndex = func;
+			YSI_g_sCommands[func][E_COMMANDS_MASTERS] = 0;
+			//Bintree_Delete(YSI_g_sSearchTree, func, YSI_g_sCommandCount);
+			Command_RemoveFromBintree(func);
+			--YSI_g_sCommandCount;
+		}
+		return 1;
+	}
+	return 0;
+}
+
+RF@p:Command_RemoveNamed[s](func[])<func>
+{
+	P:2("Command_RemoveNamed called (%s)", func);
+	return Command_Remove(Command_Find(func));
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Add
+Params:
+	funcname[] - The function to add to the array.
+	script - The script ID with the function.
+Return:
+	-
+Notes:
+	If the list of commands have already been sorted into the binary tree the
+	new commands will be appended, otherwise they will just be added to the
+	array.
+
+native Command_Add(funcname[], script);
+
+-*----------------------------------------------------------------------------*/
+
+RF@pv:Command_Add[si](f[],s)<f,s>
+{
+	P:2("Command_Add called");
+	if (YSI_g_sCommandCount < MAX_COMMANDS && YSI_g_sCommandIndex != -1)
+	{
+		new
+			hash = Command_AddHash(f, YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION], 4),
+			provider = _:Command_DefaultProvider();
+		if (Command_IsSorted())
+		{
+			new
+				idx = Command_FindFastStrict(f[4], hash, provider);
+			if (idx != COMMAND_NOT_FOUND)
+			{
+				YSI_g_sCommands[idx][E_COMMANDS_MASTERS] |= 1 << s;
+				return;
+			}
+			if (!Command_HasCollisions())
+			{
+				// Check for an existing command with this hash.
+				if (Bintree_FindValue(YSI_g_sSearchTree, hash) != BINTREE_NOT_FOUND)
+				{
+					Command_SetCollisions();
+				}
+			}
+			// Command doesn't exist already - good!
+			Bintree_Add(YSI_g_sSearchTree, YSI_g_sCommandIndex, hash, YSI_g_sCommandIndex);
+		}
+		else
+		{
+			new
+				idx = Command_FindSlowStrict(f[4], provider);
+			if (idx != COMMAND_NOT_FOUND)
+			{
+				YSI_g_sCommands[idx][E_COMMANDS_MASTERS] |= 1 << s;
+				return;
+			}
+		}
+		YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION][0] = COMMAND_FUNCTION_PREFIX;
+		//Bit_SetAll(YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_PLAYERS], true, bits<MAX_PLAYERS>);
+		//Command_InitialiseFromGroups(YSI_g_sCommandIndex);
+		NO_GROUPS(YSI_g_sCommandIndex)
+		{
+			PA_Init(YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_PLAYERS], true);
+		}
+		// Swap these.
+		YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_MASTERS] = 1 << s;
+		hash = YSI_g_sCommandIndex;
+		// Set this command as usable in any script.
+		YSI_g_sCommandIndex = YSI_g_sCommands[hash][E_COMMANDS_FUNC_POINTER];
+		YSI_g_sCommands[hash][E_COMMANDS_FUNC_POINTER] = hash | (provider << 24);
+		// Now some complex debug rubbish.
+		P:2("Command_Add: Command added in %d", YSI_g_sCommandIndex);
+		P:4("Command_Add: %08x%08x%08x%08x", YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION][0], YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION][1], YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION][2], YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION][3]);
+		C:4(new str[32];strpack(str, f);printf("Command_Add: %08x%08x%08x%08x", str[0], str[1], str[2], str[3]););
+		++YSI_g_sCommandCount;
+	}
+	/*else
+	{
+		// Not all hope is lost - check if this command name already exists.
+		if (Command_IsSorted())
+		{
+			new
+				pos = Command_FindFast(funcname[4], Command_FastHash(funcname[4]));
+			if (pos != COMMAND_NOT_FOUND)
+			{
+				// Found it already in the array.
+				return pos;
+			}
+		}
+		else
+		{
+			new
+				pos = Command_FindSlow(funcname[4]);
+			if (pos != COMMAND_NOT_FOUND)
+			{
+				// Command already exists.
+				return pos;
+			}
+		}
+	}
+	return COMMAND_NOT_FOUND;*/
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_AddAlt
+Params:
+	funcidx - The function this is an alternate to.
+	altname[] - The new name.
+Return:
+	-
+Notes:
+	If the list of commands have already been sorted into the binary tree the
+	new commands will be appended, otherwise they will just be added to the
+	array.
+
+native Command_AddAlt(funcidx, altname[]);
+
+-*----------------------------------------------------------------------------*/
+
+RF@p:Command_AddAlt[is](oidx, altname[])<oidx, altname>
+{
+	if (!Command_IsValid(oidx))
+	{
+		return COMMAND_NOT_FOUND;
+	}
+	new
+		provider = _:Command_DefaultProvider();
+	if (YSI_g_sCommandCount < MAX_COMMANDS && YSI_g_sCommandIndex != -1)
+	{
+		new
+			hash = Command_AddHash(altname, YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION], 0);
+		if (Command_IsSorted())
+		{
+			// Find the function this mirrors.
+			//oidx = Command_FindFast(function, Command_FastHash(function));
+			new
+				pos = Command_FindFastStrict(altname, hash, provider);
+			if (pos != COMMAND_NOT_FOUND)
+			{
+				if (Command_GetPointer(pos) != oidx)
+				{
+					// Same altname, different function.
+					return COMMAND_NOT_FOUND;
+				}
+				return pos;
+			}
+			// Command doesn't exist already - good!
+			Bintree_Add(YSI_g_sSearchTree, YSI_g_sCommandIndex, hash, YSI_g_sCommandIndex);
+		}
+		else
+		{
+			new
+				pos = Command_FindSlowStrict(altname, provider);
+			if (pos != COMMAND_NOT_FOUND)
+			{
+				if (Command_GetPointer(pos) != oidx)
+				{
+					// Same altname, different function.
+					return COMMAND_NOT_FOUND;
+				}
+				// Command already exists.
+				return pos;
+			}
+		}
+		YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_FUNCTION][0] = COMMAND_FUNCTION_PREFIX;
+		//Bit_SetAll(YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_PLAYERS], true, bits<MAX_PLAYERS>);
+		//Command_InitialiseFromGroups(YSI_g_sCommandIndex);
+		NO_GROUPS(YSI_g_sCommandIndex)
+		{
+			PA_Init(YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_PLAYERS], true);
+		}
+		++YSI_g_sCommandCount;
+		// This doesn't have real masters.
+		YSI_g_sCommands[YSI_g_sCommandIndex][E_COMMANDS_MASTERS] = -1;
+		hash = YSI_g_sCommandIndex;
+		YSI_g_sCommandIndex = YSI_g_sCommands[hash][E_COMMANDS_FUNC_POINTER];
+		YSI_g_sCommands[hash][E_COMMANDS_FUNC_POINTER] = oidx | (provider << 24);
+		return hash;
+	}
+	else
+	{
+		// Not all hope is lost - check if this command name already exists.
+		new
+			pos;
+		if (Command_IsSorted())
+		{
+			pos = Command_FindFastStrict(altname, Command_FastHash(altname), provider);
+		}
+		else
+		{
+			pos = Command_FindSlowStrict(altname, provider);
+		}
+		if (pos != COMMAND_NOT_FOUND)
+		{
+			// Found it already in the array.  Check if the element it points to
+			// has the correct name so we know this is the correct pair, not
+			// just the correct single element.  I.e. check that this is the
+			// correct original/altname combo, not the right altname on a
+			// different original name.
+			if (oidx == Command_GetPointer(pos))
+			{
+				return pos;
+			}
+		}
+	}
+	return COMMAND_NOT_FOUND;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_AddAltNamed
+Params:
+	function[] - The function this is an alternate to.
+	altname[] - The new name.
+Return:
+	-
+Notes:
+	Add an alternate command for an existing command.
+
+native Command_AddAltNamed(function[], altname[]);
+
+-*----------------------------------------------------------------------------*/
+
+RF@p:Command_AddAltNamed[ss](function[], altname[])<function, altname>
+{
+	return Command_AddAlt(Command_Find(function), altname);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Debug
+Params:
+	-
+Return:
+	-
+Notes:
+	Print some random information about commands if _DEBUG is set.
+-*----------------------------------------------------------------------------*/
+
+stock Command_Debug()
+{
+	#if _DEBUG > 0
+		printf("Command_Debug: Start");
+		for (new i = 0; i != MAX_COMMANDS; ++i)
+		{
+			if (Command_IsValid(i))
+			{
+				printf("Command_Debug: Loop start %d", i);
+				new buffer[MAX_COMMAND_LENGTH];
+				strunpack(buffer, Command_Name(i));
+				printf("%08x%08x%08x", YSI_g_sCommands[i][E_COMMANDS_FUNCTION][0], YSI_g_sCommands[i][E_COMMANDS_FUNCTION][1], YSI_g_sCommands[i][E_COMMANDS_FUNCTION][2]);
+				new pointer = Command_GetPointer(i);
+				printf("Command %d:", i);
+				printf("\t%s", buffer);
+				printf("\t%d", pointer);
+				printf("\t%d %d %d", YSI_g_sSearchTree[i][E_BINTREE_TREE_LEFT], YSI_g_sSearchTree[i][E_BINTREE_TREE_RIGHT], YSI_g_sSearchTree[i][E_BINTREE_TREE_VALUE]);
+				CallLocalFunction(Command_GetFunction(Command_GetPointer(i)), "isi", 0, "hi", 0);
+				printf("Command_Debug: Loop end");
+			}
+		}
+		printf("Command_Debug: End");
+	#endif
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	OnPlayerCommandText
+Params:
+	playerid - Player who entered the command.
+	cmdtext[] - Text entered.
+Return:
+	true - success or hidden fail, false - fail.
+Notes:
+	Calls the Command_Process function if this is not a client.
+-*----------------------------------------------------------------------------*/
+
+#if YSIM_NOT_CLIENT
+	#if YSIM_CLOUD
+		public OnPlayerCommandText(playerid, cmdtext[]) <>
+		{
+			if (YSI_g_sCommandFlags & e_COMM_FLAG_OPCT)
+			{
+				return CallLocalFunction("Command_OnPlayerCommandText", "is", playerid, cmdtext);
+			}
+			return 0;
+		}
+		
+		public OnPlayerCommandText(playerid, cmdtext[]) <_YCM:y>
+	#elseif YSIM_IS_STUB
+		#error y_commands called with YSIM_IS_STUB.
+	#else
+		public OnPlayerCommandText(playerid, cmdtext[])
+	#endif
+	{
+		if (Command_Process(playerid, cmdtext, 0))
+		{
+			return 1;
+		}
+		if (YSI_g_sCommandFlags & e_COMM_FLAG_OPCT)
+		{
+			return CallLocalFunction("Command_OnPlayerCommandText", "is", playerid, cmdtext);
+		}
+		return 0;
+	}
+	
+	#if defined _ALS_OnPlayerCommandText
+		#undef OnPlayerCommandText
+	#else
+		#define _ALS_OnPlayerCommandText
+	#endif
+	#define OnPlayerCommandText Command_OnPlayerCommandText
+	forward Command_OnPlayerCommandText(playerid, cmdtext[]);
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_ReProcess
+Params:
+	playerid - Player who entered the command.
+	cmdtext[] - Text entered.
+	help - Called from the help commmand or OnPlayerCommandText.
+Return:
+	true - success or hidden fail, false - fail.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+RF@p:Command_ReProcess[isi](p,c[],h)<p,c,h>
+{
+	return Command_Process(p,c,h);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_Process
+Params:
+	playerid - Player who entered the command.
+	cmdtext[] - Text entered.
+	help - Called from the help commmand or OnPlayerCommandText.
+Return:
+	true - success or hidden fail, false - fail.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define Command_CallR(%1,%2) \
+	CallRemoteFunction(Command_GetFunction((%1)), "isii", playerid, %2, help, master)
+
+#define Command_CallL(%1,%2) \
+	CallLocalFunction(Command_GetFunction((%1)), "isi", playerid, %2, help)
+
+static stock Command_Process(playerid, cmdtext[], help)
+{
+	// Support for very old problems!
+	// TODO: Add back.
+	P:2("Command_Process called: %d %s", playerid, cmdtext);
+	#if !_DEBUG && !defined _YSI_SPECIAL_DEBUG
+		// For testing purposes.
+		if (!IsPlayerConnected(playerid))
+		{
+			return Command_DisconnectReturn();
+		}
+	#endif
+	P:4("Command_Process: Connected");
+	new
+		idx,
+		prelen = help ? 0 : 1,
+		index = prelen;
+	/*// Shortcuts.
+	if (cmdtext[2] <= ' ')
+	{
+		// Get a player's shortcut information for this letter.
+	}
+	else*/
+	{
+		// No more faffing about with random alternate code - it's all done in
+		// one nice function instead of having to handle both separately.
+		new
+			length,
+			hash = Command_Hash(cmdtext, index, length);
+		P:3("Command_Process: Hash = %d, Length = %d", hash, length);
+		// NOTE: No prefix support here.
+		cmdtext[length + prelen] = '\0';
+		P:3("Command_Process: Provider: %d", YSI_g_sPlayerProvider{playerid});
+		idx = Command_FindFast(cmdtext[prelen], hash, YSI_g_sPlayerProvider{playerid});
+		// TODO: Replace!
+		//idx = Command_FindSlow(cmdtext[prelen]);//, hash);
+	}
+	P:3("Command_Process: Index = %d", idx);
+	if (idx != COMMAND_NOT_FOUND)
+	{
+		// Get the master data for the underlying command, not the possibly
+		// changed name.
+		new
+			pointer = Command_GetPointer(idx),
+			master = YSI_g_sCommands[pointer][E_COMMANDS_MASTERS];
+		if (!master)
+		{
+			// No scripts can serve the code.
+			return Command_UnknownReturn();
+		}
+		P:4("Command_Process: Found %d", idx);
+		// Found a command with this name - check the permissions.
+		//if (Bit_Get(YSI_g_sCommands[idx][E_COMMANDS_PLAYERS], playerid))
+		if (Command_CheckPlayer(idx, playerid))
+		{
+			P:4("Command_Process: Allowed");
+			// Allowed to use the command, get the real function.  Note that
+			// this may well be the same as "idx", but we loose no time.
+			#if YSIM_HAS_MASTER
+				P:4("Command_Process: %08x%08x%08x%08x", YSI_g_sCommands[idx][E_COMMANDS_FUNCTION][0], YSI_g_sCommands[idx][E_COMMANDS_FUNCTION][1], YSI_g_sCommands[idx][E_COMMANDS_FUNCTION][2], YSI_g_sCommands[idx][E_COMMANDS_FUNCTION][3]);
+				if (master & 1 << YSI_g_sMaster23)
+				{
+					master = YSI_g_sMaster23;
+				}
+				else
+				{
+					// Find the lowest set bit.
+					static const
+						scDeBruijn[] =
+							{
+								0,  1,  28, 2,  29, 14, 24, 3,  30, 22, 20, 15, 25, 17, 4,  8, 
+								31, 27, 13, 23, 21, 19, 16, 7,  26, 12, 18, 6,  11, 5,  10, 9
+							};
+					// http://supertech.csail.mit.edu/papers/debruijn.pdf
+					master = scDeBruijn[((master & -master) * 0x077CB531) >>> 27];
+				}
+				P:3("Command_Process: master = %d", master);
+				if (cmdtext[index])
+				{
+					// Call it!
+					Command_CallR(pointer, cmdtext[index]);
+				}
+				else
+				{
+					Command_CallR(pointer, NULL);
+				}
+				// Get the real return.
+				P:1("Command_Process: return: %d", getproperty(8, YSIM_RETURN));
+				return getproperty(8, YSIM_RETURN);
+			#else
+				if (cmdtext[index])
+				{
+					// Call it!
+					return Command_CallL(pointer, cmdtext[index]);
+				}
+				else
+				{
+					return Command_CallL(pointer, NULL);
+				}
+			#endif
+		}
+		else
+		{
+			return Command_DeniedReturn();
+		}
+	}
+	P:5("Command_Process: Not found");
+	return Command_UnknownReturn();
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetName
+Params:
+	funcid - Command to get the name of.
+Return:
+	-
+Notes:
+
+native Command_GetName(funcid);
+
+-*----------------------------------------------------------------------------*/
+
+RS:Command_GetName[i](funcid)
+{
+	new
+		buffer[YSI_MAX_STRING] = "";
+	if (Command_IsValid(funcid))
+	{
+		strunpack(buffer, Command_Name(funcid));
+	}
+	return buffer;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetDisplay
+Params:
+	f - Command to get the real name of.
+	p - Player to get the name for.
+Return:
+	The name of a command for a single player.
+Notes:
+	-
+
+native Command_GetDisplay(funcid, playerid);
+
+-*----------------------------------------------------------------------------*/
+
+RS:Command_GetDisplay[ii](funcid, playerid)
+{
+	new
+		buffer[YSI_MAX_STRING] = "";
+	if (Command_IsValid(funcid))
+	{
+		// Don't recalculate this every loop.
+		new
+			slot = Bit_Slot(playerid) + 1,
+			Bit:mask = Bit_Mask(playerid);
+		// Check if they can use the original version.
+		if (YSI_g_sCommands[funcid][E_COMMANDS_PLAYERS][slot] & mask)
+		{
+			//setproperty(8, "", YSIM_STRING, Command_Name(f));
+			strunpack(buffer, Command_Name(funcid));
+			return buffer;
+			//return 1;
+		}
+		// Search for a command pointing to that command which the player can use.
+		for (new i = 0; i != MAX_COMMANDS; ++i)
+		{
+			if (Command_GetPointer(i) == funcid && (YSI_g_sCommands[i][E_COMMANDS_PLAYERS][slot] & mask))
+			{
+				//setproperty(8, "", YSIM_STRING, Command_Name(i));
+				strunpack(buffer, Command_Name(i));
+				return buffer;
+			}
+		}
+	}
+	return buffer;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetDisplayNamed
+Params:
+	f[] - Command to get the real name of.
+	p - Player to get the name for.
+Return:
+	The name of a named function for one player.
+Notes:
+	Remote function call for Command_GetDisplayNameNamed - avoids needing to
+	expose users to the master system's odd way of returning strings.  This is
+	the only part I've not yet fixed up to be nice and hidden.
+
+native Command_GetDisplayNamed(funcid[], playerid);
+
+-*----------------------------------------------------------------------------*/
+
+RS@p:Command_GetDisplayNamed[si](func[], playerid)<func, playerid>
+{
+	P:1("Command_GetDisplayNamed called %d", _@);
+	new
+		pointer = Command_Find(func),
+		buffer[YSI_MAX_STRING] = "";
+	if (pointer != COMMAND_NOT_FOUND)
+	{
+		// Don't recalculate this every loop.
+		new
+			slot = Bit_Slot(playerid) + 1, //playerid >>> CELLSHIFT) + 1,
+			Bit:mask = Bit_Mask(playerid); //Bit:(1 << (playerid & (cellbits - 1)));
+		// Check if they can use the original version.
+		if (YSI_g_sCommands[pointer][E_COMMANDS_PLAYERS][slot] & mask)
+		{
+			//setproperty(8, "", YSIM_STRING, Command_Name(pointer));
+			strunpack(buffer, Command_Name(pointer));
+			return buffer;
+		}
+		// Search for a command pointing to that command which the player can use.
+		for (new i = 0; i != MAX_COMMANDS; ++i)
+		{
+			if (Command_GetPointer(i) == pointer && (YSI_g_sCommands[i][E_COMMANDS_PLAYERS][slot] & mask))
+			{
+				//setproperty(8, "", YSIM_STRING, Command_Name(i));
+				strunpack(buffer, Command_Name(i));
+				return buffer;
+			}
+		}
+	}
+	return buffer;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetPlayerCommandCount
+Params:
+	playerid - Player to count for.
+Return:
+	-
+Notes:
+	Gets the number of comamnds this player can use.
+
+native Command_GetPlayerCommandCount(playerid);
+
+-*----------------------------------------------------------------------------*/
+
+RF:Command_GetPlayerCommandCount[i](playerid)
+{
+	new
+		slot = Bit_Slot(playerid) + 1,
+		Bit:mask = Bit_Mask(playerid),
+		count = 0;
+	for (new i = 0; i != MAX_COMMANDS; ++i)
+	{
+		if (_Command_IsValid(i) && YSI_g_sCommands[i][E_COMMANDS_PLAYERS][slot] & mask)
+		{
+			++count;
+		}
+	}
+	return count;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Command_GetNext
+Params:
+	index - Index of the next command for this player.
+	playerid - Player to get the name for.
+Return:
+	The name of a command for a single player.
+Notes:
+	-
+
+native Command_GetNext(index, playerid);
+
+-*----------------------------------------------------------------------------*/
+
+RS:Command_GetNext[ii](index, playerid)
+{
+	new
+		buffer[YSI_MAX_STRING] = "";
+	if (0 <= index < MAX_COMMANDS)
+	{
+		// Don't recalculate this every loop.
+		new
+			slot = Bit_Slot(playerid) + 1,
+			Bit:mask = Bit_Mask(playerid);
+		for (new i = 0; i != MAX_COMMANDS; ++i)
+		{
+			if (_Command_IsValid(i) && YSI_g_sCommands[i][E_COMMANDS_PLAYERS][slot] & mask)
+			{
+				// Skip already displayed ones.
+				if (index)
+				{
+					--index;
+				}
+				else
+				{
+					strunpack(buffer, Command_Name(i));
+					return buffer;
+				}
+			}
+		}
+	}
+	return buffer;
+}
+
+//#tryinclude <YSI\y_groups>
+
+//#undef _YCM
+
+#if defined _YSIM_MANUAL_SET
+	// This is to allow callback chaining.  When the user includes y_groups and
+	// other libraries, the function names will be reset to their custom ones
+	// after every inclusion, however if you then include another YSI library
+	// you need to revert to the previous library names to get the chaining to
+	// work.
+	#define YSI_GROUPS_LAST 25
+	#include <YSI\internal\y_grouprevert>
+#else
+	// Define a numbered master to use for user commands, without them needing
+	// to know about the master system.  This should default to cloud mode,
+	// unless global settings have been applied.
+	#define MASTER 23
+	#include <YSI\y_master>
+	//#define _YSIM_FAKE_MANUAL_SET
+#endif

+ 304 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_debug.inc

@@ -0,0 +1,304 @@
+/*----------------------------------------------------------------------------*-
+					==============================
+					Y Sever Includes - Debug Setup
+					==============================
+Description:
+	Ensures debug levels are set and defines debug functions.
+	
+	General debug levels:
+	
+	0 - No debug information.
+	1 - Callbacks start and finish.
+	2 - Major functions called.
+	3 - Major control flow.
+	4 - Minor control flow/functions.
+	5 - Code steps.
+	
+	If you use P:0 you get an optional debug print controlled by the global
+	state ysi_debug - which is either on or off.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		Added new syntax.
+		Added level 0 debugging with state controlled functions.
+	15/04/07:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		Debug_Code - Runs defined code if a certain level is active.
+		Debug_Print - Prints the formatted string provided at the given level.
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	DBGP - Simple Debug_Print wrapper.
+	DBGC - Simple Debug_Code wrapper.
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	_DEBUG - Debugging level to use.
+Operators:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <YSI\internal\y_funcinc>
+
+#if !defined _DEBUG
+	#define _DEBUG 0
+#endif
+
+#define P:%1(%2); Debug_Print%1(%2);
+#define C:%1(%2); Debug_Code%1(%2);
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Debug_Code
+Params:
+	level - Debug level to run the code at.
+	code - Code to run.
+Return:
+	-
+Notes:
+	Code is not a variable, it's a code chunk and may be written as so:
+	
+	Debug_Code1(if (bla == 2) { bla++; printf("%d", bla); });
+	
+	The code must all be on one line to avoid errors.
+	This isn't really a function as the first parameter is part of the name.
+-*----------------------------------------------------------------------------*/
+
+#define DBGC1 Debug_Code1
+#define DBGC2 Debug_Code2
+#define DBGC3 Debug_Code3
+#define DBGC4 Debug_Code4
+#define DBGC5 Debug_Code5
+
+#if _DEBUG >= 1
+	#define Debug_Code1(%1); \
+		%1
+#else
+	#define Debug_Code1(%1);
+#endif
+
+#if _DEBUG >= 2
+	#define Debug_Code2(%1); \
+		%1
+#else
+	#define Debug_Code2(%1);
+#endif
+
+#if _DEBUG >= 3
+	#define Debug_Code3(%1); \
+		%1
+#else
+	#define Debug_Code3(%1);
+#endif
+
+#if _DEBUG >= 4
+	#define Debug_Code4(%1); \
+		%1
+#else
+	#define Debug_Code4(%1);
+#endif
+
+#if _DEBUG >= 5
+	#define Debug_Code5(%1); \
+		%1
+#else
+	#define Debug_Code5(%1);
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Debug_Print
+Params:
+	level - Debug level to print at.
+	format[] - Format.
+	...
+Return:
+	-
+Notes:
+	This isn't really a function as the first parameter is part of the name:
+	
+	Debug_Print4("variables: %d, %d", i, j);
+-*----------------------------------------------------------------------------*/
+
+#define DBGP1 Debug_Print1
+#define DBGP2 Debug_Print2
+#define DBGP3 Debug_Print3
+#define DBGP4 Debug_Print4
+#define DBGP5 Debug_Print5
+
+#if _DEBUG >= 1
+	#define Debug_Print1(%1); \
+		printf(%1);
+#else
+	#define Debug_Print1(%1);
+#endif
+
+#if _DEBUG >= 2
+	#define Debug_Print2(%1); \
+		printf(%1);
+#else
+	#define Debug_Print2(%1);
+#endif
+
+#if _DEBUG >= 3
+	#define Debug_Print3(%1); \
+		printf(%1);
+#else
+	#define Debug_Print3(%1);
+#endif
+
+#if _DEBUG >= 4
+	#define Debug_Print4(%1); \
+		printf(%1);
+#else
+	#define Debug_Print4(%1);
+#endif
+
+#if _DEBUG >= 5
+	#define Debug_Print5(%1); \
+		printf(%1);
+#else
+	#define Debug_Print5(%1);
+#endif
+
+stock Debug_Print0(str[], {Float,_}:...) <ysi_debug:on>
+{
+	// This uses the variable parameter passing method based on code by Zeex.
+	// See page 15 of the code optimisations topic.
+	new
+		n = (numargs() - 1) * 4;
+	if (n)
+	{
+		new
+			arg_start,
+			arg_end;
+		
+		// Load the real address of the last static parameter.  Do this by
+		// loading the address of the parameter and then adding the value of
+		// [FRM] (frame pointer).
+		#emit CONST.alt                 str
+		#emit LCTRL                     5
+		#emit ADD
+		#emit STOR.S.pri                arg_start
+		
+		// Load the address of the last variable parameter.  Do this by adding
+		// the number of variables on the value just loaded.
+		#emit LOAD.S.alt                n
+		#emit ADD
+		#emit STOR.S.pri                arg_end
+		
+		// Push the variable arguments.  This is done by loading the value of
+		// each one in reverse order and pushing them.  I'd love to be able to
+		// rewrite this to use the values of pri and alt for comparison, instead
+		// of having or constantly reload two variables.
+		do
+		{
+			#emit LOAD.I
+			#emit PUSH.pri
+			arg_end -= 4;
+			#emit LOAD.S.pri            arg_end
+		}
+		while (arg_end > arg_start);
+		
+		// Push the static parameter.
+		#emit PUSH.S                    str
+		
+		// Now push the number of parameters sent and call the function.
+		n += 4;
+		#emit PUSH.S                    n
+		#emit SYSREQ.C                  printf
+		
+		// Clear the stack, including the return.
+		n += 4;
+		#emit LCTRL                     4
+		#emit LOAD.S.alt                n
+		#emit ADD
+		#emit SCTRL                     4
+	}
+	else
+	{
+		print(str);
+	}
+}
+
+stock Debug_Print0(str[], {Float,_}:...) <ysi_debug:off>
+{
+	#pragma unused str
+}
+
+stock Debug_Print0(str[], {Float,_}:...) <>
+{
+	#pragma unused str
+}
+
+#if _DEBUG > 0
+	#define Debug_Print0(%1); \
+		printf(%1);
+#endif

+ 88 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_files.inc

@@ -0,0 +1,88 @@
+/*----------------------------------------------------------------------------*-
+							========================
+							 y_files - Include File 
+							========================
+Description:
+	Provides native declarations for YSF functions.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the YSI 2.0 SA:MP plugin.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributor(s):
+	
+	Peter Beverloo
+	Marcus Bauer
+	
+	Special Thanks to:
+	
+	SA:MP Team past, present and future
+Version:
+	0.1
+Changelog:
+	15/09/10:
+		First version split from the old YSF.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+-*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*-
+					=================
+					 y_ini Libraries
+					=================
+-*----------------------------------------------------------------------------*/
+
+// File functions
+native ffind(const pattern[], filename[], len, &idx);
+native frename(const oldname[], const newname[]);
+
+// Directory functions
+native dfind(const pattern[], filename[], len, &idx);
+native dcreate(const name[]);
+native drename(const oldname[], const newname[]);

+ 248 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_flooding.inc

@@ -0,0 +1,248 @@
+/*----------------------------------------------------------------------------*-
+					===================================
+					Y Sever Includes - Connections Core
+					===================================
+Description:
+	Allows a limited number of connections from a single IP.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Changelog:
+	15/11/10:
+		Updated to YSI 1.0.
+	11/03/08:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		OnPlayerConnect - Called to check IPs.
+		OnScriptInit - Sets the OnPlayerConnect function flag.
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		SetMaxConnections - Sets the max allowed connections from an IP.
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	e_FLOOD_ACTION - What to do if too many connections form.
+Macros:
+	-
+Tags:
+	-
+Variables:
+	Global:
+		-
+	Static:
+		YSI_g_sPlayerIPs - People's stored IPs for speed.
+		YSI_g_sMaxConnections - Data for the script.
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+enum e_FLOOD_ACTION (+= 0x00010000)
+{
+	e_FLOOD_ACTION_COUNT = 0x0000FFFF
+	e_FLOOD_ACTION_ACTION = 0x000F0000,
+	e_FLOOD_ACTION_NOTHING = 0,
+	e_FLOOD_ACTION_BLOCK,
+	e_FLOOD_ACTION_KICK,
+	e_FLOOD_ACTION_BAN,
+	e_FLOOD_ACTION_OPC = 0x80000000,
+}
+
+static
+	YSI_g_sPlayerIPs[MAX_PLAYERS],
+	e_FLOOD_ACTION:YSI_g_sMaxConnections = e_FLOOD_ACTION_COUNT | e_FLOOD_ACTION_BLOCK;
+
+/*----------------------------------------------------------------------------*-
+Function:
+	SetMaxConnections
+Params:
+	max - Maximum number of connections allowed from the same IP.
+	e_FLOOD_ACTION:action - What to do if there's too many.
+Return:
+	-
+Notes:
+	Sets the maximum connections allowed from a single IP.
+-*----------------------------------------------------------------------------*/
+
+stock SetMaxConnections(max = -1, e_FLOOD_ACTION:action = e_FLOOD_ACTION_BLOCK)
+{
+	YSI_g_sMaxConnections = (e_FLOOD_ACTION:max & e_FLOOD_ACTION_COUNT) | action | (YSI_g_sMaxConnections & e_FLOOD_ACTION_OPC);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	OnScriptInit
+Params:
+	-
+Return:
+	-
+Notes:
+	Constructor.
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	if (funcidx("YFLD_OnPlayerConnect") != -1)
+	{
+		YSI_g_sMaxConnections |= e_FLOOD_ACTION_OPC;
+	}
+	CallLocalFunction("YFLD_OnScriptInit", "");
+	return 1;
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit YFLD_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit YFLD_OnScriptInit
+#endif
+
+forward YFLD_OnScriptInit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Conn_OnPlayerConnect
+Params:
+	playerid - Player who joined.
+Return:
+	-
+Notes:
+	Checks for too many connections from the same IP address and acts
+	accordingly.
+	
+	Could be edited to only loop through players once but I'm not sure the
+	extra code required would be faster anyway, definately not easier.
+-*----------------------------------------------------------------------------*/
+
+public OnPlayerConnect(playerid)
+{
+	if (YSI_g_sMaxConnections & e_FLOOD_ACTION_OPC)
+	{
+		CallLocalFunction("YFLD_OnPlayerConnect", "i", playerid);
+	}
+	if ((YSI_g_sMaxConnections & e_FLOOD_ACTION_COUNT) != e_FLOOD_ACTION_COUNT)
+	{
+		new
+			count = 0,
+			IP = GetIP(playerid);
+		YSI_g_sPlayerIPs[playerid] = IP;
+		foreach (Player, i)
+		{
+			if (YSI_g_sPlayerIPs[i] == IP)
+			{
+				++count;
+			}
+		}
+		if (count > _:(YSI_g_sMaxConnections & e_FLOOD_ACTION_COUNT))
+		{
+			P:0("*** Internal Alert: Max Connections exceeded");
+			switch (YSI_g_sMaxConnections & e_FLOOD_ACTION_ACTION)
+			{
+				case e_FLOOD_ACTION_BLOCK:
+				{
+					// Kick the latest player.
+					Kick(playerid);
+					return 0;
+				}
+				case e_FLOOD_ACTION_KICK:
+				{
+					// Kick all the players.
+				}
+				case e_FLOOD_ACTION_BAN:
+				{
+					// Ban the IP.
+					BanEx(playerid, "YSI max connections auto-ban");
+				}
+				default:
+				{
+					// Do nothing.
+					return 1;
+				}
+			}
+		}
+		foreach (Player, i)
+		{
+			if (YSI_g_sPlayerIPs[i] == IP)
+			{
+				Kick(i);
+			}
+		}
+		return 0;
+	}
+	return 1;
+}
+
+#if defined _ALS_OnPlayerConnect
+	#undef OnPlayerConnect
+#else
+	#define _ALS_OnPlayerConnect
+#endif
+#define OnPlayerConnect YFLD_OnPlayerConnect
+
+forward YFLD_OnPlayerConnect(playerid);

+ 277 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_groups.inc

@@ -0,0 +1,277 @@
+/*----------------------------------------------------------------------------*-
+					=======================================
+					 y_groups - Player group abstractions! 
+					=======================================
+Description:
+	Admin levels, gangs, teams etc - they're all "groups" of people, this
+	provides an abstraction for all of these collections.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#undef _inc_y_groups
+
+#include <YSI\internal\y_nogroups>
+
+#if defined YSI_GROUPS_LAST
+	#if YSI_GROUPS_LAST == 25
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_CMD
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_CMD
+	#elseif YSI_GROUPS_LAST == 22
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_CLASSES
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_CLASSES
+	#elseif YSI_GROUPS_LAST == 9
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_INTTEST
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_INTTEST
+	#elseif YSI_GROUPS_LAST == 8
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_INTTEST2
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_INTTEST2
+	#endif
+	#undef YSI_GROUPS_LAST
+#endif
+
+#if defined _YSI_GROUPS_FIRST_HALF
+	#undef _YSI_GROUPS_FIRST_HALF
+#endif
+
+// First, detect which library has included this.  If none then it was the user.
+#if defined _inc_y_classes
+	#if !defined _YSI_GROUP_CLASSES_INCLUDED
+		// Although this is included before _GROUP_MAKE_NAME is set, it will
+		// still be the correct value eventually.
+		// Mark this library as existing.
+		#define _YSI_GROUP_CLASSES_INCLUDED
+		// These all need doing twice - once here and once below.
+		#if defined _YSI_HAS_GROUP_SYSTEM
+			#include <YSI\internal\y_groupfirst>
+		#endif
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_CLASSES
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_CLASSES
+		#if defined _YSI_HAS_GROUP_SYSTEM
+			#include <YSI\internal\y_groupsecond>
+			#include <YSI\internal\y_classgroups>
+		#endif
+		#include <YSI\internal\y_groupsingle>
+		// End.
+		#endinput
+	#endif
+#endif
+#if defined _inc_y_commands
+	#if !defined _YSI_GROUP_COMMANDS_INCLUDED
+		// Although this is included before _GROUP_MAKE_NAME is set, it will
+		// still be the correct value eventually.
+		// Mark this library as existing.
+		#define _YSI_GROUP_COMMANDS_INCLUDED
+		// These all need doing twice - once here and once below.
+		#if defined _YSI_HAS_GROUP_SYSTEM
+			#include <YSI\internal\y_groupfirst>
+		#endif
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_CMD
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_CMD
+		#if defined _YSI_HAS_GROUP_SYSTEM
+			#include <YSI\internal\y_groupsecond>
+		#endif
+		#include <YSI\internal\y_groupsingle>
+		// End.
+		#endinput
+	#endif
+#endif
+#if defined _YSI_ALLOW_INTERNAL_TEST
+	#if defined _inc_y_inttest
+		#if !defined _YSI_GROUP_INTTEST_INCLUDED
+			// Mark this library as existing.
+			#define _YSI_GROUP_INTTEST_INCLUDED
+			// These all need doing twice - once here and once below.
+			#if defined _YSI_HAS_GROUP_SYSTEM
+				#include <YSI\internal\y_groupfirst>
+			#endif
+			#undef _GROUP_MAKE_NAME
+			#undef _GROUP_MAKE_LIMIT
+			#define _GROUP_MAKE_NAME    _GROUP_MAKE_NAME_INTTEST
+			#define _GROUP_MAKE_LIMIT   _GROUP_MAKE_LIMIT_INTTEST
+			#if defined _YSI_HAS_GROUP_SYSTEM
+				#include <YSI\internal\y_groupsecond>
+			#endif
+			#include <YSI\internal\y_groupsingle>
+			// End.
+			#endinput
+		#endif
+	#endif
+	#if defined _inc_y_inttest2
+		#if !defined _YSI_GROUP_INTTEST2_INCLUDED
+			// Mark this library as existing.
+			#define _YSI_GROUP_INTTEST2_INCLUDED
+			// These all need doing twice - once here and once below.
+			#if defined _YSI_HAS_GROUP_SYSTEM
+				#include <YSI\internal\y_groupfirst>
+			#endif
+			#undef _GROUP_MAKE_NAME
+			#undef _GROUP_MAKE_LIMIT
+			#define _GROUP_MAKE_NAME    _GROUP_MAKE_NAME_INTTEST2
+			#define _GROUP_MAKE_LIMIT   _GROUP_MAKE_LIMIT_INTTEST2
+			#if defined _YSI_HAS_GROUP_SYSTEM
+				#include <YSI\internal\y_groupsecond>
+			#endif
+			//#include <YSI\internal\y_groupsingle>
+			// End.
+			#endinput
+		#endif
+	#endif
+#endif
+
+// ||                                                                         ||
+// =============================================================================
+// ||                                                                         ||
+#define _YSI_GROUPS_FIRST_HALF
+// ||                                                                         ||
+// =============================================================================
+// ||                                                                         ||
+
+// User inclusion.
+#if !defined _YSI_HAS_GROUP_SYSTEM
+	#define _YSI_HAS_GROUP_SYSTEM
+	// Include the main code.
+	#include <a_samp>
+	#include <YSI\internal\y_grouponce>
+	
+	// Include code for previous libraries.
+	#if defined _YSI_GROUP_CLASSES_INCLUDED
+		// This only needs to be done if the library was previously included.
+		#define _YSIM_OVERRIDE          22
+		#include <YSI\y_master>
+		// Include the first half of the file for the call chain.
+		#include <YSI\internal\y_groupfirst>
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_CLASSES
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_CLASSES
+		// Include the second half of the file for the methods.
+		#include <YSI\internal\y_groupsecond>
+		#include <YSI\internal\y_classgroups>
+	#endif
+	#if defined _YSI_GROUP_COMMANDS_INCLUDED
+		// This only needs to be done if the library was previously included.
+		#define _YSIM_OVERRIDE          25
+		#include <YSI\y_master>
+		// Include the first half of the file for the call chain.
+		#include <YSI\internal\y_groupfirst>
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        _GROUP_MAKE_NAME_CMD
+		#define _GROUP_MAKE_LIMIT       _GROUP_MAKE_LIMIT_CMD
+		// Include the second half of the file for the methods.
+		#include <YSI\internal\y_groupsecond>
+	#endif
+	// Internal test library.
+	#if defined _YSI_ALLOW_INTERNAL_TEST
+		#if defined _YSI_GROUP_INTTEST_INCLUDED
+			#define _YSIM_OVERRIDE      9
+			#include <YSI\y_master>
+			#include <YSI\internal\y_groupfirst>
+			#undef _GROUP_MAKE_NAME
+			#undef _GROUP_MAKE_LIMIT
+			#define _GROUP_MAKE_NAME    _GROUP_MAKE_NAME_INTTEST
+			#define _GROUP_MAKE_LIMIT   _GROUP_MAKE_LIMIT_INTTEST
+			#include <YSI\internal\y_groupsecond>
+		#endif
+		#if defined _YSI_GROUP_INTTEST2_INCLUDED
+			#define _YSIM_OVERRIDE      8
+			#include <YSI\y_master>
+			#include <YSI\internal\y_groupfirst>
+			#undef _GROUP_MAKE_NAME
+			#undef _GROUP_MAKE_LIMIT
+			#define _GROUP_MAKE_NAME    _GROUP_MAKE_NAME_INTTEST2
+			#define _GROUP_MAKE_LIMIT   _GROUP_MAKE_LIMIT_INTTEST2
+			#include <YSI\internal\y_groupsecond>
+		#endif
+	#endif
+#endif
+
+// Now include any user defined libraries.
+#if defined GROUP_LIBRARY_NAME
+	#if defined GROUP_LIBRARY_SIZE
+		// Include the generic group code for this new custom group.
+		#if defined _YSIM_MANUAL_SET
+			#define _YSIM_RESET_USER
+		#endif
+		#include <YSI\y_master>
+		//#include <YSI\internal\y_groupsingle>
+		#include <YSI\internal\y_groupfirst>
+		#undef _GROUP_MAKE_NAME
+		#undef _GROUP_MAKE_LIMIT
+		#define _GROUP_MAKE_NAME        GROUP_LIBRARY_NAME
+		#define _GROUP_MAKE_LIMIT       GROUP_LIBRARY_SIZE
+		#undef _YSI_GROUPS_FIRST_HALF
+		// Include the second half of the file for the methods.
+		#include <YSI\internal\y_groupsecond>
+		#define _YSI_GROUPS_FIRST_HALF
+		#include <YSI\internal\y_groupsingle>
+		// Remove the definitions.
+		//#undef GROUP_LIBRARY_SIZE
+		//#undef GROUP_LIBRARY_NAME
+	#else
+		#error You must define both GROUP_LIBRARY_SIZE and GROUP_LIBRARY_NAME.
+	#endif
+#else
+	#if defined GROUP_LIBRARY_SIZE
+		#error You must define both GROUP_LIBRARY_SIZE and GROUP_LIBRARY_NAME.
+	#endif
+#endif

+ 1008 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_hooks.inc

@@ -0,0 +1,1008 @@
+/*----------------------------------------------------------------------------*-
+					==============================
+					 y_hooks - Hook any callback!
+					==============================
+Description:
+	Automatically hooks any callbacks with a very simple syntax.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+#include <a_samp>
+
+#include <YSI\y_scripting>
+#include <YSI\y_utils>
+
+#define ALS_PREFIX S@@
+
+#include <YSI\y_als>
+#include <YSI\y_stringhash>
+#include <YSI\internal\y_shortfunc>
+
+#include <YSI\y_debug>
+
+//#define Hook:%1_On%2(%3) forward %1_@%2(%3); public %1_@%2(%3)
+#define Hook:%1_On%2(%3) @yH_%2_%1(%3);@yH_%2_%1(%3)
+
+#define HOOK_FUNC_SEARCH                 (Scripting_FastString('@', 'y', 'H', '_'))
+
+#define HOOKS_INSERT<%0> tmp=_:gs_aHookFunctionPointers[ALS_On%0],gs_aHookFunctionPointers[ALS_On%0]=Bit:((tmp!=_:-1?tmp&0xFFFF:idx-1)|idx<<16);
+
+//#define HOOKS_CALL<%0,%1>(%2) new t=_:gs_aHookFunctionPointers[ALS_On%0];if(t!=-1){new e=t>>>16;t&=0xFFFF;do t=Scripting_GetPublic(t,gs_szFunctionBuffer,"@yH_"#%0),P@(gs_szFunctionBuffer,#%1#x,%2);while(t!=e);}
+#define HOOKS_C_INT<%0,%1>(%2) new t=_:gs_aHookFunctionPointers[ALS_On%0];if(t!=-1){new e=t>>>16;t&=0xFFFF;do t=Scripting_GetPublic(t,gs_szFunctionBuffer,"@yH_"#%0),P@(gs_szFunctionBuffer,#%1#x,%2);while(t!=e);}
+
+#define HUK_C_GameModeInit              HOOKS_C_INT<GameModeInit             ,>()
+#define HUK_C_GameModeExit              HOOKS_C_INT<GameModeExit             ,>()
+#define HUK_C_FilterScriptInit          HOOKS_C_INT<FilterScriptInit         ,>()
+#define HUK_C_FilterScriptExit          HOOKS_C_INT<FilterScriptExit         ,>()
+#define HUK_C_PlayerConnect             HOOKS_C_INT<PlayerConnect            ,i>(playerid)
+#define HUK_C_PlayerDisconnect          HOOKS_C_INT<PlayerDisconnect         ,ii>(playerid,reason)
+#define HUK_C_PlayerSpawn               HOOKS_C_INT<PlayerSpawn              ,i>(playerid)
+#define HUK_C_PlayerDeath               HOOKS_C_INT<PlayerDeath              ,iii>(playerid,killerid,reason)
+#define HUK_C_VehicleSpawn              HOOKS_C_INT<VehicleSpawn             ,i>(vehicleid)
+#define HUK_C_VehicleDeath              HOOKS_C_INT<VehicleDeath             ,ii>(vehicleid,killerid)
+#define HUK_C_PlayerText                HOOKS_C_INT<PlayerText               ,is>(playerid,text)
+#define HUK_C_PlayerCommandText         HOOKS_C_INT<PlayerCommandText        ,is>(playerid,cmdtext)
+#define HUK_C_PlayerRequestClass        HOOKS_C_INT<PlayerRequestClass       ,ii>(playerid,classid)
+#define HUK_C_PlayerEnterVehicle        HOOKS_C_INT<PlayerEnterVehicle       ,iii>(playerid,vehicleid,ispassenger)
+#define HUK_C_PlayerExitVehicle         HOOKS_C_INT<PlayerExitVehicle        ,ii>(playerid,vehicleid)
+#define HUK_C_PlayerStateChange         HOOKS_C_INT<PlayerStateChange        ,iii>(playerid,newstate,oldstate)
+#define HUK_C_PlayerEnterCheckpoint     HOOKS_C_INT<PlayerEnterCheckpoint    ,i>(playerid)
+#define HUK_C_PlayerLeaveCheckpoint     HOOKS_C_INT<PlayerLeaveCheckpoint    ,i>(playerid)
+#define HUK_C_PlayerEnterRaceCheckpoint HOOKS_C_INT<PlayerEnterRaceCheckpoint,i>(playerid)
+#define HUK_C_PlayerLeaveRaceCheckpoint HOOKS_C_INT<PlayerLeaveRaceCheckpoint,i>(playerid)
+#define HUK_C_RconCommand               HOOKS_C_INT<RconCommand              ,s>(cmd)
+#define HUK_C_PlayerRequestSpawn        HOOKS_C_INT<PlayerRequestSpawn       ,i>(playerid)
+#define HUK_C_ObjectMoved               HOOKS_C_INT<ObjectMoved              ,i>(objectid)
+#define HUK_C_PlayerObjectMoved         HOOKS_C_INT<PlayerObjectMoved        ,ii>(playerid,objectid)
+#define HUK_C_PlayerPickUpPickup        HOOKS_C_INT<PlayerPickUpPickup       ,ii>(playerid,pickupid)
+#define HUK_C_VehicleMod                HOOKS_C_INT<VehicleMod               ,iii>(playerid,vehicleid,componentid)
+#define HUK_C_EnterExitModShop          HOOKS_C_INT<EnterExitModShop         ,iii>(playerid,enterexit,interiorid)
+#define HUK_C_VehiclePaintjob           HOOKS_C_INT<VehiclePaintjob          ,iii>(playerid,vehicleid,paintjobid)
+#define HUK_C_VehicleRespray            HOOKS_C_INT<VehicleRespray           ,iiii>(playerid,vehicleid,color1,color2)
+#define HUK_C_VehicleDamageStatusUpdate HOOKS_C_INT<VehicleDamageStatusUpdate,ii>(playerid,playerid)
+#define HUK_C_PlayerSelectedMenuRow     HOOKS_C_INT<PlayerSelectedMenuRow    ,ii>(playerid,row)
+#define HUK_C_PlayerExitedMenu          HOOKS_C_INT<PlayerExitedMenu         ,i>(playerid)
+#define HUK_C_PlayerInteriorChange      HOOKS_C_INT<PlayerInteriorChange     ,iii>(playerid,newinteriorid,oldinteriorid)
+#define HUK_C_PlayerKeyStateChange      HOOKS_C_INT<PlayerKeyStateChange     ,iii>(playerid,newkeys,oldkeys)
+#define HUK_C_RconLoginAttempt          HOOKS_C_INT<RconLoginAttempt         ,ssi>(ip,password,success)
+#define HUK_C_PlayerUpdate              HOOKS_C_INT<PlayerUpdate             ,i>(playerid)
+#define HUK_C_PlayerStreamIn            HOOKS_C_INT<PlayerStreamIn           ,ii>(playerid,forplayerid)
+#define HUK_C_PlayerStreamOut           HOOKS_C_INT<PlayerStreamOut          ,ii>(playerid,forplayerid)
+#define HUK_C_VehicleStreamIn           HOOKS_C_INT<VehicleStreamIn          ,ii>(vehicleid,forplayerid)
+#define HUK_C_VehicleStreamOut          HOOKS_C_INT<VehicleStreamOut         ,ii>(vehicleid,forplayerid)
+//#define HUK_C_DialogResponse            HOOKS_C_INT<DialogResponse           ,ii>(playerid,dialogid,response,listitem,inputtext)
+#define HUK_C_PlayerClickPlayer         HOOKS_C_INT<PlayerClickPlayer        ,iii>(playerid,clickedplayerid,source)
+//#define HUK_C_DialogResponse if(inputtext[0]){HOOKS_C_INT<DialogResponse,iiiis>(playerid,dialogid,response,listitem,inputtext)}else{HOOKS_C_INT<DialogResponse,iiiis>(playerid,dialogid,response,listitem,NULL)}
+
+//#define CALL_WRAPPER<%0> HUK_C_%0 ALS_CALL_%0
+#define HOOKS_CALL<%0> HUK_C_%0 ALS_C_%0
+
+#define HOOKS_MAX_UPDATES               (4)
+
+static
+	gs_aHookFunctionPointers[ALS] = {Bit:-1, ...},
+	gs_szFunctionBuffer[32],
+	gs_aOnPlayerUpdateHooks[HOOKS_MAX_UPDATES] = {-1, ...}/*,
+	gs_pCodeStart*/;
+
+ALS_DATA<>
+
+/*static Hooks_GetNext(&idx)
+{
+	idx = Scripting_GetPublicFast(idx, gs_szFunctionBuffer, HOOK_FUNC_SEARCH);
+	if (idx == 0)
+	{
+		return -1;
+	}
+	return YHash(gs_szFunctionBuffer[4], true, hash_bernstein, strfind(gs_szFunctionBuffer[4], "_"));
+}*/
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Hooks_GenFuncList
+Params:
+	-
+Return:
+	-
+Notes:
+	Generates a set of data describing every callback for speed later.
+-*----------------------------------------------------------------------------*/
+
+static Hooks_GenFuncList()
+{
+	// Check for old style hooks using the new ALS library.
+	ALS_DETECT<GameModeInit>
+	#if 1
+	ALS_DETECT<GameModeExit>
+	ALS_DETECT<FilterScriptInit>
+	ALS_DETECT<FilterScriptExit>
+	ALS_DETECT<PlayerConnect>
+	ALS_DETECT<PlayerDisconnect>
+	ALS_DETECT<PlayerSpawn>
+	ALS_DETECT<PlayerDeath>
+	ALS_DETECT<VehicleSpawn>
+	ALS_DETECT<VehicleDeath>
+	ALS_DETECT<PlayerText>
+	ALS_DETECT<PlayerCommandText>
+	ALS_DETECT<PlayerRequestClass>
+	ALS_DETECT<PlayerEnterVehicle>
+	ALS_DETECT<PlayerExitVehicle>
+	ALS_DETECT<PlayerStateChange>
+	ALS_DETECT<PlayerEnterCheckpoint>
+	ALS_DETECT<PlayerLeaveCheckpoint>
+	ALS_DETECT<PlayerEnterRaceCheckpoint>
+	ALS_DETECT<PlayerLeaveRaceCheckpoint>
+	ALS_DETECT<RconCommand>
+	ALS_DETECT<PlayerRequestSpawn>
+	ALS_DETECT<ObjectMoved>
+	ALS_DETECT<PlayerObjectMoved>
+	ALS_DETECT<PlayerPickUpPickup>
+	ALS_DETECT<VehicleMod>
+	ALS_DETECT<EnterExitModShop>
+	ALS_DETECT<VehiclePaintjob>
+	ALS_DETECT<VehicleRespray>
+	ALS_DETECT<VehicleDamageStatusUpdate>
+	ALS_DETECT<PlayerSelectedMenuRow>
+	ALS_DETECT<PlayerExitedMenu>
+	ALS_DETECT<PlayerInteriorChange>
+	ALS_DETECT<PlayerKeyStateChange>
+	ALS_DETECT<RconLoginAttempt>
+	ALS_DETECT<PlayerUpdate>
+	ALS_DETECT<PlayerStreamIn>
+	ALS_DETECT<PlayerStreamOut>
+	ALS_DETECT<VehicleStreamIn>
+	ALS_DETECT<VehicleStreamOut>
+	ALS_DETECT<DialogResponse>
+	ALS_DETECT<PlayerClickPlayer>
+	#endif
+	// Check for new style hooks.  This gets the bounds of functions, to make
+	// later calls very slightly faster!
+	new
+		idx = 0,
+		tmp;
+	// For some reason compile time initialisation didn't work...
+	for (new ALS:i; i != ALS; ++i)
+	{
+		gs_aHookFunctionPointers[i] = -1;
+	}
+	for ( ; ; )
+	{
+		idx = Scripting_GetPublicFast(idx, gs_szFunctionBuffer, HOOK_FUNC_SEARCH);
+		if (idx == 0)
+		{
+			break;
+		}
+		//return YHash(gs_szFunctionBuffer[4], true, bernstein, strfind(gs_szFunctionBuffer[4], "_"));
+		//switch (Hooks_GetNext(idx))
+		switch (YHash(gs_szFunctionBuffer[4], true, hash_bernstein, strfind(gs_szFunctionBuffer[4], "_")))
+		{
+			case _H(G,a,m,e,M,o,d,e,I,n,i,t):
+				HOOKS_INSERT<GameModeInit>
+			case _H(G,a,m,e,M,o,d,e,E,x,i,t):
+				HOOKS_INSERT<GameModeExit>
+			case _H(F,i,l,t,e,r,S,c,r,i,p,t,I,n,i,t):
+				HOOKS_INSERT<FilterScriptInit>
+			case _H(F,i,l,t,e,r,S,c,r,i,p,t,E,x,i,t):
+				HOOKS_INSERT<FilterScriptExit>
+			case _H(P,l,a,y,e,r,C,o,n,n,e,c,t):
+				HOOKS_INSERT<PlayerConnect>
+			case _H(P,l,a,y,e,r,D,i,s,c,o,n,n,e,c,t):
+				HOOKS_INSERT<PlayerDisconnect>
+			case _H(P,l,a,y,e,r,S,p,a,w,n):
+				HOOKS_INSERT<PlayerSpawn>
+			case _H(P,l,a,y,e,r,D,e,a,t,h):
+				HOOKS_INSERT<PlayerDeath>
+			case _H(V,e,h,i,c,l,e,S,p,a,w,n):
+				HOOKS_INSERT<VehicleSpawn>
+			case _H(V,e,h,i,c,l,e,D,e,a,t,h):
+				HOOKS_INSERT<VehicleDeath>
+			case _H(P,l,a,y,e,r,T,e,x,t):
+				HOOKS_INSERT<PlayerText>
+			case _H(P,l,a,y,e,r,C,o,m,m,a,n,d,T,e,x,t):
+				HOOKS_INSERT<PlayerCommandText>
+			case _H(P,l,a,y,e,r,R,e,q,u,e,s,t,C,l,a,s,s):
+				HOOKS_INSERT<PlayerRequestClass>
+			case _H(P,l,a,y,e,r,E,n,t,e,r,V,e,h,i,c,l,e,):
+				HOOKS_INSERT<PlayerEnterVehicle>
+			case _H(P,l,a,y,e,r,E,x,i,t,V,e,h,i,c,l,e,):
+				HOOKS_INSERT<PlayerExitVehicle>
+			case _H(P,l,a,y,e,r,S,t,a,t,e,C,h,a,n,g,e):
+				HOOKS_INSERT<PlayerStateChange>
+			case _H(P,l,a,y,e,r,E,n,t,e,r,C,h,e,c,k,p,o,i,n,t), _H(P,l,a,y,e,r,E,n,t,e,r,C,P):
+				HOOKS_INSERT<PlayerEnterCheckpoint>
+			case _H(P,l,a,y,e,r,L,e,a,v,e,C,h,e,c,k,p,o,i,n,t), _H(P,l,a,y,e,r,L,e,a,v,e,C,P):
+				HOOKS_INSERT<PlayerLeaveCheckpoint>
+			case _H(P,l,a,y,e,r,E,n,t,e,r,R,a,c,e,C,h,e,c,k,p,o,i,n,t), _H(P,l,a,y,e,r,E,n,t,e,r,R,C,P):
+				HOOKS_INSERT<PlayerEnterRaceCheckpoint>
+			case _H(P,l,a,y,e,r,L,e,a,v,e,R,a,c,e,C,h,e,c,k,p,o,i,n,t), _H(P,l,a,y,e,r,L,e,a,v,e,R,C,P):
+				HOOKS_INSERT<PlayerLeaveRaceCheckpoint>
+			case _H(R,c,o,n,C,o,m,m,a,n,d):
+				HOOKS_INSERT<RconCommand>
+			case _H(P,l,a,y,e,r,R,e,q,u,e,s,t,S,p,a,w,n):
+				HOOKS_INSERT<PlayerRequestSpawn>
+			case _H(O,b,j,e,c,t,M,o,v,e,d):
+				HOOKS_INSERT<ObjectMoved>
+			case _H(P,l,a,y,e,r,O,b,j,e,c,t,M,o,v,e,d):
+				HOOKS_INSERT<PlayerObjectMoved>
+			case _H(P,l,a,y,e,r,P,i,c,k,U,p,P,i,c,k,u,p):
+				HOOKS_INSERT<PlayerPickUpPickup>
+			case _H(V,e,h,i,c,l,e,M,o,d):
+				HOOKS_INSERT<VehicleMod>
+			case _H(E,n,t,e,r,E,x,i,t,M,o,d,S,h,o,p):
+				HOOKS_INSERT<EnterExitModShop>
+			case _H(V,e,h,i,c,l,e,P,a,i,n,t,j,o,b):
+				HOOKS_INSERT<VehiclePaintjob>
+			case _H(V,e,h,i,c,l,e,R,e,s,p,r,a,y):
+				HOOKS_INSERT<VehicleRespray>
+			case _H(V,e,h,i,c,l,e,D,a,m,a,g,e,S,t,a,t,u,s,U,p,d,a,t,e), _H(V,e,h,i,c,l,e,D,a,m,a,g,e,U,p,d,a,t,e):
+				HOOKS_INSERT<VehicleDamageStatusUpdate>
+			case _H(P,l,a,y,e,r,S,e,l,e,c,t,e,d,M,e,n,u,R,o,w), _H(P,l,a,y,e,r,S,e,l,e,c,t,e,d,M,e,n,u):
+				HOOKS_INSERT<PlayerSelectedMenuRow>
+			case _H(P,l,a,y,e,r,E,x,i,t,e,d,M,e,n,u):
+				HOOKS_INSERT<PlayerExitedMenu>
+			case _H(P,l,a,y,e,r,I,n,t,e,r,i,o,r,C,h,a,n,g,e):
+				HOOKS_INSERT<PlayerInteriorChange>
+			case _H(P,l,a,y,e,r,K,e,y,S,t,a,t,e,C,h,a,n,g,e):
+				HOOKS_INSERT<PlayerKeyStateChange>
+			case _H(R,c,o,n,L,o,g,i,n,A,t,t,e,m,p,t):
+				HOOKS_INSERT<RconLoginAttempt>
+			case _H(P,l,a,y,e,r,S,t,r,e,a,m,I,n):
+				HOOKS_INSERT<PlayerStreamIn>
+			case _H(P,l,a,y,e,r,S,t,r,e,a,m,O,u,t):
+				HOOKS_INSERT<PlayerStreamOut>
+			case _H(V,e,h,i,c,l,e,S,t,r,e,a,m,I,n):
+				HOOKS_INSERT<VehicleStreamIn>
+			case _H(V,e,h,i,c,l,e,S,t,r,e,a,m,O,u,t):
+				HOOKS_INSERT<VehicleStreamOut>
+			case _H(D,i,a,l,o,g,R,e,s,p,o,n,s,e):
+				HOOKS_INSERT<DialogResponse>
+			case _H(P,l,a,y,e,r,C,l,i,c,k,P,l,a,y,e,r):
+				HOOKS_INSERT<PlayerClickPlayer>
+			case -1:
+				// Do nothing - end condition.
+				break;
+			case _H(P,l,a,y,e,r,U,p,d,a,t,e):
+			{
+				//HOOKS_INSERT<PlayerUpdate>
+				// This uses different code to improve speed a little bit.
+				tmp = _:gs_aHookFunctionPointers[ALS_OnPlayerUpdate];
+				if (tmp == -1)
+				{
+					gs_aHookFunctionPointers[ALS_OnPlayerUpdate] = Bit:0;
+					// Save the index of the first OnPlayerUpdate function.
+					gs_aOnPlayerUpdateHooks[0] = idx - 1;
+					//gs_aOnPlayerUpdateHooks[0] = Scripting_GetPublicPointer(gs_szFunctionBuffer);
+				}
+				else
+				{
+					// f = First, the upper limit.
+					// s = Second, the lower limit.
+					// Note that this only supports 65535 public functions, but
+					// I suspect the compiler may get a little upset before you
+					// reach that number - and if it doesn't you're going to
+					// end up with a HUGE AMX!
+					// f should always be larger than s in a normal system, even
+					// if it's only 1 larger.
+					new
+						s = tmp & 0xFFFF;
+					if (tmp & 0xFFFF0000)
+					{
+						// Given up counting - too many for quick
+						// resolution.
+						gs_aHookFunctionPointers[ALS_OnPlayerUpdate] = Bit:(s | idx << 16);
+					}
+					else
+					{
+						// Counting.
+						if (++s == HOOKS_MAX_UPDATES)
+						{
+							// Reached the limit of the number of quick hooks
+							// for OnPlayerUpdate supported.
+							gs_aHookFunctionPointers[ALS_OnPlayerUpdate] = Bit:(idx - 1 | idx << 16);
+						}
+						else
+						{
+							gs_aOnPlayerUpdateHooks[s] = idx - 1;
+							//gs_aOnPlayerUpdateHooks[s] = Scripting_GetPublicPointer(gs_szFunctionBuffer);
+							gs_aHookFunctionPointers[ALS_OnPlayerUpdate] = Bit:s;
+						}
+					}
+				}
+				//gs_aHookFunctionPointers[ALS_OnPlayerUpdate] = Bit:((tmp!=_:-1?tmp&0xFFFF:idx-1)|idx<<16);
+			}
+		}
+	}
+	// Now, skip functions we don't need...  This is actually self modifying
+	// code, so if you don't use any of the Hook: features, they are never even
+	// called.  The functionality of this script depends entirely on the rest of
+	// the script.  This can't be made in to a macro because #OnWhatever needs
+	// to stringise the value in the current define if it exists, whereas doing
+	// #On%0 would just make a string of "OnWhatever".
+	if (gs_aHookFunctionPointers[ALS_OnGameModeInit] == Bit:-1) Scripting_RedirectPublic(#OnGameModeInit, Scripting_GetPublicPointer("S@@_OnGameModeInit"));
+	// Now the same again.
+	#if 1
+	if (gs_aHookFunctionPointers[ALS_OnGameModeExit] == Bit:-1) Scripting_RedirectPublic(#OnGameModeExit, Scripting_GetPublicPointer("S@@_OnGameModeExit"));
+	if (gs_aHookFunctionPointers[ALS_OnFilterScriptInit] == Bit:-1) Scripting_RedirectPublic(#OnFilterScriptInit, Scripting_GetPublicPointer("S@@_OnFilterScriptInit"));
+	if (gs_aHookFunctionPointers[ALS_OnFilterScriptExit] == Bit:-1) Scripting_RedirectPublic(#OnFilterScriptExit, Scripting_GetPublicPointer("S@@_OnFilterScriptExit"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerConnect] == Bit:-1) Scripting_RedirectPublic(#OnPlayerConnect, Scripting_GetPublicPointer("S@@_OnPlayerConnect"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerDisconnect] == Bit:-1) Scripting_RedirectPublic(#OnPlayerDisconnect, Scripting_GetPublicPointer("S@@_OnPlayerDisconnect"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerSpawn] == Bit:-1) Scripting_RedirectPublic(#OnPlayerSpawn, Scripting_GetPublicPointer("S@@_OnPlayerSpawn"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerDeath] == Bit:-1) Scripting_RedirectPublic(#OnPlayerDeath, Scripting_GetPublicPointer("S@@_OnPlayerDeath"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleSpawn] == Bit:-1) Scripting_RedirectPublic(#OnVehicleSpawn, Scripting_GetPublicPointer("S@@_OnVehicleSpawn"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleDeath] == Bit:-1) Scripting_RedirectPublic(#OnVehicleDeath, Scripting_GetPublicPointer("S@@_OnVehicleDeath"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerText] == Bit:-1) Scripting_RedirectPublic(#OnPlayerText, Scripting_GetPublicPointer("S@@_OnPlayerText"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerCommandText] == Bit:-1) Scripting_RedirectPublic(#OnPlayerCommandText, Scripting_GetPublicPointer("S@@_OnPlayerCommandText"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerRequestClass] == Bit:-1) Scripting_RedirectPublic(#OnPlayerRequestClass, Scripting_GetPublicPointer("S@@_OnPlayerRequestClass"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerEnterVehicle] == Bit:-1) Scripting_RedirectPublic(#OnPlayerEnterVehicle, Scripting_GetPublicPointer("S@@_OnPlayerEnterVehicle"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerExitVehicle] == Bit:-1) Scripting_RedirectPublic(#OnPlayerExitVehicle, Scripting_GetPublicPointer("S@@_OnPlayerExitVehicle"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerStateChange] == Bit:-1) Scripting_RedirectPublic(#OnPlayerStateChange, Scripting_GetPublicPointer("S@@_OnPlayerStateChange"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerEnterCheckpoint] == Bit:-1) Scripting_RedirectPublic(#OnPlayerEnterCheckpoint, Scripting_GetPublicPointer("S@@_OnPlayerEnterCheckpoint"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerLeaveCheckpoint] == Bit:-1) Scripting_RedirectPublic(#OnPlayerLeaveCheckpoint, Scripting_GetPublicPointer("S@@_OnPlayerLeaveCheckpoint"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerEnterRaceCheckpoint] == Bit:-1) Scripting_RedirectPublic(#OnPlayerEnterRaceCheckpoint, Scripting_GetPublicPointer("S@@_OnPlayerEnterRaceCheckpoint"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerLeaveRaceCheckpoint] == Bit:-1) Scripting_RedirectPublic(#OnPlayerLeaveRaceCheckpoint, Scripting_GetPublicPointer("S@@_OnPlayerLeaveRaceCheckpoint"));
+	if (gs_aHookFunctionPointers[ALS_OnRconCommand] == Bit:-1) Scripting_RedirectPublic(#OnRconCommand, Scripting_GetPublicPointer("S@@_OnRconCommand"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerRequestSpawn] == Bit:-1) Scripting_RedirectPublic(#OnPlayerRequestSpawn, Scripting_GetPublicPointer("S@@_OnPlayerRequestSpawn"));
+	if (gs_aHookFunctionPointers[ALS_OnObjectMoved] == Bit:-1) Scripting_RedirectPublic(#OnObjectMoved, Scripting_GetPublicPointer("S@@_OnObjectMoved"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerObjectMoved] == Bit:-1) Scripting_RedirectPublic(#OnPlayerObjectMoved, Scripting_GetPublicPointer("S@@_OnPlayerObjectMoved"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerPickUpPickup] == Bit:-1) Scripting_RedirectPublic(#OnPlayerPickUpPickup, Scripting_GetPublicPointer("S@@_OnPlayerPickUpPickup"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleMod] == Bit:-1) Scripting_RedirectPublic(#OnVehicleMod, Scripting_GetPublicPointer("S@@_OnVehicleMod"));
+	if (gs_aHookFunctionPointers[ALS_OnEnterExitModShop] == Bit:-1) Scripting_RedirectPublic(#OnEnterExitModShop, Scripting_GetPublicPointer("S@@_OnEnterExitModShop"));
+	if (gs_aHookFunctionPointers[ALS_OnVehiclePaintjob] == Bit:-1) Scripting_RedirectPublic(#OnVehiclePaintjob, Scripting_GetPublicPointer("S@@_OnVehiclePaintjob"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleRespray] == Bit:-1) Scripting_RedirectPublic(#OnVehicleRespray, Scripting_GetPublicPointer("S@@_OnVehicleRespray"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleDamageStatusUpdate] == Bit:-1) Scripting_RedirectPublic(#OnVehicleDamageStatusUpdate, Scripting_GetPublicPointer("S@@_OnVehicleDamageStatusUpdate"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerSelectedMenuRow] == Bit:-1) Scripting_RedirectPublic(#OnPlayerSelectedMenuRow, Scripting_GetPublicPointer("S@@_OnPlayerSelectedMenuRow"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerExitedMenu] == Bit:-1) Scripting_RedirectPublic(#OnPlayerExitedMenu, Scripting_GetPublicPointer("S@@_OnPlayerExitedMenu"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerInteriorChange] == Bit:-1) Scripting_RedirectPublic(#OnPlayerInteriorChange, Scripting_GetPublicPointer("S@@_OnPlayerInteriorChange"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerKeyStateChange] == Bit:-1) Scripting_RedirectPublic(#OnPlayerKeyStateChange, Scripting_GetPublicPointer("S@@_OnPlayerKeyStateChange"));
+	if (gs_aHookFunctionPointers[ALS_OnRconLoginAttempt] == Bit:-1) Scripting_RedirectPublic(#OnRconLoginAttempt, Scripting_GetPublicPointer("S@@_OnRconLoginAttempt"));
+	//if (gs_aHookFunctionPointers[ALS_OnPlayerUpdate] == Bit:-1) Scripting_RedirectPublic(#OnPlayerUpdate, Scripting_GetPublicPointer("S@@_OnPlayerUpdate"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerStreamIn] == Bit:-1) Scripting_RedirectPublic(#OnPlayerStreamIn, Scripting_GetPublicPointer("S@@_OnPlayerStreamIn"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerStreamOut] == Bit:-1) Scripting_RedirectPublic(#OnPlayerStreamOut, Scripting_GetPublicPointer("S@@_OnPlayerStreamOut"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleStreamIn] == Bit:-1) Scripting_RedirectPublic(#OnVehicleStreamIn, Scripting_GetPublicPointer("S@@_OnVehicleStreamIn"));
+	if (gs_aHookFunctionPointers[ALS_OnVehicleStreamOut] == Bit:-1) Scripting_RedirectPublic(#OnVehicleStreamOut, Scripting_GetPublicPointer("S@@_OnVehicleStreamOut"));
+	if (gs_aHookFunctionPointers[ALS_OnDialogResponse] == Bit:-1) Scripting_RedirectPublic(#OnDialogResponse, Scripting_GetPublicPointer("S@@_OnDialogResponse"));
+	if (gs_aHookFunctionPointers[ALS_OnPlayerClickPlayer] == Bit:-1) Scripting_RedirectPublic(#OnPlayerClickPlayer, Scripting_GetPublicPointer("S@@_OnPlayerClickPlayer"));
+	#endif
+	// The OnPlayerUpdate code is special.
+	tmp = _:gs_aHookFunctionPointers[ALS_OnPlayerUpdate];
+	if (tmp == -1)
+	{
+		Scripting_RedirectPublic(#OnPlayerUpdate, Scripting_GetPublicPointer("S@@_OnPlayerUpdate"));
+	}
+	else
+	{
+		if (!(tmp & 0xFFFF))
+		{
+			// Some fast find functions, but no normal ones.
+			gs_aHookFunctionPointers[ALS_OnPlayerUpdate] = Bit:-1;
+		}
+	}
+}
+
+#pragma tabsize 0
+
+// Hook OnGameModeInit using the old system to call the new system.
+public OnGameModeInit()
+{
+	#if !defined FILTERSCRIPT
+		// Generate the list of functions
+		Hooks_GenFuncList();
+	#endif
+	HOOKS_CALL<GameModeInit>
+	//HOOKS_CALL<GameModeInit,>()
+	//ALS_CALL<OnGameModeInit,>()
+}
+#if defined _ALS_OnGameModeInit
+	#undef OnGameModeInit
+#else
+	#define _ALS_OnGameModeInit
+#endif
+#define OnGameModeInit S@@_OnGameModeInit
+ALS_FORWARD<GameModeInit>
+
+public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
+{
+	if (inputtext[0])
+	{
+		HOOKS_C_INT<DialogResponse,iiiis>(playerid,dialogid,response,listitem,inputtext)
+		ALS_C_INT<DialogResponse,1,iiiis>(playerid,dialogid,response,listitem,inputtext)
+	}
+	else
+	{
+		HOOKS_C_INT<DialogResponse,iiiis>(playerid,dialogid,response,listitem,NULL)
+		ALS_C_INT<DialogResponse,1,iiiis>(playerid,dialogid,response,listitem,NULL)
+	}
+	//HOOKS_CALL<DialogResponse>
+}
+#if defined _ALS_OnDialogResponse
+	#undef OnDialogResponse
+#else
+	#define _ALS_OnDialogResponse
+#endif
+#define OnDialogResponse S@@_OnDialogResponse
+ALS_FORWARD<DialogResponse>
+
+public OnPlayerUpdate(playerid)
+{
+	P:1("Hooks_OnPlayerUpdate called");
+	// This is the special one.
+	for (new i = 0; i != HOOKS_MAX_UPDATES; ++i)
+	{
+		P:2("Hooks_OnPlayerUpdate: i = %d", i);
+		new
+			tmp = gs_aOnPlayerUpdateHooks[i];
+		if (tmp == -1)
+		{
+			ALS_CALL<PlayerUpdate>
+		}
+		// This function can return any public, it's not limited to getting
+		// OnPlayerUpdate functions, but the passed index means it will reach a
+		// matching function, which will be an update function, instantly.
+		Scripting_GetPublicFast(tmp, gs_szFunctionBuffer, HOOK_FUNC_SEARCH);
+		CallLocalFunction(gs_szFunctionBuffer,"i", playerid);
+	}
+	P:2("Hooks_OnPlayerUpdate ended");
+	// This uses the normal call wrapper.
+	HOOKS_CALL<PlayerUpdate>
+}
+#if defined _ALS_OnPlayerUpdate
+	#undef OnPlayerUpdate
+#else
+	#define _ALS_OnPlayerUpdate
+#endif
+#define OnPlayerUpdate S@@_OnPlayerUpdate
+ALS_FORWARD<PlayerUpdate>
+
+public OnFilterScriptInit()
+{
+	#if defined FILTERSCRIPT
+		// Generate the list of functions
+		Hooks_GenFuncList();
+	#endif
+	HOOKS_CALL<FilterScriptInit>
+}
+#if defined _ALS_OnFilterScriptInit
+	#undef OnFilterScriptInit
+#else
+	#define _ALS_OnFilterScriptInit
+#endif
+#define OnFilterScriptInit S@@_OnFilterScriptInit
+ALS_FORWARD<FilterScriptInit>
+
+// =============================================================================
+// =============================================================================
+// |||                                                                       |||
+// |||   NOTE:                                                               |||
+// |||                                                                       |||
+// |||     EVERYTHING BEYOND THIS POINT IS BORING AND CAN BE IGNORED -       |||
+// |||     IT'S JUST THE SAME CODE OVER AND OVER FOR EVERY CALLBACK:         |||
+// |||                                                                       |||
+// |||                                                                       |||
+// |||       public OnPlayerConnect(playerid)                                |||
+// |||       {                                                               |||
+// |||           HOOKS_CALL<PlayerConnect>                                   |||
+// |||       }                                                               |||
+// |||       #if defined _ALS_OnPlayerConnect                                |||
+// |||           #undef OnPlayerConnect                                      |||
+// |||       #else                                                           |||
+// |||           #define _ALS_OnPlayerConnect                                |||
+// |||       #endif                                                          |||
+// |||       #define OnPlayerConnect S@@_OnPlayerConnect                     |||
+// |||       ALS_FORWARD<PlayerConnect>                                      |||
+// |||                                                                       |||
+// |||                                                                       |||
+// |||     THE "#if 1" WILL ALLOW YOU TO HIDE ALL THE CODE IN AN             |||
+// |||     EDITOR WITH CODE FOLDING, FOR EXAMPLE NOTEPAD++                   |||
+// |||                                                                       |||
+// =============================================================================
+// =============================================================================
+
+#if 1
+
+public OnGameModeExit()
+{
+	HOOKS_CALL<GameModeExit>
+}
+#if defined _ALS_OnGameModeExit
+	#undef OnGameModeExit
+#else
+	#define _ALS_OnGameModeExit
+#endif
+#define OnGameModeExit S@@_OnGameModeExit
+ALS_FORWARD<GameModeExit>
+
+public OnFilterScriptExit()
+{
+	HOOKS_CALL<FilterScriptExit>
+}
+#if defined _ALS_OnFilterScriptExit
+	#undef OnFilterScriptExit
+#else
+	#define _ALS_OnFilterScriptExit
+#endif
+#define OnFilterScriptExit S@@_OnFilterScriptExit
+ALS_FORWARD<FilterScriptExit>
+
+public OnPlayerConnect(playerid)
+{
+	HOOKS_CALL<PlayerConnect>
+}
+#if defined _ALS_OnPlayerConnect
+	#undef OnPlayerConnect
+#else
+	#define _ALS_OnPlayerConnect
+#endif
+#define OnPlayerConnect S@@_OnPlayerConnect
+ALS_FORWARD<PlayerConnect>
+
+public OnPlayerDisconnect(playerid, reason)
+{
+	HOOKS_CALL<PlayerDisconnect>
+}
+#if defined _ALS_OnPlayerDisconnect
+	#undef OnPlayerDisconnect
+#else
+	#define _ALS_OnPlayerDisconnect
+#endif
+#define OnPlayerDisconnect S@@_OnPlayerDisconnect
+ALS_FORWARD<PlayerDisconnect>
+
+public OnPlayerSpawn(playerid)
+{
+	HOOKS_CALL<PlayerSpawn>
+}
+#if defined _ALS_OnPlayerSpawn
+	#undef OnPlayerSpawn
+#else
+	#define _ALS_OnPlayerSpawn
+#endif
+#define OnPlayerSpawn S@@_OnPlayerSpawn
+ALS_FORWARD<PlayerSpawn>
+
+public OnPlayerDeath(playerid, killerid, reason)
+{
+	HOOKS_CALL<PlayerDeath>
+}
+#if defined _ALS_OnPlayerDeath
+	#undef OnPlayerDeath
+#else
+	#define _ALS_OnPlayerDeath
+#endif
+#define OnPlayerDeath S@@_OnPlayerDeath
+ALS_FORWARD<PlayerDeath>
+
+public OnVehicleSpawn(vehicleid)
+{
+	HOOKS_CALL<VehicleSpawn>
+}
+#if defined _ALS_OnVehicleSpawn
+	#undef OnVehicleSpawn
+#else
+	#define _ALS_OnVehicleSpawn
+#endif
+#define OnVehicleSpawn S@@_OnVehicleSpawn
+ALS_FORWARD<VehicleSpawn>
+
+public OnVehicleDeath(vehicleid, killerid)
+{
+	HOOKS_CALL<VehicleDeath>
+}
+#if defined _ALS_OnVehicleDeath
+	#undef OnVehicleDeath
+#else
+	#define _ALS_OnVehicleDeath
+#endif
+#define OnVehicleDeath S@@_OnVehicleDeath
+ALS_FORWARD<VehicleDeath>
+
+public OnPlayerText(playerid, text[])
+{
+	HOOKS_CALL<PlayerText>
+}
+#if defined _ALS_OnPlayerText
+	#undef OnPlayerText
+#else
+	#define _ALS_OnPlayerText
+#endif
+#define OnPlayerText S@@_OnPlayerText
+ALS_FORWARD<PlayerText>
+
+public OnPlayerCommandText(playerid, cmdtext[])
+{
+	HOOKS_CALL<PlayerCommandText>
+}
+#if defined _ALS_OnPlayerCommandText
+	#undef OnPlayerCommandText
+#else
+	#define _ALS_OnPlayerCommandText
+#endif
+#define OnPlayerCommandText S@@_OnPlayerCommandText
+ALS_FORWARD<PlayerCommandText>
+
+public OnPlayerRequestClass(playerid, classid)
+{
+	HOOKS_CALL<PlayerRequestClass>
+}
+#if defined _ALS_OnPlayerRequestClass
+	#undef OnPlayerRequestClass
+#else
+	#define _ALS_OnPlayerRequestClass
+#endif
+#define OnPlayerRequestClass S@@_OnPlayerRequestClass
+ALS_FORWARD<PlayerRequestClass>
+
+public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
+{
+	HOOKS_CALL<PlayerEnterVehicle>
+}
+#if defined _ALS_OnPlayerEnterVehicle
+	#undef OnPlayerEnterVehicle
+#else
+	#define _ALS_OnPlayerEnterVehicle
+#endif
+#define OnPlayerEnterVehicle S@@_OnPlayerEnterVehicle
+ALS_FORWARD<PlayerEnterVehicle>
+
+public OnPlayerExitVehicle(playerid, vehicleid)
+{
+	HOOKS_CALL<PlayerExitVehicle>
+}
+#if defined _ALS_OnPlayerExitVehicle
+	#undef OnPlayerExitVehicle
+#else
+	#define _ALS_OnPlayerExitVehicle
+#endif
+#define OnPlayerExitVehicle S@@_OnPlayerExitVehicle
+ALS_FORWARD<PlayerExitVehicle>
+
+public OnPlayerStateChange(playerid, newstate, oldstate)
+{
+	HOOKS_CALL<PlayerStateChange>
+}
+#if defined _ALS_OnPlayerStateChange
+	#undef OnPlayerStateChange
+#else
+	#define _ALS_OnPlayerStateChange
+#endif
+#define OnPlayerStateChange S@@_OnPlayerStateChange
+ALS_FORWARD<PlayerStateChange>
+
+public OnPlayerEnterCheckpoint(playerid)
+{
+	HOOKS_CALL<PlayerEnterCheckpoint>
+}
+#if defined _ALS_OnPlayerEnterCheckpoint
+	#undef OnPlayerEnterCheckpoint
+#else
+	#define _ALS_OnPlayerEnterCheckpoint
+#endif
+#define OnPlayerEnterCheckpoint S@@_OnPlayerEnterCheckpoint
+ALS_FORWARD<PlayerEnterCheckpoint>
+
+public OnPlayerLeaveCheckpoint(playerid)
+{
+	HOOKS_CALL<PlayerLeaveCheckpoint>
+}
+#if defined _ALS_OnPlayerLeaveCheckpoint
+	#undef OnPlayerLeaveCheckpoint
+#else
+	#define _ALS_OnPlayerLeaveCheckpoint
+#endif
+#define OnPlayerLeaveCheckpoint S@@_OnPlayerLeaveCheckpoint
+ALS_FORWARD<PlayerLeaveCheckpoint>
+
+public OnPlayerEnterRaceCheckpoint(playerid)
+{
+	HOOKS_CALL<PlayerEnterRaceCheckpoint>
+}
+#if defined _ALS_OnPlayerEnterRaceCP
+	#undef OnPlayerEnterRaceCheckpoint
+#else
+	#define _ALS_OnPlayerEnterRaceCP
+#endif
+#define OnPlayerEnterRaceCheckpoint S@@_OnPlayerEnterRaceCheckpoint
+ALS_FORWARD<PlayerEnterRaceCheckpoint>
+
+public OnPlayerLeaveRaceCheckpoint(playerid)
+{
+	HOOKS_CALL<PlayerLeaveRaceCheckpoint>
+}
+#if defined _ALS_OnPlayerLeaveRaceCP
+	#undef OnPlayerLeaveRaceCheckpoint
+#else
+	#define _ALS_OnPlayerLeaveRaceCP
+#endif
+#define OnPlayerLeaveRaceCheckpoint S@@_OnPlayerLeaveRaceCheckpoint
+ALS_FORWARD<PlayerLeaveRaceCheckpoint>
+
+public OnRconCommand(cmd[])
+{
+	HOOKS_CALL<RconCommand>
+}
+#if defined _ALS_OnRconCommand
+	#undef OnRconCommand
+#else
+	#define _ALS_OnRconCommand
+#endif
+#define OnRconCommand S@@_OnRconCommand
+ALS_FORWARD<RconCommand>
+
+public OnPlayerRequestSpawn(playerid)
+{
+	HOOKS_CALL<PlayerRequestSpawn>
+}
+#if defined _ALS_OnPlayerRequestSpawn
+	#undef OnPlayerRequestSpawn
+#else
+	#define _ALS_OnPlayerRequestSpawn
+#endif
+#define OnPlayerRequestSpawn S@@_OnPlayerRequestSpawn
+ALS_FORWARD<PlayerRequestSpawn>
+
+public OnObjectMoved(objectid)
+{
+	HOOKS_CALL<ObjectMoved>
+}
+#if defined _ALS_OnObjectMoved
+	#undef OnObjectMoved
+#else
+	#define _ALS_OnObjectMoved
+#endif
+#define OnObjectMoved S@@_OnObjectMoved
+ALS_FORWARD<ObjectMoved>
+
+public OnPlayerObjectMoved(playerid, objectid)
+{
+	HOOKS_CALL<PlayerObjectMoved>
+}
+#if defined _ALS_OnPlayerObjectMoved
+	#undef OnPlayerObjectMoved
+#else
+	#define _ALS_OnPlayerObjectMoved
+#endif
+#define OnPlayerObjectMoved S@@_OnPlayerObjectMoved
+ALS_FORWARD<PlayerObjectMoved>
+
+public OnPlayerPickUpPickup(playerid, pickupid)
+{
+	HOOKS_CALL<PlayerPickUpPickup>
+}
+#if defined _ALS_OnPlayerPickUpPickup
+	#undef OnPlayerPickUpPickup
+#else
+	#define _ALS_OnPlayerPickUpPickup
+#endif
+#define OnPlayerPickUpPickup S@@_OnPlayerPickUpPickup
+ALS_FORWARD<PlayerPickUpPickup>
+
+public OnVehicleMod(playerid, vehicleid, componentid)
+{
+	HOOKS_CALL<VehicleMod>
+}
+#if defined _ALS_OnVehicleMod
+	#undef OnVehicleMod
+#else
+	#define _ALS_OnVehicleMod
+#endif
+#define OnVehicleMod S@@_OnVehicleMod
+ALS_FORWARD<VehicleMod>
+
+public OnEnterExitModShop(playerid, enterexit, interiorid)
+{
+	HOOKS_CALL<EnterExitModShop>
+}
+#if defined _ALS_OnEnterExitModShop
+	#undef OnEnterExitModShop
+#else
+	#define _ALS_OnEnterExitModShop
+#endif
+#define OnEnterExitModShop S@@_OnEnterExitModShop
+ALS_FORWARD<EnterExitModShop>
+
+public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
+{
+	HOOKS_CALL<VehiclePaintjob>
+}
+#if defined _ALS_OnVehiclePaintjob
+	#undef OnVehiclePaintjob
+#else
+	#define _ALS_OnVehiclePaintjob
+#endif
+#define OnVehiclePaintjob S@@_OnVehiclePaintjob
+ALS_FORWARD<VehiclePaintjob>
+
+public OnVehicleRespray(playerid, vehicleid, color1, color2)
+{
+	HOOKS_CALL<VehicleRespray>
+}
+#if defined _ALS_OnVehicleRespray
+	#undef OnVehicleRespray
+#else
+	#define _ALS_OnVehicleRespray
+#endif
+#define OnVehicleRespray S@@_OnVehicleRespray
+ALS_FORWARD<VehicleRespray>
+
+public OnVehicleDamageStatusUpdate(vehicleid, playerid)
+{
+	HOOKS_CALL<VehicleDamageStatusUpdate>
+}
+#if defined _ALS_OnVehicleDamageStatusUpd
+	#undef OnVehicleDamageStatusUpdate
+#else
+	#define _ALS_OnVehicleDamageStatusUpd
+#endif
+#define OnVehicleDamageStatusUpdate S@@_OnVehicleDamageStatusUpdate
+ALS_FORWARD<VehicleDamageStatusUpdate>
+
+public OnPlayerSelectedMenuRow(playerid, row)
+{
+	HOOKS_CALL<PlayerSelectedMenuRow>
+}
+#if defined _ALS_OnPlayerSelectedMenuRow
+	#undef OnPlayerSelectedMenuRow
+#else
+	#define _ALS_OnPlayerSelectedMenuRow
+#endif
+#define OnPlayerSelectedMenuRow S@@_OnPlayerSelectedMenuRow
+ALS_FORWARD<PlayerSelectedMenuRow>
+
+public OnPlayerExitedMenu(playerid)
+{
+	HOOKS_CALL<PlayerExitedMenu>
+}
+#if defined _ALS_OnPlayerExitedMenu
+	#undef OnPlayerExitedMenu
+#else
+	#define _ALS_OnPlayerExitedMenu
+#endif
+#define OnPlayerExitedMenu S@@_OnPlayerExitedMenu
+ALS_FORWARD<PlayerExitedMenu>
+
+public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
+{
+	HOOKS_CALL<PlayerInteriorChange>
+}
+#if defined _ALS_OnPlayerInteriorChange
+	#undef OnPlayerInteriorChange
+#else
+	#define _ALS_OnPlayerInteriorChange
+#endif
+#define OnPlayerInteriorChange S@@_OnPlayerInteriorChange
+ALS_FORWARD<PlayerInteriorChange>
+
+public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
+{
+	HOOKS_CALL<PlayerKeyStateChange>
+}
+#if defined _ALS_OnPlayerKeyStateChange
+	#undef OnPlayerKeyStateChange
+#else
+	#define _ALS_OnPlayerKeyStateChange
+#endif
+#define OnPlayerKeyStateChange S@@_OnPlayerKeyStateChange
+ALS_FORWARD<PlayerKeyStateChange>
+
+public OnRconLoginAttempt(ip[], password[], success)
+{
+	HOOKS_CALL<RconLoginAttempt>
+}
+#if defined _ALS_OnRconLoginAttempt
+	#undef OnRconLoginAttempt
+#else
+	#define _ALS_OnRconLoginAttempt
+#endif
+#define OnRconLoginAttempt S@@_OnRconLoginAttempt
+ALS_FORWARD<RconLoginAttempt>
+
+public OnPlayerStreamIn(playerid, forplayerid)
+{
+	HOOKS_CALL<PlayerStreamIn>
+}
+#if defined _ALS_OnPlayerStreamIn
+	#undef OnPlayerStreamIn
+#else
+	#define _ALS_OnPlayerStreamIn
+#endif
+#define OnPlayerStreamIn S@@_OnPlayerStreamIn
+ALS_FORWARD<PlayerStreamIn>
+
+public OnPlayerStreamOut(playerid, forplayerid)
+{
+	HOOKS_CALL<PlayerStreamOut>
+}
+#if defined _ALS_OnPlayerStreamOut
+	#undef OnPlayerStreamOut
+#else
+	#define _ALS_OnPlayerStreamOut
+#endif
+#define OnPlayerStreamOut S@@_OnPlayerStreamOut
+ALS_FORWARD<PlayerStreamOut>
+
+public OnVehicleStreamIn(vehicleid, forplayerid)
+{
+	HOOKS_CALL<VehicleStreamIn>
+}
+#if defined _ALS_OnVehicleStreamIn
+	#undef OnVehicleStreamIn
+#else
+	#define _ALS_OnVehicleStreamIn
+#endif
+#define OnVehicleStreamIn S@@_OnVehicleStreamIn
+ALS_FORWARD<VehicleStreamIn>
+
+public OnVehicleStreamOut(vehicleid, forplayerid)
+{
+	HOOKS_CALL<VehicleStreamOut>
+}
+#if defined _ALS_OnVehicleStreamOut
+	#undef OnVehicleStreamOut
+#else
+	#define _ALS_OnVehicleStreamOut
+#endif
+#define OnVehicleStreamOut S@@_OnVehicleStreamOut
+ALS_FORWARD<VehicleStreamOut>
+
+public OnPlayerClickPlayer(playerid, clickedplayerid, source)
+{
+	HOOKS_CALL<PlayerClickPlayer>
+}
+#if defined _ALS_OnDPlayerClickPlayer
+	#undef OnPlayerClickPlayer
+#else
+	#define _ALS_OnPlayerClickPlayer
+#endif
+#define OnPlayerClickPlayer S@@_OnPlayerClickPlayer
+ALS_FORWARD<PlayerClickPlayer>
+
+#endif
+
+#pragma tabsize 4
+
+#undef ALS_PREFIX

+ 1165 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_ini.inc

@@ -0,0 +1,1165 @@
+/*----------------------------------------------------------------------------*-
+					===========================
+					Y Sever Includes - INI Core
+					===========================
+Description:
+	Reads the INI and also exports a number of functions to other "classes" for
+	easy reading of data files there.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	08/09/10:
+		Started adding sscanf and file plugin compatibility.
+		Added tagless data at the start of a file (dini compatible).
+		Added new INI:file[tag]() syntax.
+		Added options to default file load.
+		Fixed bugs in default file load configuration.
+		Modified to be stand alone.
+	20/02/08:
+		Added INI_RemoveEntry.
+	18/08/07:
+		Fixed bug reading identifiers starting with a tag (i.e. names).
+		Added local file reading for non-serverwide broadcasting.
+		Added tag passing instead of tag based functions option.
+		Increased default pool size.
+	30/07/07:
+		Added auto creation of non-existant files.
+	13/07/07:
+		Fixed INI writing to actually work.
+		Added support for blank lines in INIs decently and quickly.
+	25/06/07:
+		Altered file write options to use lists.
+		Added buffer overwriting for updating values.
+	24/06/07:
+		Added file write options.
+	21/06/07:
+		Added INI_NEW_LINE for future writing functions.
+	20/06/07:
+		Added support for an optional parameter in broadcast data.
+	15/04/07:
+		Updated for more whitespaces.
+		Added INI comment code.
+		Added support for value-less entries.
+		Modified entry extraction to use end of name location parameter.
+		Removed INI_GetTagName, now done via INI_GetEntryName.
+	14/04/07:
+		Updated header documentation with more than changelog.
+	24/03/07:
+		First version.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		INI_Load - Loads an INI file using standard features.
+		INI_ParseFile - Loads a file as an ini and distributes data.
+		INI_GetEntryName - Gets the name of an INI item.
+		INI_GetEntryText - Gets the value of an INI item.
+		INI_Open - Opens an INI for writing.
+		INI_Close - Closes an INI being written to.
+		INI_SetTag - Sets a subheading in an INI fo subsequent writes.
+		INI_WriteString - Writes a string to an INI.
+		INI_WriteInt - Writes an int to an INI.
+		INI_WriteFloat - Writes a float to an INI.
+		INI_WriteHex - Writes a hex to an INI.
+		INI_WriteBin - Writes a binary to an INI.
+		INI_WriteBool - Writes a boolean to an INI.
+		INI_RemoveEntry - Remove an entry from a file.
+	Static:
+		INI_WriteBuffer - Writes an INI's buffer to the file.
+		INI_AddToBuffer - Adds a string to an INI buffer.
+	Inline:
+		INI_Int - Parse an integer INI entry.
+		INI_Float - Parse a float INI entry.
+		INI_Hex - Parse a hex INI entry.
+		INI_Bin - Parse a binary INI entry.
+		INI_Bool - Parse a binary INI entry.
+		INI_String - Parse a string INI entry.
+	API:
+		-
+Callbacks:
+	-
+Definitions:
+	MAX_INI_TAG - Maximum length of an INI tagname.
+	MAX_INI_ENTRY_NAME - Maximum length of an INI entry name.
+	MAX_INI_ENTRY_TEXT - Maximum length of an INI's entries' value.
+	MAX_INI_LINE - Maximum length of a line in a file.
+	INI_NEW_LINE - String for new lines.
+	INI_MAX_WRITES - Maximum concurrent files open for writing.
+	MAX_INI_TAGS - Number of tags the buffer can hold data for at once.
+Enums:
+	E_INI_WRITE - Storage for entries to be written.
+	E_INI_TAGS - Data for tags with data.
+Macros:
+	INI_Parse - Header for ini parsing functions.
+Tags:
+	INI - Handle to an INI file being written to.
+Variables:
+	Global:
+		-
+	Static:
+		YSI_g_sINIWriteBuffer - Basic data to be written.
+		YSI_g_sINIWritePos - Next slot to write to.
+		YSI_g_sINITagPos - Next slot to add a tag to.
+		YSI_g_sINICurrentTag - Pointer to the tag been writen to.
+		YSI_g_sINIWriteTag - Data for tags,
+		YSI_g_sINIWriteFile - Current files been written to.
+Commands:
+	-
+Compile options:
+	-
+Operators:
+	-
+-*----------------------------------------------------------------------------*/
+
+// Ini file reading is not distributed.  User file reading may be, though I
+// doubt it.
+
+#include <YSI\internal\y_version>
+
+//#tryinclude <sscanf>
+
+#include <YSI\y_utils>
+#include <YSI\y_bit>
+#include <YSI\y_debug>
+
+#if !defined MAX_INI_TAG
+	#define MAX_INI_TAG                 (16)
+#endif
+
+#if !defined MAX_INI_ENTRY_NAME
+	#define MAX_INI_ENTRY_NAME          (32)
+#endif
+
+#if !defined MAX_INI_ENTRY_TEXT
+	#define MAX_INI_ENTRY_TEXT          128
+#endif
+
+#define MAX_INI_LINE                    (MAX_INI_ENTRY_NAME + MAX_INI_ENTRY_TEXT + 32)
+
+#define INI_NO_FILE                     (INI:-1)
+
+#if !defined INI_NEW_LINE
+	#define INI_NEW_LINE                "\r\n"
+#endif
+
+#if !defined INI_MAX_WRITES
+	// I doubt many people will use the multiple ini function.
+	#define INI_MAX_WRITES              (2)
+#endif
+
+#if !defined INI_BUFFER_SIZE
+	#define INI_BUFFER_SIZE             (64)
+#endif
+
+/*#if INI_BUFFER_SIZE <= 32
+	#define INI_BUFFER_BITS 2
+#else
+	#define INI_BUFFER_BITS Bit_Bits(INI_BUFFER_SIZE)
+#endif*/
+
+#if !defined MAX_INI_TAGS
+	#define MAX_INI_TAGS 3
+/*#else
+	#if MAX_INI_TAGS > 32
+		#error Current code only supports up to 32 buffer tags
+	#endif*/
+#endif
+
+#define MAX_INI_STRING                  (64)
+
+enum E_INI_WRITE
+{
+	E_INI_WRITE_NAME[MAX_INI_ENTRY_NAME],
+	E_INI_WRITE_TEXT[MAX_INI_ENTRY_TEXT],
+	E_INI_WRITE_NEXT
+}
+
+enum E_INI_TAGS
+{
+	E_INI_TAGS_NAME[MAX_INI_TAG char],
+	E_INI_TAGS_START,
+	E_INI_TAGS_LAST
+}
+
+static stock
+	YSI_g_sINIWriteBuffer[INI_MAX_WRITES][INI_BUFFER_SIZE][E_INI_WRITE],
+	YSI_g_sINIWritePos[INI_MAX_WRITES],
+	YSI_g_sINITagPos[INI_MAX_WRITES],
+	YSI_g_sINICurrentTag[INI_MAX_WRITES],
+	YSI_g_sINIWriteTag[INI_MAX_WRITES][MAX_INI_TAGS][E_INI_TAGS],
+	YSI_g_sINIWriteFile[INI_MAX_WRITES][128];
+
+#define INI_Parse(%1,%2) \
+	forward @INI_%1_%2(name[], value[]); \
+	@INI_%1_%2(name[], value[])
+
+#define INI:%0[%1](%2) \
+	forward @INI_%0_%1(%2); \
+	@INI_%0_%1(%2)
+
+#if defined _inc_sscanf && 0
+	/*------------------------------------------------------------------------*-
+	Function:
+		INI_Int
+	Params:
+		name[] - Name of the INI textual identifier.
+		function - Function to call with integer value.
+	Return:
+		function().
+	Notes:
+		-
+	-*------------------------------------------------------------------------*/
+	
+	#define INI_Int(%1,%2) \
+		if(!strcmp((%1),name,true)&&!sscanf(value,"d",%2))return;
+		//if(!strcmp(){%2=floatstr(value);return;}
+		//if (!strcmp((%1), name, true)) return %2(strval(value))
+	
+	/*------------------------------------------------------------------------*-
+	Function:
+		INI_Float
+	Params:
+		name[] - Name of the INI textual identifier.
+		function - Function to call with float value.
+	Return:
+		function().
+	Notes:
+		-
+	-*------------------------------------------------------------------------*/
+	
+	#define INI_Float(%1,%2) \
+		if(!strcmp((%1),name,true)&&!sscanf(value,"f",%2))return;
+		//if (!strcmp((%1), name, true)) return %2(floatstr(value))
+	
+	/*------------------------------------------------------------------------*-
+	Function:
+		INI_Hex
+	Params:
+		name[] - Name of the INI textual identifier.
+		function - Function to call with hex value.
+	Return:
+		function().
+	Notes:
+		-
+	-*------------------------------------------------------------------------*/
+	
+	#define INI_Hex(%1,%2) \
+		if(!strcmp((%1),name,true)&&!sscanf(value,"h",%2))return;
+		//if (!strcmp((%1), name, true)) return %2(hexstr(value))
+	
+	/*------------------------------------------------------------------------*-
+	Function:
+		INI_Bin
+	Params:
+		name[] - Name of the INI textual identifier.
+		function - Function to call with binary value.
+	Return:
+		function().
+	Notes:
+		-
+	-*------------------------------------------------------------------------*/
+	
+	#define INI_Bin(%1,%2) \
+		if(!strcmp((%1),name,true)&&!sscanf(value,"l",%2))return;
+		//if (!strcmp((%1), name, true)) return %2(binstr(value))
+	
+	/*------------------------------------------------------------------------*-
+	Function:
+		INI_String
+	Params:
+		name[] - Name of the INI textual identifier.
+		function - Function to call with string value.
+	Return:
+		function().
+	Notes:
+		-
+	-*------------------------------------------------------------------------*/
+	
+	#define INI_String(%1,%2,%3) \
+		if(!strcmp((%1),name,true)&&!sscanf(value,"s["#%3"]",%2))return;
+		//if (!strcmp((%1), name, true)) return %2(value)
+#else
+	#define INI_Int(%1,%2) \
+		if(!strcmp((%1),name,true))return %2=strval(value)
+	
+	#define INI_Float(%1,%2) \
+		if(!strcmp((%1),name,true))return _:(%2=floatstr(value))
+	
+	#define INI_Hex(%1,%2) \
+		if(!strcmp((%1),name,true))return %2=hexstr(value)
+	
+	#define INI_Bin(%1,%2) \
+		if(!strcmp((%1),name,true))return %2=binstr(value)
+	
+	#define INI_Bool(%1,%2) \
+		if(!strcmp((%1),name,true))return %2=boolstr(value)
+	
+	#define INI_String(%1,%2,%3) \
+		if(!strcmp((%1),name,true))return strcpy(%2,value,%3)
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_GetEntryName
+Params:
+	source - The string you want to get an entry name from.
+	dest - The place you want to store the entry name to
+Return:
+	bool: Found the name correctly.
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock bool:INI_GetEntryName(source[], dest[], &i)
+{
+	new
+		j;
+	while (source[j] && source[j] <= ' ') j++;
+	i = j;
+	while (source[i] > ' ' && source[i] != '=') i++;
+	if (i == j) return false;
+	i -= j;
+	memcpy(dest, source, j, i * 4, MAX_INI_ENTRY_NAME);
+	dest[i] = '\0';
+	return true;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_GetEntryText
+Params:
+	source - The string you want to get an entry from.
+	dest - The place you want to store the entry to
+Return:
+	-
+Notes:
+-*----------------------------------------------------------------------------*/
+
+stock INI_GetEntryText(source[], dest[], i)
+{
+	while (source[i] && (source[i] <= ' ' || source[i] == '=')) i++;
+	dest[0] = 1;
+	dest[1] = '\0';
+	if (!source[i]) return;
+	strcpy(dest, source[i], MAX_INI_ENTRY_TEXT);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_ParseFile
+Params:
+	filename[] - The file to load.
+	remoteFormat[] - The format string to generate the remote function to
+		pass the data to once loaded.
+	bool:bFileFirst - The order of the remoteFormat parameters.
+	bool:bExtra - Send additional data.
+	extra - Additional data to send.
+	bLocal - Call local functions instead of gloabal ones.
+	bPassTag - Pass the tag as an extra parameter not the function name.
+Return:
+	-
+Notes:
+	bFileFirst sets the order and inclusion of the possible remoteFormat
+	parameters.  If true the format will add the filename first then the 
+	current tag, if false the order will be reversed.  This can also be used
+	to exclude one or the other from the function name by setting the required
+	parameter to be entered first and then only haing one %s in the format
+	sting.  The default order is tag first for languages compatability.
+-*----------------------------------------------------------------------------*/
+
+stock bool:INI_ParseFile(filename[], remoteFormat[], bool:bFileFirst = false, bool:bExtra = false, extra = 0, bool:bLocal = true, bool:bPassTag = false)
+{
+	new
+		File:f;
+	if (!(f = fopen(filename, io_read))) return false;
+	new
+		line[MAX_INI_LINE],
+		tagName[MAX_INI_STRING],
+		function[MAX_INI_STRING],
+		comment,
+		pos;
+	// Strip the extension from the filename.
+	comment = chrfind('.', filename);
+	if (comment != -1) filename[comment] = '\0';
+	// Now reduce it to only the filename, no path.
+	while (comment != -1)
+	{
+		if (filename[comment] == '\\' || filename[comment] == '/')
+		{
+			//strcpy(filename, filename[comment + 1], MAX_INI_STRING);
+			++comment;
+			new
+				i = 0;
+			while ((filename[i] = filename[comment + i]))
+			{
+				++i;
+			}
+			break;
+		}
+		--comment;
+	}
+	// Set the default tag value.
+	if (bFileFirst)
+	{
+		format(function, sizeof (function), remoteFormat, filename, "");
+	}
+	else
+	{
+		format(function, sizeof (function), remoteFormat, "", filename);
+	}
+	// Now read in the whole data.
+	while (fread(f, line))
+	{
+		StripNL(line);
+		if (!line[0]) continue;
+		new
+			stringIdent[MAX_INI_ENTRY_NAME];
+		comment = chrfind(';', line);
+		if (comment != -1)
+		{
+			line[comment] = '\0';
+		}
+		if (!INI_GetEntryName(line, stringIdent, pos))
+		{
+			continue;
+		}
+		if (stringIdent[0] == '[' && (comment = chrfind(']', stringIdent)) != -1 && !stringIdent[comment + 1])
+		{
+			// Got a tag, update the function to call.
+			stringIdent[comment] = '\0';
+			if (bFileFirst)
+			{
+				format(function, sizeof (function), remoteFormat, filename, stringIdent[1]);
+			}
+			else
+			{
+				format(function, sizeof (function), remoteFormat, stringIdent[1], filename);
+			}
+			// Skip complex checks where possible.
+			if (bLocal && funcidx(function) == -1)
+			{
+				function[0] = '\0';
+			}
+			else if (bPassTag)
+			{
+				strcpy(tagName, stringIdent[1], MAX_INI_STRING);
+			}
+		}
+		else if (function[0])
+		{
+			new
+				stringText[MAX_INI_ENTRY_TEXT];
+			INI_GetEntryText(line, stringText, pos);
+			// Read in a value - distribute it as required.
+			if (bLocal)
+			{
+				if (bExtra)
+				{
+					if (bPassTag)
+					{
+						CallLocalFunction(function, "isss", extra, tagName, stringIdent, stringText);
+					}
+					else
+					{
+						CallLocalFunction(function, "iss", extra, stringIdent, stringText);
+					}
+				}
+				else
+				{
+					if (bPassTag)
+					{
+						CallLocalFunction(function, "sss", tagName, stringIdent, stringText);
+					}
+					else
+					{
+						CallLocalFunction(function, "ss", stringIdent, stringText);
+					}
+				}
+			}
+			else
+			{
+				if (bExtra)
+				{
+					if (bPassTag)
+					{
+						CallRemoteFunction(function, "isss", extra, tagName, stringIdent, stringText);
+					}
+					else
+					{
+						CallRemoteFunction(function, "iss", extra, stringIdent, stringText);
+					}
+				}
+				else
+				{
+					if (bPassTag)
+					{
+						CallRemoteFunction(function, "sss", tagName, stringIdent, stringText);
+					}
+					else
+					{
+						CallRemoteFunction(function, "ss", stringIdent, stringText);
+					}
+				}
+			}
+		}
+	}
+	fclose(f);
+	return true;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_Load
+Params:
+	filename[] - The file to load.
+	bool:bExtra - Send additional data.
+	extra - Additional data to send.
+	bLocal - Call local functions instead of gloabal ones.
+Return:
+	INI_ParseFile
+Notes:
+	Wrapper for INI_ParseFile to use standard API features so people can
+	worry even less.  Designed for use with INI_Parse.
+-*----------------------------------------------------------------------------*/
+
+stock bool:INI_Load(filename[], bool:bExtra = false, extra = 0, bool:bLocal = true)
+{
+	return INI_ParseFile(filename, "@INI_%s_%s", true, bExtra, extra, bLocal, false);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_Open
+Params:
+	filename[] - INI file to open.
+Return:
+	INI - handle to the file or INI_NO_FILE.
+Notes:
+	Doesn't actually open the file, just starts a new buffer if possible.
+-*----------------------------------------------------------------------------*/
+
+stock INI:INI_Open(filename[])
+{
+	new
+		i;
+	for (i = 0; i < INI_MAX_WRITES; i++)
+	{
+		if (!YSI_g_sINIWriteFile[i][0]) break;
+	}
+	if (i == INI_MAX_WRITES)
+	{
+		return INI_NO_FILE;
+	}
+	strcpy(YSI_g_sINIWriteFile[i], filename, sizeof (YSI_g_sINIWriteFile[]));
+	YSI_g_sINIWritePos[i] = 0;
+	YSI_g_sINITagPos[i] = 0;
+	// Reset tags.
+	YSI_g_sINICurrentTag[i] = 0;
+	YSI_g_sINIWriteTag[i][0][E_INI_TAGS_NAME][0] = '\0';
+	YSI_g_sINIWriteTag[i][0][E_INI_TAGS_START] = -1;
+/*	if (!fexist(filename))
+	{
+		new
+			File:fHnd = fopen(filename, io_write);
+		if (fHnd)
+		{
+			fclose(fHnd);
+		}
+		C:1(else printf("*** Internal Error: Could not create target file"););
+	}*/
+	return INI:i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_Close
+Params:
+	INI:file - Handle to the ini to close.
+Return:
+	-
+Notes:
+	Writes any outstanding buffer data to the file and ends the stream.
+-*----------------------------------------------------------------------------*/
+
+stock INI_Close(INI:file)
+{
+	if (YSI_g_sINIWritePos[_:file]) INI_WriteBuffer(file);
+	YSI_g_sINIWriteFile[_:file][0] = '\0';
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_SetTag
+Params:
+	INI:file - INI file handle to write to.
+	tag[] - Name of the new file subsection for subsequent data to write to.
+Return:
+	-
+Notes:
+	Sets a new [tag] section header.  Subsequent data is written under this
+	header.  Uses lists for constant tag switching and checks the tag doesn't
+	already exist.
+-*----------------------------------------------------------------------------*/
+
+stock INI_SetTag(INI:file, tag[])
+{
+	if (file < INI:0 || file >= INI:INI_MAX_WRITES) return;
+	new
+		pos = YSI_g_sINITagPos[_:file];
+	for (new i = 0; i < pos; i++)
+	{
+		if (YSI_g_sINIWriteTag[_:file][i][E_INI_TAGS_NAME][0] && !strcmp(tag, YSI_g_sINIWriteTag[_:file][i][E_INI_TAGS_NAME], true))
+		{
+			YSI_g_sINICurrentTag[_:file] = i;
+			return;
+		}
+	}
+	// Allow untagged data (not sure how it will go down...).
+	/*if (pos == 0 && YSI_g_sINIWriteTag[_:file][0][E_INI_TAGS_START] != -1)
+	{
+		++pos;
+		++YSI_g_sINITagPos[_:file];
+	}*/
+	if (pos >= MAX_INI_TAGS)
+	{
+		if (!INI_WriteBuffer(file)) return;
+		// Loop.
+		pos = 0;
+	}
+	//strcpy(YSI_g_sINIWriteTag[_:file][pos][E_INI_TAGS_NAME], tag, MAX_INI_TAG);
+	strpack(YSI_g_sINIWriteTag[_:file][pos][E_INI_TAGS_NAME], tag, MAX_INI_TAG);
+	YSI_g_sINIWriteTag[_:file][pos][E_INI_TAGS_START] = -1;
+	YSI_g_sINICurrentTag[_:file] = pos;
+	++YSI_g_sINITagPos[_:file];
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_AddToBuffer
+Params:
+	INI:file - INI file to write to.
+	name[] - Data name to write.
+	data[] - Data to write.
+Return:
+	-
+Notes:
+	First checks the name doesn't already exist under the current tag header
+	and if it does overwrites the current value.  If not checks there's room
+	in the buffer to write to and purges the buffer if not.  Finally saves the
+	data in the buffer for writing when required and adds the data to the
+	relevant list for tag inclusion.
+-*----------------------------------------------------------------------------*/
+
+static stock INI_AddToBuffer(INI:file, name[], data[])
+{
+	if (file < INI:0 || file >= INI:INI_MAX_WRITES)
+	{
+		return 0;
+	}
+	if (!YSI_g_sINITagPos[_:file])
+	{
+		// Tagless data.
+		YSI_g_sINITagPos[_:file] = 1;
+		YSI_g_sINIWriteTag[_:file][0][E_INI_TAGS_START] = -1;
+		YSI_g_sINIWriteTag[_:file][0][E_INI_TAGS_NAME][0] = 0;
+	}
+	new
+		pos = YSI_g_sINIWritePos[_:file],
+		tmptag = YSI_g_sINICurrentTag[_:file],
+		start = YSI_g_sINIWriteTag[_:file][tmptag][E_INI_TAGS_START];
+	while (start != -1)
+	{
+		if (!strcmp(name, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NAME], true))
+		{
+			strcpy(YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT], data, MAX_INI_ENTRY_TEXT);
+			//strpack(YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT], data, MAX_INI_ENTRY_TEXT);
+			return 1;
+		}
+		start = YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NEXT];
+	}
+	if (pos >= INI_BUFFER_SIZE)
+	{
+		if (!INI_WriteBuffer(file))
+		{
+			return 0;
+		}
+		INI_SetTag(file, YSI_g_sINIWriteTag[_:file][tmptag][E_INI_TAGS_NAME]);
+		pos = 0;
+	}
+	new
+		curtag = YSI_g_sINICurrentTag[_:file];
+	if (YSI_g_sINIWriteTag[_:file][curtag][E_INI_TAGS_START] == -1)
+	{
+		YSI_g_sINIWriteTag[_:file][curtag][E_INI_TAGS_START] = pos;
+	}
+	else
+	{
+		YSI_g_sINIWriteBuffer[_:file][YSI_g_sINIWriteTag[_:file][curtag][E_INI_TAGS_LAST]][E_INI_WRITE_NEXT] = pos;
+	}
+	strcpy(YSI_g_sINIWriteBuffer[_:file][pos][E_INI_WRITE_NAME], name, MAX_INI_ENTRY_NAME);
+	//strpack(YSI_g_sINIWriteBuffer[_:file][pos][E_INI_WRITE_NAME], name, MAX_INI_ENTRY_NAME);
+	strcpy(YSI_g_sINIWriteBuffer[_:file][pos][E_INI_WRITE_TEXT], data, MAX_INI_ENTRY_TEXT);
+	YSI_g_sINIWriteBuffer[_:file][pos][E_INI_WRITE_NEXT] = -1;
+	YSI_g_sINIWriteTag[_:file][curtag][E_INI_TAGS_LAST] = pos;
+	YSI_g_sINIWritePos[_:file]++;
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_RemoveEntry
+Params:
+	INI:file - File to write to.
+	name[] - Item to remove.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for removing data.
+-*----------------------------------------------------------------------------*/
+
+stock INI_RemoveEntry(INI:file, name[])
+{
+	static
+		sData[2] = {-1, 0};
+	INI_AddToBuffer(file, name, sData);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteString
+Params:
+	INI:file - File to write to.
+	name[] - Data name.
+	data[] - Data.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for strings.
+-*----------------------------------------------------------------------------*/
+
+stock INI_WriteString(INI:file, name[], data[])
+{
+	INI_AddToBuffer(file, name, data);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteInt
+Params:
+	INI:file - File to write to.
+	name[] - Data name.
+	data - Integer data.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for integers.
+-*----------------------------------------------------------------------------*/
+
+stock INI_WriteInt(INI:file, name[], data)
+{
+	new
+		str[12];
+	valstr(str, data);
+	INI_AddToBuffer(file, name, str);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteHex
+Params:
+	INI:file - File to write to.
+	name[] - Data name.
+	data - Hex data.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for integers to be written as hex values.
+-*----------------------------------------------------------------------------*/
+
+stock INI_WriteHex(INI:file, name[], data)
+{
+	static const
+		sc_values[] = !"0123456789ABCDEF";
+	new
+		str[11],
+		i = 9;
+	do
+	{
+		str[i--] = sc_values{data & 0x0F};
+		data >>>= 4;
+	}
+	while (data);
+	str[i--] = 'x';
+	str[i] = '0';
+	INI_AddToBuffer(file, name, str[i]);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteBin
+Params:
+	INI:file - File to write to.
+	name[] - Data name.
+	data - Binary data.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for integers to be written as binary values.
+-*----------------------------------------------------------------------------*/
+
+stock INI_WriteBin(INI:file, name[], data)
+{
+	// Do four values at once for speed.  This uses a packed string and unpacks
+	// it so that we can quickly write four values at once.
+	static const
+		sc_values[] = !"0000000100100011010001010110011110001001101010111100110111101111";
+	new
+		str[35],
+		i = 10;
+	do
+	{
+		str[--i] = sc_values[data & 0x0F];
+		data >>>= 4;
+	}
+	while (data);
+	// Convert the coalesced values to individual values.
+	strunpack(str[i], str[i], 33);
+	str[--i] = 'b';
+	str[--i] = '0';
+	INI_AddToBuffer(file, name, str[i]);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteBool
+Params:
+	INI:file - File to write to.
+	name[] - Data name.
+	data - Boolean data.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for booleans.
+-*----------------------------------------------------------------------------*/
+
+stock INI_WriteBool(INI:file, name[], bool:data)
+{
+	if (data)
+	{
+		INI_AddToBuffer(file, name, "true");
+	}
+	else
+	{
+		INI_AddToBuffer(file, name, "false");
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteFloat
+Params:
+	INI:file - File to write to.
+	name[] - Data name.
+	Float:data - Float data.
+	accuracy - number of decimal places to write.
+Return:
+	-
+Notes:
+	Wrapper for INI_AddToBuffer for floats.  Uses custom code instead of
+	format() as it's actually faster for something simple like this.
+-*----------------------------------------------------------------------------*/
+
+stock INI_WriteFloat(INI:file, name[], Float:data, accuracy = 6)
+{
+	new
+		str[32];
+	format(str, sizeof (str), "%.*f", accuracy, data);
+	INI_AddToBuffer(file, name, str);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	INI_WriteBuffer
+Params:
+	INI:file - INI stream to write to file.
+Return:
+	Success/fail.
+Notes:
+	Opens the required file for reading and a temp file for read/writing.  Goes
+	through the entire file reading all contained data.  If it reaches a tag
+	line ([tag_name]) it dumps any unwritten data from the last tag (if there
+	was one) and starts processing the new tag.  While a tag is being processed
+	every line is compared against the UNWRITTEN new data for that tag in the
+	buffer, if they're the same it writes the new data instead (it also writes
+	any comments which were after the data in the original line back), else it
+	writes the original line back.
+	
+	Once all the new data is written to the temp file any tags which haven't
+	been processed at all (i.e. were not found in the original file) are
+	written to the temp file along with all their data.  The original file is
+	then destroyed and reopend and all the data copied out from the temp file
+	to the newly opened original file, closed and saved.
+-*----------------------------------------------------------------------------*/
+
+static stock INI_WriteBuffer(INI:file)
+{
+	if (_:file < 0 || _:file >= INI_MAX_WRITES) return 0;
+	new
+		//File:buffer = fopen("_temp_ysi_user_file_.ysi", io_write),
+		File:buffer = ftemp(),
+		File:source = fopen(YSI_g_sINIWriteFile[_:file], io_read);
+	if (buffer)
+	{
+		new
+			line[MAX_INI_LINE],
+			BitArray:read<INI_BUFFER_SIZE>, //:read[INI_BUFFER_BITS],
+			writing = 0,
+			//Bit:tagswritten,
+			BitArray:tagswritten<MAX_INI_TAGS>,
+			tagpos = YSI_g_sINITagPos[_:file],
+			start = -1,
+			blank;
+		if (source)
+		{
+			// Write tagless data.
+			if (!YSI_g_sINIWriteTag[_:file][0][E_INI_TAGS_NAME][0])
+			{
+				start = YSI_g_sINIWriteTag[_:file][0][E_INI_TAGS_START];
+				// Will be -1 if there is no tagless data.
+				if (start != -1)
+				{
+					writing = 1;
+					Bit_Set(tagswritten, 0, true);
+				}
+			}
+			while (fread(source, line))
+			{
+				new
+					pos = 1;
+				for (new i = 0; line[i]; i++)
+				{
+					if (line[i] == ';')
+					{
+						goto INI_WriteBuffer_cont1;
+					}
+					else if (line[i] > ' ')
+					{
+						// Determine that the line is not blank.
+						pos = 0;
+						break;
+					}
+				}
+				if (pos)
+				{
+					blank++;
+					continue;
+				}
+				if (line[0] == '[' && (pos = chrfind(']', line)) != -1 && endofline(line, pos + 1))
+				{
+					pos--;
+					writing = 0;
+					new
+						form[MAX_INI_LINE];
+					// Reached a new tag - flush the rest of the last tag.
+					while (start != -1)
+					{
+						if (!Bit_GetBit(read, start))
+						{
+							if (YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT][0] != -1)
+							{
+								format(form, sizeof (form), "%s = %s" INI_NEW_LINE, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NAME], YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT]);
+								fwrite(buffer, form);
+							}
+							Bit_Set(read, start, true);
+						}
+						start = YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NEXT];
+					}
+					while (blank--) fwrite(buffer, INI_NEW_LINE);
+					blank = 0;
+					// Note the start of the new tag.
+					for (new j = 0; j < tagpos; j++)
+					{
+						//if (!Bit_Get(tagswritten, j) && !YSI_g_sINIWriteTag[_:file][j][E_INI_TAGS_NAME][pos] && !strcmp(YSI_g_sINIWriteTag[_:file][j][E_INI_TAGS_NAME], line[1], true, pos))
+						if (!Bit_Get(tagswritten, j) && !strcmp(YSI_g_sINIWriteTag[_:file][j][E_INI_TAGS_NAME], line[1], true, pos))
+						{
+							writing = 1;
+							start = YSI_g_sINIWriteTag[_:file][j][E_INI_TAGS_START];
+							//tagswritten |= Bit:(1 << j);
+							Bit_Set(tagswritten, j, true);
+							break;
+						}
+					}
+				}
+				else if (writing)
+				{
+					new
+						name[MAX_INI_ENTRY_NAME],
+						temp,
+						liststart = start;
+					INI_GetEntryName(line, name, temp);
+					pos = chrfind(';', line, temp);
+					while (blank--) fwrite(buffer, INI_NEW_LINE);
+					blank = 0;
+					while (start != -1)
+					{
+						if (!Bit_GetBit(read, start) && !strcmp(name, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NAME]))
+						{
+							Bit_Set(read, start, true, INI_BUFFER_SIZE);
+							// Delete the current entry from the file, as per
+							// our request.
+							if (YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT][0] == -1)
+							{
+								// Can't use "continue" as we're in an inner
+								// loop.
+								goto INI_WriteBuffer_cont2;
+							}
+							if (pos != -1)
+							{
+								format(line, sizeof (line), "%s = %s %s", name, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT], line[pos]);
+							}
+							else
+							{
+								format(line, sizeof (line), "%s = %s" INI_NEW_LINE, name, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT]);
+							}
+							//start = -1;
+							break;
+						}
+						else
+						{
+							start = YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NEXT];
+						}
+					}
+					/*if (start == -1)
+					{
+						// Wasn't found.
+						start = strlen(line);
+						if (line[start - 1] > ' ')
+						{
+							strcat(line, INI_NEW_LINE);
+						}
+					}*/
+					start = liststart;
+				}
+				INI_WriteBuffer_cont1:
+				fwrite(buffer, line);
+				INI_WriteBuffer_cont2:
+			}
+			// Write any data from this tag group not in the original file.
+			// I.e. flush the final read tag.
+			while (start != -1)
+			{
+				if (!Bit_GetBit(read, start))
+				{
+					if (YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT][0] != -1)
+					{
+						format(line, sizeof (line), "%s = %s" INI_NEW_LINE, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NAME], YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT]);
+						fwrite(buffer, line);
+					}
+				}
+				start = YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NEXT];
+			}
+			fclose(source);
+		}
+		// Write any tag groups not found in the original file.
+		for (new j = 0; j < tagpos; j++)
+		{
+			//if (!(tagswritten & Bit:(1 << j)))
+			if (!Bit_Get(tagswritten, j))
+			{
+				start = YSI_g_sINIWriteTag[_:file][j][E_INI_TAGS_START];
+				if (j || YSI_g_sINIWriteTag[_:file][0][E_INI_TAGS_NAME][0])
+				{
+					strunpack(line, YSI_g_sINIWriteTag[_:file][j][E_INI_TAGS_NAME]);
+					format(line, sizeof (line), "[%s]" INI_NEW_LINE, line);
+					fwrite(buffer, line);
+				}
+				while (start != -1)
+				{
+					if (YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT][0] != -1)
+					{
+						format(line, sizeof (line), "%s = %s" INI_NEW_LINE, YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NAME], YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_TEXT]);
+						fwrite(buffer, line);
+					}
+					start = YSI_g_sINIWriteBuffer[_:file][start][E_INI_WRITE_NEXT];
+				}
+			}
+		}
+		//fclose(buffer);
+		// This renames the file back (by copying all the data).
+		fremove(YSI_g_sINIWriteFile[_:file]);
+		#if defined _inc_TODO_COPY_INC
+		#else
+			#if defined _int_TODO_OTHER_COPY_INC
+			#else
+				source = fopen(YSI_g_sINIWriteFile[_:file], io_write);
+				//buffer = fopen("_temp_ysi_user_file_.ysi", io_read);
+				fseek(buffer);
+				if (source) // && buffer)
+				{
+					while (fread(buffer, line)) fwrite(source, line);
+					/*new
+						val;
+					printf("start: %d", _:E_INI_WRITE * INI_BUFFER_SIZE);
+					while ((val = fblockread(buffer, YSI_g_sINIWriteBuffer[_:file][0][E_INI_WRITE_NAME], _:E_INI_WRITE * INI_BUFFER_SIZE)))
+					{
+						printf("%d %d", val, strlen(YSI_g_sINIWriteBuffer[_:file][0][E_INI_WRITE_NAME]));
+						printf("%s", YSI_g_sINIWriteBuffer[_:file][0][E_INI_WRITE_NAME]);
+						fblockwrite(source, YSI_g_sINIWriteBuffer[_:file][0][E_INI_WRITE_NAME], val);
+					}*/
+					fclose(buffer);
+					fclose(source);
+				}
+				//fremove("_temp_ysi_user_file_.ysi");
+			#endif
+		#endif
+		// Reset the write buffer.
+		YSI_g_sINITagPos[_:file] = 0;
+		YSI_g_sINIWritePos[_:file] = 0;
+		YSI_g_sINICurrentTag[_:file] = 0;
+		return 1;
+	}
+	return 0;
+}

+ 955 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_iterate.inc

@@ -0,0 +1,955 @@
+/*----------------------------------------------------------------------------*-
+					===========================
+					 foreach efficient looping
+					===========================
+Description:
+	Provides efficient looping through sparse data sets, such as connected
+	players.  Significantly improved from the original version to be a generic
+	loop system, rather then purely a player loop system.  When used for
+	players this has constant time O(n) for number of connected players (n),
+	unlike standard player loops which are O(MAX_PLAYERS), regardless of the
+	actual number of connected players.  Even when n is MAX_PLAYERS this is
+	still faster.
+Legal:
+	Copyright (C) 2009 Alex "Y_Less" Cole
+	
+	The contents of this file are subject to the Mozilla Public License Version
+	1.1 (the "License"); you may not use this file except in compliance with
+	the License. You may obtain a copy of the License at
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP foreach iterator code.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+Version:
+	0.1.8
+Changelog:
+	16/08/10:
+		Removed all the "2" versions of the functions.
+	14/08/10:
+		Added Iter_Clear to reset an array.
+	06/08/10:
+		Added special array declaration format.
+	18/12/09:
+		Added Itter_Func2 functions for multi-dimensional iterators.
+		Renamed foreact et al as keywords in the documentation.
+		Changed licensing from GPL to MPL.
+	02/09/09:
+		Fixed (again) for 0.3.
+		Added free slot finding.
+	21/08/09:
+		Updated to include random functions.
+		Made entirely stand alone.
+		Ported to 0.3 (separate version).
+		Added automatic callback hook code.
+		Removed debug information from stand alone version.
+	06/01/08:
+		Added debug information.
+	09/10/07:
+		Moved to system.
+	16/09/07:
+		Added list sorting.
+		Made this part of Y SeRver Includes, not Y Sever Includes.
+		Made list sorting optional.
+		Fixed version number.
+	08/09/07:
+		First version.
+Functions:
+	Public:
+		OnPlayerDisconnect - Called when a player leaves to remove them.
+		OnPlayerConnect - Called when a player connects to add them.
+	Core:
+		-
+	Stock:
+		Itter_ShowArray - Displays the contents of the array.
+		Itter_AddInternal - Add a value to an itterator.
+		Itter_RemoveInternal - Remove a value from an itterator.
+		Itter_RandomInternal - Get a random item from an itterator.
+		Itter_FreeInternal - Gets the first free slot in the itterator.
+		Itter_InitInternal - Initialises a multi-dimensional itterator.
+	Static:
+		-
+	Inline:
+		Itter_Create - Create a new itterator value set.
+		Itter_Add - Wraps Itter_AddInternal.
+		Itter_Remove - Wraps Itter_RemoveInternal.
+		Itter_Random - Wraps Itter_RandomInternal.
+		Itter_Count - Gets the number of items in an itterator.
+		Itter_Debug - Wraps around Itter_ShowArray.
+		Itter_Free - Wraps around Itter_FreeInternal.
+		Itter_Create2 - Create a new itterator array value set.
+		Itter_Add2 - Wraps Itter_AddInternal for arrays.
+		Itter_Remove2 - Wraps Itter_RemoveInternal for arrays.
+		Itter_Random2 - Wraps Itter_RandomInternal for arrays.
+		Itter_Count2 - Gets the number of items in an itterator array.
+		Itter_Debug2 - Wraps around Itter_ShowArray for arrays.
+		Itter_Free2 - Wraps around Itter_FreeInternal for arrays.
+	API:
+		-
+Callbacks:
+	-
+Hooks:
+	Itter_OnPlayerConnect - Hook for the OnPlayerConnect callback.
+	Itter_OnPlayerDisconnect - Hook for the OnPlayerDisconnect callback.
+	Itter_OnGameModeInit - Only exists to make the code compile correctly...
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	-
+Keywords:
+	foreach - Command to loop an iterator.
+	foreachex - Like foreach but without a new variable.
+	foreach2 - Command to loop through an iterator array.
+	foreachex - Like foreach2 but without a new variable.
+Tags:
+	Iterator - Declare an iterator.
+Variables:
+	Global:
+		-
+	Static:
+		YSI_g_OPC - Records wether Itter_OnPlayerConnect exists for speed.
+		YSI_g_OPDC - Records wether Itter_OnPlayerDisconnect exists for speed.
+Commands:
+	-
+Compile options:
+	YSI_ITTER_NO_SORT - Removed.
+	FOREACH_NO_BOTS - Remove the bot iterators for smaller code.
+	FOREACH_NO_PLAYERS - Remove all default code for player itteration.
+Operators:
+	-
+Iterators:
+	Player - List of all players connected.
+	Bot - List of all bots (npcs) connected.
+	NPC - Alias of Bot.
+	Character - All players and bots.
+-*----------------------------------------------------------------------------*/
+
+#define _Y_ITERATE_LOCAL_VERSION        1
+
+// Foreach is testing us.
+#if defined _FOREACH_INC_TEST
+	#define _FOREACH_CUR_VERSION _Y_ITERATE_LOCAL_VERSION
+	#endinput
+#endif
+#if !defined _FOREACH_NO_TEST
+	#define _FOREACH_INC_TEST
+	#tryinclude <foreach>
+	#undef _FOREACH_INC_TEST
+	// <foreach> exists - test which is newer.
+	#if defined _inc_foreach
+		#if !defined _FOREACH_CUR_VERSION
+			// Foreach exists, but it's an old version - don't try use this
+			// system or the variables will conflict.
+			#endinput
+		#endif
+		#if _FOREACH_CUR_VERSION > _Y_ITERATE_LOCAL_VERSION
+			// Foreach is newer.
+			#undef _inc_foreach
+			#define _FOREACH_NO_TEST
+			#include <foreach>
+			#endinput
+		#endif
+	#endif
+#endif
+
+#if !defined _samp_included
+	#error "Please include a_samp or a_npc before foreach"
+#endif
+
+#if defined SendChat || defined FOREACH_NO_PLAYERS
+	#define BOTSYNC_IS_BOT     (true)
+#endif
+
+#if defined IsPlayerNPC
+	#define _FOREACH_BOT
+#endif
+
+#if !defined BOTSYNC_IS_BOT
+	static
+		bool:YSI_g_OPC = false,
+		bool:YSI_g_OPDC = false;
+#endif
+
+#if defined YSI_ITTER_NO_SORT
+	#error YSI_ITTER_NO_SORT is no longer supported by foreach.
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Create2
+Params:
+	name - Itterator identifier.
+	size0 - Number of iterators.
+	size1 - Number of items per iterator.
+Return:
+	-
+Notes:
+	Creates a new array of itterator start/array pair.
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Create2 Itter_Create2
+#define Itter_Create2(%1,%2,%3) \
+	new \
+		YSI_gS%1[%2] = {-1, ...}, \
+		YSI_gC%1[%2] = {0}, \
+		YSI_gA%1[%2][%3]
+
+#define IteratorArray:%1[%2]<%3> \
+	YSI_gS%1[%2] = {-1, ...}, \
+	YSI_gC%1[%2] = {0}, \
+	YSI_gA%1[%2][%3]
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Init2
+Params:
+	itter - Name of the itterator array to initialise.
+Return:
+	-
+Notes:
+	Wrapper for Itter_InitInternal.
+
+native Iter_Init(IteratorArray:Name[]<>);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Init Itter_Init
+#define Itter_Init(%1) \
+	Itter_InitInternal(YSI_gA%1, sizeof (YSI_gA%1), sizeof (YSI_gA%1[]))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Create
+Params:
+	name - Itterator identifier.
+	size - Number of values.
+Return:
+	-
+Notes:
+	Creates a new itterator start/array pair.
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Create Itter_Create
+#define Itter_Create(%1,%2) \
+	new \
+		YSI_gS%1 = -1, \
+		YSI_gC%1 = 0, \
+		YSI_gA%1[%2] = {-1, ...}
+
+/*----------------------------------------------------------------------------*-
+Array:
+	Iterator
+Notes:
+	Creates a new itterator start/array pair.
+-*----------------------------------------------------------------------------*/
+
+#define Iterator:%1<%2> \
+	YSI_gS%1 = -1, \
+	YSI_gC%1 = 0, \
+	YSI_gA%1[%2] = {-1, ...}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Add
+Params:
+	itter - Name of the itterator to add the data to.
+	value - Value to add to the itterator.
+Return:
+	-
+Notes:
+	Wrapper for Itter_AddInternal.
+
+native Iter_Add(Iterator:Name<>, value);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Add Itter_Add
+#define Itter_Add(%1,%2) \
+	Itter_AddInternal(YSI_gS%1, YSI_gC%1, YSI_gA%1, %2)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Free
+Params:
+	itter - Name of the itterator to get the first free slot in.
+Return:
+	-
+Notes:
+	Wrapper for Itter_FreeInternal.
+
+native Iter_Free(Iterator:Name<>);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Free Itter_Free
+#define Itter_Free(%1) \
+	Itter_FreeInternal(YSI_gS%1, YSI_gC%1, YSI_gA%1, sizeof (YSI_gA%1))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Remove
+Params:
+	itter - Name of the itterator to remove data from.
+	value - Data to remove.
+Return:
+	-
+Notes:
+	Wrapper for Itter_RemoveInternal.
+
+native Iter_Remove(Iterator:Name<>, value);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Remove Itter_Remove
+#define Itter_Remove(%1,%2) \
+	Itter_RemoveInternal(YSI_gS%1, YSI_gC%1, YSI_gA%1, %2)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Random
+Params:
+	itter - Name of the itterator to get a random slot from.
+Return:
+	-
+Notes:
+	Wrapper for Itter_RandomInternal.
+
+native Iter_Random(Iterator:Name<>);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Random Itter_Random
+#define Itter_Random(%1) \
+	Itter_RandomInternal(YSI_gS%1, YSI_gC%1, YSI_gA%1)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Debug
+Params:
+	itter - Name of the itterator to output debug information from.
+Return:
+	-
+Notes:
+	Wrapper for Itter_ShowArray.
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Debug Itter_Debug
+#define Itter_Debug(%1) \
+	Itter_ShowArray(YSI_gS%1, YSI_gA%1, YSI_gC%1)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Count
+Params:
+	itter - Name of the itterator to get a random slot from4.
+Return:
+	-
+Notes:
+	Returns the number of items in this itterator.
+
+native Iter_Count(Iterator:Name<>);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Count Itter_Count
+#define Itter_Count(%1) \
+	YSI_gC%1
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_Clear
+Params:
+	itter - Name of the itterator empty.
+Return:
+	-
+Notes:
+	Wrapper for Itter_ClearInternal.
+
+native Iter_Clear(IteratorArray:Name[]<>);
+
+-*----------------------------------------------------------------------------*/
+
+#define Iter_Clear Itter_Clear
+#define Itter_Clear(%1) \
+	Itter_ClearInternal(YSI_gS%1, YSI_gC%1, YSI_gA%1)
+
+/*----------------------------------------------------------------------------*-
+Create the internal itterators.
+-*----------------------------------------------------------------------------*/
+
+#if !defined BOTSYNC_IS_BOT
+	new
+		Iterator:Player<MAX_PLAYERS>;
+	
+	#if defined _FOREACH_BOT && !defined FOREACH_NO_BOTS
+		new
+			Iterator:Bot<MAX_PLAYERS>,
+			Iterator:Character<MAX_PLAYERS>;
+		
+		#define YSI_gNPCS YSI_gBotS
+		#define YSI_gNPCC YSI_gBotC
+		#define YSI_gNPCA YSI_gBotA
+	#endif
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	foreach
+Params:
+	data - Data to itterate through.
+	as - Variable to set value to.
+Return:
+	-
+Notes:
+	Not exactly the same as PHP foreach, just itterates through a list and
+	returns the value of the current slot but uses that slot as the next index
+	too.  Variables must be in the form YSI_g<name>S for the start index and
+	YSI_g<name>A for the data array where <name> is what's entered in data.
+-*----------------------------------------------------------------------------*/
+
+#define foreach(%1,%2) \
+	for (new %2 = YSI_gS%1; %2 != -1; %2 = YSI_gA%1[%2])
+
+/*----------------------------------------------------------------------------*-
+Function:
+	foreachex
+Params:
+	data - Data to itterate through.
+	as - Variable to set value to.
+Return:
+	-
+Notes:
+	Similar to foreach but doesn't declare a new variable for the itterator.
+-*----------------------------------------------------------------------------*/
+
+#define foreachex(%1,%2) \
+	for (%2 = YSI_gS%1; %2 != -1; %2 = YSI_gA%1[%2])
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_OnPlayerConnect
+Params:
+	playerid - Player who joined.
+Return:
+	-
+Notes:
+	Adds a player to the loop data.  Now sorts the list too.  Note that I found
+	the most bizzare bug ever (I *think* it may be a compiler but, but it
+	requires further investigation), basically it seems that multiple variables
+	were being treated as the same variable (namely YSI_gBotS and
+	YSI_gCharacterS were the same and YSI_gBotC and YSI_gCharacterC were the
+	same).  Adding print statements which reference these variables seem to fix
+	the problem, and I've tried to make sure that the values will never actually
+	get printed.
+-*----------------------------------------------------------------------------*/
+
+#if !defined BOTSYNC_IS_BOT
+	public
+		OnPlayerConnect(playerid)
+	{
+		#if defined _FOREACH_BOT
+			if (!IsPlayerNPC(playerid))
+			{
+				Itter_Add(Player, playerid);
+			}
+			#if !defined FOREACH_NO_BOTS
+				else
+				{
+					Itter_Add(Bot, playerid);
+				}
+				#pragma tabsize 4
+				Itter_Add(Character, playerid);
+			#endif
+		#else
+			Itter_Add(Player, playerid);
+		#endif
+		if (YSI_g_OPC)
+		{
+			return CallLocalFunction("Itter_OnPlayerConnect", "i", playerid);
+		}
+		return 1;
+	}
+	
+	#if defined _ALS_OnPlayerConnect
+		#undef OnPlayerConnect
+	#else
+		#define _ALS_OnPlayerConnect
+	#endif
+	#define OnPlayerConnect Itter_OnPlayerConnect
+	
+	forward
+		Itter_OnPlayerConnect(playerid);
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_OnGameModeInit
+Params:
+	-
+Return:
+	-
+Notes:
+	There are WIERD bugs in this script, seemingly caused by the compiler, so
+	this hopefully fixes them.  The OnFilterScriptInit code is written to be
+	very fast by utilising the internal array structure instead of the regular
+	Add functions.
+-*----------------------------------------------------------------------------*/
+
+#if !defined BOTSYNC_IS_BOT
+	#if defined FILTERSCRIPT
+		public
+			OnFilterScriptInit()
+		{
+			if (YSI_gCPlayer)
+			{
+				print("foreach error: Something went wrong again!  Please tell Y_less");
+				#if defined _FOREACH_BOT && !defined FOREACH_NO_BOTS
+					printf("%d", YSI_gSBot);
+					printf("%d", YSI_gCBot);
+					printf("%d", YSI_gSCharacter);
+					printf("%d", YSI_gCCharacter);
+				#endif
+				printf("%d", YSI_gSPlayer);
+				printf("%d", YSI_gCPlayer);
+			}
+			#if defined _FOREACH_BOT && !defined FOREACH_NO_BOTS
+				new
+					lastBot = -1,
+					lastCharacter = -1;
+			#endif
+			new
+				lastPlayer = -1;
+			for (new i = 0; i != MAX_PLAYERS; ++i)
+			{
+				if (IsPlayerConnected(i))
+				{
+					#if defined _FOREACH_BOT
+						if (!IsPlayerNPC(i))
+						{
+							if (lastPlayer == -1)
+							{
+								YSI_gSPlayer = i;
+							}
+							else
+							{
+								YSI_gAPlayer[lastPlayer] = i;
+							}
+							++YSI_gCPlayer;
+							lastPlayer = i;
+						}
+						#if !defined FOREACH_NO_BOTS
+							else
+							{
+								if (lastBot == -1)
+								{
+									YSI_gSBot = i;
+								}
+								else
+								{
+									YSI_gABot[lastBot] = i;
+								}
+								++YSI_gCBot;
+								lastBot = i;
+							}
+							#pragma tabsize 4
+							if (lastCharacter == -1)
+							{
+								YSI_gSCharacter = i;
+							}
+							else
+							{
+								YSI_gACharacter[lastCharacter] = i;
+							}
+							++YSI_gCCharacter;
+							lastCharacter = i;
+						#endif
+					#else
+						if (lastPlayer == -1)
+						{
+							YSI_gSPlayer = i;
+						}
+						else
+						{
+							YSI_gAPlayer[lastPlayer] = i;
+						}
+						++YSI_gCPlayer;
+						lastPlayer = i;
+					#endif
+				}
+			}
+			YSI_g_OPC = (funcidx("Itter_OnPlayerConnect") != -1);
+			YSI_g_OPDC = (funcidx("Itter_OnPlayerDisconnect") != -1);
+			CallLocalFunction("Itter_OnFilterScriptInit", "");
+		}
+		
+		#if defined _ALS_OnFilterScriptInit
+			#undef OnFilterScriptInit
+		#else
+			#define _ALS_OnFilterScriptInit
+		#endif
+		#define OnFilterScriptInit Itter_OnFilterScriptInit
+		
+		forward Itter_OnFilterScriptInit();
+	#else
+		public
+			OnGameModeInit()
+		{
+			if (YSI_gCPlayer)
+			{
+				print("foreach error: Something went wrong again!  Please tell Y_less");
+				#if defined _FOREACH_BOT && !defined FOREACH_NO_BOTS
+					printf("%d", YSI_gSBot);
+					printf("%d", YSI_gCBot);
+					printf("%d", YSI_gSCharacter);
+					printf("%d", YSI_gCCharacter);
+				#endif
+				printf("%d", YSI_gSPlayer);
+				printf("%d", YSI_gCPlayer);
+			}
+			YSI_g_OPC = (funcidx("Itter_OnPlayerConnect") != -1);
+			YSI_g_OPDC = (funcidx("Itter_OnPlayerDisconnect") != -1);
+			CallLocalFunction("Itter_OnGameModeInit", "");
+		}
+		
+		#if defined _ALS_OnGameModeInit
+			#undef OnGameModeInit
+		#else
+			#define _ALS_OnGameModeInit
+		#endif
+		#define OnGameModeInit Itter_OnGameModeInit
+		
+		forward
+			Itter_OnGameModeInit();
+	#endif
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_OnPlayerDisconnect
+Params:
+	playerid - Player who left.
+Return:
+	-
+Notes:
+	Removes a player from the loop data.
+-*----------------------------------------------------------------------------*/
+
+#if !defined BOTSYNC_IS_BOT
+	public
+		OnPlayerDisconnect(playerid, reason)
+	{
+		#if defined _FOREACH_BOT
+			if (!IsPlayerNPC(playerid))
+			{
+				Itter_Remove(Player, playerid);
+			}
+			#if !defined FOREACH_NO_BOTS
+				else
+				{
+					Itter_Remove(Bot, playerid);
+				}
+				#pragma tabsize 4
+				Itter_Remove(Character, playerid);
+			#endif
+		#else
+			Itter_Remove(Player, playerid);
+		#endif
+		if (YSI_g_OPDC)
+		{
+			return CallLocalFunction("Itter_OnPlayerDisconnect", "ii", playerid, reason);
+		}
+		return 1;
+	}
+	
+	#if defined _ALS_OnPlayerDisconnect
+		#undef OnPlayerDisconnect
+	#else
+		#define _ALS_OnPlayerDisconnect
+	#endif
+	#define OnPlayerDisconnect Itter_OnPlayerDisconnect
+	
+	forward
+		Itter_OnPlayerDisconnect(playerid, reason);
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_ShowArray
+Params:
+	start - Itterator start point.
+	members[] - Itterator contents.
+	size - Number of itterator values
+Return:
+	-
+Notes:
+	Pure debug function.  Has regular prints not debug prints
+	as it's only called when debug is on.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_ShowArray(start, members[], size)
+{
+	static
+		sString[61];
+	new
+		i,
+		j = 10;
+	printf("Start: %d", start);
+	printf("Size:  %d", size);
+	while (i < size)
+	{
+		sString[0] = '\0';
+		while (i < j && i < size)
+		{
+			format(sString, sizeof (sString), "%s, %d", sString, members[i]);
+			i++;
+		}
+		printf("Array (%d): %s", j, sString);
+		j += 10;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_RandomInternal
+Params:
+	start - Array start index.
+	count - Number of items in the itterator.
+	array[] - Itterator data.
+Return:
+	-
+Notes:
+	Returns a random value from an iterator.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_RandomInternal(start, count, array[])
+{
+	if (count == 0)
+	{
+		return -1;
+	}
+	new
+		rnd = random(count),
+		cur = start;
+	while (cur != -1)
+	{
+		if (rnd--)
+		{
+			cur = array[cur];
+		}
+		else
+		{
+			return cur;
+		}
+	}
+	return -1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_FreeInternal
+Params:
+	start - Array start index.
+	count - Number of items in the itterator.
+	array[] - Itterator data.
+	size - Size of the itterator.
+Return:
+	-
+Notes:
+	Finds the first free slot in the itterator.  Itterators now HAVE to be
+	sorted for this function to work correctly as it uses that fact to decide
+	wether a slot is unused or the last one.  If you want to use the slot
+	straight after finding it the itterator will need to re-find it to add in
+	the data.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_FreeInternal(start, count, array[], size)
+{
+	if (count == size)
+	{
+		return -1;
+	}
+	else if (count == 0)
+	{
+		return 0;
+	}
+	new
+		first = 0;
+	while (first != -1)
+	{
+		if (first == start)
+		{
+			start = array[start];
+		}
+		else if (array[first] == -1)
+		{
+			return first;
+		}
+		++first;
+	}
+	return -1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_AddInternal
+Params:
+	&start - Array start index.
+	&count - Number of items in the itterator.
+	array[] - Itterator data.
+	value - Item to add.
+Return:
+	-
+Notes:
+	Adds a value to a given itterator set.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_AddInternal(&start, &count, array[], value)
+{
+	if (array[value] != -1)
+	{
+		return 0;
+	}
+	++count;
+	if (start == -1)
+	{
+		start = value;
+	}
+	else if (start > value)
+	{
+		array[value] = start;
+		start = value;
+	}
+	else
+	{
+		new
+			cur = start,
+			last;
+		do
+		{
+			last = cur;
+			cur = array[cur];
+			if (cur > value)
+			{
+				array[value] = cur;
+				array[last] = value;
+				return 1;
+			}
+		}
+		while (cur != -1);
+		array[last] = value;
+	}
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_RemoveInternal
+Params:
+	&start - Array start index.
+	&count - Number of items in the itterator.
+	array[] - Itterator data.
+	value - Item to remove.
+Return:
+	-
+Notes:
+	Removes a value from an itterator.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_RemoveInternal(&start, &count, array[], value)
+{
+	if (start == -1)
+	{
+		return 0;
+	}
+	if (start == value)
+	{
+		start = array[value];
+	}
+	else
+	{
+		new
+			cur = start;
+		while (array[cur] != value)
+		{
+			cur = array[cur];
+			if (cur == -1)
+			{
+				return 0;
+			}
+		}
+		array[cur] = array[value];
+	}
+	array[value] = -1;
+	--count;
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_ClearInternal
+Params:
+	&start - Array start index.
+	&count - Number of items in the itterator.
+	array[] - Itterator data.
+Return:
+	-
+Notes:
+	Resets an iterator.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_ClearInternal(&start, &count, array[])
+{
+	if (start != -1)
+	{
+		new
+			cur = start,
+			next = array[cur];
+		start = -1;
+		count = 0;
+		while (next != -1)
+		{
+			array[cur] = -1;
+			cur = next;
+			next = array[cur];
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Itter_InitInternal
+Params:
+	array[][] - Itterator array to initialise.
+	s0 - Size of first dimension.
+	s1 - Size of second dimension.
+Return:
+	-
+Notes:
+	Multi-dimensional arrays can't be initialised at compile time, so need to be
+	done at run time, which is slightly annoying.
+-*----------------------------------------------------------------------------*/
+
+stock
+	Itter_InitInternal(arr[][], s0, s1)
+{
+	for (new i = 0; i != s0; ++i)
+	{
+		for (new j = 0; j != s1; ++j)
+		{
+			arr[i][j] = -1;
+		}
+	}
+}

+ 1524 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_master.inc

@@ -0,0 +1,1524 @@
+/*----------------------------------------------------------------------------*-
+                             ======================
+                              YSI - Master Include
+                             ======================
+Description:
+	Handles distribution of control of code segments across all running scripts
+	with YSI to avoid conflicts of checkpoint streamers etc and allow features
+	like "/commands" displaying all commands on the server.
+	
+	Now fully autonomous - to use the master system simply define which one you
+	want and include the script:
+	
+	  #define MASTER 14
+	  #include <YSI\Master>
+	
+	That will make the current script attempt to make itself the main master -
+	you don't need ANY other code for initialisation anywhere (which took a
+	while to figure out)...
+	
+	This is now over 2000 lines of repetitive and complex macros!
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.2
+Changelog:
+	06/08/10:
+		Managed the ultimate - got completely transparent inclusion!
+	05/08/10:
+		Completed new master system, now does all syncing and clients.
+	06/10/09:
+		Rewrote using states.
+		Added remote function macros.
+		Reduced the number of masters to a single one.  It must have them all.
+		Vastly simplified the master model - ending the master ends everything.
+	06/01/08:
+		Added code to not pass data if no other script exists.
+	17/11/07:
+		Added code for a script to remove itself from the global list.
+	11/10/07:
+		Not first version but added documentation months late.
+Functions:
+	Public:
+		-
+	Core:
+		-
+	Stock:
+		-
+	Static:
+		-
+	Inline:
+		-
+	API:
+		-
+	Hooks:
+		-
+Callbacks:
+	-
+Definitions:
+	-
+Enums:
+	-
+Macros:
+	RF - Declare a function which may be remote.
+	RV - Declare a void function which may be remote.
+	RS - Declare an optional callback.
+	RFN - Declare an optional callback with no parameters.
+	RFC - Declare a slower but shorter function.
+	RFP - Declare a function with tags and give recall hints.
+	RFPC - Combination of P and C.
+	RFCP - Combination of P and C.
+Tags:
+	-
+Variables:
+	Global:
+		_@ - ID of this script.
+	Static:
+		-
+Commands:
+	-
+Compile options:
+	YSI_NO_MASTER - Don't use the master system.
+	YSI_IS_CLIENT - Script is a client only script.
+	YSI_IS_SERVER - Script is a server only script.
+Operators:
+	-
+Natives:
+	-
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+// ALWAYS!  The compiler defines this automatically, don't use it as this is
+// included multiple times to handle multiple master systems.
+#undef _inc_y_master
+
+/*#if defined YSIM_STORED_SETTINGS
+	#define _YSIM_OVERRIDE
+#endif*/
+
+#if defined _YSIM_RESET_USER
+	#undef _YSIM_RESET_USER
+	#if !defined _YSIM_MANUAL_SET
+		#endinput
+	#endif
+	//#define MASTER _YSIM_LAST_MANUAL
+	#define _YSIM_OVERRIDE _YSIM_LAST_MANUAL
+	#include <YSI\internal\y_overridemaster>
+#elseif defined MASTER
+	#if !defined _YSIM_MANUAL_SET
+		#define _YSIM_MANUAL_SET
+	#endif
+	#if defined _YSIM_LAST_MANUAL
+		#undef _YSIM_LAST_MANUAL
+	#endif
+	#if MASTER == 0
+		#define _YSIM_LAST_MANUAL 0
+		// This master was already included, the user just didn't realise.
+		/*#if defined _YSIM_FAKE_MANUAL_SET
+			#define _YSIM_OVERRIDE 0
+			#define YSIM_STORED_SETTINGS 0
+			#undef _YSIM_FAKE_MANUAL_SET
+		#endif*/
+	#elseif MASTER == 1
+		#define _YSIM_LAST_MANUAL 1
+	#elseif MASTER == 2
+		#define _YSIM_LAST_MANUAL 2
+	#elseif MASTER == 3
+		#define _YSIM_LAST_MANUAL 3
+	#elseif MASTER == 4
+		#define _YSIM_LAST_MANUAL 4
+	#elseif MASTER == 5
+		#define _YSIM_LAST_MANUAL 5
+	#elseif MASTER == 6
+		#define _YSIM_LAST_MANUAL 6
+	#elseif MASTER == 7
+		#define _YSIM_LAST_MANUAL 7
+	#elseif MASTER == 8
+		#define _YSIM_LAST_MANUAL 8
+	#elseif MASTER == 9
+		#define _YSIM_LAST_MANUAL 9
+	#elseif MASTER == 10
+		#define _YSIM_LAST_MANUAL 10
+	#elseif MASTER == 11
+		#define _YSIM_LAST_MANUAL 11
+	#elseif MASTER == 12
+		#define _YSIM_LAST_MANUAL 12
+	#elseif MASTER == 13
+		#define _YSIM_LAST_MANUAL 13
+	#elseif MASTER == 14
+		#define _YSIM_LAST_MANUAL 14
+	#elseif MASTER == 15
+		#define _YSIM_LAST_MANUAL 15
+	#elseif MASTER == 16
+		#define _YSIM_LAST_MANUAL 16
+	#elseif MASTER == 17
+		#define _YSIM_LAST_MANUAL 17
+	#elseif MASTER == 18
+		#define _YSIM_LAST_MANUAL 18
+	#elseif MASTER == 19
+		#define _YSIM_LAST_MANUAL 19
+	#elseif MASTER == 20
+		#define _YSIM_LAST_MANUAL 20
+	#elseif MASTER == 21
+		#define _YSIM_LAST_MANUAL 21
+	#elseif MASTER == 22
+		#define _YSIM_LAST_MANUAL 22
+	#elseif MASTER == 23
+		#define _YSIM_LAST_MANUAL 23
+	#elseif MASTER == 24
+		#define _YSIM_LAST_MANUAL 24
+	#elseif MASTER == 25
+		#define _YSIM_LAST_MANUAL 25
+	#endif
+#else
+	//#define YSIM_STORED_SETTINGS YSIM_RECALL_19
+	//#define _YSIM_AUTODEF
+	#if defined _YSIM_OVERRIDE
+		#include <YSI\internal\y_overridemaster>
+		#if !defined MASTER
+			#error _YSIM_OVERRIDE used with an invalid master value.
+		#endif
+	#else
+		#tryinclude <YSI\internal\y_automasters>
+		#if !defined MASTER
+			//#error "You must define a unique MASTER number from 0 to 25."
+			// Default for user scripts.
+			#define MASTER 0
+			#if defined _YSIM_LAST_MANUAL
+				#undef _YSIM_LAST_MANUAL
+			#endif
+			#define _YSIM_LAST_MANUAL 0
+			#if !defined _YSIM_MANUAL_SET
+				#define _YSIM_MANUAL_SET
+			#endif
+			// Detect reinclusions.
+			/*#if defined _YSIM_FAKE_MANUAL_SET
+				#define _YSIM_OVERRIDE 0
+				#define YSIM_STORED_SETTINGS 0
+				#undef _YSIM_FAKE_MANUAL_SET
+			#endif*/
+		#endif
+	#endif
+#endif
+
+#if MASTER > 25 || MASTER < 0
+	// There are some secret ones reserved purely for YSI!
+	//#if !defined _YSIM_USED_AUTO || MASTER > 42
+	//#if !defined _YSIM_OVERRIDE
+		#error Invalid MASTER value, must be between 0 and 25 (inclusive).
+	//#endif
+#endif
+
+#if defined YSIM_HAS_MASTER
+	#undef YSIM_HAS_MASTER
+#endif
+
+#if defined YSIM_IS_CLIENT
+	#undef YSIM_IS_CLIENT
+#endif
+
+#if defined YSIM_IS_SERVER
+	#undef YSIM_IS_SERVER
+#endif
+
+#if defined YSIM_IS_STUB
+	#undef YSIM_IS_STUB
+#endif
+
+#if defined YSIM_CLOUD
+	#undef YSIM_CLOUD
+#endif
+
+//#if defined YSIM_NOT_CLIENT
+//	#undef YSIM_NOT_CLIENT
+//#endif
+
+#if defined _YSIM_OVERRIDE
+	// Get stored settings for YSI libraries.  This allows the group system to
+	// use the same master settings as another library without being there at
+	// the time.
+	#if YSIM_STORED_SETTINGS == 0
+		#define YSIM_HAS_MASTER 0
+	#else
+		#define YSIM_HAS_MASTER 1
+	#endif
+	
+	#if YSIM_STORED_SETTINGS == 1
+		#define YSIM_IS_CLIENT 1
+	#else
+		#define YSIM_IS_CLIENT 0
+	#endif
+	
+	#if YSIM_STORED_SETTINGS == 2
+		#define YSIM_IS_SERVER 1
+	#else
+		#define YSIM_IS_SERVER 0
+	#endif
+	
+	#if YSIM_STORED_SETTINGS == 3
+		#define YSIM_CLOUD 1
+	#else
+		#define YSIM_CLOUD 0
+	#endif
+	
+	#if YSIM_STORED_SETTINGS == 4
+		#define YSIM_IS_STUB 1
+	#else
+		#define YSIM_IS_STUB 0
+	#endif
+#else
+	// Set up simple quick macros to query different current capabilities.
+	#if (!defined YSI_NO_MASTER || defined YSIM_T_ENABLE) && !defined YSIM_T_DISABLE
+		#define YSIM_HAS_MASTER 1
+	#else
+		#define YSIM_HAS_MASTER 0
+	#endif
+	
+	#if (defined YSI_IS_CLIENT || defined YSIM_C_ENABLE) && !defined YSIM_C_DISABLE
+		#define YSIM_IS_CLIENT 1
+	#else
+		#define YSIM_IS_CLIENT 0
+	#endif
+	
+	#if (defined YSI_IS_SERVER || defined YSIM_S_ENABLE) && !defined YSIM_S_DISABLE
+		#define YSIM_IS_SERVER 1
+	#else
+		#define YSIM_IS_SERVER 0
+	#endif
+	
+	#if (defined YSI_IS_STUB || defined YSIM_U_ENABLE) && !defined YSIM_U_DISABLE
+		#define YSIM_IS_STUB 1
+	#else
+		#define YSIM_IS_STUB 0
+	#endif
+	
+	#if YSIM_HAS_MASTER && !YSIM_IS_CLIENT && !YSIM_IS_SERVER
+		#define YSIM_CLOUD 1
+	#else
+		#define YSIM_CLOUD 0
+	#endif
+#endif
+
+#if defined _inc_y_masteronce
+	// Been included at least once, clean up from before.
+	#undef RF
+	#undef RF@p
+	#undef RF@c
+	#undef RF@v
+	//#undef RF@n
+	#undef RF@pc
+	#undef RF@pv
+	#undef RF@pcv
+	#undef RF@vc
+	#undef RF@t
+	#undef RF@pt
+	#undef RF@ct
+	#undef RF@pct
+	//#undef RF@vn
+	
+	// Remote string
+	#undef RS
+	#undef RS@p
+	//#undef RS@c
+	//#undef RS@cp
+	
+	// Remote calback
+	//#undef RC
+	//#undef RC@v
+	
+	// Remote hook
+	#undef RH
+	
+	// Remote timer
+	#undef RT
+	
+	// Remote private
+	//#undef RP@v
+	
+	// Remote command
+	#undef RC
+	
+	// Remote local
+	//#undef RL
+	
+	// Remote text load
+	#undef RX
+	
+	// Remote ALS
+	#undef RA
+	//#undef RA@p
+	//#undef RC@v
+	//#undef RC@n
+	//#undef RC@vn
+
+	#undef Master_Caller
+	//#undef Master_Init
+#endif
+
+#include <YSI\y_utils>
+
+#include <YSI\internal\y_masteronce>
+
+// Clear up some artifacts
+#if defined YSIM_DEFINED
+	#undef YSIM_DEFINED
+#endif
+
+#if defined _YCM
+	#undef _YCM
+#endif
+
+// Now set the current script data.
+// IDIOT!  These are mostly mutually exclusive!  You don't need a horrible huge
+// bit array to store the fact that this is both a client AND a server!
+#if MASTER == 0
+	#if defined _YCM_a@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_a@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_0 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_0 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_0 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_0 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_0 4
+		#else
+			#error Undefined master type on 0
+		#endif
+	#endif
+	#define _YCM a@
+#elseif MASTER == 1
+	#if defined _YCM_b@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_b@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_1 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_1 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_1 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_1 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_1 4
+		#else
+			#error Undefined master type on 1
+		#endif
+	#endif
+	#define _YCM b@
+#elseif MASTER == 2
+	#if defined _YCM_c@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_c@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_2 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_2 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_2 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_2 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_2 4
+		#else
+			#error Undefined master type on 2
+		#endif
+	#endif
+	#define _YCM c@
+#elseif MASTER == 3
+	#if defined _YCM_d@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_d@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_3 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_3 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_3 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_3 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_3 4
+		#else
+			#error Undefined master type on 3
+		#endif
+	#endif
+	#define _YCM d@
+#elseif MASTER == 4
+	#if defined _YCM_e@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_e@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_4 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_4 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_4 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_4 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_4 4
+		#else
+			#error Undefined master type on 4
+		#endif
+	#endif
+	#define _YCM e@
+#elseif MASTER == 5
+	#if defined _YCM_f@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_f@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_5 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_5 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_5 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_5 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_5 4
+		#else
+			#error Undefined master type on 5
+		#endif
+	#endif
+	#define _YCM f@
+#elseif MASTER == 6
+	#if defined _YCM_g@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_g@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_6 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_6 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_6 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_6 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_6 4
+		#else
+			#error Undefined master type on 6
+		#endif
+	#endif
+	#define _YCM g@
+#elseif MASTER == 7
+	#if defined _YCM_h@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_h@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_7 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_7 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_7 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_7 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_7 4
+		#else
+			#error Undefined master type on 7
+		#endif
+	#endif
+	#define _YCM h@
+#elseif MASTER == 8
+	#if defined _YCM_i@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_i@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_8 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_8 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_8 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_8 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_8 4
+		#else
+			#error Undefined master type on 8
+		#endif
+	#endif
+	#define _YCM i@
+#elseif MASTER == 9
+	#if defined _YCM_j@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_j@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_9 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_9 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_9 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_9 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_9 4
+		#else
+			#error Undefined master type on 9
+		#endif
+	#endif
+	#define _YCM j@
+#elseif MASTER == 10
+	#if defined _YCM_k@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_k@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_10 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_10 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_10 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_10 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_10 4
+		#else
+			#error Undefined master type on 10
+		#endif
+	#endif
+	#define _YCM k@
+#elseif MASTER == 11
+	#if defined _YCM_l@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_l@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_11 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_11 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_11 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_11 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_11 4
+		#else
+			#error Undefined master type on 11
+		#endif
+	#endif
+	#define _YCM l@
+#elseif MASTER == 12
+	#if defined _YCM_m@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_m@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_12 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_12 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_12 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_12 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_12 4
+		#else
+			#error Undefined master type on 12
+		#endif
+	#endif
+	#define _YCM m@
+#elseif MASTER == 13
+	#if defined _YCM_n@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_n@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_13 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_13 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_13 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_13 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_13 4
+		#else
+			#error Undefined master type on 13
+		#endif
+	#endif
+	#define _YCM n@
+#elseif MASTER == 14
+	#if defined _YCM_o@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_o@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_14 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_14 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_14 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_14 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_14 4
+		#else
+			#error Undefined master type on 14
+		#endif
+	#endif
+	#define _YCM o@
+#elseif MASTER == 15
+	#if defined _YCM_p@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_p@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_15 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_15 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_15 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_15 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_15 4
+		#else
+			#error Undefined master type on 15
+		#endif
+	#endif
+	#define _YCM p@
+#elseif MASTER == 16
+	#if defined _YCM_q@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_q@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_16 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_16 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_16 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_16 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_16 4
+		#else
+			#error Undefined master type on 16
+		#endif
+	#endif
+	#define _YCM q@
+#elseif MASTER == 17
+	#if defined _YCM_r@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_r@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_17 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_17 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_17 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_17 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_17 4
+		#else
+			#error Undefined master type on 17
+		#endif
+	#endif
+	#define _YCM r@
+#elseif MASTER == 18
+	#if defined _YCM_s@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_s@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_18 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_18 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_18 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_18 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_18 4
+		#else
+			#error Undefined master type on 18
+		#endif
+	#endif
+	#define _YCM s@
+#elseif MASTER == 19
+	#if defined _YCM_t@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_t@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_19 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_19 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_19 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_19 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_19 4
+		#else
+			#error Undefined master type on 19
+		#endif
+	#endif
+	#define _YCM t@
+#elseif MASTER == 20
+	#if defined _YCM_u@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_u@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_20 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_20 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_20 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_20 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_20 4
+		#else
+			#error Undefined master type on 20
+		#endif
+	#endif
+	#define _YCM u@
+#elseif MASTER == 21
+	#if defined _YCM_v@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_v@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_21 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_21 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_21 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_21 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_21 4
+		#else
+			#error Undefined master type on 21
+		#endif
+	#endif
+	#define _YCM v@
+#elseif MASTER == 22
+	#if defined _YCM_w@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_w@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_22 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_22 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_22 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_22 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_22 4
+		#else
+			#error Undefined master type on 22
+		#endif
+	#endif
+	#define _YCM w@
+#elseif MASTER == 23
+	#if defined _YCM_x@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_x@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_23 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_23 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_23 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_23 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_23 4
+		#else
+			#error Undefined master type on 23
+		#endif
+	#endif
+	#define _YCM x@
+#elseif MASTER == 24
+	#if defined _YCM_y@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_y@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_24 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_24 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_24 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_24 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_24 4
+		#else
+			#error Undefined master type on 24
+		#endif
+	#endif
+	#define _YCM y@
+#elseif MASTER == 25
+	#if defined _YCM_z@
+		#define YSIM_DEFINED
+	#else
+		#define _YCM_z@
+		// Save the settings.
+		#if !YSIM_HAS_MASTER
+			#define YSIM_RECALL_25 0
+		#elseif YSIM_IS_CLIENT
+			#define YSIM_RECALL_25 1
+		#elseif YSIM_IS_SERVER
+			#define YSIM_RECALL_25 2
+		#elseif YSIM_CLOUD
+			#define YSIM_RECALL_25 3
+		#elseif YSIM_IS_STUB
+			#define YSIM_RECALL_25 4
+		#else
+			#error Undefined master type on 25
+		#endif
+	#endif
+	#define _YCM z@
+#endif
+
+// Check for non-unique masters here.
+#if defined YSIM_DEFINED && !defined _YSIM_OVERRIDE
+	#error Non-unique master used.
+#endif
+
+#if YSIM_NOT_CLIENT && !defined YSIM_DEFINED
+	// FIRST declare the next callback in the chain.
+	//#if defined FILTERSCRIPT
+	//	public OnFilterScriptInit()
+	//#else
+	//	public OnGameModeInit()
+	//#endif
+	public OnMasterSystemInit()
+	{
+		P:1(#_YCM "_OGM");
+		// THEN rename the callbacks.
+		#if defined _YCM_CALLBACK
+			#undef _YCM_CALLBACK
+		#endif
+		#if MASTER == 0
+			#define _YCM_CALLBACK a@OnScriptInit
+		#endif
+		#if MASTER == 1
+			#define _YCM_CALLBACK b@OnScriptInit
+		#endif
+		#if MASTER == 2
+			#define _YCM_CALLBACK c@OnScriptInit
+		#endif
+		#if MASTER == 3
+			#define _YCM_CALLBACK d@OnScriptInit
+		#endif
+		#if MASTER == 4
+			#define _YCM_CALLBACK e@OnScriptInit
+		#endif
+		#if MASTER == 5
+			#define _YCM_CALLBACK f@OnScriptInit
+		#endif
+		#if MASTER == 6
+			#define _YCM_CALLBACK g@OnScriptInit
+		#endif
+		#if MASTER == 7
+			#define _YCM_CALLBACK h@OnScriptInit
+		#endif
+		#if MASTER == 8
+			#define _YCM_CALLBACK i@OnScriptInit
+		#endif
+		#if MASTER == 9
+			#define _YCM_CALLBACK j@OnScriptInit
+		#endif
+		#if MASTER == 10
+			#define _YCM_CALLBACK k@OnScriptInit
+		#endif
+		#if MASTER == 11
+			#define _YCM_CALLBACK l@OnScriptInit
+		#endif
+		#if MASTER == 12
+			#define _YCM_CALLBACK m@OnScriptInit
+		#endif
+		#if MASTER == 13
+			#define _YCM_CALLBACK n@OnScriptInit
+		#endif
+		#if MASTER == 14
+			#define _YCM_CALLBACK o@OnScriptInit
+		#endif
+		#if MASTER == 15
+			#define _YCM_CALLBACK p@OnScriptInit
+		#endif
+		#if MASTER == 16
+			#define _YCM_CALLBACK q@OnScriptInit
+		#endif
+		#if MASTER == 17
+			#define _YCM_CALLBACK r@OnScriptInit
+		#endif
+		#if MASTER == 18
+			#define _YCM_CALLBACK s@OnScriptInit
+		#endif
+		#if MASTER == 19
+			#define _YCM_CALLBACK t@OnScriptInit
+		#endif
+		#if MASTER == 20
+			#define _YCM_CALLBACK u@OnScriptInit
+		#endif
+		#if MASTER == 21
+			#define _YCM_CALLBACK v@OnScriptInit
+		#endif
+		#if MASTER == 22
+			#define _YCM_CALLBACK w@OnScriptInit
+		#endif
+		#if MASTER == 23
+			#define _YCM_CALLBACK x@OnScriptInit
+		#endif
+		#if MASTER == 24
+			#define _YCM_CALLBACK y@OnScriptInit
+		#endif
+		#if MASTER == 25
+			#define _YCM_CALLBACK z@OnScriptInit
+		#endif
+		#if YSIM_IS_SERVER
+			// Steal the master.
+			_Master_Get(#_YCM, true);
+			CallRemoteFunction(#_YCM, "");
+		#else
+			#if YSIM_CLOUD
+				// Determine the next unique name,
+				// See if this script should be master.
+				if (_Master_Get(#_YCM))
+				{
+					P:2("Got master " #_YCM);
+					state _YCM:y;
+				}
+				else
+				{
+					state _YCM:n;
+				}
+			#endif
+		#endif
+		// FINALLY call the new next one.
+		CallLocalFunction(#_YCM_CALLBACK, "");
+	}
+	
+	// Don't need extra checks here as we KNOW it is already defined.
+	#undef OnMasterSystemInit
+	#define OnMasterSystemInit _YCM_CALLBACK
+	forward _YCM_CALLBACK();
+#endif
+
+// There are the following remote function definitions:
+// 
+// RF - A basic function.
+// RF@p - A function with special parameters which need passing hints.
+// RF@c - A function with lots of paramteres that needs special code.
+// RF@v - A function with no return value.
+// RF@t - A function with a tag result.
+// RC - A callback function.
+// RH - A y_hooks hook.
+// RS - Return a string.
+// 
+// 
+// Supported combinations:
+// 
+// pc, cp
+// pcv, pvc, cpv, cvp, vpc, vcp
+// pv, vp
+// cv, vc
+// cpt ctp pct ptc tcp tpc
+// ct tc
+// pt tp
+// 
+// p and c are for special parameter sets, n is for no parameters, so those two
+// groups can never be mixed together.  t is for tag result and v is for no
+// return, so they can never be used together.
+// 
+// Note that the callback thing won't work with OnPlayerCommandText as it has a
+// different default return to everything else.
+// 
+
+// These parts are redefined every time the master system is included.
+#if YSIM_HAS_MASTER
+	#if YSIM_IS_CLIENT
+		// Defined the functions as remote calling stubs.  Then rename the
+		// following code with a name unlikely to ever be used and define the
+		// functions as stock so the compiler removes all the code quietly.
+		#define RF:%1[%2](%3) stock %1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);stock _@%1(%3)
+		#define RF@p:%1[%2](%3)<%4> stock %1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);stock _@%1(%3)
+		#define RF@c RF
+		#define RF@v:%1[%2](%3) stock %1(%3)U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1);stock _@%1(%3)
+		//#define RF@n:%1[]() stock %1()return U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);stock _@%1()
+		#define RF@pc RF@p
+		#define RF@pv:%1[%2](%3)<%4> stock %1(%3)U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1);stock _@%1(%3)
+		#define RF@pcv RF@pv
+		#define RF@vc RF@v
+		//#define RF@vn:%1[]() stock %1()U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1);stock _@%1()
+		
+		#define RF@t:%0:%1[%2](%3) stock %0:%1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);stock %0:_@%1(%3)
+		#define RF@pt:%0:%1[%2](%3)<%4> stock %0:%1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);stock %0:_@%1(%3)
+		#define RF@ct RF@t
+		//#define RF@nt:%0:%1[]() stock %0:%1()return U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);stock %0:_@%1()
+		#define RF@pct RF@pt
+		
+		#define RS:%1[%2](%3) stock %1(%3)return Y@(),W@(#@%1,#%2#x,%3),S@(),Q@;stock _@%1(%3)
+		#define RS@p:%1[%2](%3)<%4> stock %1(%3)return Y@(),W@(#@%1,#%2,%4),S@(),Q@;stock _@%1(%3)
+		
+		//#define RC:%1(%3) stock _@%1(%3)
+		//#define RC@v RC
+		
+		#define RH:%1_On%2(%3) stock _yH@%2_%1(%3)
+		
+		#define RT:%0[%1](%2) stock _yT@%1_%0()
+		
+		#if MASTER == 23
+			// Less strict (implicit user master).
+			#define RC:%0(%1) @yC_%0(a,b[],c,i);@yC_%0(a,b[],c,i)i==_@&&U@(8,YSIM_RETURN,_yC@%0(a,b,c));_yC@%0(%1)
+		#else
+			#define RC:%0(%1) static stock _yC@%0(%1)
+		#endif
+		
+		//#define RP@v:%1[%2](%3) static stock %1(%3)U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1);static stock _@%1(%3)
+		
+		// Remote local - only calls the local version if we're master,
+		// doesn't call the remote version.
+		//#define RL:%1[%2](%3) stock %1(%3){}static stock _%1(%3)
+		
+		#define RX:%0(%1) stock %0_yX@(%1)
+		
+		// Shortcut for y_als hooks.
+		#define RA:%0_On%1(%3) public On%1(%3)ALS_CALL<%1> static stock _%0_%1(%3)
+		//#define RA:%0_%1[%2](%3) public %1(%3)<>return Bit_GetBit(Bit:gs_ALS,_:ALS_%0)&&P@(#ALS_PREFIX"_"#%2#x,%3),1;public %1(%3)<_YCM:y>
+		//#define RA@p:%0_%1[%2](%3)<%4> public %1(%3)ALS_CALL<%1,#%2,%4>static stock _%0_%1(%3)
+		//#define RA@p:%0_%1[%2](%3)<%4> public %1(%3)<>return Bit_GetBit(Bit:gs_ALS,_:ALS_%0)&&P@(#ALS_PREFIX"_"#%2,%4),1;public %1(%3)<_YCM:y>
+		
+		#define Master_Caller() (-1)
+	#else
+		#if YSIM_IS_SERVER
+			#define RF:%1[%2](%3) @%1(%3);@%1(%3)U@(8,YSIM_RETURN,%1(%3));%1(%3)
+			#define RF@p:%1[%2](%3)<%4> @%1(%3);@%1(%3)U@(8,YSIM_RETURN,%1(%4));%1(%3)
+			#define RF@c RF
+			#define RF@v:%1[%2](%3) @%1(%3);@%1(%3)%1(%3);%1(%3)
+			//#define RF@n:%1[]() forward %1R();public %1R()U@(8,YSIM_RETURN,%1());%1()
+			#define RF@pc RF@p
+			#define RF@pv:%1[%2](%3)<%4> @%1(%3);@%1(%3)%1(%4);%1(%3)
+			#define RF@pcv RF@pv
+			#define RF@vc RF@v
+			//#define RF@vn:%1[]() forward %1R();public %1R()%1();%1()
+			
+			#define RF@t:%0:%1[%2](%3) %0:%1(%3);@%1(%3);@%1(%3)U@(8,YSIM_RETURN,_:%1(%3));%0:%1(%3)
+			#define RF@pt:%0:%1[%2](%3)<%4> %0:%1(%3);@%1(%3);@%1(%3)U@(8,YSIM_RETURN,_:%1(%4));%0:%1(%3)
+			#define RF@ct RF@t
+			//#define RF@nt:%0:%1[]() forward %0:%1();forward %1R();public %1R()U@(8,YSIM_RETURN,_:%1());%0:%1()
+			#define RF@pct RF@pt
+			
+			#define RS:%1[%2](%3) @%1(%3);@%1(%3)R@(%1(%3));%1(%3)
+			#define RS@p:%1[%2](%3)<%4> @%1(%3);@%1(%3)R@(%1(%4));%1(%3)
+			
+			//#define RC:%1(%3) public %1(%3)
+			
+			//#define RC@v RC
+			
+			#define RH:%1_On%2(%3) @yH_%2_%1(%3);@yH_%2_%1(%3)
+			
+			#define RT:%0[%1](%2) @yT_%1_%0();@yT_%1_%0()
+			
+			#if MASTER == 23
+				// Less strict (implicit user master).
+				#define RC:%0(%1) @yC_%0(a,b[],c,i);@yC_%0(a,b[],c,i)i==_@&&U@(8,YSIM_RETURN,_yC@%0(a,b,c));_yC@%0(%1)
+			#else
+				#define RC:%0(%1) @yC_%0(a,b[],c);@yC_%0(a,b[],c)U@(8,YSIM_RETURN,yC@_%0(a,b,c));static yC@_%0(%1)
+			#endif
+			
+			// Remote local - only calls the local version if we're master,
+			// doesn't call the remote version.
+			//#define RL:%1[%2](%3) %1(%3)
+			
+			//#define RP@v:%1[%2](%3) forward @%1(%3);@%1(%3)%1(%3);static %1(%3)
+			
+			// Shortcut for y_als hooks.
+			#define RA:%0_On%1(%3) public On%1(%3)
+			//#define RA@p:%0_%1[%2](%3)<%4> RA:%0_%1[%2](%3)
+			
+			#define RX:%0(%1) %0@yX_(%1);public %0@yX_(%1)
+			
+			#define Master_Caller() \
+				(V@(8,YSIM_CALLER))
+			
+			//#define Master_Get(%1) state (_Master_Get(#%1)) ? (%1:y) : (%1:n)
+			//#define Master_Init(%1); _Master_Get(#%1);
+		#else
+			#if YSIM_IS_STUB
+				// This is used to provide abstractions between different
+				// coders on the same team.  Setting a library as a stub means
+				// that people without the main implementation can use the code
+				// through remote function calls and then the whole code can be
+				// integrated in to itself.  Example use:
+				//  
+				//  #tryinclude "streamer_implementation"
+				//  #if defined _inc_streamer_implementation
+				//      #endinput
+				//  #endif
+				//  
+				//  #define YSIM_U_ENABLE
+				//  #define MASTER 10
+				//  #include <YSI\y_master>
+				//  
+				//  RF@p:CreateObject[ifff](modelid,Float:x,Float:y,Float:z)<modelid,x,y,z>;
+				//  
+				#define RF:%1[%2](%3) stock %1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN)//;stock _@%1()
+				#define RF@p:%1[%2](%3)<%4> stock %1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN)//;stock _@%1()
+				#define RF@c RF
+				#define RF@v:%1[%2](%3) stock %1(%3)U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1)//;stock _@%1()
+				//#define RF@n:%1[]() stock %1()return U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);stock _@%1()
+				#define RF@pc RF@p
+				#define RF@pv:%1[%2](%3)<%4> stock %1(%3)U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1)//;stock _@%1()
+				#define RF@pcv RF@pv
+				#define RF@vc RF@v
+				//#define RF@vn:%1[]() stock %1()U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1);stock _@%1()
+				
+				#define RF@t:%0:%1[%2](%3) stock %0:%1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN)//;stock _@%1()
+				#define RF@pt:%0:%1[%2](%3)<%4> stock %0:%1(%3)return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN)//;stock _@%1()
+				#define RF@ct RF@t
+				//#define RF@nt:%0:%1[]() stock %0:%1()return U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);stock %0:_@%1()
+				#define RF@pct RF@pt
+				
+				// Doesn't have the end bit as the function isn't included.
+				#define RS:%1[%2](%3) stock %1(%3)return Y@(),W@(#@%1,#%2#x,%3),S@(),Q@//;stock _@%1()
+				#define RS@p:%1[%2](%3)<%4> stock %1(%3)return Y@(),W@(#@%1,#%2,%4),S@(),Q@//;stock _@%1()
+				
+				// NOT DEFINED!  Should not be used if this is a stub.
+				#define RC
+				
+				// NOT DEFINED!  Should not be used if this is a stub.
+				//#define RC@v
+				
+				// NOT DEFINED!  Should not be used if this is a stub.
+				#define RH
+				
+				// NOT DEFINED!  Should not be used if this is a stub.
+				#define RT
+				
+				// Remote local - only calls the local version if we're master,
+				// doesn't call the remote version.
+				//#define RL:%1[%2](%3)
+				
+				#define RX
+				
+				//#define RP@v
+				
+				// Shortcut for y_als hooks.
+				#define RA //:%0_%1(%3)
+				//#define RA@p:%0_%1[%2](%3)<%4>
+				
+				// NOT DEFINED!  Should not be used if this is a stub.
+				#define Master_Caller
+			#else
+				// This is a normal system with the possibility of being the
+				// master.  This is the very complicated one to write!
+				#define RF:%1[%2](%3) @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>U@(8,YSIM_RETURN,%1(%3));%1(%3)<>return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);%1(%3)<_YCM:y>
+				
+				#define RF@p:%1[%2](%3)<%4> @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>U@(8,YSIM_RETURN,%1(%4));%1(%3)<>return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);%1(%3)<_YCM:y>
+				#define RF@c:%1[%2](%3) @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>X@(%1(%3));%1(%3)<>return Y@(),W@(#@%1,#%2#x,%3),Z@();%1(%3)<_YCM:y>
+				#define RF@v:%1[%2](%3) @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>%1(%3);%1(%3)<>U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1);%1(%3)<_YCM:y>
+				//#define RF@n:%1[]() forward %1R();public %1R()<>{}public %1R()<_YCM:y>U@(8,YSIM_RETURN,%1());%1()<>return U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1),V@(8,YSIM_RETURN);%1()<_YCM:y>
+				#define RF@pc:%1[%2](%3)<%4> @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>X@(%1(%4));%1(%3)<>return Y@(),W@(#@%1,#%2,%4),Z@();%1(%3)<_YCM:y>
+				#define RF@pv:%1[%2](%3)<%4> @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>%1(%4);%1(%3)<>U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1);%1(%3)<_YCM:y>
+				#define RF@pcv:%1[%2](%3)<%4> @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>%1(%4);%1(%3)<>Y@(),W@(#@%1,#%2,%4),T@();%1(%3)<_YCM:y>
+				#define RF@vc:%1[%2](%3) @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>%1(%3);%1(%3)<>Y@(),W@(#@%1,#%2#x,%3),T@();%1(%3)<_YCM:y>
+				//#define RF@vn:%1[]() forward %1R();public %1R()<>{}public %1R()<_YCM:y>%1();%1()<>U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1);%1()<_YCM:y>
+				
+				#define RF@t:%0:%1[%2](%3) %0:%1(%3);@%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>U@(8,YSIM_RETURN,_:%1(%3));%0:%1(%3)<>return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);%0:%1(%3)<_YCM:y>
+				#define RF@pt:%0:%1[%2](%3)<%4> %0:%1(%3);@%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>U@(8,YSIM_RETURN,_:%1(%4));%0:%1(%3)<>return U@(8,YSIM_CALLER,_@),W@(#@%1,#%2,%4),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);%0:%1(%3)<_YCM:y>
+				#define RF@ct:%0:%1[%2](%3) %0:%1(%3);@%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>X@(_:%1(%3));%0:%1(%3)<>return Y@(),W@(#@%1,#%2#x,%3),%0:Z@();%0:%1(%3)<_YCM:y>
+				//#define RF@nt:%0:%1[]() forward %0:%1();forward %1R();public %1R()<>{}public %1R()<_YCM:y>U@(8,YSIM_RETURN,_:%1());%0:%1()<>return U@(8,YSIM_CALLER,_@),W@(#@%1,""),U@(8,YSIM_CALLER,-1),%0:V@(8,YSIM_RETURN);%0:%1()<_YCM:y>
+				#define RF@pct:%0:%1[%2](%3)<%4> %0:%1(%3);@%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>X@(_:%1(%4));%0:%1(%3)<>return Y@(),W@(#@%1,#%2,%4),%0:Z@();%0:%1(%3)<_YCM:y>
+				
+				//#define RS:%1[%2](%3) forward %1R(%3);public %1R(%3)<>{}public %1R(%3)<_YCM:y>R@(%1(%3));%1(%3)<>return Y@(),W@(#@%1,#%2#x,%3),S@();%1(%3)<_YCM:y>
+				// Remote STRING (returns a string).
+				#define RS:%1[%2](%3) @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>R@(%1(%3));%1(%3)<>return Y@(),W@(#@%1,#%2#x,%3),S@(),Q@;%1(%3)<_YCM:y>
+				#define RS@p:%1[%2](%3)<%4> @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>R@(%1(%4));%1(%3)<>return Y@(),W@(#@%1,#%2,%4),S@(),Q@;%1(%3)<_YCM:y>
+				
+				//#define RC:%1(%3) public %1(%3)<>return 1;public %1(%3)<_YCM:y>
+				
+				//#define RC@v:%1(%3) public %1(%3)<>{}public %1(%3)<_YCM:y>
+				
+				// Requires the y_hooks library.
+				#define RH:%1_On%2(%3) @yH_%2_%1(%3);@yH_%2_%1(%3)<>return 1;@yH_%2_%1(%3)<_YCM:y>
+				
+				// Requires the y_timers library.
+				#define RT:%0[%1](%2) @yT_%1_%0();@yT_%1_%0()<>{}@yT_%1_%0()<_YCM:y>
+				
+				/*#if 
+					#define RC:%0(%1) forward @yC_%0(a,b[],c);@yC_%0(a,b[],c)<>{}@yC_%0(a,b[],c)<_YCM:y>U@(8,YSIM_RETURN,_yC@%0(a,b,c));_yC@%0(%1)
+				#else
+					// This code defines two publics so that if the master
+					// doesn't have a copy of the command it can still be called
+					// in another running script.
+					#define RC:%0(%1) forward @yC_%0(a,b[],c);forward @_yC%0(i,a,b,c[]);@yC_%0(a,b[],c)<>{}@yC_%0(a,b[],c)<_YCM:y>U@(8,YSIM_RETURN,_yC@%0(a,b,c));@_yC%0(i,a,b,c[])return i==_@&&U@(8,YSIM_RETURN,_yC@%0(a,b,c));_yC@%0(%1)
+				#endif*/
+				//#if defined _YSIM_USED_AUTO
+				#if MASTER == 23
+					// Less strict (implicit user master).
+					#define RC:%0(%1) @yC_%0(a,b[],c,i);@yC_%0(a,b[],c,i)i==_@&&U@(8,YSIM_RETURN,_yC@%0(a,b,c));_yC@%0(%1)
+				#else
+					// Strict libraries.
+					#define RC:%0(%1) @yC_%0(a,b[],c);@yC_%0(a,b[],c)<>{}@yC_%0(a,b[],c)<_YCM:y>U@(8,YSIM_RETURN,_yC@%0(a,b,c));_yC@%0(%1)
+				#endif
+				
+				//#define RP@v:%1[%2](%3) forward @%1(%3);@%1(%3)<>{}@%1(%3)<_YCM:y>%1(%3);static %1(%3)<>U@(8,YSIM_CALLER,_@),W@(#@%1,#%2#x,%3),U@(8,YSIM_CALLER,-1);static %1(%3)<_YCM:y>
+				
+				#define Master_Caller() \
+					((V@(8,YSIM_CALLER)==-1)?(_@):(V@(8,YSIM_CALLER)))
+				
+				// Remote local - only calls the local version if we're master,
+				// doesn't call the remote version.
+				//#define RL:%1[%2](%3) %1(%3)<>return 1;%1(%3)<_YCM:y>
+				
+				#define RX:%0(%1) %0@yX_(%1);public %0@yX_(%1)<>{}public %0@yX_(%1)<_YCM:y>
+				
+				// Shortcut for y_als hooks.
+				//#define RA:%0_%1(%3) public %1(%3)<>ALS_CALL<%1>public %1(%3)<_YCM:y>
+				#define RA:%0_On%1(%3) public On%1(%3)<>ALS_CALL<%1> public On%1(%3)<_YCM:y>
+				//#define RA:%0_%1[%2](%3) public %1(%3)<>return Bit_GetBit(Bit:gs_ALS,_:ALS_%0)&&P@(#ALS_PREFIX"_"#%2#x,%3),1;public %1(%3)<_YCM:y>
+				//#define RA@p:%0_%1[%2](%3)<%4> public %1(%3)<>ALS_CALL<%1,#%2,%4>public %1(%3)<_YCM:y>
+				
+				//#define Master_Get(%1) state (_Master_Get(#%1)) ? (%1:y) : (%1:n)
+				//#define Master_Init(%1); if (_Master_Get(#%1)) state %1:y; else state %1:n;
+			#endif
+		#endif
+	#endif
+#else
+	// Master system isn't used.
+	#define RF:%1[%2](%3) stock %1(%3)
+	#define RF@p:%1[%2](%3)<%4> RF:%1[%2](%3)
+	#define RF@c RF
+	#define RF@v RF
+	//#define RF@n RF
+	#define RF@pc RF@p
+	#define RF@pv RF@p
+	#define RF@pcv RF@p
+	#define RF@vc RF
+	//#define RF@vn RF
+	
+	#define RF@t:%0:%1[%2](%3) stock %0:%1(%3)
+	#define RF@pt:%0:%1[%2](%3)<%4> RF@t:%0:%1[%2](%3)
+	#define RF@ct RF@t
+	//#define RF@nt RF@t
+	#define RF@pct RF@p
+	
+	#define RS:%1[%2](%3) stock %1(%3)
+	#define RS@p:%1[%2](%3)<%4> stock %1(%3)
+	#define RS@c RS
+	#define RS@pc RS@p
+	
+	//#define RC:%1(%3) public %1(%3)
+	//#define RC@v: RC
+	
+	#define RT:%0[%1](%2) @yT_%1_%0();@yT_%1_%0()
+	
+	//#define RP@v:%0[%1](%2) static stock %0(%2)
+	
+	#define RH:%1_On%2(%3) @yH_%2_%1(%3);public @yH_%2_%1(%3)
+	
+	#define RC:%0(%1) @yC_%0(%1);@yC_%0(%1)
+	
+	#define RX:%0(%1) %0@yX_(%1);public %0@yX_(%1)
+	
+	#define Master_Caller() (_@)
+	
+	// Remote local - only calls the local version if we're master,
+	// doesn't call the remote version.
+	//#define RL:%1[%2](%3) stock %1(%3)
+	
+	// Shortcut for y_als hooks.
+	#define RA:%0_On%1(%3) public On%1(%3)
+	//#define RA@p:%0_%1[%2](%3)<%4> RA:%0_%1[%2](%3)
+	//#define Master_Init(%1);
+#endif
+
+// Undefine this before the next call.
+#undef MASTER
+
+#if YSIM_CLOUD && !defined YSIM_DEFINED
+	// Define a load of fake functions to cater for the compiler's need to
+	// know all the possible states.  y means master, n means not master, m
+	// means master system missing, p means previous (ending master), u
+	// means sort of uninitialised (though technically initialised).  This
+	// also doubles as a handy call in function for resetting masters when a
+	// script ends.  Just to clarify - this function is NOT called _YCM,
+	// that is a macro which is expanded every time this file is included.
+	forward _YCM();
+	public _YCM() <_YCM:y>
+	{
+		if (getproperty(8, #_YCM) != _@)
+		{
+			// Master, but not.  A server has claimed this.
+			state _YCM:n;
+		}
+		else
+		{
+			P:2(#_YCM ":y called");
+			// Disable the current mastership.
+			state _YCM:p;
+			setproperty(8, #_YCM, -1);
+			// Called locally to begin the hand off process.
+			CallRemoteFunction(#_YCM, "");
+		}
+	}
+	
+	public _YCM() <_YCM:n>
+	{
+		P:2(#_YCM ":n called");
+		// This has been called remotely from a script which owns the
+		// library masterhood (that's the only way this can ever be called).
+		if (_Master_Get(#_YCM))
+		{
+			P:2("Got master " #_YCM);
+			state _YCM:y;
+		}
+	}
+	
+	public _YCM() <_YCM:m, _YCM:p, _YCM:u>
+	{
+		P:2(#_YCM ":mpu called");
+		// Do nothing at all (just define states).
+	}
+	
+	public _YCM() <>
+	{
+		P:2(#_YCM ":<> called");
+		if (_Master_Get(#_YCM))
+		{
+			P:2("Got master " #_YCM);
+			state _YCM:y;
+		}
+		else
+		{
+			state _YCM:n;
+		}
+		// Do nothing at all (just define states).
+	}
+#endif
+
+#if defined YSIM_T_ENABLE
+	#undef YSIM_T_ENABLE
+#endif
+
+#if defined YSIM_T_DISABLE
+	#undef YSIM_T_DISABLE
+#endif
+
+#if defined YSIM_C_ENABLE
+	#undef YSIM_C_ENABLE
+#endif
+
+#if defined YSIM_C_DISABLE
+	#undef YSIM_C_DISABLE
+#endif
+
+#if defined YSIM_S_ENABLE
+	#undef YSIM_S_ENABLE
+#endif
+
+#if defined YSIM_S_DISABLE
+	#undef YSIM_S_DISABLE
+#endif
+
+#if defined YSIM_U_ENABLE
+	#undef YSIM_U_ENABLE
+#endif
+
+#if defined YSIM_U_DISABLE
+	#undef YSIM_U_DISABLE
+#endif
+
+// Allow YSI scripts to use the extended master system
+#if defined _YSIM_USED_AUTO
+	#undef _YSIM_USED_AUTO
+#endif
+
+#if defined _YSIM_OVERRIDE
+	#undef _YSIM_OVERRIDE
+#endif
+
+#if defined YSIM_STORED_SETTINGS
+	#undef YSIM_STORED_SETTINGS
+#endif

+ 141 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_playerarray.inc

@@ -0,0 +1,141 @@
+/*----------------------------------------------------------------------------*-
+					========================================
+					 y_playerarray - Bit arrays of players! 
+					========================================
+Description:
+	This code provides arrays of players who can do things.  This is for support
+	of the text system which can take arrays of player ids, bit arrays or just a
+	single ID.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	29/11/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <YSI\y_bit>
+#include <a_samp>
+
+#define PA_TYPE_NONE                    (-1)
+#define PA_TYPE_BOOL                    (-2)
+#define PA_TYPE_ID                      (-3)
+#define PA_TYPE_PA                      (-4)
+
+#define PlayerArray:%0<%1> Bit:%0[%1]//={Bit:-1}
+
+#define PA_DEC<%0> static stock PlayerArray:_YSI_g_sPlayerDataA[%0]<MAX_PLAYERS>;//const _YSI_g_sPlayerDataS=%0;
+#define PA_INT<%0,%2> PA_Init(_YSI_g_sPlayerDataA[(%0)],(%2));
+#define PA_ADD<%0,%1> PA+(_YSI_g_sPlayerDataA[(%0)],(%1));
+#define PA_REM<%0,%1> PA-(_YSI_g_sPlayerDataA[(%0)],(%1));
+#define PA_SET<%0,%1,%2> (%2)?(PA+(_YSI_g_sPlayerDataA[(%0)],(%1))):(PA-(_YSI_g_sPlayerDataA[(%0)],(%1)));
+
+//#define PA_Init() {Bit:-1}
+
+stock PA_Init(Bit:a[], bool:init = false, s = bits<MAX_PLAYERS>)
+{
+	--s;
+	new
+		Bit:m = init ? (Bit:-1) : (Bit:0);
+	a[0] = Bit:PA_TYPE_PA;
+	while (s)
+	{
+		a[s--] = m;
+	}
+}
+
+//#define PA_Get(%1,%2) bool:(%1[Bit_Slot(%2)+1]&Bit_Mask(%2))
+
+/*stock PA_Assign(PlayerArray:array<>, slot, value, count = bitsof (array))
+{
+	if (slot >= count) return;
+	if (set) array[Bit_Slot(slot) + 1] |= Bit_Mask(slot);
+	else array[Bit_Slot(slot) + 1] &= ~Bit_Mask(slot);
+}*/
+
+stock Bit:operator+(Bit:oper2, PlayerArray:oper1)
+{
+	return oper2 | Bit_Mask(_:oper1);
+}
+
+stock Bit:operator-(Bit:oper2, PlayerArray:oper1)
+{
+	return oper2 & ~Bit_Mask(_:oper1);
+}
+
+stock bool:operator==(Bit:oper2, PlayerArray:oper1)
+{
+	return bool:(oper2 & Bit_Mask(_:oper1));
+}
+
+stock bool:operator!=(Bit:oper2, PlayerArray:oper1)
+{
+	return !(oper2 & Bit_Mask(_:oper1));
+}
+
+/*stock Bit:operator&(Bit:oper2, PlayerArray:oper1)
+{
+	#pragma unused oper1
+	return oper2;
+}
+
+stock Bit:operator|(Bit:oper2, PlayerArray:oper1)
+{
+	#pragma unused oper1
+	return oper2 & Bit_Mask(_:oper1);
+}*/
+
+//#define PA%0(%1,%2) (Bit:(%1[Bit_Slot(%2)+1]%0=PlayerArray:(%2))&Bit_Mask(%2))
+#define PA%0(%1,%2) (%1[Bit_Slot(%2)+1]%0=PlayerArray:(%2))
+
+/*stock PA_Set(PlayerArray:array<>, slot, bool:set, count = bitsof (array))
+{
+	if (slot >= count) return;
+	if (set) array[Bit_Slot(slot) + 1] |= Bit_Mask(slot);
+	else array[Bit_Slot(slot) + 1] &= ~Bit_Mask(slot);
+}*/
+
+#undef PlayerArray
+#define PlayerArray:%0<%1> Bit:%0[bits<%1>+1]//={Bit:-1}

+ 649 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_scripting.inc

@@ -0,0 +1,649 @@
+/*----------------------------------------------------------------------------*-
+					===============================
+					 y_scripting - Access amx data
+					===============================
+Description:
+	Allows a script access to information about itself, such as function names.
+	This can be used for a range of things, including automatic callback hooking
+	and testing.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <YSI\internal\y_funcinc>
+
+#define Scripting_FastString(%1,%2,%3,%4) \
+	(((%1) << 0) | ((%2) << 8) | ((%3) << 16) | ((%4) << 24))
+
+static stock Scripting_GetBase()
+{
+	static
+		s_addr;
+	if (!s_addr)
+	{
+		// Get the data offset.
+		#emit LCTRL                     1
+		#emit STOR.pri                  s_addr
+		// Invert to get the prefix offset relative to the data.
+		s_addr = -s_addr;
+	}
+	return s_addr;
+}
+
+static stock Scripting_GetPublics()
+{
+	static
+		s_addr;
+	if (!s_addr)
+	{
+		new
+			addr;// = Scripting_GetBase();
+		// Get the data offset.
+		#emit LCTRL                     1
+		#emit STOR.S.pri                addr
+		// Invert to get the prefix offset relative to the data.
+		addr = -addr;
+		// Get the pointer to the publics.
+		addr += 32;
+		#emit LREF.S.pri                addr
+		#emit STOR.pri                  s_addr
+		// Adjust to get the relative offset.
+		s_addr = s_addr + addr - 32;
+	}
+	return s_addr;
+}
+
+static stock Scripting_GetNatives()
+{
+	static
+		s_addr;
+	if (!s_addr)
+	{
+		new
+			addr;// = Scripting_GetBase();
+		// Get the data offset.
+		#emit LCTRL                     1
+		#emit STOR.S.pri                addr
+		// Invert to get the prefix offset relative to the data.
+		addr = -addr;
+		// Get the pointer to the publics.
+		addr += 36;
+		#emit LREF.S.pri                addr
+		#emit STOR.pri                  s_addr
+		// Adjust to get the relative offset.
+		s_addr = s_addr + addr - 36;
+	}
+	return s_addr;
+}
+
+static stock Scripting_GetLibraries()
+{
+	static
+		s_addr;
+	if (!s_addr)
+	{
+		new
+			addr;// = Scripting_GetBase();
+		// Get the data offset.
+		#emit LCTRL                     1
+		#emit STOR.S.pri                addr
+		// Invert to get the prefix offset relative to the data.
+		addr = -addr;
+		// Get the pointer to the publics.
+		addr += 40;
+		#emit LREF.S.pri                addr
+		#emit STOR.pri                  s_addr
+		// Adjust to get the relative offset.
+		s_addr = s_addr + addr - 40;
+	}
+	return s_addr;
+}
+
+static stock Scripting_GetString(addr)
+{
+	new
+		str[32],
+		buffer,
+		ch,
+		idx;
+	do
+	{
+		// Read 4 bytes.
+		#emit LREF.S.pri                addr
+		#emit STOR.S.pri                buffer
+		// Write a character to the buffer.
+		ch = buffer & 0xFF;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Write a character to the buffer.
+		ch = buffer >> 8 & 0xFF;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Write a character to the buffer.
+		ch = buffer >> 16 & 0xFF;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Write a character to the buffer.
+		ch = buffer >>> 24;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Get the next address.
+		addr += 4;
+	}
+	while (idx < 32);
+	return str;
+}
+
+static stock Scripting_GetStringFast(addr, buffer)
+{
+	new
+		str[32],
+		ch,
+		idx;
+	do
+	{
+		// Write a character to the buffer.
+		ch = buffer & 0xFF;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Write a character to the buffer.
+		ch = buffer >> 8 & 0xFF;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Write a character to the buffer.
+		ch = buffer >> 16 & 0xFF;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Write a character to the buffer.
+		ch = buffer >>> 24;
+		str[idx++] = ch;
+		// Check for the end of the string.
+		if (!ch) break;
+		// Get the next address.
+		addr += 4;
+		// Read 4 bytes.
+		#emit LREF.S.pri                addr
+		#emit STOR.S.pri                buffer
+	}
+	while (idx < 32);
+	return str;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetPublicsCount
+Params:
+	-
+Return:
+	Number of public functions in a script.
+Notes:
+	-
+
+native Scripting_GetPublicsCount();
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetPublicsCount()
+{
+	static
+		s_count;
+	if (!s_count)
+	{
+		// Get the difference in pointers.
+		s_count = (Scripting_GetNatives() - Scripting_GetPublics()) / 8;
+	}
+	return s_count;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetNativesCount
+Params:
+	-
+Return:
+	Number of native functions in a script.
+Notes:
+	-
+
+native Scripting_GetNativesCount();
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetNativesCount()
+{
+	static
+		s_count;
+	if (!s_count)
+	{
+		// Get the difference in pointers.
+		s_count = (Scripting_GetLibraries() - Scripting_GetNatives()) / 8;
+	}
+	return s_count;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetPublicFast
+Params:
+	idx - Index of the public to start at.
+	buffer[32] - Buffer to store the name in.
+	search - Pattern matching parameter.
+Return:
+	Index of next public.
+Notes:
+	Gets a string starting with a known 4 character sequence.
+
+native Scripting_GetPublicFast(idx, buffer[32], search);
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetPublicFast(idx, buffer[32], search)
+{
+	new
+		count = Scripting_GetPublicsCount(),
+		base = Scripting_GetBase(),
+		pos = idx * 8 + 4 + Scripting_GetPublics(),
+		addr;
+	while (idx < count)
+	{
+		// Get the offset in the public records.
+		// Get the pointer to the string.
+		//pos += publics;
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		//printf("%s", Scripting_GetString(Scripting_GetBase() + pos));
+		//new
+		//	str[32] = Scripting_GetString(base + pos));
+		++idx;
+		addr += base;
+		new
+			chars;
+		#emit LREF.S.pri                addr
+		#emit STOR.S.pri                chars
+		if (chars == search)
+		{
+			buffer = Scripting_GetStringFast(addr, chars);
+			return idx;
+		}
+		pos += 8;
+	}
+	buffer[0] = '\0';
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetPublicSuffix
+Params:
+	idx - Index of the public to start at.
+	buffer[32] - Buffer to store the name in.
+	search - Pattern matching parameter.
+Return:
+	Index of next public.
+Notes:
+	Gets a string ending with a known 4 character sequence.
+
+native Scripting_GetPublicFast(idx, buffer[32], search);
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetPublicSuffix(idx, buffer[32], search)
+{
+	new
+		count = Scripting_GetPublicsCount(),
+		base = Scripting_GetBase(),
+		// Add 12 to get the pointer to the next string.
+		pos = idx * 8 + 12 + Scripting_GetPublics(),
+		addr;
+	// This code will actually spill in to the natives record, but that's fine.
+	while (idx < count)
+	{
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		++idx;
+		addr = addr + base - 5;
+		//addr
+		#emit LREF.S.pri                addr
+		#emit STOR.S.pri                addr
+		if (addr == search)
+		{
+			pos -= 8;
+			#emit LREF.S.pri            pos
+			#emit STOR.S.pri            addr
+			addr += base;
+			buffer = Scripting_GetString(addr);
+			return idx;
+		}
+		pos += 8;
+	}
+	buffer[0] = '\0';
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetNativeFast
+Params:
+	idx - Index of the native to get.
+	buffer[32] - Buffer to store the name in.
+	search - Pattern matching parameter.
+Return:
+	Index of next native.
+Notes:
+	-
+
+native Scripting_GetNativeFast(idx, buffer[32], search);
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetNativeFast(idx, buffer[32], search)
+{
+	new
+		count = Scripting_GetNativesCount(),
+		base = Scripting_GetBase(),
+		pos = idx * 8 + 4 + Scripting_GetNatives()
+		addr;
+	while (idx < count)
+	{
+		// Get the offset in the public records.
+		new
+		// Get the pointer to the string.
+		//pos += publics;
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		//printf("%s", Scripting_GetString(Scripting_GetBase() + pos));
+		//new
+		//	str[32] = Scripting_GetString(base + pos));
+		++idx;
+		addr += base;
+		new
+			chars;
+		#emit LREF.S.pri                addr
+		#emit STOR.S.pri                chars
+		if (chars == search)
+		{
+			buffer = Scripting_GetStringFast(addr, chars);
+			return idx;
+		}
+		pos += 8;
+	}
+	buffer[0] = '\0';
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetPublic
+Params:
+	idx - Index of the public to get.
+	buffer[32] - Buffer to store the name in.
+	search[] - Optional pattern matching parameter.
+Return:
+	Index of next public.
+Notes:
+	-
+
+native Scripting_GetPublic(idx, buffer[32], search[] = "");
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetPublic(idx, buffer[32], search[] = "")
+{
+	new
+		count = Scripting_GetPublicsCount(),
+		base = Scripting_GetBase(),
+		pos = idx * 8 + 4 + Scripting_GetPublics(),
+		addr;
+	while (idx < count)
+	{
+		// Get the offset in the public records.
+		// Get the pointer to the string.
+		//pos += publics;
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		//printf("%s", Scripting_GetString(Scripting_GetBase() + pos));
+		//new
+		//	str[32] = Scripting_GetString(base + pos));
+		++idx;
+		buffer = Scripting_GetString(base + addr);
+		if (search[0] == '\0' || strfind(buffer, search) != -1)
+		{
+			return idx;
+		}
+		pos += 8;
+	}
+	buffer[0] = '\0';
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetNative
+Params:
+	idx - Index of the native to get.
+	buffer[32] - Buffer to store the name in.
+	search[] - Optional pattern matching parameter.
+Return:
+	Index of next native.
+Notes:
+	-
+
+native Scripting_GetNative(idx, buffer[32], search[] = "");
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetNative(idx, buffer[32], search[] = "")
+{
+	new
+		count = Scripting_GetNativesCount(),
+		base = Scripting_GetBase(),
+		pos = idx * 8 + 4 + Scripting_GetNatives(),
+		addr;
+	while (idx < count)
+	{
+		// Get the offset in the public records.
+		// Get the pointer to the string.
+		//pos += publics;
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		//printf("%s", Scripting_GetString(Scripting_GetBase() + pos));
+		//new
+		//	str[32] = Scripting_GetString(base + pos));
+		++idx;
+		buffer = Scripting_GetString(base + addr);
+		if (search[0] == '\0' || strfind(buffer, search) != -1)
+		{
+			return idx;
+		}
+		pos += 8;
+	}
+	buffer[0] = '\0';
+	return 0;
+}
+
+static stock Scripting_CompareString(str[], addr)
+{
+	new
+		buffer,
+		ch,
+		idx;
+	do
+	{
+		// Read 4 bytes.
+		#emit LREF.S.pri                addr
+		#emit STOR.S.pri                buffer
+		ch = buffer & 0xFF;
+		if (ch != str[idx++]) return false;
+		if (!ch) break;
+		ch = buffer >> 8 & 0xFF;
+		if (ch != str[idx++]) return false;
+		if (!ch) break;
+		ch = buffer >> 16 & 0xFF;
+		if (ch != str[idx++]) return false;
+		if (!ch) break;
+		ch = buffer >>> 24;
+		if (ch != str[idx++]) return false;
+		if (!ch) break;
+		addr += 4;
+	}
+	while (idx < 32);
+	return true;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_GetPublicPointer
+Params:
+	name[] - Name of the function to get the pointer for.
+Return:
+	Pointer or -1.
+Notes:
+	-
+
+native Scripting_GetPublicPointer(name[]);
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_GetPublicPointer(name[])
+{
+	new
+		count = Scripting_GetPublicsCount(),
+		base = Scripting_GetBase(),
+		pos = 4 + Scripting_GetPublics(),
+		addr;
+	while (count--)
+	{
+		// Get the offset in the public records.
+		// Get the pointer to the string.
+		//pos += publics;
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		//printf("%s", Scripting_GetString(Scripting_GetBase() + pos));
+		//new
+		//	str[32] = Scripting_GetString(base + pos));
+		if (Scripting_CompareString(name, base + addr))
+		{
+			//pos = idx * 8 + publics;
+			pos -= 4;
+			// Get the pointer to the string.
+			//pos += publics;
+			// Get the address of the string.
+			#emit LREF.S.pri            pos
+			#emit STOR.S.pri            addr
+			// It doesn't really matter what this is relative to, as long as the
+			// usage in code is consistent.
+			return addr;
+		}
+		pos += 8;
+	}
+	return -1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Scripting_RedirectPublic
+Params:
+	name[] - Name of the function to move.
+	pointer - Where to move it to.
+Return:
+	-
+Notes:
+	-
+
+native Scripting_RedirectPublic(name[], pointer);
+
+-*----------------------------------------------------------------------------*/
+
+stock Scripting_RedirectPublic(name[], pointer)
+{
+	new
+		count = Scripting_GetPublicsCount(),
+		base = Scripting_GetBase(),
+		pos = 4 + Scripting_GetPublics(),
+		addr;
+	while (count--)
+	{
+		// Get the offset in the public records.
+		// Get the pointer to the string.
+		//pos += publics;
+		// Get the address of the string.
+		#emit LREF.S.pri                pos
+		#emit STOR.S.pri                addr
+		//printf("%s", Scripting_GetString(Scripting_GetBase() + pos));
+		//new
+		//	str[32] = Scripting_GetString(base + pos));
+		if (Scripting_CompareString(name, base + addr))
+		{
+			//pos = idx * 8 + publics;
+			pos -= 4;
+			// Get the pointer to the string.
+			//pos += publics;
+			// Get the address of the string.
+			#emit LOAD.S.pri            pointer
+			#emit SREF.S.pri            pos
+			// It doesn't really matter what this is relative to, as long as the
+			// usage in code is consistent.
+			return;
+		}
+		pos += 8;
+	}
+}

+ 746 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_stringhash.inc

@@ -0,0 +1,746 @@
+/*----------------------------------------------------------------------------*-
+					========================================
+					 y_stringhash - Fast string comparisons 
+					========================================
+Description:
+	Allows you to hash strings at compile time to use them in a switch.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	25/10/10:
+		Updated comments.
+		Added to YSI 1.0.
+		Added FNV1 and FNV1a hashes to avoid collisions.
+	19/08/10:
+		First version.
+Functions:
+	stock:
+		YHash - Generate a string hash at run time.
+Definitions:
+	_H - Generate a string hash at compile time.
+	_I - Generate a case insensitive string hash at compile time.
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+// ================
+//  Case sensitive
+// ================
+
+// These are the default values
+#define HASH(%0,%1) HASH@%0(%1)
+
+#define _H(%0) HASH(bernstein,%0)
+
+#define _H@b HASH@bernstein
+#define _H@f HASH@fnv1
+#define _H@a HASH@fnv1a
+
+// ================
+//  Bernstein hash
+// ================
+
+// Signify the end with two "@" symbols.
+#define HASH@bernstein(%0) _REHASH@b(%0,@,@)
+
+// Internal call.
+#define _REHASH@b(%0,%1) _HASH@b_%0(%1)
+
+// The bit that actually does the work.
+#define _DOHASH@b(%0,%1,%2) (_HASH@b_%1(%2)*33+%0)
+
+// Space.
+#define _HASH@b_(%0) _DOHASH@b(32,%0)
+
+// Numbers.
+#define _HASH@b_0(%0) _DOHASH@b(48,%0)
+#define _HASH@b_1(%0) _DOHASH@b(49,%0)
+#define _HASH@b_2(%0) _DOHASH@b(50,%0)
+#define _HASH@b_3(%0) _DOHASH@b(51,%0)
+#define _HASH@b_4(%0) _DOHASH@b(52,%0)
+#define _HASH@b_5(%0) _DOHASH@b(53,%0)
+#define _HASH@b_6(%0) _DOHASH@b(54,%0)
+#define _HASH@b_7(%0) _DOHASH@b(55,%0)
+#define _HASH@b_8(%0) _DOHASH@b(56,%0)
+#define _HASH@b_9(%0) _DOHASH@b(57,%0)
+
+// Upper case letters.
+#define _HASH@b_A(%0) _DOHASH@b(65,%0)
+#define _HASH@b_B(%0) _DOHASH@b(66,%0)
+#define _HASH@b_C(%0) _DOHASH@b(67,%0)
+#define _HASH@b_D(%0) _DOHASH@b(68,%0)
+#define _HASH@b_E(%0) _DOHASH@b(69,%0)
+#define _HASH@b_F(%0) _DOHASH@b(70,%0)
+#define _HASH@b_G(%0) _DOHASH@b(71,%0)
+#define _HASH@b_H(%0) _DOHASH@b(72,%0)
+#define _HASH@b_I(%0) _DOHASH@b(73,%0)
+#define _HASH@b_J(%0) _DOHASH@b(74,%0)
+#define _HASH@b_K(%0) _DOHASH@b(75,%0)
+#define _HASH@b_L(%0) _DOHASH@b(76,%0)
+#define _HASH@b_M(%0) _DOHASH@b(77,%0)
+#define _HASH@b_N(%0) _DOHASH@b(78,%0)
+#define _HASH@b_O(%0) _DOHASH@b(79,%0)
+#define _HASH@b_P(%0) _DOHASH@b(80,%0)
+#define _HASH@b_Q(%0) _DOHASH@b(81,%0)
+#define _HASH@b_R(%0) _DOHASH@b(82,%0)
+#define _HASH@b_S(%0) _DOHASH@b(83,%0)
+#define _HASH@b_T(%0) _DOHASH@b(84,%0)
+#define _HASH@b_U(%0) _DOHASH@b(85,%0)
+#define _HASH@b_V(%0) _DOHASH@b(86,%0)
+#define _HASH@b_W(%0) _DOHASH@b(87,%0)
+#define _HASH@b_X(%0) _DOHASH@b(88,%0)
+#define _HASH@b_Y(%0) _DOHASH@b(89,%0)
+#define _HASH@b_Z(%0) _DOHASH@b(90,%0)
+
+// Underscore.
+#define _HASH@b__(%0) _DOHASH@b(95,%0)
+
+// Lower case letters.
+#define _HASH@b_a(%0) _DOHASH@b(97,%0)
+#define _HASH@b_b(%0) _DOHASH@b(98,%0)
+#define _HASH@b_c(%0) _DOHASH@b(99,%0)
+#define _HASH@b_d(%0) _DOHASH@b(100,%0)
+#define _HASH@b_e(%0) _DOHASH@b(101,%0)
+#define _HASH@b_f(%0) _DOHASH@b(102,%0)
+#define _HASH@b_g(%0) _DOHASH@b(103,%0)
+#define _HASH@b_h(%0) _DOHASH@b(104,%0)
+#define _HASH@b_i(%0) _DOHASH@b(105,%0)
+#define _HASH@b_j(%0) _DOHASH@b(106,%0)
+#define _HASH@b_k(%0) _DOHASH@b(107,%0)
+#define _HASH@b_l(%0) _DOHASH@b(108,%0)
+#define _HASH@b_m(%0) _DOHASH@b(109,%0)
+#define _HASH@b_n(%0) _DOHASH@b(110,%0)
+#define _HASH@b_o(%0) _DOHASH@b(111,%0)
+#define _HASH@b_p(%0) _DOHASH@b(112,%0)
+#define _HASH@b_q(%0) _DOHASH@b(113,%0)
+#define _HASH@b_r(%0) _DOHASH@b(114,%0)
+#define _HASH@b_s(%0) _DOHASH@b(115,%0)
+#define _HASH@b_t(%0) _DOHASH@b(116,%0)
+#define _HASH@b_u(%0) _DOHASH@b(117,%0)
+#define _HASH@b_v(%0) _DOHASH@b(118,%0)
+#define _HASH@b_w(%0) _DOHASH@b(119,%0)
+#define _HASH@b_x(%0) _DOHASH@b(120,%0)
+#define _HASH@b_y(%0) _DOHASH@b(121,%0)
+#define _HASH@b_z(%0) _DOHASH@b(122,%0)
+
+// String end.
+#define _HASH@b_@(%0) -1
+
+// ===========
+//  FNV1 hash
+// ===========
+
+// Signify the end with two "@" symbols.
+#define HASH@fnv1(%0) _REHASH@f(%0,@,@)
+
+// Internal call.
+#define _REHASH@f(%0,%1) _HASH@f_%0(%1)
+
+// The bit that actually does the work.
+#define _DOHASH@f(%0,%1,%2) (_HASH@f_%1(%2)*16777619^%0)
+
+// Space.
+#define _HASH@f_(%0) _DOHASH@f(32,%0)
+
+// Numbers.
+#define _HASH@f_0(%0) _DOHASH@f(48,%0)
+#define _HASH@f_1(%0) _DOHASH@f(49,%0)
+#define _HASH@f_2(%0) _DOHASH@f(50,%0)
+#define _HASH@f_3(%0) _DOHASH@f(51,%0)
+#define _HASH@f_4(%0) _DOHASH@f(52,%0)
+#define _HASH@f_5(%0) _DOHASH@f(53,%0)
+#define _HASH@f_6(%0) _DOHASH@f(54,%0)
+#define _HASH@f_7(%0) _DOHASH@f(55,%0)
+#define _HASH@f_8(%0) _DOHASH@f(56,%0)
+#define _HASH@f_9(%0) _DOHASH@f(57,%0)
+
+// Upper case letters.
+#define _HASH@f_A(%0) _DOHASH@f(65,%0)
+#define _HASH@f_B(%0) _DOHASH@f(66,%0)
+#define _HASH@f_C(%0) _DOHASH@f(67,%0)
+#define _HASH@f_D(%0) _DOHASH@f(68,%0)
+#define _HASH@f_E(%0) _DOHASH@f(69,%0)
+#define _HASH@f_F(%0) _DOHASH@f(70,%0)
+#define _HASH@f_G(%0) _DOHASH@f(71,%0)
+#define _HASH@f_H(%0) _DOHASH@f(72,%0)
+#define _HASH@f_I(%0) _DOHASH@f(73,%0)
+#define _HASH@f_J(%0) _DOHASH@f(74,%0)
+#define _HASH@f_K(%0) _DOHASH@f(75,%0)
+#define _HASH@f_L(%0) _DOHASH@f(76,%0)
+#define _HASH@f_M(%0) _DOHASH@f(77,%0)
+#define _HASH@f_N(%0) _DOHASH@f(78,%0)
+#define _HASH@f_O(%0) _DOHASH@f(79,%0)
+#define _HASH@f_P(%0) _DOHASH@f(80,%0)
+#define _HASH@f_Q(%0) _DOHASH@f(81,%0)
+#define _HASH@f_R(%0) _DOHASH@f(82,%0)
+#define _HASH@f_S(%0) _DOHASH@f(83,%0)
+#define _HASH@f_T(%0) _DOHASH@f(84,%0)
+#define _HASH@f_U(%0) _DOHASH@f(85,%0)
+#define _HASH@f_V(%0) _DOHASH@f(86,%0)
+#define _HASH@f_W(%0) _DOHASH@f(87,%0)
+#define _HASH@f_X(%0) _DOHASH@f(88,%0)
+#define _HASH@f_Y(%0) _DOHASH@f(89,%0)
+#define _HASH@f_Z(%0) _DOHASH@f(90,%0)
+
+// Underscore.
+#define _HASH@f__(%0) _DOHASH@f(95,%0)
+
+// Lower case letters.
+#define _HASH@f_a(%0) _DOHASH@f(97,%0)
+#define _HASH@f_b(%0) _DOHASH@f(98,%0)
+#define _HASH@f_c(%0) _DOHASH@f(99,%0)
+#define _HASH@f_d(%0) _DOHASH@f(100,%0)
+#define _HASH@f_e(%0) _DOHASH@f(101,%0)
+#define _HASH@f_f(%0) _DOHASH@f(102,%0)
+#define _HASH@f_g(%0) _DOHASH@f(103,%0)
+#define _HASH@f_h(%0) _DOHASH@f(104,%0)
+#define _HASH@f_i(%0) _DOHASH@f(105,%0)
+#define _HASH@f_j(%0) _DOHASH@f(106,%0)
+#define _HASH@f_k(%0) _DOHASH@f(107,%0)
+#define _HASH@f_l(%0) _DOHASH@f(108,%0)
+#define _HASH@f_m(%0) _DOHASH@f(109,%0)
+#define _HASH@f_n(%0) _DOHASH@f(110,%0)
+#define _HASH@f_o(%0) _DOHASH@f(111,%0)
+#define _HASH@f_p(%0) _DOHASH@f(112,%0)
+#define _HASH@f_q(%0) _DOHASH@f(113,%0)
+#define _HASH@f_r(%0) _DOHASH@f(114,%0)
+#define _HASH@f_s(%0) _DOHASH@f(115,%0)
+#define _HASH@f_t(%0) _DOHASH@f(116,%0)
+#define _HASH@f_u(%0) _DOHASH@f(117,%0)
+#define _HASH@f_v(%0) _DOHASH@f(118,%0)
+#define _HASH@f_w(%0) _DOHASH@f(119,%0)
+#define _HASH@f_x(%0) _DOHASH@f(120,%0)
+#define _HASH@f_y(%0) _DOHASH@f(121,%0)
+#define _HASH@f_z(%0) _DOHASH@f(122,%0)
+
+// String end.
+#define _HASH@f_@(%0) 2166136261
+
+// ============
+//  FNV1a hash
+// ============
+
+// Signify the end with two "@" symbols.
+#define HASH@fnv1a(%0) _REHASH@a(%0,@,@)
+
+// Internal call.
+#define _REHASH@a(%0,%1) _HASH@a_%0(%1)
+
+// The bit that actually does the work.
+#define _DOHASH@a(%0,%1,%2) ((_HASH@a_%1(%2)^%0)*16777619)
+
+// Space.
+#define _HASH@a_(%0) _DOHASH@a(32,%0)
+
+// Numbers.
+#define _HASH@a_0(%0) _DOHASH@a(48,%0)
+#define _HASH@a_1(%0) _DOHASH@a(49,%0)
+#define _HASH@a_2(%0) _DOHASH@a(50,%0)
+#define _HASH@a_3(%0) _DOHASH@a(51,%0)
+#define _HASH@a_4(%0) _DOHASH@a(52,%0)
+#define _HASH@a_5(%0) _DOHASH@a(53,%0)
+#define _HASH@a_6(%0) _DOHASH@a(54,%0)
+#define _HASH@a_7(%0) _DOHASH@a(55,%0)
+#define _HASH@a_8(%0) _DOHASH@a(56,%0)
+#define _HASH@a_9(%0) _DOHASH@a(57,%0)
+
+// Upper case letters.
+#define _HASH@a_A(%0) _DOHASH@a(65,%0)
+#define _HASH@a_B(%0) _DOHASH@a(66,%0)
+#define _HASH@a_C(%0) _DOHASH@a(67,%0)
+#define _HASH@a_D(%0) _DOHASH@a(68,%0)
+#define _HASH@a_E(%0) _DOHASH@a(69,%0)
+#define _HASH@a_F(%0) _DOHASH@a(70,%0)
+#define _HASH@a_G(%0) _DOHASH@a(71,%0)
+#define _HASH@a_H(%0) _DOHASH@a(72,%0)
+#define _HASH@a_I(%0) _DOHASH@a(73,%0)
+#define _HASH@a_J(%0) _DOHASH@a(74,%0)
+#define _HASH@a_K(%0) _DOHASH@a(75,%0)
+#define _HASH@a_L(%0) _DOHASH@a(76,%0)
+#define _HASH@a_M(%0) _DOHASH@a(77,%0)
+#define _HASH@a_N(%0) _DOHASH@a(78,%0)
+#define _HASH@a_O(%0) _DOHASH@a(79,%0)
+#define _HASH@a_P(%0) _DOHASH@a(80,%0)
+#define _HASH@a_Q(%0) _DOHASH@a(81,%0)
+#define _HASH@a_R(%0) _DOHASH@a(82,%0)
+#define _HASH@a_S(%0) _DOHASH@a(83,%0)
+#define _HASH@a_T(%0) _DOHASH@a(84,%0)
+#define _HASH@a_U(%0) _DOHASH@a(85,%0)
+#define _HASH@a_V(%0) _DOHASH@a(86,%0)
+#define _HASH@a_W(%0) _DOHASH@a(87,%0)
+#define _HASH@a_X(%0) _DOHASH@a(88,%0)
+#define _HASH@a_Y(%0) _DOHASH@a(89,%0)
+#define _HASH@a_Z(%0) _DOHASH@a(90,%0)
+
+// Underscore.
+#define _HASH@a__(%0) _DOHASH@a(95,%0)
+
+// Lower case letters.
+#define _HASH@a_a(%0) _DOHASH@a(97,%0)
+#define _HASH@a_b(%0) _DOHASH@a(98,%0)
+#define _HASH@a_c(%0) _DOHASH@a(99,%0)
+#define _HASH@a_d(%0) _DOHASH@a(100,%0)
+#define _HASH@a_e(%0) _DOHASH@a(101,%0)
+#define _HASH@a_f(%0) _DOHASH@a(102,%0)
+#define _HASH@a_g(%0) _DOHASH@a(103,%0)
+#define _HASH@a_h(%0) _DOHASH@a(104,%0)
+#define _HASH@a_i(%0) _DOHASH@a(105,%0)
+#define _HASH@a_j(%0) _DOHASH@a(106,%0)
+#define _HASH@a_k(%0) _DOHASH@a(107,%0)
+#define _HASH@a_l(%0) _DOHASH@a(108,%0)
+#define _HASH@a_m(%0) _DOHASH@a(109,%0)
+#define _HASH@a_n(%0) _DOHASH@a(110,%0)
+#define _HASH@a_o(%0) _DOHASH@a(111,%0)
+#define _HASH@a_p(%0) _DOHASH@a(112,%0)
+#define _HASH@a_q(%0) _DOHASH@a(113,%0)
+#define _HASH@a_r(%0) _DOHASH@a(114,%0)
+#define _HASH@a_s(%0) _DOHASH@a(115,%0)
+#define _HASH@a_t(%0) _DOHASH@a(116,%0)
+#define _HASH@a_u(%0) _DOHASH@a(117,%0)
+#define _HASH@a_v(%0) _DOHASH@a(118,%0)
+#define _HASH@a_w(%0) _DOHASH@a(119,%0)
+#define _HASH@a_x(%0) _DOHASH@a(120,%0)
+#define _HASH@a_y(%0) _DOHASH@a(121,%0)
+#define _HASH@a_z(%0) _DOHASH@a(122,%0)
+
+// String end.
+#define _HASH@a_@(%0) 2166136261
+
+// ==================
+//  Case insensitive
+// ==================
+
+// These are the default values
+#define HASHi(%0,%1) HASHi@%0(%1)
+
+//#define _I(%0) _REHASib(%0,@,@)
+#define _I(%0) HASHi(bernstein,%0)
+
+#define _I@b HASHi@bernstein
+#define _I@f HASHi@fnv1
+#define _I@a HASHi@fnv1a
+
+// ================
+//  Bernstein hash
+// ================
+
+// Signify the end with two "@" symbols.
+#define HASHi@bernstein(%0) _REHASH@ib(%0,@,@)
+
+// Internal call.
+#define _REHASH@ib(%0,%1) _HASH@ib_%0(%1)
+
+// The bit that actually does the work.
+#define _DOHASH@ib(%0,%1,%2) (_HASH@ib_%1(%2)*33+%0)
+
+// Space.
+#define _HASH@ib_(%0) _DOHASH@ib(32,%0)
+
+// Numbers.
+#define _HASH@ib_0(%0) _DOHASH@ib(48,%0)
+#define _HASH@ib_1(%0) _DOHASH@ib(49,%0)
+#define _HASH@ib_2(%0) _DOHASH@ib(50,%0)
+#define _HASH@ib_3(%0) _DOHASH@ib(51,%0)
+#define _HASH@ib_4(%0) _DOHASH@ib(52,%0)
+#define _HASH@ib_5(%0) _DOHASH@ib(53,%0)
+#define _HASH@ib_6(%0) _DOHASH@ib(54,%0)
+#define _HASH@ib_7(%0) _DOHASH@ib(55,%0)
+#define _HASH@ib_8(%0) _DOHASH@ib(56,%0)
+#define _HASH@ib_9(%0) _DOHASH@ib(57,%0)
+
+// Upper case letters.
+#define _HASH@ib_A(%0) _DOHASH@ib(65,%0)
+#define _HASH@ib_B(%0) _DOHASH@ib(66,%0)
+#define _HASH@ib_C(%0) _DOHASH@ib(67,%0)
+#define _HASH@ib_D(%0) _DOHASH@ib(68,%0)
+#define _HASH@ib_E(%0) _DOHASH@ib(69,%0)
+#define _HASH@ib_F(%0) _DOHASH@ib(70,%0)
+#define _HASH@ib_G(%0) _DOHASH@ib(71,%0)
+#define _HASH@ib_H(%0) _DOHASH@ib(72,%0)
+#define _HASH@ib_I(%0) _DOHASH@ib(73,%0)
+#define _HASH@ib_J(%0) _DOHASH@ib(74,%0)
+#define _HASH@ib_K(%0) _DOHASH@ib(75,%0)
+#define _HASH@ib_L(%0) _DOHASH@ib(76,%0)
+#define _HASH@ib_M(%0) _DOHASH@ib(77,%0)
+#define _HASH@ib_N(%0) _DOHASH@ib(78,%0)
+#define _HASH@ib_O(%0) _DOHASH@ib(79,%0)
+#define _HASH@ib_P(%0) _DOHASH@ib(80,%0)
+#define _HASH@ib_Q(%0) _DOHASH@ib(81,%0)
+#define _HASH@ib_R(%0) _DOHASH@ib(82,%0)
+#define _HASH@ib_S(%0) _DOHASH@ib(83,%0)
+#define _HASH@ib_T(%0) _DOHASH@ib(84,%0)
+#define _HASH@ib_U(%0) _DOHASH@ib(85,%0)
+#define _HASH@ib_V(%0) _DOHASH@ib(86,%0)
+#define _HASH@ib_W(%0) _DOHASH@ib(87,%0)
+#define _HASH@ib_X(%0) _DOHASH@ib(88,%0)
+#define _HASH@ib_Y(%0) _DOHASH@ib(89,%0)
+#define _HASH@ib_Z(%0) _DOHASH@ib(90,%0)
+
+// Underscore.
+#define _HASH@ib__(%0) _DOHASH@ib(95,%0)
+
+// Lower case letters.
+#define _HASH@ib_a(%0) _DOHASH@ib(65,%0)
+#define _HASH@ib_b(%0) _DOHASH@ib(66,%0)
+#define _HASH@ib_c(%0) _DOHASH@ib(67,%0)
+#define _HASH@ib_d(%0) _DOHASH@ib(68,%0)
+#define _HASH@ib_e(%0) _DOHASH@ib(69,%0)
+#define _HASH@ib_f(%0) _DOHASH@ib(70,%0)
+#define _HASH@ib_g(%0) _DOHASH@ib(71,%0)
+#define _HASH@ib_h(%0) _DOHASH@ib(72,%0)
+#define _HASH@ib_i(%0) _DOHASH@ib(73,%0)
+#define _HASH@ib_j(%0) _DOHASH@ib(74,%0)
+#define _HASH@ib_k(%0) _DOHASH@ib(75,%0)
+#define _HASH@ib_l(%0) _DOHASH@ib(76,%0)
+#define _HASH@ib_m(%0) _DOHASH@ib(77,%0)
+#define _HASH@ib_n(%0) _DOHASH@ib(78,%0)
+#define _HASH@ib_o(%0) _DOHASH@ib(79,%0)
+#define _HASH@ib_p(%0) _DOHASH@ib(80,%0)
+#define _HASH@ib_q(%0) _DOHASH@ib(81,%0)
+#define _HASH@ib_r(%0) _DOHASH@ib(82,%0)
+#define _HASH@ib_s(%0) _DOHASH@ib(83,%0)
+#define _HASH@ib_t(%0) _DOHASH@ib(84,%0)
+#define _HASH@ib_u(%0) _DOHASH@ib(85,%0)
+#define _HASH@ib_v(%0) _DOHASH@ib(86,%0)
+#define _HASH@ib_w(%0) _DOHASH@ib(87,%0)
+#define _HASH@ib_x(%0) _DOHASH@ib(88,%0)
+#define _HASH@ib_y(%0) _DOHASH@ib(89,%0)
+#define _HASH@ib_z(%0) _DOHASH@ib(90,%0)
+
+// String end.
+#define _HASH@ib_@(%0) -1
+
+// ===========
+//  FNV1 hash
+// ===========
+
+// Signify the end with two "@" symbols.
+#define HASHi@fnv1(%0) _REHASH@if(%0,@,@)
+
+// Internal call.
+#define _REHASH@if(%0,%1) _HASH@if_%0(%1)
+
+// The bit that actually does the work.
+#define _DOHASH@if(%0,%1,%2) (_HASH@if_%1(%2)*16777619^%0)
+
+// Space.
+#define _HASH@if_(%0) _DOHASH@if(32,%0)
+
+// Numbers.
+#define _HASH@if_0(%0) _DOHASH@if(48,%0)
+#define _HASH@if_1(%0) _DOHASH@if(49,%0)
+#define _HASH@if_2(%0) _DOHASH@if(50,%0)
+#define _HASH@if_3(%0) _DOHASH@if(51,%0)
+#define _HASH@if_4(%0) _DOHASH@if(52,%0)
+#define _HASH@if_5(%0) _DOHASH@if(53,%0)
+#define _HASH@if_6(%0) _DOHASH@if(54,%0)
+#define _HASH@if_7(%0) _DOHASH@if(55,%0)
+#define _HASH@if_8(%0) _DOHASH@if(56,%0)
+#define _HASH@if_9(%0) _DOHASH@if(57,%0)
+
+// Upper case letters.
+#define _HASH@if_A(%0) _DOHASH@if(65,%0)
+#define _HASH@if_B(%0) _DOHASH@if(66,%0)
+#define _HASH@if_C(%0) _DOHASH@if(67,%0)
+#define _HASH@if_D(%0) _DOHASH@if(68,%0)
+#define _HASH@if_E(%0) _DOHASH@if(69,%0)
+#define _HASH@if_F(%0) _DOHASH@if(70,%0)
+#define _HASH@if_G(%0) _DOHASH@if(71,%0)
+#define _HASH@if_H(%0) _DOHASH@if(72,%0)
+#define _HASH@if_I(%0) _DOHASH@if(73,%0)
+#define _HASH@if_J(%0) _DOHASH@if(74,%0)
+#define _HASH@if_K(%0) _DOHASH@if(75,%0)
+#define _HASH@if_L(%0) _DOHASH@if(76,%0)
+#define _HASH@if_M(%0) _DOHASH@if(77,%0)
+#define _HASH@if_N(%0) _DOHASH@if(78,%0)
+#define _HASH@if_O(%0) _DOHASH@if(79,%0)
+#define _HASH@if_P(%0) _DOHASH@if(80,%0)
+#define _HASH@if_Q(%0) _DOHASH@if(81,%0)
+#define _HASH@if_R(%0) _DOHASH@if(82,%0)
+#define _HASH@if_S(%0) _DOHASH@if(83,%0)
+#define _HASH@if_T(%0) _DOHASH@if(84,%0)
+#define _HASH@if_U(%0) _DOHASH@if(85,%0)
+#define _HASH@if_V(%0) _DOHASH@if(86,%0)
+#define _HASH@if_W(%0) _DOHASH@if(87,%0)
+#define _HASH@if_X(%0) _DOHASH@if(88,%0)
+#define _HASH@if_Y(%0) _DOHASH@if(89,%0)
+#define _HASH@if_Z(%0) _DOHASH@if(90,%0)
+
+// Underscore.
+#define _HASH@if__(%0) _DOHASH@if(95,%0)
+
+// Lower case letters.
+#define _HASH@if_a(%0) _DOHASH@if(65,%0)
+#define _HASH@if_b(%0) _DOHASH@if(66,%0)
+#define _HASH@if_c(%0) _DOHASH@if(67,%0)
+#define _HASH@if_d(%0) _DOHASH@if(68,%0)
+#define _HASH@if_e(%0) _DOHASH@if(69,%0)
+#define _HASH@if_f(%0) _DOHASH@if(70,%0)
+#define _HASH@if_g(%0) _DOHASH@if(71,%0)
+#define _HASH@if_h(%0) _DOHASH@if(72,%0)
+#define _HASH@if_i(%0) _DOHASH@if(73,%0)
+#define _HASH@if_j(%0) _DOHASH@if(74,%0)
+#define _HASH@if_k(%0) _DOHASH@if(75,%0)
+#define _HASH@if_l(%0) _DOHASH@if(76,%0)
+#define _HASH@if_m(%0) _DOHASH@if(77,%0)
+#define _HASH@if_n(%0) _DOHASH@if(78,%0)
+#define _HASH@if_o(%0) _DOHASH@if(79,%0)
+#define _HASH@if_p(%0) _DOHASH@if(80,%0)
+#define _HASH@if_q(%0) _DOHASH@if(81,%0)
+#define _HASH@if_r(%0) _DOHASH@if(82,%0)
+#define _HASH@if_s(%0) _DOHASH@if(83,%0)
+#define _HASH@if_t(%0) _DOHASH@if(84,%0)
+#define _HASH@if_u(%0) _DOHASH@if(85,%0)
+#define _HASH@if_v(%0) _DOHASH@if(86,%0)
+#define _HASH@if_w(%0) _DOHASH@if(87,%0)
+#define _HASH@if_x(%0) _DOHASH@if(88,%0)
+#define _HASH@if_y(%0) _DOHASH@if(89,%0)
+#define _HASH@if_z(%0) _DOHASH@if(90,%0)
+
+// String end.
+#define _HASH@if_@(%0) 2166136261
+
+// ============
+//  FNV1a hash
+// ============
+
+// Signify the end with two "@" symbols.
+#define HASHi@fnv1a(%0) _REHASH@ia(%0,@,@)
+
+// Internal call.
+#define _REHASH@ia(%0,%1) _HASH@ia_%0(%1)
+
+// The bit that actually does the work.
+#define _DOHASH@ia(%0,%1,%2) ((_HASH@ia_%1(%2)^%0)*16777619)
+
+// Space.
+#define _HASH@ia_(%0) _DOHASH@ia(32,%0)
+
+// Numbers.
+#define _HASH@ia_0(%0) _DOHASH@ia(48,%0)
+#define _HASH@ia_1(%0) _DOHASH@ia(49,%0)
+#define _HASH@ia_2(%0) _DOHASH@ia(50,%0)
+#define _HASH@ia_3(%0) _DOHASH@ia(51,%0)
+#define _HASH@ia_4(%0) _DOHASH@ia(52,%0)
+#define _HASH@ia_5(%0) _DOHASH@ia(53,%0)
+#define _HASH@ia_6(%0) _DOHASH@ia(54,%0)
+#define _HASH@ia_7(%0) _DOHASH@ia(55,%0)
+#define _HASH@ia_8(%0) _DOHASH@ia(56,%0)
+#define _HASH@ia_9(%0) _DOHASH@ia(57,%0)
+
+// Upper case letters.
+#define _HASH@ia_A(%0) _DOHASH@ia(65,%0)
+#define _HASH@ia_B(%0) _DOHASH@ia(66,%0)
+#define _HASH@ia_C(%0) _DOHASH@ia(67,%0)
+#define _HASH@ia_D(%0) _DOHASH@ia(68,%0)
+#define _HASH@ia_E(%0) _DOHASH@ia(69,%0)
+#define _HASH@ia_F(%0) _DOHASH@ia(70,%0)
+#define _HASH@ia_G(%0) _DOHASH@ia(71,%0)
+#define _HASH@ia_H(%0) _DOHASH@ia(72,%0)
+#define _HASH@ia_I(%0) _DOHASH@ia(73,%0)
+#define _HASH@ia_J(%0) _DOHASH@ia(74,%0)
+#define _HASH@ia_K(%0) _DOHASH@ia(75,%0)
+#define _HASH@ia_L(%0) _DOHASH@ia(76,%0)
+#define _HASH@ia_M(%0) _DOHASH@ia(77,%0)
+#define _HASH@ia_N(%0) _DOHASH@ia(78,%0)
+#define _HASH@ia_O(%0) _DOHASH@ia(79,%0)
+#define _HASH@ia_P(%0) _DOHASH@ia(80,%0)
+#define _HASH@ia_Q(%0) _DOHASH@ia(81,%0)
+#define _HASH@ia_R(%0) _DOHASH@ia(82,%0)
+#define _HASH@ia_S(%0) _DOHASH@ia(83,%0)
+#define _HASH@ia_T(%0) _DOHASH@ia(84,%0)
+#define _HASH@ia_U(%0) _DOHASH@ia(85,%0)
+#define _HASH@ia_V(%0) _DOHASH@ia(86,%0)
+#define _HASH@ia_W(%0) _DOHASH@ia(87,%0)
+#define _HASH@ia_X(%0) _DOHASH@ia(88,%0)
+#define _HASH@ia_Y(%0) _DOHASH@ia(89,%0)
+#define _HASH@ia_Z(%0) _DOHASH@ia(90,%0)
+
+// Underscore.
+#define _HASH@ia__(%0) _DOHASH@ia(95,%0)
+
+// Lower case letters.
+#define _HASH@ia_a(%0) _DOHASH@ia(65,%0)
+#define _HASH@ia_b(%0) _DOHASH@ia(66,%0)
+#define _HASH@ia_c(%0) _DOHASH@ia(67,%0)
+#define _HASH@ia_d(%0) _DOHASH@ia(68,%0)
+#define _HASH@ia_e(%0) _DOHASH@ia(69,%0)
+#define _HASH@ia_f(%0) _DOHASH@ia(70,%0)
+#define _HASH@ia_g(%0) _DOHASH@ia(71,%0)
+#define _HASH@ia_h(%0) _DOHASH@ia(72,%0)
+#define _HASH@ia_i(%0) _DOHASH@ia(73,%0)
+#define _HASH@ia_j(%0) _DOHASH@ia(74,%0)
+#define _HASH@ia_k(%0) _DOHASH@ia(75,%0)
+#define _HASH@ia_l(%0) _DOHASH@ia(76,%0)
+#define _HASH@ia_m(%0) _DOHASH@ia(77,%0)
+#define _HASH@ia_n(%0) _DOHASH@ia(78,%0)
+#define _HASH@ia_o(%0) _DOHASH@ia(79,%0)
+#define _HASH@ia_p(%0) _DOHASH@ia(80,%0)
+#define _HASH@ia_q(%0) _DOHASH@ia(81,%0)
+#define _HASH@ia_r(%0) _DOHASH@ia(82,%0)
+#define _HASH@ia_s(%0) _DOHASH@ia(83,%0)
+#define _HASH@ia_t(%0) _DOHASH@ia(84,%0)
+#define _HASH@ia_u(%0) _DOHASH@ia(85,%0)
+#define _HASH@ia_v(%0) _DOHASH@ia(86,%0)
+#define _HASH@ia_w(%0) _DOHASH@ia(87,%0)
+#define _HASH@ia_x(%0) _DOHASH@ia(88,%0)
+#define _HASH@ia_y(%0) _DOHASH@ia(89,%0)
+#define _HASH@ia_z(%0) _DOHASH@ia(90,%0)
+
+// String end.
+#define _HASH@ia_@(%0) 2166136261
+
+enum e_HASH_TYPE
+{
+	hash_bernstein,
+	hash_fnv1,
+	hash_fnv1a
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Hash
+Params:
+	str - The string to hash.
+	sensitive - Wether the hash is case sensitive or not.
+Return:
+	The reverse Bernstein hash of the string.
+Notes:
+	Based on Bernstein hash, but backwards to match the macros.  The only
+	characters which can be used in the compile time version of this code are:
+	a-z, A-Z, 0-9, _ and space.
+
+native Hash(str[]);
+
+-*----------------------------------------------------------------------------*/
+
+stock YHash(const str[], bool:sensitive = true, e_HASH_TYPE:type = hash_bernstein, len = -1)
+{
+	if (len == -1)
+	{
+		len = strlen(str);
+	}
+	switch (type)
+	{
+		case hash_bernstein:
+		{
+			new
+				hash = -1;
+			if (sensitive)
+			{
+				while (len--)
+				{
+					hash = hash * 33 + str[len];
+				}
+			}
+			else
+			{
+				while (len--)
+				{
+					new
+						ch = str[len];
+					if (ch >= 'a' && ch <= 'z')
+					{
+						ch &= ~0x20;
+					}
+					hash = hash * 33 + ch;
+				}
+			}
+			return hash;
+		}
+		case hash_fnv1:
+		{
+			new
+				hash = 2166136261;
+			if (sensitive)
+			{
+				while (len--)
+				{
+					hash = hash * 16777619 ^ str[len];
+				}
+			}
+			else
+			{
+				while (len--)
+				{
+					new
+						ch = str[len];
+					if (ch >= 'a' && ch <= 'z')
+					{
+						ch &= ~0x20;
+					}
+					hash = hash * 16777619 ^ ch;
+				}
+			}
+			return hash;
+		}
+		case hash_fnv1a:
+		{
+			new
+				hash = 2166136261;
+			if (sensitive)
+			{
+				while (len--)
+				{
+					hash = (hash ^ str[len]) * 16777619;
+				}
+			}
+			else
+			{
+				while (len--)
+				{
+					new
+						ch = str[len];
+					if (ch >= 'a' && ch <= 'z')
+					{
+						ch &= ~0x20;
+					}
+					hash = (hash ^ ch) * 16777619;
+				}
+			}
+			return hash;
+		}
+	}
+	return -1;
+}

+ 2047 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_td.inc

@@ -0,0 +1,2047 @@
+/*----------------------------------------------------------------------------*-
+					===============================
+					 y_td - Stlyes for text draws!
+					===============================
+Description:
+	Provides a wrapper to the SA:MP text_draw functions offering much
+	improved functionality including XML definable styles, safe display,
+	timed displays, styles and text separated, styles updateable dynamically
+	and more.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#define ALS_PREFIX TD
+#include <YSI\y_als>
+
+#include <YSI\y_debug>
+#include <YSI\y_bit>
+
+#include <YSI\y_xml>
+
+#include <YSI\y_utils>
+#include <YSI\y_colours>
+
+#include <foreach>
+
+//#include <YSI\y_timer>
+
+#include <a_samp>
+
+#if !defined MAX_TEXT_DRAW_STYLES
+	#define MAX_TEXT_DRAW_STYLES        (Style:32)
+#endif
+
+#define MAX_TEXT_DRAW_LINE              (128)
+#define TEXT_DRAW_NO_NEXT               (Text:-1)
+
+#define TEXT_DRAW_NAN                   (0xFFFFFFFF)
+
+//#define TEXT_DRAW_NO_STYLE_NAME
+
+#tryinclude <sscanf2>
+
+enum td_align
+{
+	td_align_none,
+	td_align_left,
+	td_align_center,
+	td_align_centre = td_align_center,
+	td_align_right
+}
+
+enum e_TD_BITS (<<= 1)
+{
+	e_TD_BITS_SHADOW = 0x000000FF,
+	e_TD_BITS_OUTLINE = 0x0000FF00,
+	e_TD_BITS_ALIGN = 0x000F0000,
+	e_TD_BITS_FONT = 0x00F00000,
+	e_TD_BITS_BOX = 0x01000000,
+	e_TD_BITS_PROP
+}
+
+enum E_TD_DATA
+{
+	#if !defined TEXT_DRAW_NO_STYLE_NAME
+		E_TD_DATA_NAME[MAX_XML_ENTRY_NAME char],
+	#endif
+	E_TD_DATA_HASH,
+	Float:E_TD_DATA_X,
+	Float:E_TD_DATA_Y,
+	Float:E_TD_DATA_LX,
+	Float:E_TD_DATA_LY,
+	Float:E_TD_DATA_TX,
+	Float:E_TD_DATA_TY,
+	E_TD_DATA_COLOUR,
+	e_TD_BITS:E_TD_DATA_BITS,
+	E_TD_DATA_BOX,
+	E_TD_DATA_BG,
+	E_TD_DATA_TIME,
+	Text:E_TD_DATA_USE,
+	E_TD_DATA_UPDATE
+}
+
+enum E_TD_DISPLAY
+{
+	Float:E_TD_DISPLAY_X,
+	Float:E_TD_DISPLAY_Y,
+	Text:E_TD_DISPLAY_NEXT,
+	Style:E_TD_DISPLAY_STYLE,
+	E_TD_DISPLAY_LIFE,
+	Text:E_TD_DISPLAY_REAL,
+	E_TD_DISPLAY_REVISION,
+	E_TD_DISPLAY_TEXT[MAX_TEXT_DRAW_LINE char]
+}
+
+forward TD_LoadColour();
+forward TD_Textdraw();
+forward TD_HideForPlayerPub(playerid, Text:textDraw, revision);
+
+static stock
+	XML:YSI_g_sXMLRules = NO_XML_FILE,
+	YSI_g_sTDData[MAX_TEXT_DRAW_STYLES][E_TD_DATA],
+	YSI_g_sTDDisplay[Text:MAX_TEXT_DRAWS][E_TD_DISPLAY],
+	//YSI_g_sTDTimers[Text:MAX_TEXT_DRAWS][MAX_PLAYERS],
+	// This is actually dual purpose.
+	Text:YSI_g_sUnused,
+	BitArray:YSI_g_sPlayerDraws[MAX_PLAYERS]<MAX_TEXT_DRAWS>;
+	//Bit:YSI_g_sPlayerDraws[MAX_PLAYERS][Bit_Bits(MAX_TEXT_DRAWS)];
+
+ALS_DATA<>
+
+//static stock TD_SetTimer(playerid, Text:td, time, revision)
+//{
+//	SetTimerEx("TD_HideForPlayer", time, 0, "iii", playerid, _:td, revision);
+//}
+
+#define TD_SetTimer(%0,%1,%2,%3) SetTimerEx("TD_HideForPlayerPub", (%2), 0, "iii", (%0), _:(%1), (%3))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_IsValidStyle
+Params:
+	Style:id - Text draw style to check validity of,
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define TD_IsValidStyle(%1) \
+	(Style:0 <= (%1) < MAX_TEXT_DRAW_STYLES && YSI_g_sTDData[(%1)][E_TD_DATA_HASH])
+
+#define _TD_IsValid(%1) \
+	((%1) < MAX_TEXT_DRAW_STYLES && YSI_g_sTDData[(%1)][E_TD_DATA_HASH])
+
+#define _TD_TextValid(%0) \
+	(Text:0 <= (%0) < Text:MAX_TEXT_DRAWS && YSI_g_sTDDisplay[(%0)][E_TD_DISPLAY_TEXT][0])
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TD
+Params:
+	-
+Return:
+	-
+Notes:
+	Constructor.
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	if (YSI_g_sXMLRules == NO_XML_FILE)
+	{
+		YSI_g_sXMLRules = XML_New();
+		if (YSI_g_sXMLRules != NO_XML_FILE)
+		{
+			XML_AddHandler(YSI_g_sXMLRules, "color", "TD_LoadColour");
+			XML_AddHandler(YSI_g_sXMLRules, "colour", "TD_LoadColour");
+			XML_AddHandler(YSI_g_sXMLRules, "textdraw", "TD_Textdraw");
+			//XML_AddHandler(YSI_g_sXMLRules, "box", "TD_Box");
+			//XML_AddHandler(YSI_g_sXMLRules, "background", "TD_Background");
+			//XML_AddHandler(YSI_g_sXMLRules, "style", "TD_Style");
+		}
+	}
+	for (new Text:i; Text:i < Text:MAX_TEXT_DRAWS; i++)
+	{
+		YSI_g_sTDDisplay[i][E_TD_DISPLAY_REAL] = Text:INVALID_TEXT_DRAW;
+		YSI_g_sTDDisplay[i][E_TD_DISPLAY_NEXT] = i + Text:1;
+	}
+	YSI_g_sTDDisplay[Text:(MAX_TEXT_DRAWS - 1)][E_TD_DISPLAY_NEXT] = TEXT_DRAW_NO_NEXT;
+	ALS_DETECT<PlayerDisconnect>
+	CallLocalFunction("TD_OnScriptInit", "");
+	return 1;
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit TD_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit TD_OnScriptInit
+#endif
+forward TD_OnScriptInit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Parse
+Params:
+	filename[] - File to parse as a textdraw data file.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_Parse(filename[])
+{
+	return XML_Parse(YSI_g_sXMLRules, filename);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_LoadColour
+Params:
+	-
+Return:
+	-
+Notes:
+	XML callback for loading the <colour> tag.
+-*----------------------------------------------------------------------------*/
+
+public TD_LoadColour()
+{
+	P:2("TD_LoadColour called");
+	static
+		name[MAX_XML_ENTRY_NAME],
+		val[MAX_XML_ENTRY_TEXT];
+	new
+		colour,
+		hash;
+	while (XML_GetKeyValue(name, val))
+	{
+		if (!strcmp(name, "name", true))
+		{
+			hash = COLOUR_NAME_HASH(val);
+		}
+		else if (!strcmp(name, "hex", true))
+		{
+			#if defined _inc_sscanf2
+				unformat(val, "x", colour);
+			#else
+				colour = hexstr(val);
+			#endif
+		}
+		else if (!strcmp(name, "value", true))
+		{
+			#if defined _inc_sscanf2
+				if (unformat(val, "n", colour))
+			#else
+				if (ishex(val)) colour = hexstr(val);
+				else if (isnumeric(val)) colour = strval(val);
+				else
+			#endif
+					colour = GetColour(val);
+		}
+	}
+	//if (hash) Text_SetColour(hash, colour);
+	if (hash) SetColourHash(hash, colour);
+	return colour;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Create
+Params:
+	Float:x - X position the text will appear at.
+	Float:y - Y position the text will appear at,
+	Float:letterX - Letter X size.
+	Float:letterY - Letter Y size.
+	Float:textX - Box X size.
+	Float:textY - Box Y size.
+	colour - Text colour.
+	boxColour - Colour of the text box.
+	bgColour - Colour of the text background.
+	shadow - Text shadow size.
+	outline - Text outline size.
+	align - Text alignment.
+	font - Text font style.
+	bool:proportional - Wether to make the text proportional.
+	bool:box - Wether to use a box.
+	time - Time for the text to display in ms (0 = infinate).
+	name[] - Name of the style.
+Return:
+	-
+Notes:
+	Creates a text draw style structure according to given
+	parameters, can be used to display any text in the given
+	style without repeated redefinitions.
+-*----------------------------------------------------------------------------*/
+
+stock Style:TD_Create(Float:x = 0.0, Float:y = 0.0, Float:letterX = 0.48, Float:letterY = 1.12, Float:textX = 1280.0, Float:textY = 1280.0, colour = 0xE1E1E1FF, boxColour = 0x80808080, bgColour = 0x000000FF, shadow = 2, outline = 0, align = _:td_align_none, font = 1, bool:proportional = false, bool:box = false, time = 0, name[] = "\1")
+{
+	new
+		Style:i;
+	while (_TD_IsValid(i))
+	{
+		++i;
+	}
+	if (i == MAX_TEXT_DRAW_STYLES)
+	{
+		return MAX_TEXT_DRAW_STYLES;
+	}
+	#if !defined TEXT_DRAW_NO_STYLE_NAME
+		strpack(YSI_g_sTDData[i][E_TD_DATA_NAME], name, MAX_XML_ENTRY_NAME);
+	#endif
+	YSI_g_sTDData[i][E_TD_DATA_HASH] = bernstein(name);
+	YSI_g_sTDData[i][E_TD_DATA_X] = x;
+	YSI_g_sTDData[i][E_TD_DATA_Y] = y;
+	YSI_g_sTDData[i][E_TD_DATA_LX] = letterX;
+	YSI_g_sTDData[i][E_TD_DATA_LY] = letterY;
+	YSI_g_sTDData[i][E_TD_DATA_TX] = textX;
+	YSI_g_sTDData[i][E_TD_DATA_TY] = textY;
+	YSI_g_sTDData[i][E_TD_DATA_COLOUR] = colour;
+	YSI_g_sTDData[i][E_TD_DATA_BITS] =
+		((box) ? (e_TD_BITS_BOX) : (e_TD_BITS:0)) |
+		((proportional) ? (e_TD_BITS_PROP) : (e_TD_BITS:0)) |
+		(e_TD_BITS:(shadow << 0) & e_TD_BITS_SHADOW) |
+		(e_TD_BITS:(outline << 8) & e_TD_BITS_OUTLINE) |
+		(e_TD_BITS:(align << 16) & e_TD_BITS_ALIGN) |
+		(e_TD_BITS:(font << 20) & e_TD_BITS_FONT);
+	YSI_g_sTDData[i][E_TD_DATA_BOX] = boxColour;
+	YSI_g_sTDData[i][E_TD_DATA_BG] = bgColour;
+	YSI_g_sTDData[i][E_TD_DATA_TIME] = time;
+	YSI_g_sTDData[i][E_TD_DATA_USE] = TEXT_DRAW_NO_NEXT;
+	YSI_g_sTDData[i][E_TD_DATA_UPDATE] = -1;
+	return Style:i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Textdraw
+Params:
+	-
+Return:
+	-
+Notes:
+	XML callback for loading the <textdraw> tag.
+-*----------------------------------------------------------------------------*/
+
+public TD_Textdraw()
+{
+	// Set all the default values quickly.
+	new
+		Style:i = TD_Create();
+	if (i != MAX_TEXT_DRAW_STYLES)
+	{
+		static
+			name[MAX_XML_ENTRY_NAME],
+			val[MAX_XML_ENTRY_TEXT];
+		new
+			e_TD_BITS:bits,
+			// Bernstein hash of 1.
+			hash = -32;
+		// !"\1"
+		//YSI_g_sTDData[i][E_TD_DATA_NAME] = 0x01000000;
+		while (XML_GetKeyValue(name, val))
+		{
+			if (!strcmp(name, "x", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_X] = floatstr(val);
+			}
+			else if (!strcmp(name, "y", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_Y] = floatstr(val);
+			}
+			else if (!strcmp(name, "letterx", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_LX] = floatstr(val);
+			}
+			else if (!strcmp(name, "lettery", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_LY] = floatstr(val);
+			}
+			else if (!strcmp(name, "textx", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_TX] = floatstr(val);
+			}
+			else if (!strcmp(name, "texty", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_TY] = floatstr(val);
+			}
+			else if (!strcmp(name, "alignment", true))
+			{
+				bits &= ~e_TD_BITS_ALIGN;
+				if (!strcmp(val, "left", true)) bits |= e_TD_BITS:(_:td_align_left << 16) & e_TD_BITS_ALIGN;
+				else if (!strcmp(val, "right", true)) bits |= e_TD_BITS:(_:td_align_right << 16) & e_TD_BITS_ALIGN;
+				else if (!strcmp(val, "center", true) || !strcmp(val, "centre", true)) bits |= e_TD_BITS:(_:td_align_center << 16) & e_TD_BITS_ALIGN;
+			}
+			else if (!strcmp(name, "color", true) || !strcmp(name, "colour", true))
+			{
+				P:2("TD_Textdraw: colour called");
+				// This could now be done with the sscanf "n" type for "number".
+				#if defined _inc_sscanf2
+					new
+						colour;
+					if (!unformat(val, "n", colour)) YSI_g_sTDData[i][E_TD_DATA_COLOUR] = colour;
+				#else
+					if (ishex(val)) YSI_g_sTDData[i][E_TD_DATA_COLOUR] = hexstr(val);
+					else if (isnumeric(val)) YSI_g_sTDData[i][E_TD_DATA_COLOUR] = strval(val);
+				#endif
+					else YSI_g_sTDData[i][E_TD_DATA_COLOUR] = GetColour(val);
+			}
+			else if (!strcmp(name, "box", true))
+			{
+				new
+					box = strval(val);
+				if (box)
+				{
+					bits |= e_TD_BITS_BOX;
+					YSI_g_sTDData[i][E_TD_DATA_BOX] = box;
+				}
+			}
+			else if (!strcmp(name, "shadow", true))
+			{
+				bits = (bits & ~e_TD_BITS_SHADOW) | (e_TD_BITS:(strval(val)) & e_TD_BITS_SHADOW);
+			}
+			else if (!strcmp(name, "outline", true))
+			{
+				bits = (bits & ~e_TD_BITS_OUTLINE) | (e_TD_BITS:(strval(val) << 8) & e_TD_BITS_OUTLINE);
+			}
+			else if (!strcmp(name, "background", true))
+			{
+				#if defined _inc_sscanf2
+					new
+						colour;
+					if (!unformat(val, "n", colour)) YSI_g_sTDData[i][E_TD_DATA_BG] = colour;
+				#else
+					if (ishex(val)) YSI_g_sTDData[i][E_TD_DATA_BG] = hexstr(val);
+					else if (isnumeric(val)) YSI_g_sTDData[i][E_TD_DATA_BG] = strval(val);
+				#endif
+					else YSI_g_sTDData[i][E_TD_DATA_BG] = GetColour(val);
+					P:5("TD_Textdraw(): Background color: \"%s\", %d, %d: 0x%04x%04x", val, ishex(val), isnumeric(val), YSI_g_sTDData[i][E_TD_DATA_BG] >>> 16, YSI_g_sTDData[i][E_TD_DATA_BG] & 0xFFFF);
+			}
+			else if (!strcmp(name, "font", true))
+			{
+				bits = (bits & ~e_TD_BITS_FONT) | (e_TD_BITS:(strval(val) << 20) & e_TD_BITS_FONT);
+			}
+			else if (!strcmp(name, "proportional", true))
+			{
+				bits |= e_TD_BITS_PROP;
+			}
+			else if (!strcmp(name, "time", true))
+			{
+				YSI_g_sTDData[i][E_TD_DATA_TIME] = strval(val);
+			}
+			else if (!strcmp(name, "name", true))
+			{
+				#if !defined TEXT_DRAW_NO_STYLE_NAME
+					strpack(YSI_g_sTDData[i][E_TD_DATA_NAME], val, MAX_XML_ENTRY_NAME);
+				#endif
+				hash = bernstein(val);
+			}
+		}
+		YSI_g_sTDData[i][E_TD_DATA_BITS] = bits;
+		/*if (!(YSI_g_sTDData[i][E_TD_DATA_NAME] & 0xFF000000))
+		{
+			YSI_g_sTDData[i][E_TD_DATA_NAME] = 0x01000000;
+		}*/
+		//YSI_g_sTDData[i][E_TD_DATA_HASH] = bernstein(YSI_g_sTDData[i][E_TD_DATA_NAME]);
+		YSI_g_sTDData[i][E_TD_DATA_HASH] = hash;
+		P:5("TD data: %.2f %.2f %.2f %.2f %.2f %.2f %x %d %x %d %d", YSI_g_sTDData[i][E_TD_DATA_X], YSI_g_sTDData[i][E_TD_DATA_Y], YSI_g_sTDData[i][E_TD_DATA_LX], YSI_g_sTDData[i][E_TD_DATA_LY], YSI_g_sTDData[i][E_TD_DATA_TX], YSI_g_sTDData[i][E_TD_DATA_TY], YSI_g_sTDData[i][E_TD_DATA_COLOUR], YSI_g_sTDData[i][E_TD_DATA_BOX], YSI_g_sTDData[i][E_TD_DATA_BG], YSI_g_sTDData[i][E_TD_DATA_TIME], YSI_g_sTDData[i][E_TD_DATA_BITS]);//, YSI_g_sTDData[i][E_TD_DATA_NAME]);
+	}
+	return _:i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_GetID
+Params:
+	hash - Hash of a style name to get a style index for.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock Style:TD_GetID(hash)
+{
+	new
+		Style:i;
+	while (i != MAX_TEXT_DRAW_STYLES && YSI_g_sTDData[i][E_TD_DATA_HASH] != hash)
+	{
+		++i;
+	}
+	return i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Create
+Params:
+	Style:styleID - Style to clone.
+	name[] - Name of the new style.
+Return:
+	-
+Notes:
+	Copies a text draw style and returns the new handle.
+-*----------------------------------------------------------------------------*/
+//#if 0
+stock Style:TD_Clone(Style:styleID, name[] = "\1")
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return MAX_TEXT_DRAW_STYLES;
+	}
+	new
+		Style:i;
+	while (_TD_IsValid(i))
+	{
+		i++;
+	}
+	if (i == MAX_TEXT_DRAW_STYLES)
+	{
+		return MAX_TEXT_DRAW_STYLES;
+	}
+	#if !defined TEXT_DRAW_NO_STYLE_NAME
+		strpack(YSI_g_sTDData[i][E_TD_DATA_NAME], name, MAX_XML_ENTRY_NAME);
+	#endif
+	YSI_g_sTDData[i][E_TD_DATA_HASH] = bernstein(name);
+	// memcpy?
+	YSI_g_sTDData[i][E_TD_DATA_X] = YSI_g_sTDData[styleID][E_TD_DATA_X];
+	YSI_g_sTDData[i][E_TD_DATA_Y] = YSI_g_sTDData[styleID][E_TD_DATA_Y];
+	YSI_g_sTDData[i][E_TD_DATA_LX] = YSI_g_sTDData[styleID][E_TD_DATA_LX];
+	YSI_g_sTDData[i][E_TD_DATA_LY] = YSI_g_sTDData[styleID][E_TD_DATA_LY];
+	YSI_g_sTDData[i][E_TD_DATA_TX] = YSI_g_sTDData[styleID][E_TD_DATA_TX];
+	YSI_g_sTDData[i][E_TD_DATA_TY] = YSI_g_sTDData[styleID][E_TD_DATA_TY];
+	YSI_g_sTDData[i][E_TD_DATA_COLOUR] = YSI_g_sTDData[styleID][E_TD_DATA_COLOUR];
+	YSI_g_sTDData[i][E_TD_DATA_BITS] = YSI_g_sTDData[styleID][E_TD_DATA_BITS];
+	YSI_g_sTDData[i][E_TD_DATA_BOX] = YSI_g_sTDData[styleID][E_TD_DATA_BOX];
+	YSI_g_sTDData[i][E_TD_DATA_BG] = YSI_g_sTDData[styleID][E_TD_DATA_BG];
+	YSI_g_sTDData[i][E_TD_DATA_TIME] = YSI_g_sTDData[styleID][E_TD_DATA_TIME];
+	YSI_g_sTDData[i][E_TD_DATA_USE] = TEXT_DRAW_NO_NEXT;
+	YSI_g_sTDData[i][E_TD_DATA_UPDATE] = -1;
+	return Style:i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Name
+Params:
+	Style:styleID - Style to modify.
+	name[] - Name to give the style.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_Name(Style:styleID, name[])
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	#if !defined TEXT_DRAW_NO_STYLE_NAME
+		strpack(YSI_g_sTDData[styleID][E_TD_DATA_NAME], name, MAX_XML_ENTRY_NAME);
+	#endif
+	YSI_g_sTDData[styleID][E_TD_DATA_HASH] = bernstein(name);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TextPosition
+Params:
+	Text:textID - Text to modify.
+	Float:x - New horizontal position.
+	Float:y - New vertical position.
+Return:
+	-
+Notes:
+	Moves a single bit of text, not all with a style.
+-*----------------------------------------------------------------------------*/
+
+stock TD_TextPosition(Text:textID, Float:x, Float:y)
+{
+	if (!_TD_TextValid(textID))
+	{
+		return 0;
+	}
+	YSI_g_sTDDisplay[textID][E_TD_DISPLAY_X] = x;
+	YSI_g_sTDDisplay[textID][E_TD_DISPLAY_Y] = y;
+	TD_UpdateOne(textID, YSI_g_sTDDisplay[textID][E_TD_DISPLAY_STYLE]);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TextXPos
+Params:
+	Text:textID - Text to modify.
+	Float:x - New horizontal position.
+Return:
+	-
+Notes:
+	Moves a single bit of text, not all with a style.
+-*----------------------------------------------------------------------------*/
+
+stock TD_TextXPos(Text:textID, Float:x)
+{
+	if (!_TD_TextValid(textID))
+	{
+		return 0;
+	}
+	YSI_g_sTDDisplay[textID][E_TD_DISPLAY_X] = x;
+	TD_UpdateOne(textID, YSI_g_sTDDisplay[textID][E_TD_DISPLAY_STYLE]);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TextYPos
+Params:
+	Text:textID - Text to modify.
+	Float:y - New vertical position.
+Return:
+	-
+Notes:
+	Moves a single bit of text, not all with a style.
+-*----------------------------------------------------------------------------*/
+
+stock TD_TextYPos(Text:textID, Float:y)
+{
+	if (!_TD_TextValid(textID))
+	{
+		return 0;
+	}
+	YSI_g_sTDDisplay[textID][E_TD_DISPLAY_Y] = y;
+	TD_UpdateOne(textID, YSI_g_sTDDisplay[textID][E_TD_DISPLAY_STYLE]);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_StylePosition
+Params:
+	Style:styleID - Style to modify.
+	Float:x - New horizontal position.
+	Float:y - New vertical position.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	Update is default false to not modify moved texts.
+-*----------------------------------------------------------------------------*/
+
+stock TD_StylePosition(Style:styleID, Float:x, Float:y)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_X] = x;
+	YSI_g_sTDData[styleID][E_TD_DATA_Y] = y;
+	if (update) TD_Update(styleID, true);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_StyleXPos
+Params:
+	Style:styleID - Style to modify.
+	Float:x - New horizontal position.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	Update is default false to not modify moved texts.
+-*----------------------------------------------------------------------------*/
+
+stock TD_StyleXPos(Style:styleID, Float:x)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_X] = x;
+	if (update) TD_Update(styleID, true);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_StyleYPos
+Params:
+	Style:styleID - Style to modify.
+	Float:y - New vertical position.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	Update is default false to not modify moved texts.
+-*----------------------------------------------------------------------------*/
+
+stock TD_StyleYPos(Style:styleID, Float:y)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_Y] = y;
+	if (update) TD_Update(styleID, true);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_LetterSize
+Params:
+	Style:styleID - Style to modify.
+	Float:x - New letter width.
+	Float:y - New letter height.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_LetterSize(Style:styleID, Float:x, Float:y)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_LX] = x;
+	YSI_g_sTDData[styleID][E_TD_DATA_LY] = y;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_LetterX
+Params:
+	Style:styleID - Style to modify.
+	Float:x - New letter width.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_LetterX(Style:styleID, Float:x)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_LX] = x;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_LetterY
+Params:
+	Style:styleID - Style to modify.
+	Float:y - New letter height.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_LetterY(Style:styleID, Float:y)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_LY] = y;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TextSize
+Params:
+	Style:styleID - Style to modify.
+	Float:x - New text width.
+	Float:y - New text height.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_TextSize(Style:styleID, Float:x, Float:y)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_TX] = x;
+	YSI_g_sTDData[styleID][E_TD_DATA_TY] = y;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TextX
+Params:
+	Style:styleID - Style to modify.
+	Float:x - New text width.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_TextX(Style:styleID, Float:x)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_TX] = x;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TextY
+Params:
+	Style:styleID - Style to modify.
+	Float:y - New text height.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_TextY(Style:styleID, Float:y)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_TY] = y;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Alignment
+Params:
+	Style:styleID - Style to modify.
+	alignment - Where to align the text in it's box.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	Designed to take ta_align enum values and numbers.
+-*----------------------------------------------------------------------------*/
+
+stock TD_Alignment(Style:styleID, alignment = _:td_align_none)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_BITS] = (YSI_g_sTDData[styleID][E_TD_DATA_BITS] & ~e_TD_BITS_ALIGN) | (e_TD_BITS:(alignment << 16) & e_TD_BITS_ALIGN);
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Colour
+Params:
+	Style:styleID - Style to modify.
+	colour - New text colour.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_Colour(Style:styleID, colour)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_COLOUR] = colour;
+	TD_Update(styleID);
+	return 1;
+}
+
+#define TD_Color TD_Colour
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_UseBox
+Params:
+	Style:styleID - Style to modify.
+	bool:use - Wether or not to show a box round the text.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_UseBox(Style:styleID, bool:use)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	if (use) YSI_g_sTDData[styleID][E_TD_DATA_BITS] |= e_TD_BITS_BOX;
+	else YSI_g_sTDData[styleID][E_TD_DATA_BITS] &= ~e_TD_BITS_BOX;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_BoxColour
+Params:
+	Style:styleID - Style to modify.
+	colour - New box colour.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_BoxColour(Style:styleID, colour)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_BOX] = colour;
+	TD_Update(styleID);
+	return 1;
+}
+
+#define TD_BoxColor TD_BoxColour
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_SetShadow
+Params:
+	Style:styleID - Style to modify.
+	size - Size of the letter shadow,
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_SetShadow(Style:styleID, size)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_BITS] = (YSI_g_sTDData[styleID][E_TD_DATA_BITS] & ~e_TD_BITS_SHADOW) | (e_TD_BITS:(size) & e_TD_BITS_SHADOW);
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_SetOutline
+Params:
+	Style:styleID - Style to modify.
+	size - Size of the letter outline.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_SetOutline(Style:styleID, size)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_BITS] = (YSI_g_sTDData[styleID][E_TD_DATA_BITS] & ~e_TD_BITS_OUTLINE) | (e_TD_BITS:(size << 8) & e_TD_BITS_OUTLINE);
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_BackgroundColour
+Params:
+	Style:styleID - Style to modify.
+	colour - New background (outline/shadow) colour.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_BackgroundColour(Style:styleID, colour)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_BG] = colour;
+	TD_Update(styleID);
+	return 1;
+}
+
+#define TD_BackgroundColor TD_BackgroundColour
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Font
+Params:
+	Style:styleID - Style to modify.
+	font - New text font style.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_Font(Style:styleID, font)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_BITS] = (YSI_g_sTDData[styleID][E_TD_DATA_BITS] & ~e_TD_BITS_FONT) | (e_TD_BITS:(font << 20) & e_TD_BITS_FONT);
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_SetProportional
+Params:
+	Style:styleID - Style to modify.
+	bool:set - Wether to make the letters proportional or not.
+	bool:update - Wether to update the appearence for players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_SetProportional(Style:styleID, bool:set)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	if (set) YSI_g_sTDData[styleID][E_TD_DATA_BITS] |= e_TD_BITS_PROP;
+	else YSI_g_sTDData[styleID][E_TD_DATA_BITS] &= ~e_TD_BITS_PROP;
+	TD_Update(styleID);
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_SetTime
+Params:
+	Style:styleID - Style to modify.
+	time - New time for the text to display for.
+	existing - Whether or not to change the display of existing text draws.
+Return:
+	-
+Notes:
+	Doesn't update existing timed texts, just new ones.  Now does all of them.
+-*----------------------------------------------------------------------------*/
+
+stock TD_SetTime(Style:styleID, time, bool:existing = false)
+{
+	if (!TD_IsValidStyle(styleID))
+	{
+		return 0;
+	}
+	YSI_g_sTDData[styleID][E_TD_DATA_TIME] = time;
+	if (existing)
+	{
+		// Hide this after the given time for all players.
+		new
+			Text:next = YSI_g_sTDData[styleId][E_TD_DATA_USE],
+			Text:last = TEXT_DRAW_NO_NEXT;
+		while (next != TEXT_DRAW_NO_NEXT)
+		{
+			// DO update the revision here!
+			new
+				index = Bit_Slot(next),
+				Bit:mod = Bit_Mask(next),
+				revision = ++YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION];
+			foreach (Player, playerid)
+			{
+				if (YSI_g_sPlayerDraws[playerid][index] & mod)
+				{
+					TD_SetTimer(playerid, next, time, revision);
+				}
+			}
+			last = next;
+			next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+		}
+	}
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Text:TD_Render
+Params:
+	text[] - String to output.
+	Style:id - Text draw style to render the text in.
+	Text:slot - the slot the text is stored in.
+Return:
+	TextDraw id.
+Notes:
+	Basically the application layer, creates a text_draw with the
+	saved data.
+-*----------------------------------------------------------------------------*/
+
+static stock Text:TD_Render(text[], Style:id, Text:slot)
+{
+	new
+		Text:textDraw = TextDrawCreate(YSI_g_sTDDisplay[slot][E_TD_DISPLAY_X], YSI_g_sTDDisplay[slot][E_TD_DISPLAY_Y], text);
+	if (textDraw != Text:INVALID_TEXT_DRAW)
+	{
+		new
+			e_TD_BITS:bits = YSI_g_sTDData[id][E_TD_DATA_BITS];
+		TextDrawLetterSize(textDraw, YSI_g_sTDData[id][E_TD_DATA_LX], YSI_g_sTDData[id][E_TD_DATA_LY]);
+		TextDrawTextSize(textDraw, YSI_g_sTDData[id][E_TD_DATA_TX], YSI_g_sTDData[id][E_TD_DATA_TY]);
+		TextDrawAlignment(textDraw, _:(bits & e_TD_BITS_ALIGN) >> 16);
+		TextDrawColor(textDraw, YSI_g_sTDData[id][E_TD_DATA_COLOUR]);
+		TextDrawUseBox(textDraw, (bits & e_TD_BITS_BOX) ? 1 : 0);
+		TextDrawBoxColor(textDraw, YSI_g_sTDData[id][E_TD_DATA_BOX]);
+		TextDrawSetShadow(textDraw, _:(bits & e_TD_BITS_SHADOW));
+		TextDrawSetOutline(textDraw, _:(bits & e_TD_BITS_OUTLINE) >> 8);
+		TextDrawBackgroundColor(textDraw, YSI_g_sTDData[id][E_TD_DATA_BG]);
+		TextDrawFont(textDraw, _:(bits & e_TD_BITS_FONT) >> 20);
+		TextDrawSetProportional(textDraw, (bits & e_TD_BITS_PROP) ? 1 : 0);
+	}
+	return textDraw;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Update
+Params:
+	Style:id - Style to update for players.
+	bool:pos - Wether or not to update children's positions.
+Return:
+	-
+Notes:
+	Loops through all texts displayed using the current render
+	style and updates their real display.
+-*----------------------------------------------------------------------------*/
+
+stock TD_Update(Style:id, bool:pos = false)
+{
+	if (!TD_IsValidStyle(id))
+	{
+		return;
+	}
+	new
+		Text:next = YSI_g_sTDData[id][E_TD_DATA_USE],
+		Float:x,
+		Float:y;
+	if (pos)
+	{
+		x = YSI_g_sTDData[id][E_TD_DATA_X],
+		y = YSI_g_sTDData[id][E_TD_DATA_Y];
+	}
+	while (next != TEXT_DRAW_NO_NEXT)
+	{
+		if (pos)
+		{
+			YSI_g_sTDDisplay[next][E_TD_DISPLAY_X] = x;
+			YSI_g_sTDDisplay[next][E_TD_DISPLAY_Y] = y;
+		}
+		//TD_UpdateOne(next, id);
+		next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+	}
+	// Update the apperance after a load of updates have been applied.
+	if (YSI_g_sTDData[id][E_TD_DATA_UPDATE] == -1)
+	{
+		YSI_g_sTDData[id][E_TD_DATA_UPDATE] = SetTimerEx("TD_UpdateInternal", 1, 0, "i", _:id);
+	}
+}
+
+forward TD_UpdateInternal(Style:id);
+
+public TD_UpdateInternal(Style:id)
+{
+	new
+		Text:next = YSI_g_sTDData[id][E_TD_DATA_USE];
+	while (next != TEXT_DRAW_NO_NEXT)
+	{
+		TD_UpdateOne(next, id);
+		next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_UpdateOne
+Params:
+	Text:slot - Text to update.
+	Style:id - Style to use.
+Return:
+	-
+Notes:
+	Updates a single text's appearance.  Modified to use a timer with a delay of
+	1ms, to be called after the current slew of updates.  This means that doing
+	a whole load of modifications at once will all be committed to players at
+	the same time.  This used to be done with the optional "update" parameter.
+-*----------------------------------------------------------------------------*/
+
+stock TD_UpdateOne(Text:slot, Style:id)
+{
+	// DON'T update the revision in here - if you show a TD to a player for 5
+	// seconds and change it after 2, they should just get the new version for
+	// 3 seconds, it shouldn't reset the timer.
+	new
+		Text:real = YSI_g_sTDDisplay[slot][E_TD_DISPLAY_REAL];
+	TextDrawDestroy(real);
+	real = TD_Render(YSI_g_sTDDisplay[slot][E_TD_DISPLAY_TEXT], id, slot);
+	YSI_g_sTDDisplay[slot][E_TD_DISPLAY_REAL] = real;
+	if (real != Text:INVALID_TEXT_DRAW)
+	{
+		new
+			index = Bit_Slot(slot),
+			Bit:mod = Bit_Mask(slot);
+		foreach (Player, playerid)
+		{
+			if (YSI_g_sPlayerDraws[playerid][index] & mod)
+			{
+				TextDrawShowForPlayer(playerid, real);
+			}
+		}
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Delete
+Params:
+	styleId - Text draw style ID you want to remove.
+Return:
+	-
+Notes:
+	Just nulls the name to remove it's active marker.
+-*----------------------------------------------------------------------------*/
+
+stock TD_Delete(Style:styleId)
+{
+	if (!TD_IsValidStyle(styleId))
+	{
+		return 0;
+	}
+	if (YSI_g_sTDData[styleId][E_TD_DATA_UPDATE] != -1)
+	{
+		KillTimer(YSI_g_sTDData[styleId][E_TD_DATA_UPDATE]);
+		YSI_g_sTDData[styleId][E_TD_DATA_UPDATE] = -1;
+	}
+	new
+		Text:next = YSI_g_sTDData[styleId][E_TD_DATA_USE],
+		Text:last = TEXT_DRAW_NO_NEXT;
+	// Loop through all the TDs using this style.
+	while (next != TEXT_DRAW_NO_NEXT)
+	{
+		TextDrawDestroy(YSI_g_sTDDisplay[next][E_TD_DISPLAY_REAL]);
+		YSI_g_sTDDisplay[next][E_TD_DISPLAY_REAL] = Text:INVALID_TEXT_DRAW;
+		YSI_g_sTDDisplay[next][E_TD_DISPLAY_TEXT][0] = '\0';
+		++YSI_g_sTDDisplay[next][E_TD_DISPLAY_REVISION];
+		new
+			index = Bit_Slot(next),
+			Bit:mod = ~Bit_Mask(next);
+		foreach (Player, playerid)
+		{
+			// TODO: Update.
+			/*if (YSI_g_sTDTimers[next][playerid])
+			{
+				KillTimer(YSI_g_sTDTimers[next][playerid]);
+			}
+			YSI_g_sTDTimers[next][playerid] = 0;*/
+			// Kill the update timer.
+			// Mark this player as not having this TD.
+			YSI_g_sPlayerDraws[playerid][index] &= mod;
+		}
+		last = next;
+		next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+	}
+	// Add the entire style list to the unused list at once.
+	if (last != TEXT_DRAW_NO_NEXT)
+	{
+		// There are items to add.
+		YSI_g_sTDDisplay[last][E_TD_DISPLAY_NEXT] = YSI_g_sUnused;
+		YSI_g_sUnused = YSI_g_sTDData[styleId][E_TD_DATA_USE];
+	}
+	// Mark the style as unused.
+	YSI_g_sTDData[styleId][E_TD_DATA_USE] = TEXT_DRAW_NO_NEXT;
+	#if !defined TEXT_DRAW_NO_STYLE_NAME
+		YSI_g_sTDData[styleId][E_TD_DATA_NAME] = 0;
+	#endif
+	YSI_g_sTDData[styleId][E_TD_DATA_HASH] = 0;
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_TryDestroy
+Params:
+	Text:textDraw - Text draw to destroy safely.
+Return:
+	-
+Notes:
+	Destroys this text draw only if it is marked for garbage collection.  It
+	does not however check that no-one can see the text draw, so those people
+	who can currently see it will loose it.
+-*----------------------------------------------------------------------------*/
+
+static stock TD_TryDestroy(Text:textDraw)
+{
+	// Destroy this if it is marked to be garbage collected.
+	if (YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] & 0x80000000)
+	{
+		TD_Destroy(textDraw);
+		return 1;
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Destroy
+Params:
+	Text:textDraw - Text draw to destroy safely.
+Return:
+	-
+Notes:
+	Optimised for multiple people.  Not very well though...
+-*----------------------------------------------------------------------------*/
+
+stock TD_Destroy(Text:textDraw)
+{
+	if (Text:0 <= textDraw < Text:MAX_TEXT_DRAWS)
+	{
+		// Find the TD before this one in the style list.
+		new
+			Style:style = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_STYLE],
+			Text:next = YSI_g_sTDData[style][E_TD_DATA_USE],
+			Text:last = TEXT_DRAW_NO_NEXT;
+		while (next != TEXT_DRAW_NO_NEXT)
+		{
+			if (next == textDraw)
+			{
+				break;
+			}
+			last = next;
+			next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+		}
+		// Destroy the SA:MP text draw.
+		new
+			Text:real = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL];
+		YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL] = Text:INVALID_TEXT_DRAW;
+		YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_TEXT][0] = '\0';
+		++YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION];
+		if (real != Text:INVALID_TEXT_DRAW)
+		{
+			// TextDrawDestroy
+			TextDrawDestroy(real);
+			// Now kill timers for players.
+			// TODO: Update.
+			new
+				index = Bit_Slot(textDraw),
+				Bit:mod = ~Bit_Mask(textDraw);
+			foreach (Player, playerid)
+			{
+				/*if (YSI_g_sTDTimers[textDraw][playerid])
+				{
+					KillTimer(YSI_g_sTDTimers[textDraw][playerid]);
+				}
+				YSI_g_sTDTimers[textDraw][playerid] = 0;*/
+				YSI_g_sPlayerDraws[playerid][index] &= mod;
+			}
+		}
+		// Remove from the style use list and add to the unused list.
+		if (next != textDraw)
+		{
+			return 0;
+		}
+		C:1(else printf("*** Internal Error: Orphaned text draw found."););
+		if (last == TEXT_DRAW_NO_NEXT)
+		{
+			YSI_g_sTDData[style][E_TD_DATA_USE] = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_NEXT];
+		}
+		else
+		{
+			YSI_g_sTDDisplay[last][E_TD_DISPLAY_NEXT] = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_NEXT];
+		}
+		YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_NEXT] = YSI_g_sUnused;
+		YSI_g_sUnused = textDraw;
+	}
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Text:TD_Display
+Params:
+	text[] - Text to display onscreen.
+	Style:id - Style to use to style text.
+Return:
+	Internal Text: id, not actual text draw's id.
+Notes:
+	Generates a text draw for to display to people.
+-*----------------------------------------------------------------------------*/
+
+stock Text:TD_Display(text[], Style:id, Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	if (YSI_g_sUnused == TEXT_DRAW_NO_NEXT)
+	{
+		return Text:INVALID_TEXT_DRAW;
+	}
+	if (!TD_IsValidStyle(id))
+	{
+		return Text:INVALID_TEXT_DRAW;
+	}
+	// if (x != x)
+	// Determine the screen position.
+	if (_:x == TEXT_DRAW_NAN)
+	{
+		YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_X] = YSI_g_sTDData[id][E_TD_DATA_X];
+	}
+	else
+	{
+		YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_X] = x;
+	}
+	if (_:y == TEXT_DRAW_NAN)
+	{
+		YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_Y] = YSI_g_sTDData[id][E_TD_DATA_Y];
+	}
+	else
+	{
+		YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_Y] = y;
+	}
+	YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_STYLE] = id;
+	// Render the code to an internal TD.  All TD_Render does is call SA:MP
+	// functions, it does no variable sets.
+	new
+		Text:textDraw = TD_Render(text, id, YSI_g_sUnused);
+	if (textDraw == Text:INVALID_TEXT_DRAW)
+	{
+		return Text:INVALID_TEXT_DRAW;
+	}
+	YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_REAL] = textDraw;
+	// I don't know wether or not to use strpack here.
+	//strcpy(YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_TEXT], text, MAX_TEXT_DRAW_LINE);
+	strpack(YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_TEXT], text, MAX_TEXT_DRAW_LINE char);
+	textDraw = Text:YSI_g_sUnused;
+	YSI_g_sUnused = YSI_g_sTDDisplay[YSI_g_sUnused][E_TD_DISPLAY_NEXT];
+	// Add to the list of items using this style.
+	YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_NEXT] = YSI_g_sTDData[id][E_TD_DATA_USE];
+	YSI_g_sTDData[id][E_TD_DATA_USE] = textDraw;
+	// Nobody can see it, but don't destroy it.
+	YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] = 0;
+	// Increment this every time this slot is used and cleared.
+	++YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION];
+	return textDraw;
+}
+
+stock Text:TD_DisplayForPlayer(playerid, text[], Style:id, Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	new
+		Text:td = TD_Display(text, id, x, y);
+	TD_Garbage(td);
+	TD_ShowForPlayer(playerid, td);
+	return td;
+}
+
+stock Text:TD_DisplayForAll(text[], Style:id, Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	new
+		Text:td = TD_Display(text, id, x, y);
+	TD_Garbage(td);
+	TD_ShowForAll(td);
+	return td;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_SetString
+Params:
+	Text:td - The text draw to modify.
+	text[] - Text to display onscreen.
+Return:
+	-
+Notes:
+	Changes the text on people's screens quickly.
+-*----------------------------------------------------------------------------*/
+
+stock TD_SetString(Text:td, text[])
+{
+	if (_TD_TextValid(td))
+	{
+		//strcpy(YSI_g_sTDDisplay[td][E_TD_DISPLAY_TEXT], text, MAX_TEXT_DRAW_LINE);
+		strpack(YSI_g_sTDDisplay[td][E_TD_DISPLAY_TEXT], text, MAX_TEXT_DRAW_LINE char);
+		new
+			Text:real = YSI_g_sTDDisplay[td][E_TD_DISPLAY_REAL];
+		// This may have lost it's real rendering
+		if (real == Text:INVALID_TEXT_DRAW)
+		{
+			return 0;
+		}
+		// Get the style information for showing this TD.
+		TextDrawSetString(real, text);
+	}
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Text:TD_DisplayHashed
+Params:
+	text[] - Text to display.
+	hash - Hashed style name for styling.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock Text:TD_DisplayHashed(text[], hash, Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	new
+		Style:id = TD_GetID(hash);
+	if (id != MAX_TEXT_DRAW_STYLES)
+	{
+		return TD_Display(text, id, x, y);
+	}
+	return Text:INVALID_TEXT_DRAW;
+}
+
+stock Text:TD_DisplayHashedForPlayer(playerid, text[], hash, Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	new
+		Style:id = TD_GetID(hash);
+	if (id != MAX_TEXT_DRAW_STYLES)
+	{
+		return TD_DisplayForPlayer(playerid, text, id, x, y);
+	}
+	return Text:INVALID_TEXT_DRAW;
+}
+
+stock Text:TD_DisplayHashedForAll(text[], hash, Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	new
+		Style:id = TD_GetID(hash);
+	if (id != MAX_TEXT_DRAW_STYLES)
+	{
+		return TD_DisplayForAll(text, id, x, y);
+	}
+	return Text:INVALID_TEXT_DRAW;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Text:TD_DisplayNamed
+Params:
+	text[] - Text to display.
+	style[] - Named style to display the text with.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock Text:TD_DisplayNamed(text[], style[], Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	return TD_DisplayHashed(text, bernstein(style), x, y);
+}
+
+stock Text:TD_DisplayNamedForPlayer(playerid, text[], style[], Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	return TD_DisplayHashedForPlayer(playerid, text, bernstein(style), x, y);
+}
+
+stock Text:TD_DisplayNamedForAll(text[], style[], Float:x = (Float:TEXT_DRAW_NAN), Float:y = (Float:TEXT_DRAW_NAN))
+{
+	return TD_DisplayHashedForAll(text, bernstein(style), x, y);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_ShowForPlayer
+Params:
+	playerid - Player to show the text to.
+	Text:textDraw - ID of the text to show.
+Return:
+	-
+Notes:
+	Now destroys any existing text draws using the same style in
+	the same place to avoid overlaps.
+-*----------------------------------------------------------------------------*/
+
+stock TD_ShowForPlayer(playerid, Text:textDraw)
+{
+	if (Text:0 <= textDraw < Text:MAX_TEXT_DRAWS && !Bit_GetBit(YSI_g_sPlayerDraws[playerid], _:textDraw))
+	{
+		new
+			Text:real = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL],
+			Style:style = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_STYLE];
+		// This may have lost it's real rendering
+		if (real == Text:INVALID_TEXT_DRAW)
+		{
+			if (!YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_TEXT][0])
+			{
+				// There is no text to render.
+				return 0;
+			}
+			real = TD_Render(YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_TEXT], style, textDraw);
+			if (real == Text:INVALID_TEXT_DRAW)
+			{
+				return 0;
+			}
+			YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL] = real;
+		}
+		// Now show this for a player.
+		TextDrawShowForPlayer(playerid, real);
+		Bit_Let(YSI_g_sPlayerDraws[playerid], _:textDraw);
+		++YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE];
+		new
+			time = YSI_g_sTDData[style][E_TD_DATA_TIME];
+		// TODO: Update.
+		/*if (YSI_g_sTDTimers[textDraw][playerid])
+		{
+			KillTimer(YSI_g_sTDTimers[textDraw][playerid]);
+		}*/
+		if (time)
+		{
+			//YSI_g_sTDTimers[textDraw][playerid] = SetTimerEx("TD_HideForPlayer", time, 0, "ii", playerid, _:textDraw);
+			TD_SetTimer(playerid, textDraw, time, YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION]);
+		}
+		return 1;
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_HideForPlayer
+Params:
+	playerid - Player to hide the text for.
+	Text:textDraw - Text to hide.
+	revision - The version of the text draw which existed when this was set.
+Return:
+	-
+Notes:
+	Public so the timer can call it to hide texts with a time set.
+-*----------------------------------------------------------------------------*/
+
+public TD_HideForPlayerPub(playerid, Text:textDraw, revision)
+{
+	// Hide the TD only if it's not changed since last time (avoids ABA errors).
+	if (YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION] == revision)
+	{
+		//if (playerid == INVALID_PLAYER_ID)
+		//{
+		//	TD_HideForAll(textDraw);
+		//}
+		//else
+		//{
+			TD_HideForPlayer(playerid, textDraw);
+		//}
+	}
+}
+
+stock TD_HideForPlayer(playerid, Text:textDraw)
+{
+	if (IsPlayerConnected(playerid))
+	{
+		if (Text:0 <= textDraw < Text:MAX_TEXT_DRAWS && Bit_GetBit(YSI_g_sPlayerDraws[playerid], _:textDraw))
+		{
+			// TODO: Update this to find the correct timer.
+			/*if (YSI_g_sTDTimers[textDraw][playerid])
+			{
+				KillTimer(YSI_g_sTDTimers[textDraw][playerid]);
+			}
+			YSI_g_sTDTimers[textDraw][playerid] = 0;*/
+			//YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] = (count & 0x80000000) | ((count & 0x7FFFFFFF) - 1);
+			if (--YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] == 0x80000000)
+			{
+				// No-one uses this any more, destroy it.  Looking back on the
+				// code, this doesn't seem well implemented at all!  Actually it
+				// is, ignore me.  I forgot that you have to MANUALLY mark TDs
+				// as garbage for collection here.
+				TD_Destroy(Text:textDraw);
+			}
+			else
+			{
+				Bit_Vet(YSI_g_sPlayerDraws[playerid], _:textDraw);
+				TextDrawHideForPlayer(playerid, YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL]);
+			}
+			return 1;
+		}
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_ShowForAll
+Params:
+	Text:textDraw - Text to show to all players.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock TD_ShowForAll(Text:textDraw)
+{
+	if (Text:0 <= textDraw < Text:MAX_TEXT_DRAWS)
+	{
+		new
+			Text:real = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL],
+			Style:style = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_STYLE];
+		// This may have lost it's real rendering
+		if (real == Text:INVALID_TEXT_DRAW)
+		{
+			if (!YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_TEXT][0])
+			{
+				// There is no text to render.
+				return 0;
+			}
+			real = TD_Render(YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_TEXT], style, textDraw);
+			if (real == Text:INVALID_TEXT_DRAW)
+			{
+				return 0;
+			}
+			YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL] = real;
+		}
+		// Get the style information for showing this TD.
+		/*new
+			//index,
+			//count,
+			Float:x = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_X],
+			Float:y = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_Y],
+			Style:style = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_STYLE],
+			time = YSI_g_sTDData[style][E_TD_DATA_TIME],
+			Text:next = YSI_g_sTDData[style][E_TD_DATA_USE],
+			Text:last = TEXT_DRAW_NO_NEXT,
+			Text:cur = TEXT_DRAW_NO_NEXT,
+			Text:thisLast = TEXT_DRAW_NO_NEXT;*/
+		/*while (next != TEXT_DRAW_NO_NEXT)
+		{
+			if (next == textDraw)
+			{
+				thisLast = last;
+				last = next;
+				next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+			}
+			else if (x == YSI_g_sTDDisplay[next][E_TD_DISPLAY_X] && y == YSI_g_sTDDisplay[next][E_TD_DISPLAY_Y])
+			{
+				// Hide existing text draws in the same location.  This
+				// actually now seems like a bad idea!
+				count = YSI_g_sTDDisplay[next][E_TD_DISPLAY_LIFE];
+				cur = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+				if (count & 0x80000000)
+				{
+					if (last == TEXT_DRAW_NO_NEXT)
+					{
+						YSI_g_sTDData[style][E_TD_DATA_USE] = cur;
+					}
+					else
+					{
+						YSI_g_sTDDisplay[last][E_TD_DISPLAY_NEXT] = cur;
+					}
+					YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT] = YSI_g_sUnused;
+					YSI_g_sUnused = next;
+					new
+						Text:temp = YSI_g_sTDDisplay[next][E_TD_DISPLAY_REAL];
+					YSI_g_sTDDisplay[next][E_TD_DISPLAY_REAL] = Text:INVALID_TEXT_DRAW;
+					if (temp != Text:INVALID_TEXT_DRAW)
+					{
+						TextDrawDestroy(temp);
+					}
+				}
+				else
+				{
+					TextDrawHideForAll(YSI_g_sTDDisplay[next][E_TD_DISPLAY_REAL]);
+					last = next;
+				}
+				index = _:next / cellbits;
+				mod = 1 << (_:next % cellbits);
+				foreach (Player, playerid)
+				{
+					YSI_g_sPlayerDraws[playerid][index] &= Bit:mod;
+				}
+				next = cur;
+			}
+			else
+			{
+				last = next;
+				next = YSI_g_sTDDisplay[next][E_TD_DISPLAY_NEXT];
+			}
+		}*/
+		TextDrawShowForAll(real);
+		new
+			count = 0,
+			index = Bit_Slot(textDraw),
+			Bit:mod = Bit_Mask(textDraw),
+			time = YSI_g_sTDData[style][E_TD_DATA_TIME],
+			revision = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION];
+		foreach (Player, playerid)
+		{
+			YSI_g_sPlayerDraws[playerid][index] |= mod;
+			++count;
+			// TODO: Update.
+			/*if (YSI_g_sTDTimers[textDraw][playerid])
+			{
+				KillTimer(YSI_g_sTDTimers[textDraw][playerid]);
+			}*/
+				//YSI_g_sTDTimers[textDraw][playerid] = SetTimerEx("TD_HideForPlayer", time, 0, "ii", playerid, _:textDraw);
+			if (time)
+			{
+				TD_SetTimer(playerid, textDraw, time, revision);
+			}
+		}
+		if (count)
+		{
+			// People can see it.
+			YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] = (YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] & 0x80000000) | count;
+		}
+		else
+		{
+			TD_TryDestroy(textDraw);
+		}
+		return 1;
+		//}
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_HideForAll
+Params:
+	Text:textDraw - Text to hide from all players.
+Return:
+	-
+Notes:
+	Destroys the real text draw if marked for garbage collection.
+-*----------------------------------------------------------------------------*/
+
+stock TD_HideForAll(Text:textDraw)
+{
+	if (Text:0 <= textDraw < Text:MAX_TEXT_DRAWS)
+	{
+		new
+			Text:real = YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REAL];
+		if (!TD_TryDestroy(textDraw))
+		{
+			if (real != Text:INVALID_TEXT_DRAW)
+			{
+				YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] = 0;
+				new
+					index = Bit_Slot(textDraw),
+					Bit:inv = ~Bit_Mask(textDraw);//,
+					//Bit:inv = ~mod;
+				// Hide it for all players but don't destroy it.
+				TextDrawHideForAll(real);
+				++YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_REVISION];
+				foreach (Player, playerid)
+				{
+					//if (YSI_g_sPlayerDraws[playerid][index] & mod)
+					//{
+						// Need to sort out the timers.
+						// TODO: Update
+						/*if (YSI_g_sTDTimers[textDraw][playerid])
+						{
+							KillTimer(YSI_g_sTDTimers[textDraw][playerid]);
+							YSI_g_sTDTimers[textDraw][playerid] = 0;
+						}*/
+						YSI_g_sPlayerDraws[playerid][index] &= inv;
+					//}
+				}
+			}
+		}
+	}
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_OnPlayerDisconnect
+Params:
+	playerid - Player who left.
+	reason - Why they left.
+Return:
+	-
+Notes:
+	Required to fix bugs in the textdraw system by hiding all
+	visible ones.
+-*----------------------------------------------------------------------------*/
+
+public OnPlayerDisconnect(playerid, reason)
+{
+	for (new i = 0; i < bits<MAX_TEXT_DRAWS>; i++)
+	{
+		new
+			Bit:s = YSI_g_sPlayerDraws[playerid][i],
+			j = 0,
+			ix = i << 5;
+		while (s)
+		{
+			// Get rid of data for textdraws which this player can see.  We
+			// don't need to actually hide the textdraw as the player has left.
+			if (s & Bit:1)
+			{
+				new
+					Text:textDraw = Text:(ix + j);
+				/*if (YSI_g_sTDTimers[textDraw][playerid])
+				{
+					// TODO: Update.
+					KillTimer(YSI_g_sTDTimers[textDraw][playerid]);
+					YSI_g_sTDTimers[textDraw][playerid] = 0;
+				}*/
+				if (--YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] == 0x80000000)
+				{
+					TD_Destroy(textDraw);
+				}
+				//TD_TryDestroy(textDraw);
+			}
+			s >>>= Bit:1;
+			++j;
+		}
+		YSI_g_sPlayerDraws[playerid][i] = Bit:0;
+	}
+	ALS_CALL<PlayerDisconnect>
+}
+
+#if defined _ALS_OnPlayerDisconnect
+	#undef OnPlayerDisconnect
+#else
+	#define _ALS_OnPlayerDisconnect
+#endif
+#define OnPlayerDisconnect TD_OnPlayerDisconnect
+ALS_FORWARD<PlayerDisconnect>
+
+/*----------------------------------------------------------------------------*-
+Function:
+	TD_Garbage
+Params:
+	Text:textDraw - Text to mark as garbage.
+Return:
+	-
+Notes:
+	Tells the system to remove a text draw when no-one can see it
+	anymore to free up text draw slots.
+-*----------------------------------------------------------------------------*/
+
+stock TD_Garbage(Text:textDraw)
+{
+	if (Text:0 <= textDraw < Text:MAX_TEXT_DRAWS)
+	{
+		if (YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] & 0x7FFFFFFF)
+		{
+			// Players can still see it.
+			YSI_g_sTDDisplay[textDraw][E_TD_DISPLAY_LIFE] |= 0x80000000;
+		}
+		else
+		{
+			// No-one can see it.
+			TD_Destroy(textDraw);
+		}
+	}
+}
+
+#undef ALS_PREFIX
+//#endif

+ 235 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_testing.inc

@@ -0,0 +1,235 @@
+/*----------------------------------------------------------------------------*-
+					====================================
+					 y_testing - Run unit tests easilly 
+					====================================
+Description:
+	Runs any functions named as tests when the Testing_Run function is called.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	25/10/10:
+		Integrated in to YSI.
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <YSI\y_scripting>
+#include <YSI\y_debug>
+
+#if !defined RUN_TESTS
+	#if _DEBUG > 0 || defined _YSI_SPECIAL_DEBUG
+		#define RUN_TESTS
+		#if defined _YSI_SPECIAL_DEBUG
+			#define TP printf
+			#define TC(%0); %0
+		#else
+			#define TP P:1
+			#define TC C:1
+		#endif
+	#else
+		#define Tests:%1() stock bool:Tests_@%1()
+		#define Test:%1() stock bool:Test_@%1()
+		#define TestInit:%1() stock Init_@%1()
+		#define TestClose:%1() stock Shut_@%1()
+	#endif
+#endif
+
+#define TEST_TRUE(%0)  Testing_Test(bool:(%0))
+#define TEST_FALSE(%0) Testing_Test(!(%0))
+#define TEST_NULL(%0)  Testing_Test((%0) == 0)
+#define TEST_N(%0,%1)  Testing_Test((%0) == (%1))
+
+#define TEST_TRUE_EX(%0,%2)  Testing_Test(bool:(%0), (%2))
+#define TEST_FALSE_EX(%0,%2) Testing_Test(!(%0), (%2))
+#define TEST_NULL_EX(%0,%2)  Testing_Test((%0) == 0, (%2))
+#define TEST_N_EX(%0,%1,%2)  Testing_Test((%0) == (%1), (%2))
+
+static stock
+	YSI_g_sTests,
+	YSI_g_sFails;
+
+stock Testing_Test(bool:x, const str[] = "")
+{
+	++YSI_g_sTests;
+	if (!x)
+	{
+		++YSI_g_sFails;
+		TP("*** Test failed: %s", str);
+	}
+	TC(else printf("*** Test passed: %s", str););
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Testing_Run
+Params:
+	&tests - Number of tests run.
+	&fails - Number of tests which failed.
+	buffer[33] - The name of the first test which failed.
+Return:
+	Wether all tests were sucessful or not.
+Notes:
+	-
+
+native Testing_Run(&tests, &fails, buffer[33] = "");
+
+-*----------------------------------------------------------------------------*/
+
+stock bool:Testing_Run(&tests, &fails, lastfail[33] = "", bool:p = false)
+{
+	#pragma unused p
+	#if defined RUN_TESTS
+		P:3("Testsing_Run() called");
+		new
+			idx,
+			buffer[32];
+		while ((idx = Scripting_GetPublic(idx, buffer, "Test_@")))
+		{
+			++YSI_g_sTests;
+			// Call the setup function if there is one.
+			buffer[0] = 'I';
+			buffer[1] = 'n';
+			buffer[2] = 'i';
+			buffer[3] = 't';
+			CallLocalFunction(buffer, "");
+			// Call the test.
+			buffer[0] = 'T';
+			buffer[1] = 'e';
+			buffer[2] = 's';
+			buffer[3] = 't';
+			TP("Testsing_Run(): Calling %s", buffer[6]);
+			if (!CallLocalFunction(buffer, ""))
+			{
+				if (YSI_g_sFails)
+				{
+					++YSI_g_sFails;
+				}
+				else
+				{
+					fails = 0;
+					// Copy the string over.
+					while ((lastfail[fails] = buffer[fails + 6])) ++fails;
+					YSI_g_sFails = 1;
+				}
+				TC(if (p) printf("*** Test failed: %s", buffer[fails + 6]););
+			}
+			// Call the shutdown function if there is one.
+			buffer[0] = 'S';
+			buffer[1] = 'h';
+			buffer[2] = 'u';
+			buffer[3] = 't';
+			CallLocalFunction(buffer, "");
+		}
+		while ((idx = Scripting_GetPublic(idx, buffer, "Tezt_@")))
+		{
+			//++YSI_g_sTests;
+			// Call the setup function if there is one.
+			buffer[0] = 'I';
+			buffer[1] = 'n';
+			buffer[2] = 'i';
+			buffer[3] = 't';
+			CallLocalFunction(buffer, "");
+			// Call the test.
+			buffer[0] = 'T';
+			buffer[1] = 'e';
+			buffer[2] = 'z';
+			buffer[3] = 't';
+			fails = YSI_g_sFails;
+			TP("Testsing_Run(): Calling %s", buffer[6]);
+			CallLocalFunction(buffer, "");
+			/*if (YSI_g_sFails != fails)
+			{
+				if (YSI_g_sFails)
+				{
+					++YSI_g_sFails;
+				}
+				else
+				{
+					fails = 0;
+					// Copy the string over.
+					while ((lastfail[fails] = buffer[fails + 6])) ++fails;
+					YSI_g_sFails = 1;
+				}
+				//C:1(if (p) printf("*** Test failed: %s", buffer[fails + 6]););
+			}*/
+			// Call the shutdown function if there is one.
+			buffer[0] = 'S';
+			buffer[1] = 'h';
+			buffer[2] = 'u';
+			buffer[3] = 't';
+			CallLocalFunction(buffer, "");
+		}
+		tests = YSI_g_sTests;
+		fails = YSI_g_sFails;
+		return fails == 0;
+	#else
+		#pragma unused tests, fails, lastfail
+		return true;
+	#endif
+}
+
+#if defined RUN_TESTS
+	#define Tests:%1() forward bool:Tezt_@%1(); public bool:Tezt_@%1()
+	#define Test:%1() forward bool:Test_@%1(); public bool:Test_@%1()
+	#define TestInit:%1() forward Init_@%1(); public Init_@%1()
+	#define TestClose:%1() forward Shut_@%1(); public Shut_@%1()
+	#if _DEBUG > 0 || defined _YSI_SPECIAL_DEBUG
+		#if !defined FILTERSCRIPT
+			// Hook main in gamemodes.
+			main()
+			{
+				new
+					tests,
+					fails;
+				Testing_Run(tests, fails, _, true);
+				printf("*** Tests: %d, Fails: %d", tests, fails);
+				Testing_main();
+			}
+			
+			#define main Testing_main
+		#endif
+	#endif
+#endif

+ 265 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_timers.inc

@@ -0,0 +1,265 @@
+/*----------------------------------------------------------------------------*-
+					  ====================================
+					   y_timers - Run timers efficiently. 
+					  ====================================
+Description:
+	Sets up repeating timers without requiring any SetTimers and arranges them
+	so that they will be very unlikely to meet (at least for a long time) using
+	scheduling algorithms to get timers with the same period to be offset.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	26/10/10:
+		Officially added simple calling.
+		Added "delay" functions.
+	12/10/10:
+		Rewrote for YSI 1.0 using y_scripting.
+	11/08/07:
+		Removed millions of defines to reduce pre-processing.
+		Added pickups.
+	03/08/07:
+		First version.
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <YSI\internal\y_shortfunc>
+
+#include <YSI\y_scripting>
+#include <YSI\y_debug>
+
+//#define Timer:%0[%1](%2) forward @yT_%1_%0();@yT_%1_%0()
+#define Timer:%0[%1](%2) forward @yT_%1_%0();stock %0() @yT_%1_%0();@yT_%1_%0()
+
+#define Delay:%0[%1,%2](%3) stock %0(%3)return O@(#@#%0,%1,0,#%2#x,%3);stock v@%0(_:_o@,%3)return O@(#@#%0,_o@,0,#%2#x,%3);forward @%0(%3);@%0(%3)
+
+#define FixDelay:%0[%1,%2](%3) stock %0(%3)return O@("@_"#%0,%1,0,#%2#x,%3);forward @_%0(%3);@_%0(%3)
+// There's a bug in passing strings to timer functions, so I've remove it.
+//#define Delay@p:%0[%1,%2](%3)<%4> stock %0(%3)return O@(#@#%0,%1,0,#%2,%4);stock v@%0(_o@,%3)return O@(#@#%0,_o@,0,#%2,%4);forward @%0(%3);@%0(%3)
+
+#define skip:%0(%3) @%0(%3)
+#define delay:%0[%1](%3) v@%0(_:%1,%3)
+
+// This defines the number of different periods that timers can have.  This
+// number is a HUGE over-estimate, you would need to have over 256 timers, none
+// of them with the same period, for this number to be too small!
+#define MAX_TIMER_VARIATIONS            (256)
+
+forward Timer_Start(timer, delay);
+
+/*----------------------------------------------------------------------------*-
+Function:
+	OnScriptInit
+Params:
+	-
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#if defined FILTERSCRIPT
+	public OnFilterScriptInit()
+#else
+	public OnGameModeInit()
+#endif
+{
+	new
+		buffer[32],
+		idx = 0,
+		timers[MAX_TIMER_VARIATIONS][2],//[3],
+		periods = 0;
+	// 0 = time, 1 = count, 2 = offset.
+	// First loop - get all the different periods.
+	// Get the list of timers from the list of publics.
+	while ((idx = Scripting_GetPublicFast(idx, buffer, (Scripting_FastString('@', 'y', 'T', '_')))))
+	{
+		// Get the time associated with the timer.  We know this starts at index
+		// position 4, because we always set it to be there.
+		new
+			time = strval(buffer[4]);
+		if (time)
+		{
+			// Valid time, find this in the array.
+			for (new i = 0; ; ++i)
+			{
+				if (i == periods)
+				{
+					timers[i][0] = time;
+					timers[i][1] = 1;
+					++periods;
+					break;
+				}
+				else if (timers[i][0] == time)
+				{
+					++timers[i][1];
+					break;
+				}
+			}
+			if (periods == MAX_TIMER_VARIATIONS)
+			{
+				P:1("*** Internal Error: Timer array full");
+				break;
+			}
+		}
+	}
+	// Group timers with common periods together, for example timers with 1000
+	// and 500ms periods need to be interleaved so they don't run at the same
+	// time very often.  Obviously ANY combination of timers will eventually run
+	// at the same time at some point, but we can reduce this chance.
+	/*for (new i = 0; i != periods; ++i)
+	{
+		new
+			time = timers[i][0];
+		if (timers[i][2])
+		{
+			for (new j = 0; j != i; ++j)
+			{
+				new
+					ct = timers[j][0];
+				if ((time / ct) * ct == time || (ct / time) * time == ct)
+				{
+					// Set the count to the same as the master.
+					timers[i][1] = timers[j][1];
+					break;
+				}
+			}
+		}
+		else
+		{
+			new
+				offset = timers[i][1];
+			for (new j = i + 1; j != periods; ++j)
+			{
+				// Find similar periods.
+				new
+					ct = timers[j][0];
+				if ((time / ct) * ct == time)
+				{
+					// This time is larger.
+				}
+				else if ((ct / time) * time == ct)
+				{
+				}
+				if ((time / ct) * ct == time || (ct / time) * time == ct)
+				{
+					// That's integer division, so valid code.  Mark this
+					// element as controlled by another element.
+					timers[j][2] = offset;
+					offset += timers[j][1];
+				}
+			}
+			timers[i][1] = offset;
+		}
+	}*/
+	C:1(for(new i;i!=periods;++i)printf("%d %d %d",timers[i][0],timers[i][1],0););//,timers[i][2]););
+	// Now we know how many of each period there are we can try arrange them so
+	// that they execute at very different times.
+	// [1] contains the total number of timers on similar periods.
+	for (new i = 0; i != periods; ++i)
+	{
+		// First calculate the gap between the timers.
+		new
+			time = timers[i][0],
+			offset = time / timers[i][1];
+		// Now start all the timers with this time at that offset.
+		idx = 0;
+		new
+			last = 0,
+			curo = offset;
+		while ((idx = Scripting_GetPublicFast(idx, buffer, (Scripting_FastString('@', 'y', 'T', '_')))))
+		{
+			if (strval(buffer[4]) == time)
+			{
+				// That's the old start code, which uses 7ms offsets to try get
+				// as close as possible to different server frames (5ms).
+				SetTimerEx("Timer_Start", curo + (random(14) - 7), 0, "ii", last, time);
+				//SetTimerEx("Timer_Start", curo, 0, "ii", last, time);
+				curo += offset;
+			}
+			// So that the first found timer in the next function is correct.
+			last = idx;
+		}
+	}
+	CallLocalFunction("Timers_OnScriptInit", "");
+}
+
+#if defined FILTERSCRIPT
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit Timers_OnScriptInit
+#else
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit Timers_OnScriptInit
+#endif
+
+forward Timers_OnScriptInit();
+
+/*----------------------------------------------------------------------------*-
+Function:
+	Timer_Start
+Params:
+	timer - Approximate public function index.
+	delay - How often it's called.
+Return:
+	-
+Notes:
+	Only needed for more than one timer.  Offsets calls from each other for
+	better server load distribution.
+-*----------------------------------------------------------------------------*/
+
+public Timer_Start(timer, delay)
+{
+	new
+		buffer[32];
+	Scripting_GetPublicFast(timer, buffer, (Scripting_FastString('@', 'y', 'T', '_')));
+	SetTimer(buffer, delay, 1);
+}

+ 403 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_utils.inc

@@ -0,0 +1,403 @@
+/*----------------------------------------------------------------------------*-
+					=================================
+					Y Sever Includes - Misc Functions
+					=================================
+Description:
+	Misc functions used throughout.
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	0.1.3
+Changelog:
+	08/09/10:
+		Added strcpy and StripNL.
+	08/08/10:
+		Scrapped almost everything.  Only VERY usefult things go in now.
+Functions:
+	Stock:
+		StripNL - Strips the newline characters from the end of a string.
+	Inline:
+		iseven - Checks if a number is even.
+		isodd - Checks if a number is odd.
+		isnull - Checks if a string is NULL ("\1\0").
+		strcpy - Copy one string to another.
+Variables:
+	Global:
+		TRUE - True hack for infinate loops.
+		FALSE - False hack for one-time loops.
+		NULL - 1 long string for passing via Call(Remote|Local)Function.
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+//#tryinclude <sscanf>
+
+#if !defined TRUE
+new stock
+	bool:TRUE = true;
+#endif
+#if !defined FALSE
+new stock
+	bool:FALSE = false;
+#endif
+#if !defined NULL
+new stock
+	NULL[2] = {1, 0};
+#endif
+
+//#pragma unused TRUE, FALSE, NULL
+
+/*----------------------------------------------------------------------------*-
+Function:
+	isnull
+Params:
+	str - String to check if is null.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#if !defined isnull
+	#define isnull(%1) \
+		((%1[0] == 0) || (%1[0] == 1 && %1[1] == 0))
+#endif
+
+/*----------------------------------------------------------------------------*-
+Function:
+	isodd
+Params:
+	value - Value to check if is odd.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define isodd(%1) \
+	((%1) & 1)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	iseven
+Params:
+	value - Value to check if is even.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define iseven(%1) \
+	(!isodd(%1))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	strcpy
+Params:
+	dest - Destination string.
+	src - Source string.
+	len - Maximum length of the destination.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define strcpy(%0,%1,%2) \
+	strcat((%0[0] = '\0', %0), %1, %2)
+//	memcpy(%0,%1,0,strlen(%1)*4+4,%2)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	StripNL
+Params:
+	str[] - The string to remove the newline characters from
+Return:
+	-
+Notes:
+	Updated from old versions, should be more efficient
+-*----------------------------------------------------------------------------*/
+
+stock StripNL(str[])
+{
+	new
+		i = strlen(str);
+	while (i-- && str[i] <= ' ') str[i] = '\0';
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	endofline
+Params:
+	line[] - String to check.
+	pos - Postion to start from.
+Return:
+	-
+Notes:
+	Checks if the current point in a line is the end of non-whitespace data.
+-*----------------------------------------------------------------------------*/
+
+stock endofline(line[], pos)
+{
+	while (line[pos]) if (line[pos++] > ' ') return 0;
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	chrfind
+Params:
+	needle - The character to find.
+	haystack[] - The string to find it in.
+	start - The offset to start from.
+Return:
+	Fail - -1, Success - pos
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock chrfind(needle, haystack[], start = 0)
+{
+	if (start < 0)
+	{
+		start = 0;
+	}
+	while (haystack[start]) if (haystack[start++] == needle) return start - 1;
+	return -1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	bernstein
+Params:
+	string[] - the string to hash.
+Return:
+	the bernstein hash of the input string
+Notes:
+	This is a 32bit hash system so is not very secure, however we're only
+	using this as a string enumerator to uniquely identify strings easilly
+	and allow for a binary search of strings based on the hash of their name.
+	crc32, then jenkins were originally used however this is far faster, if a
+	little collision prone, but we're checking the strings manually anyway.
+	This doesn't matter as it would be done regardless of hash method, so this
+	doesn't need to be accounted for.  Speed is all that matters with at 
+	least a bit of non collision (the number of strings we're dealing with,
+	this should have none-few collisions).
+	
+	I modified it slightly from the original code pasted by aru, to code
+	closer to the code http://www.burtleburtle.net/bob/hash/doobs.html and
+	to work with PAWN (and shaved 0.2µs off the time for one call :D).
+	
+	Uber reduced version (just for fun):
+	b(s[]){new h=-1,i,j;while((j=s[i++]))h=h*33+j;return h;}
+	
+	Update: Contrary to what I said above this is also used to identify colour
+	strings for the updated text system involving file based styling and this
+	is not checked for collisions as it's unimportant.  But this doesn't affect
+	the function at all, I just mentioned it here for "interest".
+-*----------------------------------------------------------------------------*/
+
+stock bernstein(string[])
+{
+	new
+		hash = -1,
+		i,
+		j;
+	while ((j = string[i++]))
+	{
+		hash = hash * 33 + j;
+	}
+	return hash;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	ishex
+Params:
+	str[] - String to check.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock ishex(str[])
+{
+	new
+		i,
+		cur;
+	if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) i = 2;
+	while (str[i])
+	{
+		cur = str[i++];
+		if (!(('0' <= cur <= '9') || ('A' <= cur <= 'F') || ('a' <= cur <= 'f'))) return 0;
+		//if ((cur < '0') || ('9' < cur < 'A') || ('F' < cur < 'a') || (cur > 'f')) return 0;
+	}
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	isnumeric
+Params:
+	str[] - String to check
+Return:
+	-
+Notes:
+	Checks if a given string is numeric.
+-*----------------------------------------------------------------------------*/
+
+stock isnumeric(str[])
+{
+	new
+		ch,
+		i;
+	while ((ch = str[i++])) if (!('0' <= ch <= '9')) return 0;
+	return 1;
+}
+
+#if !defined _inc_sscanf || 1
+	/*------------------------------------------------------------------------*-
+	Function:
+		hexstr
+	Params:
+		string[] - String to convert to a number.
+	Return:
+		value of the passed hex string.
+	Notes:
+		-
+	-*------------------------------------------------------------------------*/
+	
+	stock hexstr(string[])
+	{
+		new
+			ret,
+			val,
+			i;
+		if (string[0] == '0' && (string[1] == 'x' || string[1] == 'X')) i = 2;
+		while (string[i])
+		{
+			ret <<= 4;
+			val = string[i++] - '0';
+			if (val > 0x09) val -= 0x07;
+			if (val > 0x0F) val -= 0x20;
+			if (val < 0x01) continue;
+			if (val < 0x10) ret += val;
+		}
+		return ret;
+	}
+	
+	/*------------------------------------------------------------------------*-
+	Function:
+		boolstr
+	Params:
+		string[] - String to try convert to a boolean.
+	Return:
+		bool: passed boolean.
+	Notes:
+		This can take a number of ways of representing booleans - 0, false and
+		nothing there.  Anything not one of those things (false is not case
+		sensitive) is assumed true.
+	-*------------------------------------------------------------------------*/
+	
+	stock bool:boolstr(string[])
+	{
+		if (!string[0] || string[0] == '0' || !strcmp(string, "false", true)) return false;
+		return true;
+	}
+	
+	/*------------------------------------------------------------------------*-
+	Function:
+		binstr
+	Params:
+		string[] - String to try convert to a boolean.
+	Return:
+		bool: passed boolean.
+	Notes:
+		This takes a value in 0110101 (boolean) format and returns it as a
+		regular value.
+	-*------------------------------------------------------------------------*/
+	
+	stock binstr(string[])
+	{
+		new
+			pos = 0;
+		switch (string[0])
+		{
+			case '0':
+			{
+				if (string[1] == 'b' || string[1] == 'B')
+				{
+					pos = 2;
+				}
+			}
+			case '1':
+			{
+			}
+			default:
+			{
+				return 0;
+			}
+		}
+		new
+			value = 0;
+		for ( ; ; )
+		{
+			switch (string[pos++])
+			{
+				case '0':
+				{
+					value <<= 1;
+				}
+				case '1':
+				{
+					value = (value << 1) | 1;
+				}
+				default:
+				{
+					break;
+				}
+			}
+		}
+		return value;
+	}
+#endif

+ 893 - 0
filterscripts/CountDown_FilterScript-master/include/YSI/y_xml.inc

@@ -0,0 +1,893 @@
+/*----------------------------------------------------------------------------*-
+					=============================
+					 y_xml - XML file functions!
+					=============================
+Description:
+	Parses XML files according to a set of defined rules.  A rule is a custom
+	function called on a tag when all the data for that tag has been collected.
+	The data for a tag could consist of simple bla="bla" pairs, <tag>data</tag>
+	pairs or cominations of the two, including subtags, each with their own
+	possible custom handlers.
+	
+	Data for the tag is retrieved from a custom function using only:
+	
+	while (XML_GetKeyValue(ident, data)) {}
+Legal:
+	Version: MPL 1.1
+	
+	The contents of this file are subject to the Mozilla Public License Version 
+	1.1 (the "License"); you may not use this file except in compliance with 
+	the License. You may obtain a copy of the License at 
+	http://www.mozilla.org/MPL/
+	
+	Software distributed under the License is distributed on an "AS IS" basis,
+	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+	for the specific language governing rights and limitations under the
+	License.
+	
+	The Original Code is the SA:MP script information include.
+	
+	The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+	Portions created by the Initial Developer are Copyright (C) 2008
+	the Initial Developer. All Rights Reserved.
+	
+	Contributors:
+		ZeeX, koolk
+	
+	Thanks:
+		Peter, Cam - Support.
+		ZeeX - Very productive conversations.
+		koolk - IsPlayerinAreaEx code.
+		TheAlpha - Danish translation.
+		breadfish - German translation.
+		Fireburn - Dutch translation.
+		yom - French translation.
+		50p - Polish translation.
+		Zamaroht - Spanish translation.
+		Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+			for me to strive to better.
+		Pixels^ - Running XScripters where the idea was born.
+		Matite - Pestering me to release it and using it.
+	
+	Very special thanks to:
+		Thiadmer - PAWN.
+		Kye/Kalcor - SA:MP.
+		SA:MP Team past, present and future - SA:MP.
+Version:
+	1.0
+Changelog:
+	06/08/10:
+		First version
+-*----------------------------------------------------------------------------*/
+
+#include <YSI\internal\y_version>
+
+#include <a_samp>
+
+#include <YSI\y_debug>
+#include <YSI\y_utils>
+
+#if !defined MAX_XML_FILES
+	#define MAX_XML_FILES               (5)
+#endif
+
+#define XML_MAX_XML_FILES               (XML:MAX_XML_FILES)
+
+#define NO_XML_FILE                     (XML:-1)
+
+#define MAX_XML_ENTRY_NAME              (32)
+#define MAX_XML_ENTRY_TEXT              (80)
+#define MAX_XML_FUNCTION                (32)
+
+#define XML_BUFFER_SIZE                 (64)
+
+#define MAX_XML_HANDLERS                (16)
+
+#define XML_WRITE_BUFFER_SIZE           (170)
+
+#if !defined MAX_STRING
+	#define MAX_STRING                  (512)
+#endif
+
+enum E_XML_PARA
+{
+	E_XML_PARA_NAME[MAX_XML_ENTRY_NAME],
+	E_XML_PARA_VALUE[MAX_XML_ENTRY_TEXT],
+	E_XML_PARA_LEVEL
+}
+
+enum E_XML_HANDLER
+{
+	E_XML_HANDLER_TRIGGER[MAX_XML_ENTRY_NAME],
+	E_XML_HANDLER_FUNCTION[MAX_XML_FUNCTION]
+}
+
+enum E_XML_WRITE
+{
+	E_XML_WRITE_TAG[MAX_XML_ENTRY_NAME],
+	E_XML_WRITE_VALUE[MAX_XML_ENTRY_TEXT],
+	E_XML_WRITE_CHILDREN,
+	E_XML_WRITE_SIBLINGS
+}
+
+static stock
+	YSI_g_sXMLWriteBuffer[XML_WRITE_BUFFER_SIZE][E_XML_WRITE],
+	YSI_g_sXMLWritePointer,
+	YSI_g_sParameters[XML_BUFFER_SIZE][E_XML_PARA],
+	YSI_g_sHandlers[XML_MAX_XML_FILES][MAX_XML_HANDLERS][E_XML_HANDLER],
+	YSI_g_sCurHandler[XML_MAX_XML_FILES] = {-1, ...},
+	YSI_g_sCurBuffer = -1,
+	YSI_g_sEndTag = 0;
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_IsValid
+Params:
+	XML:file - File to check validity of.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define XML_IsValid(%1) \
+	((%1) >= XML:0 && (%1) < XML_MAX_XML_FILES && YSI_g_sCurHandler[(%1)] != -1)
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_IsChar
+Params:
+	char - Checks if a cell is a valid identifier character.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+#define XML_IsChar(%1) \
+	(((%1) >= 'a' && (%1) <= 'z') || ((%1) >= 'A' && (%1) <= 'Z') || ((%1) >= '0' && (%1) <= '9') || (%1 == '_'))
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_New
+Params:
+	-
+Return:
+	XML
+Notes:
+	Creates a new set of rules for parsing XML files.
+-*----------------------------------------------------------------------------*/
+
+stock XML:XML_New()
+{
+	new
+		XML:i;
+	while (i < XML_MAX_XML_FILES && YSI_g_sCurHandler[i] != -1) i++;
+	if (i == XML_MAX_XML_FILES) return NO_XML_FILE;
+	YSI_g_sCurHandler[i] = 0;
+	YSI_g_sCurBuffer = 0;
+	return i;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_Destroy
+Params:
+	XML:rule - Removes a set of rules from the system
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock XML_Destroy(XML:rule)
+{
+	if (!XML_IsValid(rule)) return 0;
+	YSI_g_sCurBuffer = -1;
+	YSI_g_sCurHandler[rule] = -1;
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_Parse
+Params:
+	XML:rule - Set of XML rules to parse against.
+	filename[] - XML file to parse.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock XML_Parse(XML:rule, filename[])
+{
+	if (!XML_IsValid(rule)) return 0;
+	new
+		File:xFile = fopen(filename);
+	if (xFile)
+	{
+		new
+			line[MAX_STRING],
+			tagCount,
+			gotLastValue,
+			inClose,
+			inOpen,
+			value[MAX_XML_ENTRY_TEXT],
+			name[MAX_XML_ENTRY_NAME],
+			inPar;
+		while (fread(xFile, line))
+		{
+			P:5("XML_Parse() line: %s", line);
+			new
+				pos,
+				ch;
+			while ((ch = line[pos]) && ch <= ' ') pos++;
+			while (ch)
+			{
+				if (ch <= ' ') pos++;
+				else if (ch == '<')
+				{
+					if (line[++pos] == '/')
+					{
+						pos++;
+						tagCount--;
+						if (gotLastValue)
+						{
+							XML_Push(XML_GetName(line, pos), value, tagCount);
+						}
+						else
+						{
+							name = XML_GetName(line, pos);
+							value = XML_ParseTag(rule, name, tagCount);
+							if (value[0] && tagCount > 1)
+							{
+								XML_Push(name, value, tagCount);
+							}
+						}
+						inClose = 1;
+					}
+					else
+					{
+						inOpen = 1;
+						tagCount++;
+						while ((ch = line[pos]) && XML_IsChar(ch)) pos++;
+					}
+					gotLastValue = 0;
+					inPar = 0;
+				}
+				else if (ch == '>')
+				{
+					inPar = inClose ? 0 : 1;
+					inOpen = 0;
+					inClose = 0;
+					pos++;
+				}
+				else if (inPar)
+				{
+					value = XML_GetValue(line, pos);
+					gotLastValue = 1;
+				}
+				else if (inOpen)
+				{
+					name = XML_GetName(line, pos);
+					value = XML_GetParameter(line, pos);
+					XML_Push(name, value, tagCount);
+				}
+				else pos++;
+				ch = line[pos];
+			}
+		}
+		fclose(xFile);
+		return 1;
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_Push
+Params:
+	name[] - Identifer of data.
+	text[] - Data.
+	depth - Current XML tree depth.
+Return:
+	-
+Notes:
+	Pushes an identifier and it's value (either explicitaly stated or returned
+	from another function) to the stack with basic parent info.
+-*----------------------------------------------------------------------------*/
+
+stock XML_Push(name[], text[], depth)
+{
+	if (YSI_g_sCurBuffer < XML_BUFFER_SIZE && YSI_g_sCurBuffer >= 0)
+	{
+		strcpy(YSI_g_sParameters[YSI_g_sCurBuffer][E_XML_PARA_NAME], name, MAX_XML_ENTRY_NAME);
+		strcpy(YSI_g_sParameters[YSI_g_sCurBuffer][E_XML_PARA_VALUE], text, MAX_XML_ENTRY_TEXT);
+		YSI_g_sParameters[YSI_g_sCurBuffer][E_XML_PARA_LEVEL] = depth;
+		YSI_g_sCurBuffer++;
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_GetParameter
+Params:
+	line[] - Data to extract from.
+	&pos - Start/end point of the text.
+Return:
+	-
+Notes:
+	Gets the data from inside ""s in an identifier.  Now supports
+	\ for escape characters.
+-*----------------------------------------------------------------------------*/
+
+stock XML_GetParameter(line[], &pos)
+{
+	new
+		ch,
+		ret[MAX_XML_ENTRY_TEXT],
+		i;
+	while ((ch = line[pos++]) && ch != '"') {}
+	if (ch)
+	{
+		while ((ch = line[pos++]) && i < (sizeof (ret) - 1))
+		{
+			if (ch == '\\')
+			{
+				switch (line[pos++])
+				{
+					case '"':
+					{
+						ch = '"';
+					}
+					case 'n':
+					{
+						ch = '\n';
+					}
+					case 'r':
+					{
+						ch = '\r';
+					}
+					case '\\': {}
+					default:
+					{
+						pos--;
+						continue;
+					}
+				}
+			}
+			else if (ch == '"')
+			{
+				break;
+			}
+			ret[i++] = ch;
+		}
+	}
+	if (i == (sizeof (ret) - 1))
+	{
+		while ((ch = line[pos++]))
+		{
+			if (ch == '\\')
+			{
+				switch (line[pos++])
+				{
+					case '\\', '"', 'n', 'r': {}
+					default:
+					{
+						pos--;
+					}
+				}
+			}
+			else if (ch == '"') break;
+		}
+	}
+	ret[i] = '\0';
+	return ret;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_GetValue
+Params:
+	line[] - Line to get data from.
+	&pos - Start and end position of the data.
+Return:
+	-
+Notes:
+	Gets the text between tags.
+-*----------------------------------------------------------------------------*/
+
+stock XML_GetValue(line[], &pos)
+{
+	new
+		ch,
+		ret[MAX_XML_ENTRY_TEXT],
+		i;
+	while (((ch = line[pos++]) >= ' ' || ch == '\t') && (ch != '<') && i < (sizeof (ret) - 1)) ret[i++] = ch;
+	pos--;
+	if (i == (sizeof (ret) - 1))
+	{
+		while (((ch = line[pos]) >= ' ' || ch == '\t') && (ch != '<')) pos++;
+	}
+	ret[i] = '\0';
+	return ret;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_GetName
+Params:
+	line[] - Line to get data from.
+	&pos - Start and end position of text.
+Return:
+	-
+Notes:
+	Gets the identifier of a piece of data.
+-*----------------------------------------------------------------------------*/
+
+stock XML_GetName(line[], &pos)
+{
+	new
+		ch,
+		ret[MAX_XML_ENTRY_NAME],
+		i;
+	while ((ch = line[pos++]) && XML_IsChar(ch) && i < (sizeof (ret) - 1)) ret[i++] = ch;
+	pos--;
+	if (i == (sizeof (ret) - 1))
+	{
+		while ((ch = line[pos]) >= ' ' && XML_IsChar(ch)) pos++;
+	}
+	ret[i] = '\0';
+	return ret;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_ParseTag
+Params:
+	XML:rule - Rule set to parse according to.
+	name[] - Name if identifier.
+	tagCount - New tree depth.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock XML_ParseTag(XML:rule, name[], tagCount)
+{
+	new
+		i,
+		j = YSI_g_sCurHandler[rule],
+		ret[MAX_XML_ENTRY_TEXT] = "\1";
+	YSI_g_sEndTag = tagCount;
+	while (i < j)
+	{
+		if (!strcmp(YSI_g_sHandlers[rule][i][E_XML_HANDLER_TRIGGER], name, true))
+		{
+			break;
+		}
+		i++;
+	}
+	if (i != j)
+	{
+		//format(ret, sizeof (ret), "%d", CallLocalFunction(YSI_g_sHandlers[rule][i][E_XML_HANDLER_FUNCTION], ""));
+		valstr(ret, CallLocalFunction(YSI_g_sHandlers[rule][i][E_XML_HANDLER_FUNCTION], ""));
+	}
+	while (YSI_g_sCurBuffer)
+	{
+		if (YSI_g_sParameters[--YSI_g_sCurBuffer][E_XML_PARA_LEVEL] <= tagCount) break;
+	}
+	return ret;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_GetKeyValue
+Params:
+	key[] - Variable to return identifier in.
+	value[] - Variable to return value in.
+Return:
+	Data found.
+Notes:
+	Pops items off the stack for use in custom functions.
+-*----------------------------------------------------------------------------*/
+
+stock XML_GetKeyValue(key[], value[])
+{
+	key[0] = 1;
+	key[1] = 0;
+	value[0] = 1;
+	value[1] = 0;
+	if (YSI_g_sCurBuffer)
+	{
+		YSI_g_sCurBuffer--;
+		if (YSI_g_sParameters[YSI_g_sCurBuffer][E_XML_PARA_LEVEL] <= YSI_g_sEndTag) return 0;
+		strcpy(key, YSI_g_sParameters[YSI_g_sCurBuffer][E_XML_PARA_NAME], MAX_XML_ENTRY_NAME);
+		strcpy(value, YSI_g_sParameters[YSI_g_sCurBuffer][E_XML_PARA_VALUE], MAX_XML_ENTRY_TEXT);
+		return 1;
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_AddHandler
+Params:
+	XML:ruls - Rule set to add data to.
+	trigger[] - Identifier which calls it.
+	function[] - Function to parse identifier in.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock XML_AddHandler(XML:rule, trigger[], function[])
+{
+	new
+		handle;
+	if (!XML_IsValid(rule) || (handle = YSI_g_sCurHandler[rule]) >= MAX_XML_HANDLERS && handle >= 0) return 0;
+	strcpy(YSI_g_sHandlers[rule][handle][E_XML_HANDLER_TRIGGER], trigger, MAX_XML_ENTRY_NAME);
+	strcpy(YSI_g_sHandlers[rule][handle][E_XML_HANDLER_FUNCTION], function, MAX_XML_FUNCTION);
+	YSI_g_sCurHandler[rule]++;
+	return 1;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_RemoveHandler
+Params:
+	XML:rule - Set to remove handler from.
+	trigger[] - Handler name to remove.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+stock XML_RemoveHandler(XML:rule, trigger[])
+{
+	if (XML_IsValid(rule))
+	{
+		for (new i = 0, j = YSI_g_sCurHandler[rule]; i < j; i++)
+		{
+			if (!strcmp(YSI_g_sHandlers[rule][i][E_XML_HANDLER_TRIGGER], trigger, true))
+			{
+				new
+					last = --YSI_g_sCurHandler[rule];
+				if (last)
+				{
+					strcpy(YSI_g_sHandlers[rule][i][E_XML_HANDLER_TRIGGER], YSI_g_sHandlers[rule][last][E_XML_HANDLER_TRIGGER], MAX_XML_ENTRY_NAME);
+					strcpy(YSI_g_sHandlers[rule][i][E_XML_HANDLER_FUNCTION], YSI_g_sHandlers[rule][last][E_XML_HANDLER_FUNCTION], MAX_XML_FUNCTION);
+				}
+				return 1;
+			}
+		}
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_AddParameter
+Params:
+	parent - Tag this is a parameter of.
+	tag[] - Name of this data.
+	value[] - Value of this data, if this is blank there is sub parameters.
+Return:
+	-
+Notes:
+	-
+-*----------------------------------------------------------------------------*/
+
+//#define XML_AddSubEntry XML_AddParameter
+stock XMLEntry:XML_AddParameter(XMLEntry:parent, tag[], value[] = "")
+{
+	if (_:parent < YSI_g_sXMLWritePointer < XML_WRITE_BUFFER_SIZE)
+	{
+		strcpy(YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_TAG], tag, MAX_XML_ENTRY_NAME);
+		strcpy(YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_VALUE], value, MAX_XML_ENTRY_TEXT);
+		YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_CHILDREN] = -1;
+		YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_SIBLINGS] = YSI_g_sXMLWriteBuffer[_:parent][E_XML_WRITE_CHILDREN];
+		YSI_g_sXMLWriteBuffer[_:parent][E_XML_WRITE_CHILDREN] = YSI_g_sXMLWritePointer;
+		return XMLEntry:YSI_g_sXMLWritePointer++;
+	}
+	return XMLEntry:cellmax;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_AddItem
+Params:
+	tag[] - Type of data being added.
+	name[] - The optional name parameter for identifying tags.
+Return:
+	-
+Notes:
+	Starts the creation of a new tag to be written to a file, the structure
+	has to be manually created then written.  There is no buffering of multiple
+	tags before writing as a single tag can have quite a bit of data.
+-*----------------------------------------------------------------------------*/
+
+#define XML_CreateEntry XML_AddItem
+#define XML_AddSubEntry XML_AddItem
+stock XMLEntry:XML_AddItem(tag[], name[] = "", XMLEntry:parent = XMLEntry:cellmax)
+{
+	if (_:parent != cellmax)
+	{
+		return XML_AddParameter(parent, tag, name);
+	}
+	if (YSI_g_sXMLWritePointer < XML_WRITE_BUFFER_SIZE)
+	{
+		strcpy(YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_TAG], tag, MAX_XML_ENTRY_NAME);
+		strcpy(YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_VALUE], name, MAX_XML_ENTRY_TEXT);
+		YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_CHILDREN] = -1;
+		YSI_g_sXMLWriteBuffer[YSI_g_sXMLWritePointer][E_XML_WRITE_SIBLINGS] = -1;
+		return XMLEntry:YSI_g_sXMLWritePointer++;
+	}
+	return XMLEntry:cellmax;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_WriteItem
+Params:
+	filename[] - File to write to.
+	item - Handle to the tag to write.
+Return:
+	-
+Notes:
+	Writea the data for a tag to a file.
+-*----------------------------------------------------------------------------*/
+
+#define XML_WriteEntry XML_WriteItem
+stock XML_WriteItem(filename[], XMLEntry:item)
+{
+	if (_:item < YSI_g_sXMLWritePointer)
+	{
+		new
+			data;
+		if (fexist(filename))
+		{
+			new
+				File:fHnd = fopen(filename, io_read),
+				File:fTemp = ftemp();//fopen("_temp_ysi_user_file_.ysi", io_write);
+			if (fHnd && fTemp)
+			{
+				new
+					str[MAX_STRING];
+				while (fread(fHnd, str))
+				{
+					fwrite(fTemp, str);
+					if (!data)
+					{
+						new
+							i,
+							ch;
+						while ((ch = str[i++]) && ch <= ' ') {}
+						if (ch == '<')
+						{
+							XML_WriteItemData(_:item, fTemp, 2);
+							data = 1;
+						}
+					}
+				}
+				fclose(fHnd);
+				//fclose(fTemp);
+				fremove(filename);
+				if (data)
+				{
+					fHnd = fopen(filename, io_write);
+					fseek(fTemp);
+					//fTemp = fopen("_temp_ysi_user_file_.ysi", io_read);
+					if (fHnd)// && fTemp)
+					{
+						while (fread(fTemp, str)) fwrite(fHnd, str);
+						fclose(fHnd);
+						fclose(fTemp);
+						//fremove("_temp_ysi_user_file_.ysi");
+						YSI_g_sXMLWritePointer = _:item;
+						return 1;
+					}
+				}
+			}
+			if (fHnd)
+			{
+				fclose(fHnd);
+			}
+			if (fTemp)
+			{
+				fclose(fTemp);
+				//fremove("_temp_ysi_user_file_.ysi");
+			}
+		}
+		if (!data)
+		{
+			new
+				File:fHnd = fopen(filename, io_write);
+			if (fHnd)
+			{
+				fwrite(fHnd, "<XML>\r\n");
+				XML_WriteItemData(_:item, fHnd, 2);
+				fwrite(fHnd, "</XML>");
+				fclose(fHnd);
+				YSI_g_sXMLWritePointer = _:item;
+				return 1;
+			}
+		}
+	}
+	return 0;
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_WriteItemData
+Params:
+	item - Item to write data for.
+	File:fHnd - File to write to.
+	depth - Current indentation.
+Return:
+	-
+Notes:
+	Recursive function to write a tag and it's children to a file.
+-*----------------------------------------------------------------------------*/
+
+static stock XML_WriteItemData(item, File:fHnd, depth)
+{
+	new
+		str[MAX_STRING],
+		i = YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_CHILDREN];
+	if (i == -1)
+	{
+		format(str, sizeof (str), "%*s<%s>%s</%s>\n", depth, "", YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_TAG], YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_VALUE], YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_TAG]);
+		fwrite(fHnd, str);
+	}
+	else
+	{
+		if (YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_VALUE][0]) format(str, sizeof (str), "%*s<%s name=\"%s\">\n", depth, "", YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_TAG], YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_VALUE]);
+		else format(str, sizeof (str), "%*s<%s>\n", depth, "", YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_TAG]);
+		fwrite(fHnd, str);
+		depth += 2;
+		while (i != -1)
+		{
+			XML_WriteItemData(i, fHnd, depth);
+			i = YSI_g_sXMLWriteBuffer[i][E_XML_WRITE_SIBLINGS];
+		}
+		depth -= 2;
+		format(str, sizeof (str), "%*s</%s>\n", depth, "", YSI_g_sXMLWriteBuffer[item][E_XML_WRITE_TAG]);
+		fwrite(fHnd, str);
+	}
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_RemoveItem
+Params:
+	file[] - File to remove the tag from.
+	tag[] - Type of tag to remove.
+	name[] - Name of the tag to remove.
+Return:
+	-
+Notes:
+	Does a replace on data in a file with no new data.
+-*----------------------------------------------------------------------------*/
+
+stock XML_RemoveItem(file[], tag[], name[])
+{
+	return XML_ReplaceItem(file, tag, name, -1);
+}
+
+/*----------------------------------------------------------------------------*-
+Function:
+	XML_ReplaceItem
+Params:
+	file[] - File to replace an item in.
+	tag[] - Tag type of data to replace.
+	name[] - Name of data to replace.
+	replacement - Handle to the replacement data.
+Return:
+	-
+Notes:
+	Replaces a tag's data with new data, basically changes a tag's value.
+-*----------------------------------------------------------------------------*/
+
+stock XML_ReplaceItem(file[], tag[], name[], replacement)
+{
+	if (fexist(file))
+	{
+		new
+			File:fHnd = fopen(file, io_read),
+			File:fTemp = ftemp();//fopen("_temp_ysi_user_file_.ysi", io_write);
+		if (fHnd && fTemp)
+		{
+			new
+				tagCount,
+				line[MAX_STRING],
+				inTag,
+				atStart;
+			while (fread(fHnd, line))
+			{
+				new
+					pos,
+					ch;
+				while ((ch = line[pos]) && ch <= ' ') pos++;
+				while (ch)
+				{
+					if (ch <= ' ') pos++;
+					else if (ch == '<')
+					{
+						if (line[++pos] == '/')
+						{
+							pos++;
+							tagCount--;
+							if (inTag && tagCount <= atStart) inTag = 3;
+						}
+						else
+						{
+							tagCount++;
+							if (!inTag)
+							{
+								if (!strcmp(XML_GetName(line, pos), tag)) inTag = 1;
+							}
+							else while ((ch = line[pos]) && XML_IsChar(ch)) pos++;
+						}
+					}
+					else if (ch == '>')
+					{
+						if (inTag == 1) inTag = 0;
+						pos++;
+					}
+					else if (inTag == 1)
+					{
+						if (!strcmp(XML_GetName(line, pos), "name"))
+						{
+							if (!(strcmp(XML_GetParameter(line, pos), name)))
+							{
+								inTag = 2;
+								atStart = tagCount - 1;
+								if (replacement != -1)
+								{
+									if (replacement >= YSI_g_sXMLWritePointer) replacement = -1;
+									else XML_WriteItemData(replacement, fTemp, (tagCount - 1) * 2);
+								}
+							}
+						}
+						else XML_GetParameter(line, pos);
+					}
+					else pos++;
+					ch = line[pos];
+				}
+				if (!inTag) fwrite(fTemp, line);
+				if (inTag == 3) inTag = 0;
+			}
+			fclose(fHnd);
+			//fclose(fTemp);
+			fremove(file);
+			fHnd = fopen(file, io_write);
+			//fTemp = fopen("_temp_ysi_user_file_.ysi", io_read);
+			fseek(fTemp);
+			if (fHnd && fTemp)
+			{
+				while (fread(fTemp, line)) fwrite(fHnd, line);
+				fclose(fHnd);
+				fclose(fTemp);
+				//fremove("_temp_ysi_user_file_.ysi");
+				if (replacement != -1) YSI_g_sXMLWritePointer = replacement;
+				return 1;
+			}
+		}
+		if (fHnd)
+		{
+			fclose(fHnd);
+		}
+		if (fTemp)
+		{
+			fclose(fTemp);
+			//fremove("_temp_ysi_user_file_.ysi");
+		}
+		return 0;
+	}
+	return 1;
+}

BIN
filterscripts/ann.amx


+ 91 - 0
filterscripts/dizzy.pwn

@@ -0,0 +1,91 @@
+#include <a_samp>
+#define SSCANF_NO_NICE_FEATURES // comment this line if ur using community pro compiler
+#include <zcmd>
+#include <sscanf2>
+
+new Text:annoucegreen;
+new Text:annoucetext;
+new ServerIsAnnoucing;
+
+public OnFilterScriptInit()
+{
+    print("\n");
+    print("  |---------------------------------------------------");
+    print("  |--- Mudoo Annoucement Filterscript");
+    print("  |--        |-realdiegopoptart-|");
+    print("  |---     ''Dizzy can you unban me?''");
+    print("  |---------------------------------------------------");
+
+    annoucegreen = TextDrawCreate(320.000000, 429.000000, "~w~");
+    TextDrawFont(annoucegreen, 1);
+    TextDrawLetterSize(annoucegreen, 0.350000, 2.150000);
+    TextDrawTextSize(annoucegreen, 414.500000, 659.500000);
+    TextDrawSetOutline(annoucegreen, 0);
+    TextDrawSetShadow(annoucegreen, 0);
+    TextDrawAlignment(annoucegreen, 2);
+    TextDrawColor(annoucegreen, -1);
+    TextDrawBackgroundColor(annoucegreen, 255);
+    TextDrawBoxColor(annoucegreen, 9109542);
+    TextDrawUseBox(annoucegreen, 1);
+    TextDrawSetProportional(annoucegreen, 1);
+    TextDrawSetSelectable(annoucegreen, 0);
+
+    annoucetext = TextDrawCreate(320.000000, 432.000000, "Governor Canidate ~r~Diego Starm~w~ holds a speech inside LSCH");
+    TextDrawFont(annoucetext, 1);
+    TextDrawLetterSize(annoucetext, 0.200000, 1.200000);
+    TextDrawTextSize(annoucetext, 663.500000, 639.500000);
+    TextDrawSetOutline(annoucetext, 1);
+    TextDrawSetShadow(annoucetext, 0);
+    TextDrawAlignment(annoucetext, 2);
+    TextDrawColor(annoucetext, -1);
+    TextDrawBackgroundColor(annoucetext, 255);
+    TextDrawBoxColor(annoucetext, 50);
+    TextDrawUseBox(annoucetext, 0);
+    TextDrawSetProportional(annoucetext, 1);
+    TextDrawSetSelectable(annoucetext, 0);
+	return 1;
+}
+
+public OnPlayerSpawn(playerid)
+{
+	if(ServerIsAnnoucing == 1)
+	{
+		TextDrawShowForPlayer(playerid, annoucegreen);
+		TextDrawShowForPlayer(playerid, annoucetext);
+		return 1;
+	}
+	return 1;
+}
+
+CMD:annouce(playerid, params[])
+{
+    if(!IsPlayerAdmin(playerid))
+    return SendClientMessage(playerid, -1, "{FF8282}You must be logged in to Rcon");
+
+    if(isnull(params))
+    {
+        return SendClientMessage(playerid, -1, "{FF8282}/annouce [message]");
+    }
+
+    new astring[322];
+    format(astring, sizeof(astring), "%s", params);
+    TextDrawSetString(annoucetext, astring);
+
+    //
+    TextDrawShowForAll(annoucegreen);
+	TextDrawShowForAll(annoucetext);
+    return 1;
+}
+
+CMD:unannouce(playerid, params[])
+{
+	if(!IsPlayerAdmin(playerid))
+	return SendClientMessage(playerid, -1, "{FF8282}You must be logged in to Rcon");
+
+    TextDrawHideForAll(annoucegreen);
+    TextDrawHideForAll(annoucetext);
+    SendClientMessage(playerid, -1, "{FF8282}You removed the annoucement");
+    ServerIsAnnoucing = 0;
+
+    return 1;
+}

BIN
filterscripts/donator.amx


BIN
filterscripts/donorMaps.amx


BIN
filterscripts/helmet.amx


BIN
filterscripts/hmainterior.amx


BIN
filterscripts/kebab.amx


BIN
filterscripts/music.amx


BIN
filterscripts/objects.amx


BIN
filterscripts/rp_bk.amx


+ 198 - 0
filterscripts/rp_bk.pwn

@@ -0,0 +1,198 @@
+// This is a comment
+// uncomment the line below if you want to write a filterscript
+//#define FILTERSCRIPT
+
+#include <a_samp>
+#define COLOR_RED 0xFF0000FF
+new entrance;
+new ext;
+new water1;
+new water2;
+new water3;
+new water4;
+new gate1;
+new gate2;
+new gate3;
+new IsInWash[ MAX_PLAYERS ];
+
+public OnFilterScriptInit()
+{
+	// gates
+	ext = CreateObject(2885,2446.50000000,-1460.59997559,29.70000076,0.00000000,0.00000000,270.00000000); //gatelaatste
+	entrance = CreateObject(2885,2499.50000000,-1460.00000000,29.70000076,0.00000000,0.00000000,89.99450684); //gateeerste
+	gate3 = CreateObject(968,2539.89990234,-1475.59997559,24.39999962,0.00000000,270.00000000,269.99975586); //oranje3open
+	gate2 = CreateObject(968,2540.10009766,-1459.30004883,24.39999962,0.00000000,90.00000000,269.99636841); //oranje2open
+	gate1 = CreateObject(968,2523.39990234,-1493.50000000,23.89999962,0.00000000,270.00000000,0.00000000); //oranje1open
+	// objects
+	CreateObject(16003,2502.39990234,-1465.59997559,23.89999962,0.00000000,0.00000000,0.00000000); //object(drvin_ticket) (1)
+	CreateObject(8843,2483.10009766,-1460.90002441,23.10000038,0.00000000,0.00000000,88.00000000); //object(arrows01_lvs) (1)
+	CreateObject(8041,2540.39990234,-1467.50000000,28.79999924,0.00000000,0.00000000,0.00000000); //object(apbarriergate06_lvs) (1)
+	CreateObject(7073,2516.50000000,-1474.00000000,41.29999924,0.00000000,0.00000000,0.00000000); //object(vegascowboy1) (1)
+	CreateObject(18285,2517.80004883,-1461.69995117,23.10000038,0.00000000,0.00000000,10.00000000); //object(cw_trucklines) (1)
+	CreateObject(966,2523.50000000,-1493.50000000,23.00000000,0.00000000,0.00000000,0.00000000); //object(bar_gatebar01) (1)
+	CreateObject(8843,2520.10009766,-1484.50000000,23.00000000,0.00000000,0.00000000,0.00000000); //object(arrows01_lvs) (2)
+	CreateObject(4100,2472.60009766,-1465.19995117,29.29999924,0.00000000,0.00000000,320.00000000); //object(meshfence1_lan) (1)
+	CreateObject(4100,2474.39990234,-1454.59997559,29.29999924,0.00000000,0.00000000,319.99877930); //object(meshfence1_lan) (2)
+	CreateObject(7311,2461.50000000,-1460.90002441,25.20000076,0.00000000,0.00000000,0.00000000); //object(vgsn_carwash) (1)
+	CreateObject(972,2473.60009766,-1465.59997559,26.29999924,4.99996948,270.00000000,272.00000000); //object(tunnelentrance) (1)
+	CreateObject(972,2473.10009766,-1461.69995117,26.29999924,4.99877930,270.00000000,271.99951172); //object(tunnelentrance) (2)
+	CreateObject(1337,2504.89990234,-1464.59997559,23.70000076,0.00000000,0.00000000,182.00000000); //object(binnt07_la) (1)
+	CreateObject(1337,2542.39990234,-1467.80004883,23.70000076,0.00000000,0.00000000,85.99951172); //object(binnt07_la) (2)
+	CreateObject(1337,2542.39990234,-1467.00000000,23.70000076,0.00000000,0.00000000,85.99548340); //object(binnt07_la) (3)
+	CreateObject(1676,2525.39990234,-1459.19995117,24.50000000,0.00000000,0.00000000,270.00000000); //object(washgaspump) (1)
+	CreateObject(1676,2520.19995117,-1459.40002441,24.50000000,0.00000000,0.00000000,269.99951172); //object(washgaspump) (2)
+	CreateObject(1676,2530.19995117,-1459.40002441,24.50000000,0.00000000,0.00000000,269.99951172); //object(washgaspump) (3)
+	CreateObject(970,2537.19995117,-1467.40002441,23.60000038,0.00000000,0.00000000,0.00000000); //object(fencesmallb) (1)
+	CreateObject(970,2526.89990234,-1467.40002441,23.50000000,0.00000000,0.00000000,0.00000000); //object(fencesmallb) (2)
+	CreateObject(970,2533.09960938,-1467.39941406,23.50000000,0.00000000,0.00000000,0.00000000); //object(fencesmallb) (3)
+	CreateObject(970,2529.50000000,-1467.39941406,23.50000000,0.00000000,0.00000000,0.00000000); //object(fencesmallb) (4)
+	CreateObject(970,2518.19995117,-1465.80004883,23.50000000,0.00000000,0.00000000,308.00000000); //object(fencesmallb) (5)
+	CreateObject(970,2521.50000000,-1467.39941406,23.50000000,0.00000000,0.00000000,0.00000000); //object(fencesmallb) (6)
+	CreateObject(970,2516.69995117,-1463.90002441,23.50000000,0.00000000,0.00000000,307.99621582); //object(fencesmallb) (7)
+	CreateObject(970,2515.30004883,-1460.19995117,23.50000000,0.00000000,0.00000000,271.99621582); //object(fencesmallb) (8)
+	CreateObject(970,2515.19995117,-1456.50000000,23.50000000,0.00000000,0.00000000,271.99401855); //object(fencesmallb) (9)
+	CreateObject(970,2525.00000000,-1459.30004883,23.50000000,0.00000000,0.00000000,270.00000000); //object(fencesmallb) (10)
+	CreateObject(970,2519.69995117,-1459.50000000,23.50000000,0.00000000,0.00000000,269.99450684); //object(fencesmallb) (11)
+	CreateObject(970,2520.79980469,-1459.50000000,23.50000000,0.00000000,0.00000000,269.99450684); //object(fencesmallb) (12)
+	CreateObject(970,2529.80004883,-1459.19995117,23.50000000,0.00000000,0.00000000,269.99450684); //object(fencesmallb) (13)
+	CreateObject(970,2525.89941406,-1459.39941406,23.50000000,0.00000000,0.00000000,269.99450684); //object(fencesmallb) (14)
+	CreateObject(970,2530.80004883,-1459.19995117,23.50000000,0.00000000,0.00000000,269.99450684); //object(fencesmallb) (15)
+	CreateObject(970,2538.39990234,-1475.50000000,23.60000038,0.00000000,0.00000000,338.00000000); //object(fencesmallb) (16)
+	CreateObject(970,2530.80004883,-1472.90002441,23.50000000,0.00000000,0.00000000,349.99987793); //object(fencesmallb) (17)
+	CreateObject(970,2534.69921875,-1474.00000000,23.60000038,0.00000000,0.00000000,337.99987793); //object(fencesmallb) (18)
+	CreateObject(970,2526.80004883,-1472.50000000,23.50000000,0.00000000,0.00000000,359.99694824); //object(fencesmallb) (19)
+	CreateObject(970,2524.69995117,-1472.50000000,23.50000000,0.00000000,0.00000000,359.99450684); //object(fencesmallb) (20)
+	CreateObject(970,2522.60009766,-1474.50000000,23.50000000,0.00000000,0.00000000,89.99450684); //object(fencesmallb) (21)
+	CreateObject(970,2517.30004883,-1474.19995117,23.60000038,0.00000000,0.00000000,89.99450684); //object(fencesmallb) (22)
+	CreateObject(970,2515.69995117,-1470.90002441,23.60000038,0.00000000,0.00000000,141.99450684); //object(fencesmallb) (23)
+	CreateObject(970,2512.80004883,-1468.59997559,23.60000038,0.00000000,0.00000000,141.99276733); //object(fencesmallb) (24)
+	CreateObject(970,2509.30004883,-1466.50000000,23.60000038,0.00000000,0.00000000,155.99279785); //object(fencesmallb) (25)
+	CreateObject(970,2505.30004883,-1465.69995117,23.60000038,0.00000000,0.00000000,181.98937988); //object(fencesmallb) (26)
+	Create3DTextLabel("Type /washcar to wash your car!", 0x008080FF,2502.39990234,-1465.59997559,23.89999962,40.0,0);
+	return true;
+}
+public OnFilterScriptExit()
+{
+	return 1;
+}
+
+public OnPlayerConnect(playerid)
+{
+//	SendClientMessage(playerid, COLOR_RED, "This server uses the Lux CarWash system by [drifters]niels aka niels44");
+   	SetPlayerMapIcon(playerid, 18,2455.2258,-1461.0040,24.0000, 55, 0, MAPICON_LOCAL);
+	return 1;
+}
+public OnPlayerCommandText(playerid, cmdtext[])
+{
+	if( !strcmp( "/washcar", cmdtext, true, 8 ) )
+	{
+		if( !IsPlayerInAnyVehicle( playerid ) )
+  		return SendClientMessage( playerid, COLOR_RED, "ERROR: you are not in a Vehicle!" );
+    	if(IsPlayerInRangeOfPoint(playerid, 10.0, 2499.50000000,-1460.00000000,29.70000076))
+     	{
+		    GivePlayerMoney( playerid, -40 );
+
+		    SendClientMessage( playerid, COLOR_RED, "you have paid $40 to wash your car" );
+		    SendClientMessage( playerid, COLOR_RED, "now drive in the red marker to wash your car" );
+		    MoveObject( entrance, 2496.30004883,-1460.40002441,29.70000076, 1.0, 291.99462891,0.00000000,89.99450684 );
+		    SetTimer( "CloseEntrance", 5000, 0 );
+		    SetPlayerCheckpoint( playerid, 2455.2258, -1461.0040, 24.0000, 3.0 );
+	    	return 1;
+		}
+		else if(!IsPlayerInRangeOfPoint(playerid, 10.0, 2499.50000000,-1460.00000000,29.70000076)) return SendClientMessage(playerid, COLOR_RED, "ERROR: you are not at a CarWash!");
+	}
+	return 0;
+}
+forward CloseEntrance();
+public CloseEntrance()
+{
+    MoveObject( entrance, 2499.50000000, -1460.00000000, 29.70000076, 1.0, 0.00000000, 0.00000000, 89.99450684 );
+
+    return 1;
+}
+public OnPlayerEnterCheckpoint(playerid)
+{
+	water1 = CreateObject(2780,2459.69995117,-1457.30004883,23.10000038,0.00000000,0.00000000,0.00000000); //watersmoke
+	water2 = CreateObject(2780,2461.00000000,-1464.80004883,23.00000000,0.00000000,0.00000000,186.00000000); //watersmoke
+	water3 = CreateObject(2780,2452.50000000,-1464.00000000,23.00000000,0.00000000,0.00000000,185.99853516); //watersmoke
+	water4 = CreateObject(2780,2454.10009766,-1458.30004883,23.00000000,0.00000000,0.00000000,185.99853516); //watersmoke
+	SendClientMessage(playerid, COLOR_RED, "Please Wait while we wash your car...");
+	TogglePlayerControllable(playerid, 0);
+	SetPlayerCameraLookAt(playerid, 2445.7043,-1460.9468,24.0000);
+	SetPlayerCameraPos(playerid, 2471.6687,-1460.2609,24.0000);
+	IsInWash[ playerid ] = 1;
+	SetTimer("OpenExt", 7000, 0);
+	return 1;
+}
+
+forward OpenExt(playerid);
+public OpenExt(playerid)
+{
+	if(IsInWash[ playerid ] == 1)
+	{
+		MoveObject(ext, 2451.00000000,-1460.59997559,29.70000076, 1.0, 280.00000000,0.00000000,270.00000000);
+		SetTimer("CloseExt", 13000, 0);
+		SetPlayerPos(playerid, 2439.4900,-1460.9352,24.0000);
+		SetPlayerFacingAngle(playerid, 267.6727);
+		TogglePlayerControllable(playerid, 1);
+		DisablePlayerCheckpoint(playerid);
+		SetCameraBehindPlayer(playerid);
+		DestroyObject(water1);
+		DestroyObject(water2);
+		DestroyObject(water3);
+		DestroyObject(water4);
+		IsInWash[ playerid ] = 0;
+		new VehicleID = GetPlayerVehicleID(playerid);
+		RepairVehicle(VehicleID);
+		return 1;
+	}
+	return 1;
+}
+forward CloseExt(playerid);
+public CloseExt(playerid)
+{
+	MoveObject(ext, 2446.50000000,-1460.59997559,29.70000076, 1.0, 0.00000000,0.00000000,270.00000000);
+	return 1;
+}
+
+
+public OnPlayerUpdate(playerid)
+{
+	if(IsPlayerInRangeOfPoint(playerid, 10.0, 2523.39990234,-1493.50000000,23.89999962))
+	{
+	MoveObject(gate1, 2523.60009766,-1493.50000000,23.89999962, 1.0, 0.00000000,348.00000000,0.00000000);
+	SetTimer("CloseGate1", 5000, 1);
+	return 1;
+	}
+	if(IsPlayerInRangeOfPoint(playerid, 10.0, 2540.10009766,-1459.30004883,24.39999962))
+	{
+	MoveObject(gate2, 2540.10009766,-1459.09997559,24.39999962, 1.0, 0.00000000,8.00000000,269.99645996);
+	SetTimer("CloseGate2", 5000, 1);
+	return 1;
+	}
+	if(IsPlayerInRangeOfPoint(playerid, 10.0, 2539.89990234,-1475.59997559,24.39999962))
+	{
+	MoveObject(gate3, 2539.89990234,-1475.80004883,24.39999962, 1.0, 0.00000000,345.99987793,269.99981689);
+	SetTimer("CloseGate3", 5000, 1);
+	return 1;
+	}
+	return 1;
+}
+forward CloseGate3();
+public CloseGate3()
+{
+    MoveObject(gate3, 2539.89990234,-1475.59997559,24.39999962, 1.0, 0.00000000,270.00000000,269.99975586);
+    return 1;
+}
+forward CloseGate2();
+public CloseGate2()
+{
+	MoveObject(gate2, 2540.10009766,-1459.30004883,24.39999962, 1.0 ,0.00000000,90.00000000,269.99636841);
+	return 1;
+}
+forward CloseGate1();
+public CloseGate1()
+{
+	MoveObject(gate1, 2523.39990234,-1493.50000000,23.89999962, 1.0, 0.00000000,270.00000000,0.00000000);
+	return 1;
+}

BIN
filterscripts/spraytag.amx


BIN
filterscripts/test.amx


+ 22 - 0
filterscripts/ulMaps.pwn

@@ -0,0 +1,22 @@
+/*  U:::::::::U             U:::::::::U                R::::::::::::::::R  P::::::::::::::::P
+	U:::::::::U             U:::::::::U                R::::::RRRRRR:::::R P::::::PPPPPP:::::P
+	UU:::::::UU             LU:::::::UL                R:::::R     R:::::RPP:::::P     P:::::P
+	  U:::::U                 U:::::U                  R::::R     R:::::R  P::::P     P:::::P
+	  U:::::U                 U:::::U                  R::::R     R:::::R  P::::P     P:::::P
+	  U:::::U                 U:::::U                  R::::RRRRRR:::::R   P::::PPPPPP:::::P
+	  U:::::U                 U:::::U   -------------  R:::::::::::::RR    P:::::::::::::PP
+	  U:::::U                 U:::::U   -------------  R::::RRRRRR:::::R   P::::PPPPPPPPP3
+	  U:::::U                 U:::::U   -------------  R::::R     R:::::R  P::::P
+	  U:::::U                 U:::::U                  R::::R     R:::::R  P::::P
+	  U:::::U                 U:::::U                  R::::R     R:::::R  P::::P
+	UU:::::::UUUUUUUUUUUUUUUUU::::::UU                RR:::::R     R:::::RPP::::::PP
+	U::::::::::::::::::::::::::::::::U                R::::::R     R:::::RP::::::::P
+	U::::::::::::::::::::::::::::::::U                R::::::R     R:::::RP::::::::P
+	UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU                RRRRRRRR     RRRRRRRPPPPPPPPPP
+
+										_____________ Ultimate Roleplay ___________
+										________ ul Mapping - ulMaps.pwn ______
+
+*/
+#include <a_samp>
+#include <streamer>

BIN
filterscripts/vspawner.amx


+ 387 - 0
filterscripts/vspawner.pwn

@@ -0,0 +1,387 @@
+//
+// Admin vehicle spawner using previews. For SA-MP 0.3x and above.
+// - Kye 2012
+//
+
+#include <a_samp>
+#include "../include/gl_common.inc"
+
+#define TOTAL_ITEMS         207
+#define SELECTION_ITEMS 	21
+#define ITEMS_PER_LINE  	7
+
+#define HEADER_TEXT "Vehicles"
+#define NEXT_TEXT   "Next"
+#define PREV_TEXT   "Prev"
+
+#define DIALOG_BASE_X   	75.0
+#define DIALOG_BASE_Y   	130.0
+#define DIALOG_WIDTH    	550.0
+#define DIALOG_HEIGHT   	180.0
+#define SPRITE_DIM_X    	60.0
+#define SPRITE_DIM_Y    	70.0
+
+new gTotalItems = TOTAL_ITEMS;
+new PlayerText:gCurrentPageTextDrawId[MAX_PLAYERS];
+new PlayerText:gHeaderTextDrawId[MAX_PLAYERS];
+new PlayerText:gBackgroundTextDrawId[MAX_PLAYERS];
+new PlayerText:gNextButtonTextDrawId[MAX_PLAYERS];
+new PlayerText:gPrevButtonTextDrawId[MAX_PLAYERS];
+new PlayerText:gSelectionItems[MAX_PLAYERS][SELECTION_ITEMS];
+new gSelectionItemsTag[MAX_PLAYERS][SELECTION_ITEMS];
+new gItemAt[MAX_PLAYERS];
+
+new gItemList[TOTAL_ITEMS] = {
+400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,
+431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,450,451,452,453,454,455,456,457,458,459,460,461,
+462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,
+493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,
+524,525,526,527,528,529,530,531,532,533,534,535,536,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,
+555,556,557,558,559,560,561,562,563,564,565,566,567,568,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,
+586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611
+};
+
+//------------------------------------------------
+
+public OnFilterScriptInit()
+{
+	print("\n--Admin Vehicle Spawner Loaded\n");
+	return 1;
+}
+
+//------------------------------------------------
+
+GetNumberOfPages()
+{
+	if((gTotalItems >= SELECTION_ITEMS) && (gTotalItems % SELECTION_ITEMS) == 0)
+	{
+		return (gTotalItems / SELECTION_ITEMS);
+	}
+	else return (gTotalItems / SELECTION_ITEMS) + 1;
+}
+
+//------------------------------------------------
+
+PlayerText:CreateCurrentPageTextDraw(playerid, Float:Xpos, Float:Ypos)
+{
+	new PlayerText:txtInit;
+   	txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, "0/0");
+   	PlayerTextDrawUseBox(playerid, txtInit, 0);
+	PlayerTextDrawLetterSize(playerid, txtInit, 0.4, 1.1);
+	PlayerTextDrawFont(playerid, txtInit, 1);
+	PlayerTextDrawSetShadow(playerid, txtInit, 0);
+    PlayerTextDrawSetOutline(playerid, txtInit, 1);
+    PlayerTextDrawColor(playerid, txtInit, 0xACCBF1FF);
+    PlayerTextDrawShow(playerid, txtInit);
+    return txtInit;
+}
+
+//------------------------------------------------
+// Creates a button textdraw and returns the textdraw ID.
+
+PlayerText:CreatePlayerDialogButton(playerid, Float:Xpos, Float:Ypos, Float:Width, Float:Height, button_text[])
+{
+ 	new PlayerText:txtInit;
+   	txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, button_text);
+   	PlayerTextDrawUseBox(playerid, txtInit, 1);
+   	PlayerTextDrawBoxColor(playerid, txtInit, 0x000000FF);
+   	PlayerTextDrawBackgroundColor(playerid, txtInit, 0x000000FF);
+	PlayerTextDrawLetterSize(playerid, txtInit, 0.4, 1.1);
+	PlayerTextDrawFont(playerid, txtInit, 1);
+	PlayerTextDrawSetShadow(playerid, txtInit, 0); // no shadow
+    PlayerTextDrawSetOutline(playerid, txtInit, 0);
+    PlayerTextDrawColor(playerid, txtInit, 0x4A5A6BFF);
+    PlayerTextDrawSetSelectable(playerid, txtInit, 1);
+    PlayerTextDrawAlignment(playerid, txtInit, 2);
+    PlayerTextDrawTextSize(playerid, txtInit, Height, Width); // The width and height are reversed for centering.. something the game does <g>
+    PlayerTextDrawShow(playerid, txtInit);
+    return txtInit;
+}
+ 
+//------------------------------------------------
+
+PlayerText:CreatePlayerHeaderTextDraw(playerid, Float:Xpos, Float:Ypos, header_text[])
+{
+	new PlayerText:txtInit;
+   	txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, header_text);
+   	PlayerTextDrawUseBox(playerid, txtInit, 0);
+	PlayerTextDrawLetterSize(playerid, txtInit, 1.25, 3.0);
+	PlayerTextDrawFont(playerid, txtInit, 0);
+	PlayerTextDrawSetShadow(playerid, txtInit, 0);
+    PlayerTextDrawSetOutline(playerid, txtInit, 1);
+    PlayerTextDrawColor(playerid, txtInit, 0xACCBF1FF);
+    PlayerTextDrawShow(playerid, txtInit);
+    return txtInit;
+}
+
+//------------------------------------------------
+
+PlayerText:CreatePlayerBackgroundTextDraw(playerid, Float:Xpos, Float:Ypos, Float:Width, Float:Height)
+{
+	new PlayerText:txtBackground = CreatePlayerTextDraw(playerid, Xpos, Ypos,
+	"                                            ~n~"); // enough space for everyone
+    PlayerTextDrawUseBox(playerid, txtBackground, 1);
+    PlayerTextDrawBoxColor(playerid, txtBackground, 0x00000099);
+	PlayerTextDrawLetterSize(playerid, txtBackground, 5.0, 5.0);
+	PlayerTextDrawFont(playerid, txtBackground, 0);
+	PlayerTextDrawSetShadow(playerid, txtBackground, 0);
+    PlayerTextDrawSetOutline(playerid, txtBackground, 0);
+    PlayerTextDrawColor(playerid, txtBackground,0x000000FF);
+    PlayerTextDrawTextSize(playerid, txtBackground, Width, Height);
+   	PlayerTextDrawBackgroundColor(playerid, txtBackground, 0x00000099);
+    PlayerTextDrawShow(playerid, txtBackground);
+    return txtBackground;
+}
+
+//------------------------------------------------
+// Creates a model preview sprite
+
+PlayerText:CreateModelPreviewTextDraw(playerid, modelindex, Float:Xpos, Float:Ypos, Float:width, Float:height)
+{
+    new PlayerText:txtPlayerSprite = CreatePlayerTextDraw(playerid, Xpos, Ypos, ""); // it has to be set with SetText later
+    PlayerTextDrawFont(playerid, txtPlayerSprite, TEXT_DRAW_FONT_MODEL_PREVIEW);
+    PlayerTextDrawColor(playerid, txtPlayerSprite, 0xFFFFFFFF);
+    PlayerTextDrawBackgroundColor(playerid, txtPlayerSprite, 0x000000EE);
+    PlayerTextDrawTextSize(playerid, txtPlayerSprite, width, height); // Text size is the Width:Height
+    PlayerTextDrawSetPreviewModel(playerid, txtPlayerSprite, modelindex);
+    PlayerTextDrawSetPreviewRot(playerid,txtPlayerSprite, -16.0, 0.0, -55.0);
+    PlayerTextDrawSetSelectable(playerid, txtPlayerSprite, 1);
+    PlayerTextDrawShow(playerid,txtPlayerSprite);
+    return txtPlayerSprite;
+}
+
+//------------------------------------------------
+
+DestroyPlayerModelPreviews(playerid)
+{
+	new x=0;
+	while(x != SELECTION_ITEMS) {
+	    if(gSelectionItems[playerid][x] != PlayerText:INVALID_TEXT_DRAW) {
+			PlayerTextDrawDestroy(playerid, gSelectionItems[playerid][x]);
+			gSelectionItems[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
+		}
+		x++;
+	}
+}
+
+//------------------------------------------------
+
+ShowPlayerModelPreviews(playerid)
+{
+    new x=0;
+	new Float:BaseX = DIALOG_BASE_X;
+	new Float:BaseY = DIALOG_BASE_Y - (SPRITE_DIM_Y * 0.33); // down a bit
+	new linetracker = 0;
+	
+	new itemat = GetPVarInt(playerid, "vspawner_page") * SELECTION_ITEMS;
+	
+	// Destroy any previous ones created
+	DestroyPlayerModelPreviews(playerid);
+
+	while(x != SELECTION_ITEMS && itemat < gTotalItems) {
+	    if(linetracker == 0) {
+	        BaseX = DIALOG_BASE_X + 25.0; // in a bit from the box
+	        BaseY += SPRITE_DIM_Y + 1.0; // move on the Y for the next line
+		}
+  		gSelectionItems[playerid][x] = CreateModelPreviewTextDraw(playerid, gItemList[itemat], BaseX, BaseY, SPRITE_DIM_X, SPRITE_DIM_Y);
+  		gSelectionItemsTag[playerid][x] = gItemList[itemat];
+		BaseX += SPRITE_DIM_X + 1.0; // move on the X for the next sprite
+		linetracker++;
+		if(linetracker == ITEMS_PER_LINE) linetracker = 0;
+		itemat++;
+		x++;
+	}
+}
+
+//------------------------------------------------
+
+UpdatePageTextDraw(playerid)
+{
+	new PageText[64+1];
+	format(PageText, 64, "%d/%d", GetPVarInt(playerid,"vspawner_page") + 1, GetNumberOfPages());
+	PlayerTextDrawSetString(playerid, gCurrentPageTextDrawId[playerid], PageText);
+}
+
+//------------------------------------------------
+
+CreateSelectionMenu(playerid)
+{
+    gBackgroundTextDrawId[playerid] = CreatePlayerBackgroundTextDraw(playerid, DIALOG_BASE_X, DIALOG_BASE_Y + 20.0, DIALOG_WIDTH, DIALOG_HEIGHT);
+    gHeaderTextDrawId[playerid] = CreatePlayerHeaderTextDraw(playerid, DIALOG_BASE_X, DIALOG_BASE_Y, HEADER_TEXT);
+    gCurrentPageTextDrawId[playerid] = CreateCurrentPageTextDraw(playerid, DIALOG_WIDTH - 30.0, DIALOG_BASE_Y + 15.0);
+    gNextButtonTextDrawId[playerid] = CreatePlayerDialogButton(playerid, DIALOG_WIDTH - 30.0, DIALOG_BASE_Y+DIALOG_HEIGHT+100.0, 50.0, 16.0, NEXT_TEXT);
+    gPrevButtonTextDrawId[playerid] = CreatePlayerDialogButton(playerid, DIALOG_WIDTH - 90.0, DIALOG_BASE_Y+DIALOG_HEIGHT+100.0, 50.0, 16.0, PREV_TEXT);
+
+    ShowPlayerModelPreviews(playerid);
+    UpdatePageTextDraw(playerid);
+}
+
+//------------------------------------------------
+
+DestroySelectionMenu(playerid)
+{
+	DestroyPlayerModelPreviews(playerid);
+
+	PlayerTextDrawDestroy(playerid, gHeaderTextDrawId[playerid]);
+	PlayerTextDrawDestroy(playerid, gBackgroundTextDrawId[playerid]);
+	PlayerTextDrawDestroy(playerid, gCurrentPageTextDrawId[playerid]);
+	PlayerTextDrawDestroy(playerid, gNextButtonTextDrawId[playerid]);
+	PlayerTextDrawDestroy(playerid, gPrevButtonTextDrawId[playerid]);
+
+	gHeaderTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gBackgroundTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gCurrentPageTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gNextButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gPrevButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+}
+
+//------------------------------------------------
+
+SpawnVehicle_InfrontOfPlayer(playerid, vehiclemodel, color1, color2)
+{
+	new Float:x,Float:y,Float:z;
+	new Float:facing;
+	new Float:distance;
+
+    GetPlayerPos(playerid, x, y, z);
+    GetPlayerFacingAngle(playerid, facing);
+
+    new Float:size_x,Float:size_y,Float:size_z;
+	GetVehicleModelInfo(vehiclemodel, VEHICLE_MODEL_INFO_SIZE, size_x, size_y, size_z);
+	
+	distance = size_x + 0.5;
+
+  	x += (distance * floatsin(-facing, degrees));
+    y += (distance * floatcos(-facing, degrees));
+
+	facing += 90.0;
+	if(facing > 360.0) facing -= 360.0;
+
+	return CreateVehicle(vehiclemodel, x, y, z + (size_z * 0.25), facing, color1, color2, -1);
+}
+
+//------------------------------------------------
+
+HandlePlayerItemSelection(playerid, selecteditem)
+{
+ 	// In this case we're spawning a vehicle for them
+    SpawnVehicle_InfrontOfPlayer(playerid, gSelectionItemsTag[playerid][selecteditem], -1, -1);
+}
+
+//------------------------------------------------
+
+public OnPlayerConnect(playerid)
+{
+	// Init all of the textdraw related globals
+    gHeaderTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gBackgroundTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gCurrentPageTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gNextButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    gPrevButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
+    
+    for(new x=0; x < SELECTION_ITEMS; x++) {
+        gSelectionItems[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
+	}
+	
+	gItemAt[playerid] = 0;
+	
+	return 1; // Allow other scripts to keep processing OnPlayerConnect
+}
+
+//-------------------------------------------
+// Even though only Player* textdraws are used in this script,
+// OnPlayerClickTextDraw is still required to handle ESC
+
+public OnPlayerClickTextDraw(playerid, Text:clickedid)
+{
+   	if(GetPVarInt(playerid, "vspawner_active") == 0) return 0;
+
+	// Handle: They cancelled (with ESC)
+	if(clickedid == Text:INVALID_TEXT_DRAW) {
+        DestroySelectionMenu(playerid);
+        SetPVarInt(playerid, "vspawner_active", 0);
+        PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
+        return 1;
+	}
+	
+	return 0;
+}
+
+//------------------------------------------------
+
+public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
+{
+	if(GetPVarInt(playerid, "vspawner_active") == 0) return 0;
+
+	new curpage = GetPVarInt(playerid, "vspawner_page");
+	
+	// Handle: next button
+	if(playertextid == gNextButtonTextDrawId[playerid]) {
+	    if(curpage < (GetNumberOfPages() - 1)) {
+	        SetPVarInt(playerid, "vspawner_page", curpage + 1);
+	        ShowPlayerModelPreviews(playerid);
+         	UpdatePageTextDraw(playerid);
+         	PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
+		} else {
+		    PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
+		}
+		return 1;
+	}
+	
+	// Handle: previous button
+	if(playertextid == gPrevButtonTextDrawId[playerid]) {
+	    if(curpage > 0) {
+	    	SetPVarInt(playerid, "vspawner_page", curpage - 1);
+	    	ShowPlayerModelPreviews(playerid);
+	    	UpdatePageTextDraw(playerid);
+	    	PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0);
+		} else {
+		    PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
+		}
+		return 1;
+	}
+	
+	// Search in the array of textdraws used for the items
+	new x=0;
+	while(x != SELECTION_ITEMS) {
+	    if(playertextid == gSelectionItems[playerid][x]) {
+	        HandlePlayerItemSelection(playerid, x);
+	        PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
+	        DestroySelectionMenu(playerid);
+	        CancelSelectTextDraw(playerid);
+        	SetPVarInt(playerid, "vspawner_active", 0);
+        	return 1;
+		}
+		x++;
+	}
+	
+	return 0;
+}
+
+//------------------------------------------------
+
+public OnPlayerCommandText(playerid, cmdtext[])
+{
+	new cmd[256+1];
+	new	idx;
+
+	if(!IsPlayerAdmin(playerid)) return 0;
+	
+	cmd = strtok(cmdtext, idx);
+
+	if(strcmp("/vspawner", cmd, true) == 0)
+	{
+ 		// If there was a previously created selection menu, destroy it
+		DestroySelectionMenu(playerid);
+		
+	    SetPVarInt(playerid, "vspawner_active", 1);
+	    //SetPVarInt(playerid, "vspawner_page", 0); // will reset the page back to the first
+	    
+	    CreateSelectionMenu(playerid);
+	    SelectTextDraw(playerid, 0xACCBF1FF);
+	    return 1;
+	}
+	
+	return 0;
+}
+//------------------------------------------------

BIN
filterscripts/weapons.amx


+ 145 - 0
filterscripts/weapons.pwn

@@ -0,0 +1,145 @@
+/*************************************************************
+ Holding Weapons Filterscript
+ -» Author             : Claerhout Robin (yugecin)
+ -» Release Date       : 28th March 2012
+ -» Description        : You hold weapons when you are not using them.
+ -» Video              : http://www.youtube.com/watch?v=Z4DDxK1vwQ8
+ -» forum post         : http://forum.sa-mp.com/showthread.php?t=329467
+ -» NOTE               : USES PlayerAttachedObjectSlots 0-8
+**************************************************************/
+#include <a_samp>
+#define TIME 250 //Timer for check if player is cycling through weapons or received another weapon (in ms)
+forward Enable(playerid);
+forward Disable(playerid);
+forward AttachWeapon();
+forward HoldingWeaponsForAll(boolean);
+new wep[MAX_PLAYERS] = -1, timer, weps[12], d[MAX_PLAYERS] = 1, d1 = 1, camera[MAX_PLAYERS];
+public OnFilterScriptInit() {
+	timer = SetTimer("AttachWeapon", TIME, 1);
+	return print("Weapon-holder intialized.");
+}
+
+public OnFilterScriptExit() {
+	for(new i = 0; i < MAX_PLAYERS+1; i++) if(IsPlayerConnected(i)) if(!IsPlayerNPC(i))	for(new a = 0; a < 10; a++)	if(IsPlayerAttachedObjectSlotUsed(i, a)) RemovePlayerAttachedObject(i, a);
+	return print("Weapon-holder destroyed.");
+}
+
+public AttachWeapon(){
+	for(new i = 0; i < MAX_PLAYERS+1; i++){
+	    if(IsPlayerNPC(i)) return 1;
+	    if(IsPlayerInAnyVehicle(i)) {
+			for(new a = 0; a < 9; a++) if(IsPlayerAttachedObjectSlotUsed(i, a)) RemovePlayerAttachedObject(i, a);
+			wep[i] = -1;
+			return 1;
+		}
+		if(!d[i]) return 1;
+		if(camera[i]) return 1;
+	    
+	    if(wep[i] != GetPlayerWeapon(i)) for(new a = 0; a < 12; a++){
+	    	GetPlayerWeaponData(i, a, weps[a], weps[6]);
+			switch(a){
+			    case 0: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 0)) RemovePlayerAttachedObject(i, 0);
+			        if(weps[a] == 1 && GetPlayerWeapon(i) != 1) SetPlayerAttachedObject( i, 0, 331, 6, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000 );
+			    }
+			    case 1: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 1)) RemovePlayerAttachedObject(i, 1);
+			        switch(weps[a]){
+						case 4: if(GetPlayerWeapon(i) != 4) SetPlayerAttachedObject( i, 0, 335, 11, 0.142010, -0.100988, 0.055910, 76.125000, 75.876144, 1.143326, 1.000000, 1.000000, 1.000000 );
+						case 8: if(GetPlayerWeapon(i) != 8) SetPlayerAttachedObject( i, 1, 339, 15, 0.088326, 0.066626, 0.148351, 191.990447, 341.412963, 0.000000, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 2: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 2)) RemovePlayerAttachedObject(i, 2);
+			        switch(weps[a]){
+						case 22: if(GetPlayerWeapon(i) != 22) SetPlayerAttachedObject( i, 2, 346, 8, -0.028010, -0.033822, 0.097883, 270.000000, 15.999426, 354.161499, 1.000000, 1.000000, 1.000000 );
+						case 23: if(GetPlayerWeapon(i) != 23) SetPlayerAttachedObject( i, 2, 346, 8, -0.028010, -0.033822, 0.097883, 270.000000, 15.999426, 354.161499, 1.000000, 1.000000, 1.000000 );
+						case 24: if(GetPlayerWeapon(i) != 24) SetPlayerAttachedObject( i, 2, 348, 8, -0.040643, -0.048525, 0.085376, 270.000000, 8.253683, 0.000000, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 3: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 3)) RemovePlayerAttachedObject(i, 3);
+			        switch(weps[a]){
+						case 25: if(GetPlayerWeapon(i) != 25) SetPlayerAttachedObject( i, 3, 349, 16, 0.084126, 0.131737, 0.197423, 176.984542, 92.569320, 14.483574, 1.000000, 1.000000, 1.000000 );
+						case 26: if(GetPlayerWeapon(i) != 26) SetPlayerAttachedObject( i, 3, 350, 16, 0.090676, 0.085271, -0.075131, 0.000000, 289.166870, 355.209869, 1.000000, 1.000000, 1.000000 );
+						case 27: if(GetPlayerWeapon(i) != 27) SetPlayerAttachedObject( i, 3, 351, 16, 0.100795, 0.057224, -0.082939, 180.000000, 243.483581, 180.000000, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 4: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 4)) RemovePlayerAttachedObject(i, 4);
+			        switch(weps[a]){
+						case 28: if(GetPlayerWeapon(i) != 28) SetPlayerAttachedObject( i, 4, 352, 7, 0.138560, -0.033982, -0.047630, 281.671447, 276.618591, 4.068862, 1.000000, 1.000000, 1.000000 );
+						case 29: if(GetPlayerWeapon(i) != 29) SetPlayerAttachedObject( i, 4, 353, 7, 0.008329, -0.067031, -0.060214, 289.865051, 17.391622, 7.667663, 1.000000, 1.000000, 1.000000 );
+						case 32: if(GetPlayerWeapon(i) != 32) SetPlayerAttachedObject( i, 4, 372, 7, 0.056180, -0.008887, -0.007959, 270.000000, 13.921591, 5.905599, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 5: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 5)) RemovePlayerAttachedObject(i, 5);
+			        switch(weps[a]){
+						case 30: if(GetPlayerWeapon(i) != 30) SetPlayerAttachedObject( i, 5, 355, 1, -0.130044, -0.127836, 0.025491, 2.044970, 6.239807, 6.833646, 1.000000, 1.000000, 1.000000 );
+						case 31: if(GetPlayerWeapon(i) != 31) SetPlayerAttachedObject( i, 5, 356, 16, 0.019280, 0.118553, 0.396286, 70.920410, 274.673919, 253.978057, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 8: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 6)) RemovePlayerAttachedObject(i, 6);
+			        switch(weps[a]){
+						case 16: if(GetPlayerWeapon(i) != 16) SetPlayerAttachedObject( i, 6, 342, 16, -0.110845, -0.041751, 0.087840, 55.051963, 84.884071, 247.221984, 1.000000, 1.000000, 1.000000 );
+						case 17: if(GetPlayerWeapon(i) != 17) SetPlayerAttachedObject( i, 6, 1672, 16, -0.110606, -0.054021, 0.036716, 215.687911, 354.659393, 90.000000, 1.000000, 1.000000, 1.000000 );
+						case 18: if(GetPlayerWeapon(i) != 18) SetPlayerAttachedObject( i, 6, 344, 15, 0.029351, -0.208807, -0.164047, 0.000000, 359.932037, 0.000000, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 9: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 7)) RemovePlayerAttachedObject(i, 7);
+			        switch(weps[a]){
+						case 43: if(GetPlayerWeapon(i) != 43) SetPlayerAttachedObject( i, 7, 367, 1, 0.227036, 0.171111, -0.085516, 270.000000, 0.000000, 180.000000, 1.000000, 1.000000, 1.000000 );
+						case 41: if(GetPlayerWeapon(i) != 41) SetPlayerAttachedObject( i, 7, 365, 12, 0.174919, -0.004211, -0.142508, 0.000000, 270.000000, 0.000000, 1.000000, 1.000000, 1.000000 );
+					}
+			    }
+			    case 11: {
+			        if(IsPlayerAttachedObjectSlotUsed(i, 8)) RemovePlayerAttachedObject(i, 8);
+			        if(weps[a] == 44 || weps[a] == 45) if(GetPlayerWeapon(i) != 44 && GetPlayerWeapon(i) != 45) SetPlayerAttachedObject( i, 8, 369, 2, 0.000000, 0.078037, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000 );
+			    }
+			}
+	    }
+	    wep[i] = GetPlayerWeapon(i);
+	}
+	return 1;
+}
+
+public Disable(playerid) {
+    d[playerid] = 0;
+    wep[playerid] = -1;
+    for(new a = 0; a < 9; a++) if(IsPlayerAttachedObjectSlotUsed(playerid, a)) RemovePlayerAttachedObject(playerid, a);
+	return 1;
+}
+
+public Enable(playerid) {
+    d[playerid] = 1;
+	return 1;
+}
+
+public HoldingWeaponsForAll(boolean) {
+	if(boolean == 0){
+ 		if(!d1) return 1;
+		for(new i = 0; i < MAX_PLAYERS+1; i++) for(new a = 0; a < 9; a++) if(IsPlayerAttachedObjectSlotUsed(i, a)) RemovePlayerAttachedObject(i, a);
+		KillTimer(timer);
+		d1 = 0;
+	    return 1;
+	}
+	if(boolean == 1){
+		if(d1) return 1;
+		timer = SetTimer("AttachWeapon", TIME, 1);
+		d1 = 1;
+		return 1;
+	}
+ 	return 0;
+}
+
+public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
+    if(newkeys == 128 && oldkeys != 128 && GetPlayerWeapon(playerid) == 43) {
+        camera[playerid] = 1;
+        for(new a = 0; a < 9; a++) if(IsPlayerAttachedObjectSlotUsed(playerid, a)) RemovePlayerAttachedObject(playerid, a);
+    }
+	if(newkeys != 128 && oldkeys == 128 && GetPlayerWeapon(playerid) == 43) camera[playerid] = 0;
+	return 1;
+}

BIN
gamemodes/bare.amx


BIN
gamemodes/barron.amx


BIN
gamemodes/grandlarc.amx


+ 2064 - 0
gamemodes/inc/backpack.inc

@@ -0,0 +1,2064 @@
+/*
+	(Unique) Dynamic Backpack System by ToiletDuck (Eubie Jay Hernandez Clemente)
+	Date Of Sold: September 29, 2017
+	System License: td1237263jxqh
+	Date of Implementation: to be update.
+	Do not remove this License/Credits the System will be Automatic Delete with no trace.
+
+*/
+#include <YSI\y_hooks>
+/* ------------------ Defines ---------------- */
+#define 		MAX_BACKPACKS               2000
+#define 		MAX_STOREGUN                5  /* Array starts on 0 */
+#define         DIALOG_EDITMAINBACKPACK     6000
+#define         DIALOG_EDITITEMS            6001
+#define         DIALOG_BACKPACKMENU         6005 // For Player Dialog /backpack
+#define         DIALOG_ACTIONBACKPACKMENU   6006
+#define         DIALOG_PUTAKEITEMS   		6007
+	/*     Limit Item Types       */
+#define 		LIMIT_CASH 					0
+#define 		LIMIT_POT 					1
+#define 		LIMIT_CRACK 				2
+#define 		LIMIT_MATS 					3
+#define 		LIMIT_GUN 					4
+#define 		LIMIT_AMMO					5
+    /*         Item Types        */
+#define 		ITEM_CASH 					1
+#define 		ITEM_POT  					2
+#define 		ITEM_CRACK					3
+#define 		ITEM_MATS 					4
+#define 		ITEM_GUNS 					5
+	/*         Edit Types        */
+#define         TYPE_CASH                   1
+#define         TYPE_POT                    2
+#define         TYPE_CRACK                  3
+#define         TYPE_MATS                   4
+#define         TYPE_GUN1                   5
+#define         TYPE_GUN2                   6
+#define         TYPE_GUN3                   7
+#define         TYPE_GUN4                   8
+#define         TYPE_GUN5                   9
+
+/* ------------------ Enum ------------------ */
+enum backpackinfo
+{
+	bBackpackOwner,
+	bBackpackSize,
+	bHouseStored,
+	bVehicleStored,
+	bCash,
+	bPot,
+	bCrack,
+	bMats,
+	bGun[MAX_STOREGUN]
+};
+/* ----------------- Variables --------------- */
+new itemtype[][] = {"Nothing", "Cash", "Pot", "Crack", "Material","Weapon"};
+new storagetype[][] = { "None", "Small Backpack", "Medium Backpack", "Large Backpack"};
+// For Backpack System should move to defines later
+
+//Cash, Pot, Crack, Mats, Weapons
+new sbackpacklimit[] = { 3000000, 70, 70, 100000, 3};
+new mbackpacklimit[] = { 5000000, 100,  100, 200000, 5};
+new lbackpacklimit[] = { 8000000, 150, 150, 300000, 8};
+
+new BackpackInfo[MAX_BACKPACKS][backpackinfo];
+new backpackid[MAX_PLAYERS];
+
+/* ----------------- Functions --------------- */
+stock SetPlayerAttachedObjectEx(playerid, idx, model, bonex, Float:OffsetX = 0.0, Float:OffsetY = 0.0, Float:OffsetZ = 0.0, Float:RotX = 0.0, Float:RotY = 0.0, Float:RotZ = 0.0, Float:ScaleX = 1.0, Float:ScaleY = 1.0, Float:ScaleZ = 1.0, mat1 = 0, mat2 = 0)
+{
+	if(idx < 9) {
+		SetPlayerAttachedObject(playerid, idx, model, bonex, Float:OffsetX, Float:OffsetY, Float:OffsetZ, Float:RotX, Float:RotY, Float:RotZ, Float:ScaleX, Float:ScaleY, Float:ScaleZ, mat1, mat2);
+	}
+
+}
+stock RemovePlayerAttachedObjectEx(playerid, idx) {
+ 	if(idx < 9) {
+		 RemovePlayerAttachedObject(playerid, idx);
+	}
+}
+stock GetBackpackStored(playerid) // 1 = HOUSE STORED | 2 = Vehicle Stored
+{
+	if(PlayerHasBackpack(playerid))
+	{
+	    new bpID = GetPlayerBackpackID(playerid);
+	    if(BackpackInfo[bpID][bHouseStored] == 1) return 1;
+	    else if(BackpackInfo[bpID][bVehicleStored] == 1) return 2;
+	}
+	return 0;
+}
+stock PlayerHasBackpack(playerid) {
+	if(GetPlayerBackpackID(playerid) != MAX_BACKPACKS+1) return 1;
+	else return 0;
+}
+stock GetPlayerBackpackID(playerid) return backpackid[playerid];
+
+stock LoadPlayerBackpack(playerid) {
+    for(new i; i < MAX_BACKPACKS; i++)
+	{
+        if(BackpackInfo[i][bBackpackOwner] != -1)
+        {
+			if(BackpackInfo[i][bBackpackOwner] == GetPlayerSQLId(playerid)) {
+			    if(BackpackInfo[i][bHouseStored] != 1 && BackpackInfo[i][bVehicleStored] != 1)
+			    {
+				    if(IsPlayerAttachedObjectSlotUsed(playerid, 9)) RemovePlayerAttachedObject(playerid, 9);
+				    SetPlayerAttachedObject(playerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1);
+				}
+				backpackid[playerid] = i;
+				i = MAX_BACKPACKS+1;
+			}
+		}
+	}
+	return 1;
+}
+stock GetPlayerStorageType(playerid) {
+	new id = GetPlayerBackpackID(playerid);
+	new string[32];
+	format(string,sizeof(string), "%s",storagetype[BackpackInfo[id][bBackpackSize]]);
+	return string;
+}
+
+stock BackpackLimit(size,type) {
+	switch(size) {
+		case 1:{
+		    switch(type){
+				case LIMIT_CASH: return sbackpacklimit[LIMIT_CASH];
+				case LIMIT_POT: return sbackpacklimit[LIMIT_POT];
+				case LIMIT_CRACK: return sbackpacklimit[LIMIT_CRACK];
+				case LIMIT_MATS: return sbackpacklimit[LIMIT_MATS];
+				case LIMIT_GUN: return sbackpacklimit[LIMIT_GUN];
+			}
+		}
+		case 2:{
+		    switch(type){
+				case LIMIT_CASH: return mbackpacklimit[LIMIT_CASH];
+				case LIMIT_POT: return mbackpacklimit[LIMIT_POT];
+				case LIMIT_CRACK: return mbackpacklimit[LIMIT_CRACK];
+				case LIMIT_MATS: return mbackpacklimit[LIMIT_MATS];
+				case LIMIT_GUN: return mbackpacklimit[LIMIT_GUN];
+			}
+		}
+		case 3: {
+		    switch(type){
+				case LIMIT_CASH: return lbackpacklimit[LIMIT_CASH];
+				case LIMIT_POT: return lbackpacklimit[LIMIT_POT];
+				case LIMIT_CRACK: return lbackpacklimit[LIMIT_CRACK];
+				case LIMIT_MATS: return lbackpacklimit[LIMIT_MATS];
+				case LIMIT_GUN: return lbackpacklimit[LIMIT_GUN];
+			}
+		}
+	}
+	return -1;
+}
+
+stock GetBackpackSize(id) {
+	new string[64];
+	switch(BackpackInfo[id][bBackpackSize]) {
+		case 1: format(string,sizeof(string), "{FFFFFF}Small Backpack{FFFFFF}");
+		case 2: format(string,sizeof(string), "{FF9500}Medium Backpack{FFFFFF}");
+		case 3: format(string,sizeof(string), "{FF00EA}Large Backpack{FFFFFF}");
+	}
+	return string;
+}
+stock IsRoleplayWeapon(weaponid) {
+	switch(weaponid) {
+		case 1..3,5..8,10..16,22..34: return 1;
+	}
+	return 0;
+}
+stock ShowBackpackActionChoice(playerid) {
+	switch(GetPVarInt(playerid, "Listitem_Backpack")) {
+	    case 0: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Cash\nTake Cash", "Choose", "Back");
+		case 1: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Pots\nTake Pots", "Choose", "Back");
+		case 2: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Cracks\nTake Cracks", "Choose", "Back");
+		case 3: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Materials\nTake Materials", "Choose", "Back");
+		case 4: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Weapon to Gun1\nTake Weapon in Gun1", "Choose", "Back");
+		case 5: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Weapon to Gun2\nTake Weapon in Gun2", "Choose", "Back");
+		case 6: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Weapon to Gun3\nTake Weapon in Gun3", "Choose", "Back");
+		case 7: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Weapon to Gun4\nTake Weapon in Gun4", "Choose", "Back");
+		case 8: ShowPlayerDialog(playerid, DIALOG_ACTIONBACKPACKMENU, DIALOG_STYLE_LIST, "Backpack Action", "Put Weapon to Gun5\nTake Weapon in Gun5", "Choose", "Back");
+	}
+	return 1;
+}
+stock ShowPlayerBackpack(playerid)
+{
+	new stringex[2000], index = GetPlayerBackpackID(playerid),title[64];
+	if(!PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Backpack");
+    format(stringex,sizeof(stringex),
+		"Cash ($%s) \n\
+		Pots (%sg) \n\
+		Cracks (%sg) \n\
+		Mats (%s)\n",
+		number_format(BackpackInfo[index][bCash]),
+		number_format(BackpackInfo[index][bPot]),
+		number_format(BackpackInfo[index][bCrack]),
+		number_format(BackpackInfo[index][bMats])
+	);
+	if(BackpackInfo[index][bBackpackSize] == 1) {
+		format(stringex,sizeof(stringex),
+			"%s\
+			Gun (%s) \n\
+			Gun (%s)",
+			stringex,
+			GetWeaponNameEx(BackpackInfo[index][bGun][0]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][1])
+		);
+	}
+	else if(BackpackInfo[index][bBackpackSize] == 2) {
+		format(stringex,sizeof(stringex),
+			"%s\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s)",
+			stringex,
+			GetWeaponNameEx(BackpackInfo[index][bGun][0]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][1]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][3])
+		);
+	}
+	else if(BackpackInfo[index][bBackpackSize] == 3) {
+		format(stringex,sizeof(stringex),
+			"%s\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s)",
+			stringex,
+			GetWeaponNameEx(BackpackInfo[index][bGun][0]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][1]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][2]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][3]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][4])
+		);
+	}
+	format(title,sizeof(title), "Content of my %s", GetBackpackSize(index));
+	ShowPlayerDialog(playerid, DIALOG_BACKPACKMENU, DIALOG_STYLE_LIST, title, stringex, "Choose", "Close");
+	return 1;
+}
+stock ShowEditBackpackDialog(playerid, index) {
+    new stringex[2000];
+    format(stringex,sizeof(stringex),
+		"Cash ($%s) \n\
+		Pots (%sg) \n\
+		Cracks (%sg) \n\
+		Mats (%s)\n",
+		number_format(BackpackInfo[index][bCash]),
+		number_format(BackpackInfo[index][bPot]),
+		number_format(BackpackInfo[index][bCrack]),
+		number_format(BackpackInfo[index][bMats])
+	);
+	if(BackpackInfo[index][bBackpackSize] == 1) {
+		format(stringex,sizeof(stringex),
+			"%s\
+			Gun (%s) \n\
+			Gun (%s)",
+			stringex,
+			GetWeaponNameEx(BackpackInfo[index][bGun][0]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][1])
+		);
+	}
+	else if(BackpackInfo[index][bBackpackSize] == 2) {
+		format(stringex,sizeof(stringex),
+			"%s\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s)",
+			stringex,
+			GetWeaponNameEx(BackpackInfo[index][bGun][0]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][1]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][3])
+		);
+	}
+	else if(BackpackInfo[index][bBackpackSize] == 3) {
+		format(stringex,sizeof(stringex),
+			"%s\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s) \n\
+			Gun (%s)",
+			stringex,
+			GetWeaponNameEx(BackpackInfo[index][bGun][0]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][1]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][2]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][3]),
+			GetWeaponNameEx(BackpackInfo[index][bGun][4])
+		);
+	}
+	new title[64];
+	format(title,sizeof(title), "Player (%s) - %s Information", GetPlayerRPName(GetPVarInt(playerid, "GetPlayerID")), GetPlayerStorageType(GetPVarInt(playerid, "GetPlayerID")));
+	ShowPlayerDialog(playerid, DIALOG_EDITMAINBACKPACK, DIALOG_STYLE_LIST, title, stringex, "Edit", "Close");
+	SetPVarInt(playerid, "BackpackID", index);
+	return 1;
+}
+
+/* ----------------- MYSQL SAVING/LOADING --------------- */
+// LoadBackpacks(playerid)
+// Description: Load the backpacks of the server
+
+stock LoadBackpacks() {
+    for(new i = 0; i < MAX_BACKPACKS; i++) {
+		BackpackInfo[i][bBackpackOwner] = -1;
+		BackpackInfo[i][bBackpackSize] = 0;
+		BackpackInfo[i][bHouseStored] = 0;
+		BackpackInfo[i][bVehicleStored] = 0;
+		BackpackInfo[i][bCash] = 0;
+		BackpackInfo[i][bPot] = 0;
+		BackpackInfo[i][bCrack] = 0;
+		BackpackInfo[i][bMats] = 0;
+		for(new weaponid; weaponid<MAX_STOREGUN; weaponid++) {
+			BackpackInfo[i][bGun][weaponid] = 0;
+		}
+    }
+    mysql_format(connectionID, "SELECT * FROM `playerbackpack`", true, "OnLoadBackpacks", "i", SENDDATA_THREAD);
+}
+stock SaveBackpack(i) {
+	if(i == MAX_BACKPACKS+1) return 1;
+	new string[2000];
+	format(string, sizeof(string), "UPDATE `playerbackpack` SET \
+		`BackpackOwner`=%d, \
+		`BackpackSize`=%d, \
+		`HouseStored`=%d, \
+		`VehicleStored`=%d, \
+		`Cash`=%d, \
+		`Pot`=%d, \
+		`Crack`=%d, \
+		`Mats`=%d,",
+		BackpackInfo[i][bBackpackOwner],
+		BackpackInfo[i][bBackpackSize],
+		BackpackInfo[i][bHouseStored],
+		BackpackInfo[i][bVehicleStored],
+		BackpackInfo[i][bCash],
+		BackpackInfo[i][bPot],
+		BackpackInfo[i][bCrack],
+		BackpackInfo[i][bMats]
+	);
+	for(new weaponid; weaponid<MAX_STOREGUN; weaponid++) {
+	    if(weaponid == MAX_STOREGUN-1) {
+		    format(string, sizeof(string), "%s \
+				`Gun%d`=%d WHERE `ID` = %d",
+				string,
+				weaponid,
+				BackpackInfo[i][bGun][weaponid],
+				i+1
+			);
+		}
+		else {
+		    format(string, sizeof(string), "%s \
+				`Gun%d`=%d,",
+				string,
+				weaponid,
+				BackpackInfo[i][bGun][weaponid]
+			);
+		}
+
+	}
+	mysql_format(connectionID, string, false, "OnQueryFinish", "i", SENDDATA_THREAD);
+	return 1;
+}
+forward OnLoadBackpacks();
+public OnLoadBackpacks()
+{
+
+
+    new i, rows, fields, szField[24], tmp[128];
+	cache_get_data(rows, fields, MainPipeline);
+	while(i < rows)
+	{
+		cache_get_field_content(i, "BackpackOwner", tmp, MainPipeline); BackpackInfo[i][bBackpackOwner] = strval(tmp);
+		cache_get_field_content(i, "BackpackSize", tmp, MainPipeline); BackpackInfo[i][bBackpackSize] = strval(tmp);
+        cache_get_field_content(i, "HouseStored", tmp, MainPipeline); BackpackInfo[i][bCash] = strval(tmp);
+        cache_get_field_content(i, "VehicleStored", tmp, MainPipeline); BackpackInfo[i][bCash] = strval(tmp);
+		cache_get_field_content(i, "Cash", tmp, MainPipeline); BackpackInfo[i][bCash] = strval(tmp);
+		cache_get_field_content(i, "Pot", tmp, MainPipeline); BackpackInfo[i][bPot] = strval(tmp);
+		cache_get_field_content(i, "Crack", tmp, MainPipeline); BackpackInfo[i][bCrack] = strval(tmp);
+		cache_get_field_content(i, "Mats", tmp, MainPipeline); BackpackInfo[i][bMats] = strval(tmp);
+		for(new weaponid; weaponid<MAX_STOREGUN; weaponid++) {
+            format(szField, sizeof(szField), "Gun%d", weaponid);
+			cache_get_field_content(i, szField, tmp, MainPipeline);
+			BackpackInfo[i][bGun][weaponid] = strval(tmp);
+		}
+		i++;
+	}
+	if(i > 0) printf("[Backpacks] %d Backpacks rehashed/loaded.", i);
+	else printf("[Backpacks] Failed to load any Backpacks.");
+	return 1;
+}
+forward InsertBackpack(index, owner);
+public InsertBackpack(index, owner)
+{
+	new rows, fields,query[200];
+	cache_get_data(rows, fields, MainPipeline);
+	if(rows) SaveBackpack(index);
+	else {
+		format(query,sizeof(query), "INSERT INTO `playerbackpack` (`BackpackOwner`) VALUES ('%d')", owner);
+		mysql_format(connectionID, query, false, "SENDDATA_THREAD", "i", SENDDATA_THREAD), SaveBackpack(index);
+	}
+	return 1;
+}
+CMD:bphelp(playerid)
+{
+	SendClientMessage(playerid, COLOR_WHITE, ""); // you can do it hahah
+
+	return 1;
+
+}
+/* -----------------  COMMANDS --------------- */
+CMD:sellmybackpack(playerid, params[])
+{
+	new giveplayerid, string[128], amount, bpID = GetPlayerBackpackID(playerid);
+	if(!PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, " You dont have any backpack to sell!");
+	new bpstored = GetBackpackStored(playerid);
+	if(bpstored == 1) return SendClientMessageEx(playerid, COLOR_GREY, " You don't have your backpack with you!You just stored it in your house.");
+	else if(bpstored == 2) return SendClientMessageEx(playerid, COLOR_GREY, " You don't have your backpack with you! You just stored it in your vehicle trunk.");
+	if(PlayerInfo[playerid][pAdmin] >= 2) return SendClientMessageEx(playerid, COLOR_GREY, "Administrators are not allowed to sell their backpack!");
+	//if(PlayerInfo[playerid][pConnectHours] < 10) return SendClientMessageEx(playerid, COLOR_GREY, "You must play 10 hours before you can sell your Backpack");
+	if(sscanf(params ,"ud", giveplayerid, amount)) return SendClientMessageEx(playerid, COLOR_GREY," USAGE: /sellmybackpack [giveplayerid] [price]");
+	if(giveplayerid == playerid) return SendClientMessageEx(playerid, COLOR_GREY, "What was that? Ofcourse you can't sell your backpack to yourself");
+	if(!IsPlayerConnected(giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, " Invalid Player ID !");
+	if(PlayerHasBackpack(giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, " That player has already a Backpack!");
+	new bpstored2 = GetBackpackStored(giveplayerid);
+    if(bpstored2 == 1) return SendClientMessageEx(playerid, COLOR_GREY, "That player has already his backpack stored in his/her house!");
+	else if(bpstored2 == 2) return SendClientMessageEx(playerid, COLOR_GREY, "That player has already his backpack stored in his/her vehicle trunk!");
+	if(1 < amount > 10000000) return SendClientMessageEx(playerid, COLOR_GREY, "Price must not a negative value or over $10,000,000!");
+	if(GetPlayerCash(giveplayerid) < amount) return SendClientMessageEx(playerid, COLOR_GREY, " That player dont have enought cash to buy your backpack!");
+	if(BackpackInfo[bpID][bCash] != 0 && !GetPVarInt(playerid, "SellBackpackConfirm") || BackpackInfo[bpID][bPot] != 0 && !GetPVarInt(playerid, "SellBackpackConfirm") || BackpackInfo[bpID][bCrack] != 0 && !GetPVarInt(playerid, "SellBackpackConfirm") || BackpackInfo[bpID][bMats] != 0 && !GetPVarInt(playerid, "SellBackpackConfirm"))
+	{
+		ShowPlayerDialog(playerid, 0 , DIALOG_STYLE_MSGBOX, "Backpack Notice", "Are you sure do you want to sell your Backpack when you still have items on it?\nIf Yes kindly re-enter the command!", "Okay", "");
+		SetPVarInt(playerid, "SellBackpackConfirm", 1);
+	    return 1;
+	}
+	DeletePVar(playerid, "SellBackpackConfirm");
+	format(string ,sizeof(string), "* Player %s has offered you to buy his %s for $%s (/acceptbackpack) to buy or (/denybackpack) if not", GetPlayerRPName(playerid) , GetPlayerStorageType(playerid), number_format(amount));
+	SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE , string);
+	format(string ,sizeof(string) ,"* You have offered %s to buy your %s for $%s", GetPlayerRPName(giveplayerid) ,GetPlayerStorageType(playerid) , number_format(amount));
+	SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
+	SetPVarInt(giveplayerid, "BackpackSeller", playerid);
+	SetPVarInt(giveplayerid, "BackpackPrice", amount);
+	SetPVarInt(giveplayerid, "BackpackID", bpID);
+	return 1;
+}
+CMD:acceptbackpack(playerid, params[])
+{
+    if(PlayerInfo[playerid][pAdmin] >= 2 && strcmp(GetPlayerRPName(playerid), "Astral", false) != 0) return SendClientMessageEx(playerid, COLOR_GREY, "Administrators are not allowed to use this command!");
+	if(!GetPVarType(playerid, "BackpackSeller")) return SendClientMessageEx(playerid, COLOR_GREY, "No one offerec you to buy a Backpack!");
+	new sellerid = GetPVarInt(playerid, "BackpackSeller"), price = GetPVarInt(playerid, "BackpackPrice"), index = GetPVarInt(playerid, "BackpackID");
+	if(PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You already have a Backpack!");
+	if(!IsPlayerConnected(sellerid)) return SendClientMessageEx(playerid, COLOR_GREY, "The Player offered you a Backpack is isn't connected!");
+	if(!PlayerHasBackpack(sellerid)) return SendClientMessageEx(playerid, COLOR_GREY, "The Seller doesn't have any Backpack to sell!");
+	if(price > GetPlayerCash(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have enough cash to buy this Backpack");
+	if(!GetPVarType(playerid, "BuyBackpackConfirm")) return SetPVarInt(playerid, "BuyBackpackConfirm", 1), ShowPlayerDialog(playerid, 0 , DIALOG_STYLE_MSGBOX, "Backpack Notice!", "Are you sure do you want to buy this backpack? If Yes kindly re-enter the command", "Okay", "");
+	DeletePVar(playerid, "BuyBackpackConfirm");
+	new string[128];
+	format(string ,sizeof(string), "* Player %s has successfuly bought your %s for $%s", GetPlayerRPName(playerid) , GetPlayerStorageType(sellerid), number_format(price));
+	SendClientMessageEx(sellerid, COLOR_LIGHTBLUE, string);
+	format(string, sizeof(string), "* You have successfuly bought %s's %s for $%s", GetPlayerRPName(sellerid), GetPlayerStorageType(sellerid) , number_format(price));
+	SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
+	GivePlayerCash(playerid, -price);
+	GivePlayerCash(sellerid, price);
+	BackpackInfo[index][bBackpackOwner] = GetPlayerSQLId(playerid);
+	if(IsPlayerAttachedObjectSlotUsed(sellerid, 9)) RemovePlayerAttachedObject(sellerid, 9);
+    if(IsPlayerAttachedObjectSlotUsed(playerid, 9)) RemovePlayerAttachedObject(playerid, 9);
+    switch(BackpackInfo[index][bBackpackSize]) {
+        case 1: SetPlayerAttachedObject(playerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1, 0xFFFFFFFF, 0xFFFFFFFF);
+    	case 2: SetPlayerAttachedObject(playerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1, 0xFFFF9500, 0xFFFF9500);
+    	case 3: SetPlayerAttachedObject(playerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1, 0xFFFF00EA, 0xFFFF00EA);
+	}
+	backpackid[sellerid] = MAX_BACKPACKS+1;
+	backpackid[playerid] = index;
+	OnPlayerStatsUpdate(sellerid);
+	OnPlayerStatsUpdate(playerid);
+	DeletePVar(playerid, "BackpackSeller");
+	DeletePVar(playerid, "BackpackPrice");
+	DeletePVar(playerid, "BackpackID");
+	return 1;
+}
+CMD:denybackpack(playerid, params[])
+{
+    new string[128], sellerid = GetPVarInt(playerid, "BackpackSeller"), price = GetPVarInt(playerid, "BackpackPrice");
+    if(!GetPVarType(playerid, "BackpackSeller")) return SendClientMessageEx(playerid, COLOR_GREY, "No one offerec you to buy a Backpack!");
+    format(string ,sizeof(string), "* Player %s has turn down your offer to buy your %s for $%s", GetPlayerRPName(playerid) , GetPlayerStorageType(sellerid), number_format(price));
+	SendClientMessageEx(sellerid, COLOR_LIGHTBLUE, string);
+	format(string, sizeof(string), "* You have turn down the offer of %s's %s for $%s", GetPlayerRPName(sellerid), GetPlayerStorageType(sellerid) , number_format(price));
+	SendClientMessageEx(playerid, COLOR_LIGHTBLUE, string);
+	DeletePVar(playerid, "BackpackSeller");
+	DeletePVar(playerid, "BackpackPrice");
+	DeletePVar(playerid, "BackpackID");
+	return 1;
+}
+CMD:removebackpack(playerid, params[])
+{
+	if(PlayerInfo[playerid][pAdmin] < 100001 && strcmp(GetPlayerRPName(playerid), "Astral", false) != 0)
+        return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
+    new giveplayerid, string[128];
+	if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /removebackpack [playerid]");
+	if(!PlayerHasBackpack(giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "That player doesn't have any Backpack!");
+	format(string ,sizeof(string), "* Admin %s has removed your %s and all items except weapons has been added to your stats", GetPlayerRPName(playerid), GetPlayerStorageType(giveplayerid));
+	SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE, string);
+	format(string ,sizeof(string), "* You have removed Player %s's %s and all items except gun in the Backpack has been added to their stats", GetPlayerRPName(giveplayerid), GetPlayerStorageType(giveplayerid));
+	SendClientMessageEx(playerid, COLOR_WHITE, string);
+	new bpID = GetPlayerBackpackID(giveplayerid);
+	if(BackpackInfo[bpID][bCash] != 0) GivePlayerCash(giveplayerid, BackpackInfo[bpID][bCash]);
+	if(BackpackInfo[bpID][bPot] != 0) PlayerInfo[giveplayerid][pWeed] += BackpackInfo[bpID][bPot];
+	if(BackpackInfo[bpID][bCrack] != 0) PlayerInfo[giveplayerid][pCocaine] += BackpackInfo[bpID][bCrack];
+	if(BackpackInfo[bpID][bMats] != 0) PlayerInfo[giveplayerid][pMaterials] += BackpackInfo[bpID][bMats];
+	BackpackInfo[bpID][bCash] = 0;
+	BackpackInfo[bpID][bPot] = 0;
+	BackpackInfo[bpID][bCrack] = 0;
+	BackpackInfo[bpID][bMats] = 0;
+	BackpackInfo[bpID][bGun][0] = 0;
+	BackpackInfo[bpID][bGun][1] = 0;
+	BackpackInfo[bpID][bGun][2] = 0;
+	BackpackInfo[bpID][bGun][3] = 0;
+	BackpackInfo[bpID][bGun][4] = 0;
+	BackpackInfo[bpID][bBackpackOwner] = -1;
+	OnPlayerStatsUpdate(giveplayerid);
+	if(IsPlayerAttachedObjectSlotUsed(giveplayerid, 9)) RemovePlayerAttachedObject(giveplayerid, 9);
+	backpackid[giveplayerid] = MAX_BACKPACKS+1;
+	return 1;
+}
+CMD:storebp(playerid, params[]) return cmd_storebackpack(playerid, params);
+CMD:storebackpack(playerid, params[])
+{
+	if(!PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Backpack!");
+	new bpID = GetPlayerBackpackID(playerid), string[128], bpstored = GetBackpackStored(playerid);
+	if(isnull(params)) return SendClientMessageEx(playerid, COLOR_GREY, " USAGE: /storebackpack [house/trunk] ");
+	if(strcmp(params, "house", true) == 0)
+	{
+	    if(Homes[playerid] > 0)
+		{
+			for(new i; i < MAX_HOUSES; i++)
+			{
+				if(GetPlayerSQLId(playerid) == HouseInfo[i][hOwnerID] && IsPlayerInRangeOfPoint(playerid, 50, HouseInfo[i][hInteriorX], HouseInfo[i][hInteriorY], HouseInfo[i][hInteriorZ]) && GetPlayerVirtualWorld(playerid) == HouseInfo[i][hIntVW] && GetPlayerInterior(playerid) == HouseInfo[i][hIntIW])
+				{
+					if(bpstored == 1) return SendClientMessageEx(playerid, COLOR_GREY, "What? You had just stored your backpack to your house! take it back (/takebackpack)");
+					else if(bpstored == 2) return SendClientMessageEx(playerid, COLOR_GREY, "Wait! You already stored your backpack to your vehicle trunk!");
+					if(IsPlayerAttachedObjectSlotUsed(playerid, 9)) RemovePlayerAttachedObject(playerid, 9);
+					if(BackpackInfo[bpID][bVehicleStored]) BackpackInfo[bpID][bVehicleStored] = 0;
+					BackpackInfo[bpID][bHouseStored] = 1;
+					OnPlayerStatsUpdate(playerid);
+					format(string, sizeof(string), "Stored their %s in their House Safe", GetPlayerStorageType(playerid));
+					cmd_me(playerid, string);
+					format(string, sizeof(string), "* You have stored your %s to your House Safe, (/takebackpack) to take your backpack with you", GetPlayerStorageType(playerid));
+					SendClientMessageEx(playerid, COLOR_WHITE, string);
+				    return 1;
+	            }
+			}
+			SendClientMessageEx(playerid, COLOR_GREY, "You're not in a house that you own.");
+		}
+		else return SendClientMessageEx(playerid, COLOR_GREY, "You don't own a house.");
+	}
+	else if(strcmp(params, "trunk", true) == 0)
+	{
+    	new pvid = -1, Float: x, Float: y, Float: z;
+		for(new d = 0 ; d < MAX_PLAYERVEHICLES; d++)
+		{
+			if(PlayerVehicleInfo[playerid][d][pvId] != INVALID_PLAYER_VEHICLE_ID) GetVehiclePos(PlayerVehicleInfo[playerid][d][pvId], x, y, z);
+			if(IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z))
+			{
+				pvid = d;
+				break;
+			}
+		}
+		if(pvid == -1) return SendClientMessageEx(playerid,COLOR_GREY,"You are not near any vehicle that you own.");
+		new engine,lights,alarm,doors,bonnet,boot,objective;
+		GetVehicleParamsEx(PlayerVehicleInfo[playerid][pvid][pvId],engine,lights,alarm,doors,bonnet,boot,objective);
+		if(boot == VEHICLE_PARAMS_OFF || boot == VEHICLE_PARAMS_UNSET) return SendClientMessageEx(playerid, COLOR_GRAD3, "You cannot store your backpack to a close trunk you must open the trunk! (/car trunk) ");
+		if(GetVehicleModel(PlayerVehicleInfo[playerid][pvid][pvId]) == 481 || GetVehicleModel(PlayerVehicleInfo[playerid][pvid][pvId]) == 510)  return SendClientMessageEx(playerid,COLOR_GREY,"That vehicle doesn't have a trunk.");
+		if(bpstored == 1) return SendClientMessageEx(playerid, COLOR_GREY, "Wait! You already stored your backpack to your house!");
+		else if(bpstored == 2) return SendClientMessageEx(playerid, COLOR_GREY, "What? You had just stored your backpack to your vehicle trunk! take it back (/takebackpack)");
+		if(IsPlayerAttachedObjectSlotUsed(playerid, 9)) RemovePlayerAttachedObject(playerid, 9);
+		if(BackpackInfo[bpID][bHouseStored]) BackpackInfo[bpID][bHouseStored] = 0;
+		BackpackInfo[bpID][bVehicleStored] = 1;
+		OnPlayerStatsUpdate(playerid);
+		format(string, sizeof(string), "Stored their %s in their Vehicle Trunk", GetPlayerStorageType(playerid));
+		cmd_me(playerid, string);
+		format(string, sizeof(string), "* You have stored your %s to your Vehicle Trunk, (/takebackpack) to take your backpack with you", GetPlayerStorageType(playerid));
+		SendClientMessageEx(playerid, COLOR_WHITE, string);
+		return 1;
+	}
+	else SendClientMessageEx(playerid, COLOR_GREY, " USAGE: /storebackpack [house/trunk]");
+	return 1;
+}
+CMD:takebp(playerid, params[]) return cmd_takebackpack(playerid, params);
+CMD:takebackpack(playerid, params[])
+{
+    if(!PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Backpack!");
+	new bpID = GetPlayerBackpackID(playerid), string[128], bpstored = GetBackpackStored(playerid);
+	if(isnull(params)) return SendClientMessageEx(playerid, COLOR_GREY, " USAGE: /takebackpack [house/trunk] ");
+	if(strcmp(params, "house", true) == 0)
+	{
+	    if(Homes[playerid] > 0)
+		{
+			for(new i; i < MAX_HOUSES; i++)
+			{
+				if(GetPlayerSQLId(playerid) == HouseInfo[i][hOwnerID] && IsPlayerInRangeOfPoint(playerid, 50, HouseInfo[i][hInteriorX], HouseInfo[i][hInteriorY], HouseInfo[i][hInteriorZ]) && GetPlayerVirtualWorld(playerid) == HouseInfo[i][hIntVW] && GetPlayerInterior(playerid) == HouseInfo[i][hIntIW])
+				{
+					if(bpstored != 1 && bpstored == 2) return SendClientMessageEx(playerid, COLOR_GREY, "You didn't stored your backpack inside of your house! its in your Vehicle Trunk.");
+					if(BackpackInfo[bpID][bVehicleStored]) BackpackInfo[bpID][bVehicleStored] = 0;
+					BackpackInfo[bpID][bHouseStored] = 0;
+					LoadPlayerBackpack(playerid);
+					OnPlayerStatsUpdate(playerid);
+					format(string, sizeof(string), "Taken their %s in their House Safe", GetPlayerStorageType(playerid));
+					cmd_me(playerid, string);
+					format(string, sizeof(string), "* You have taken your %s in your House Safe, (/storebackpack) to store again your backpack", GetPlayerStorageType(playerid));
+					SendClientMessageEx(playerid, COLOR_WHITE, string);
+				    return 1;
+	            }
+			}
+			SendClientMessageEx(playerid, COLOR_GREY, "You're not in a house that you own.");
+		}
+		else return SendClientMessageEx(playerid, COLOR_GREY, "You don't own a house.");
+	}
+	else if(strcmp(params, "trunk", true) == 0)
+	{
+    	new pvid = -1, Float: x, Float: y, Float: z;
+		for(new d = 0 ; d < MAX_PLAYERVEHICLES; d++)
+		{
+			if(PlayerVehicleInfo[playerid][d][pvId] != INVALID_PLAYER_VEHICLE_ID) GetVehiclePos(PlayerVehicleInfo[playerid][d][pvId], x, y, z);
+			if(IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z))
+			{
+				pvid = d;
+				break;
+			}
+		}
+		if(pvid == -1) return SendClientMessageEx(playerid,COLOR_GREY,"You are not near any vehicle that you own.");
+		new engine,lights,alarm,doors,bonnet,boot,objective;
+		GetVehicleParamsEx(PlayerVehicleInfo[playerid][pvid][pvId],engine,lights,alarm,doors,bonnet,boot,objective);
+		if(boot == VEHICLE_PARAMS_OFF || boot == VEHICLE_PARAMS_UNSET) return SendClientMessageEx(playerid, COLOR_GRAD3, "You cannot take your backpack to a close trunk you must open the trunk! (/car trunk) ");
+		if(GetVehicleModel(PlayerVehicleInfo[playerid][pvid][pvId]) == 481 || GetVehicleModel(PlayerVehicleInfo[playerid][pvid][pvId]) == 510)  return SendClientMessageEx(playerid,COLOR_GREY,"That vehicle doesn't have a trunk.");
+		if(bpstored != 2 && bpstored == 1) return SendClientMessageEx(playerid, COLOR_GREY, "You didn't stored your backpack inside of vehicle trunk! its in your House Safe.");
+		if(BackpackInfo[bpID][bHouseStored]) BackpackInfo[bpID][bHouseStored] = 0;
+		BackpackInfo[bpID][bVehicleStored] = 0;
+		LoadPlayerBackpack(playerid);
+		OnPlayerStatsUpdate(playerid);
+		format(string, sizeof(string), "Taken their %s in their Vehicle Trunk", GetPlayerStorageType(playerid));
+		cmd_me(playerid, string);
+		format(string, sizeof(string), "* You have taken your %s in your Vehicle Trunk, (/storebackpack) to store again your backpack", GetPlayerStorageType(playerid));
+		SendClientMessageEx(playerid, COLOR_WHITE, string);
+		return 1;
+	}
+	else SendClientMessageEx(playerid, COLOR_GREY, " USAGE: /takebackpack [house/trunk]");
+	return 1;
+}
+CMD:bpopen(playerid) return cmd_backpackopen(playerid);
+CMD:backpackopen(playerid) {
+	if(!PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Backpack");
+	new bpstored = GetBackpackStored(playerid);
+	if(bpstored == 1) return SendClientMessageEx(playerid, COLOR_GREY, " You don't have your backpack with you! You just stored in your house safe!");
+	else if(bpstored == 2) return SendClientMessageEx(playerid, COLOR_GREY, " You don't have your backpack with you! You just stored in your vehicle trunk!");
+	if(PlayerInfo[playerid][pConnectHours] < 5) return SendClientMessageEx(playerid, COLOR_GREY, "You must play 5 hours before you can use your Backpack");
+    if(GetPVarInt(playerid, "IsInArena") >= 0) return SendClientMessageEx(playerid,COLOR_GREY,"You cannot do this while being in an arena!");
+   	if(GetPVarInt( playerid, "EventToken") != 0) return SendClientMessageEx(playerid, COLOR_GREY, "You can't use this while you're in an event.");
+   	if(GetPVarInt(playerid, "Injured") != 0 || PlayerCuffed[playerid] != 0 || PlayerInfo[playerid][pHospital] != 0 || PlayerInfo[playerid][pJailTime] > 0 || GetPlayerState(playerid) == PLAYER_STATE_WASTED)
+		return SendClientMessageEx (playerid, COLOR_GRAD2, "You cannot do this at this time.");
+ 	ShowPlayerBackpack(playerid);
+ 	return 1;
+}
+CMD:editbackpack(playerid, params[])
+{
+    if(PlayerInfo[playerid][pAdmin] < 100001 && strcmp(GetPlayerRPName(playerid), "Astral", false) != 0)
+        return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
+	new giveplayerid;
+	if(sscanf(params, "u", giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /editbackpack [playerid]");
+ 	if(!IsPlayerConnected(giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "That player isn't connected");
+ 	if(!PlayerHasBackpack(giveplayerid)) return SendClientMessageEx(playerid, COLOR_GREY, "That player dosn't have any backpack!");
+ 	new bpID = GetPlayerBackpackID(giveplayerid);
+ 	new bpstored = GetBackpackStored(giveplayerid);
+ 	if(bpstored == 1) SendClientMessageEx(playerid, COLOR_WHITE, "NOTE: That player has their backpack stored in their house safe");
+	else if(bpstored == 2) SendClientMessageEx(playerid, COLOR_WHITE, "NOTE: That player has their backpack stored in their vehicle trunk");
+ 	SetPVarInt(playerid, "GetPlayerID", giveplayerid);
+ 	ShowEditBackpackDialog(playerid, bpID);
+	return 1;
+}
+CMD:givebackpack(playerid, params[])
+{
+ 	if(PlayerInfo[playerid][pAdmin] < 8)
+        return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
+    new giveplayerid, bsize, bpsize[32], string[128];
+    if(sscanf(params,"ud", giveplayerid, bsize)) {
+		 SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /givebackpack [playerid] [backpacksize]");
+		 SendClientMessageEx(playerid, COLOR_GREY, "Available Size: ( 1 - Small Backpack | 2 - Medium Backpack | 3 - Large Backpack )");
+		 return 1;
+	}
+	if(bsize < 1 || bsize > 3) return SendClientMessageEx(playerid, COLOR_GREY, "Invalid Backpack Size!");
+	if(IsPlayerConnected(giveplayerid) && gPlayerLogged{giveplayerid})
+	{
+	    switch(bsize){
+		    case 1: format(bpsize,sizeof(bpsize), "Small Backpack");
+		    case 2: format(bpsize,sizeof(bpsize), "Medium Backpack");
+		    case 3: format(bpsize,sizeof(bpsize), "Large Backpack");
+		}
+	    new bpID = GetPlayerBackpackID(giveplayerid);
+		if(PlayerHasBackpack(giveplayerid) && BackpackInfo[bpID][bBackpackSize] == bsize){
+			format(string,sizeof(string), "Player %s has already a %s!",GetPlayerRPName(giveplayerid), GetPlayerStorageType(giveplayerid));
+			SendClientMessageEx(playerid, COLOR_GREY, string);
+			return 1;
+		}
+		else if(PlayerHasBackpack(giveplayerid) && BackpackInfo[bpID][bBackpackSize] != bsize) {
+		    new bpstored = GetBackpackStored(giveplayerid);
+		    format(string, sizeof(string), "* You have setted %s's %s to %s", GetPlayerRPName(giveplayerid) ,GetPlayerStorageType(giveplayerid),bpsize);
+		    SendClientMessageEx(playerid, COLOR_WHITE, string);
+		    if(bpstored == 1 || bpstored == 2) SendClientMessageEx(playerid, COLOR_GREY, "NOTE: That player has already their backpack stored in house either vehicle trunk!");
+			format(string,sizeof(string), "* Admin %s has setted your %s to %s", GetPlayerRPName(playerid), GetPlayerStorageType(giveplayerid), bpsize);
+			SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE, string);
+			BackpackInfo[bpID][bBackpackSize] = bsize;
+		    SaveBackpack(bpID);
+		    LoadPlayerBackpack(giveplayerid);
+		    return 1;
+		}
+		else if(!PlayerHasBackpack(giveplayerid)) {
+			new query[230];
+			for(new index = 0; index<MAX_BACKPACKS; index++) {
+			    if(BackpackInfo[index][bBackpackOwner] == -1) {
+			        BackpackInfo[index][bBackpackOwner] = GetPlayerSQLId(giveplayerid);
+			        BackpackInfo[index][bBackpackSize] = bsize;
+			        if(IsPlayerAttachedObjectSlotUsed(giveplayerid, 9)) RemovePlayerAttachedObject(giveplayerid, 9);
+				    switch(bsize) {
+				        case 1: SetPlayerAttachedObject(giveplayerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1, 0xFFFFFFFF, 0xFFFFFFFF), format(bpsize,sizeof(bpsize), "Small Backpack");
+			        	case 2: SetPlayerAttachedObject(giveplayerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1, 0xFFFF9500, 0xFFFF9500), format(bpsize,sizeof(bpsize), "Medium Backpack");
+			        	case 3: SetPlayerAttachedObject(giveplayerid, 9, 3026, 1, -0.15, -0.1, 0, 0, 0, 0, 1, 1, 1, 0xFFFF00EA, 0xFFFF00EA), format(bpsize,sizeof(bpsize), "Large Backpack");
+					}
+					backpackid[giveplayerid] = index;
+				    format(query,sizeof(query) , "SELECT * FROM `playerbackpack` WHERE `ID` = %d",index+1);
+					mysql_format(connectionID,query , true, "InsertBackpack", "ii", index, GetPlayerSQLId(giveplayerid));
+					format(string, sizeof(string), "* You have setted %s's %s to %s", GetPlayerRPName(giveplayerid) ,GetPlayerStorageType(giveplayerid),bpsize);
+		    		SendClientMessageEx(playerid, COLOR_WHITE, string);
+					format(string,sizeof(string), "* Admin %s has given you a %s ", GetPlayerRPName(playerid), GetPlayerStorageType(giveplayerid));
+					SendClientMessageEx(giveplayerid, COLOR_LIGHTBLUE, string);
+					index = MAX_BACKPACKS;
+				}
+			}
+		}
+	}
+	else SendClientMessageEx(playerid, COLOR_GREY, "Invalid Player ID!");
+	return 1;
+}
+
+/* ----------------- CALLBACKS --------------- */
+hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
+{
+	new string[128];
+	switch(dialogid)
+	{
+	    case DIALOG_EDITMAINBACKPACK: {
+		    new bpstring[350], titlestring[64];
+		    if(response) {
+		        new index = GetPVarInt(playerid, "BackpackID");
+		        switch(listitem) {
+					case 0: { // Cash
+					    format(titlestring, sizeof(titlestring), "Editing the Backpack Cash");
+					    format(bpstring, sizeof(bpstring),"\
+							Input a Digit below to set the Cash of %s ($%s / $%s Cash)",
+							GetBackpackSize(index),
+							number_format(BackpackInfo[index][bCash]),
+						 	number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_CASH);
+					}
+					case 1: { // Pots
+					    format(titlestring, sizeof(titlestring), "Editing the Backpack Pot");
+					    format(bpstring, sizeof(bpstring),"\
+       						Input a Digit below to set the Pots of %s (%sg / %sg Pots)",
+							GetBackpackSize(index),
+							number_format(BackpackInfo[index][bPot]),
+							number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_POT);
+					}
+					case 2: { // Cracks
+					    format(titlestring, sizeof(titlestring), "Editing the Backpack Cracks", index);
+					    format(bpstring, sizeof(bpstring), "\
+							Input a Digit below to set the Cracks of %s (%sg / %sg Cracks)",
+							GetBackpackSize(index),
+							number_format(BackpackInfo[index][bCrack]),
+							number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_CRACK);
+
+					}
+					case 3: { // Mats
+					    format(titlestring, sizeof(titlestring), "Editing the Backpack Mats");
+					    format(bpstring, sizeof(bpstring), "\
+							Input a Digit below to set the Mats of %s (%s / %spound Mats)",
+							GetBackpackSize(index),
+							number_format(BackpackInfo[index][bMats]),
+							number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_MATS);
+					}
+					case 4: { // Gun 1 - Small to Large Backpack
+	                    format(titlestring, sizeof(titlestring), "Editing the Backpack Gun1");
+					    format(bpstring, sizeof(bpstring),"\
+							Input a Weapon ID below to set the Weapon of %s (%s)",
+							GetBackpackSize(index),
+							GetWeaponNameEx(BackpackInfo[index][bGun][0])
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_GUN1);
+					}
+					case 5: { // Gun 2 - Small to Large Backpack
+					    format(titlestring, sizeof(titlestring), "Editing the Backpack Gun2");
+					    format(bpstring, sizeof(bpstring),"\
+							Input a Weapon ID below to set the Weapon of %s (%s)",
+							GetBackpackSize(index),
+							GetWeaponNameEx(BackpackInfo[index][bGun][1])
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_GUN2);
+					}
+					case 6: { // (Gun 3 Medium to Large)
+					    format(titlestring, sizeof(titlestring), "Editing the Backpack Gun3");
+					    format(bpstring, sizeof(bpstring),"\
+							Input a Weapon ID below to set the Weapon of %s (%s)",
+							GetBackpackSize(index),
+							GetWeaponNameEx(BackpackInfo[index][bGun][2])
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_GUN3);
+					}
+					case 7: { // (Gun 4 Large Backpack)
+						format(titlestring, sizeof(titlestring), "Editing the Backpack Gun4");
+					    format(bpstring, sizeof(bpstring),"\
+							Input a Weapon ID below to set the Weapon of %s (%s)",
+							GetBackpackSize(index),
+							GetWeaponNameEx(BackpackInfo[index][bGun][3])
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_GUN4);
+					}
+					case 8: { // (Gun 5 Medium Large Backpack)
+				        format(titlestring, sizeof(titlestring), "Editing the Backpack Gun5");
+				    	format(bpstring, sizeof(bpstring),"\
+							Input a Weapon ID below to set the Weapon of %s (%s)",
+							GetBackpackSize(index),
+							GetWeaponNameEx(BackpackInfo[index][bGun][4])
+						);
+		                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+		                SetPVarInt(playerid, "Edit_Type", TYPE_GUN5);
+					}
+		        }
+		    }
+		}
+		case DIALOG_EDITITEMS:
+		{
+		    new index = GetPVarInt(playerid, "BackpackID");
+		    if(response)
+			{
+			    if(isnull(inputtext)) return ShowEditBackpackDialog(playerid, index),DeletePVar(playerid, "Edit_Type");
+				if(!GetPVarType(playerid, "Edit_Type")) return SendClientMessageEx(playerid, COLOR_GREY, "An Error Occurred while editing a Backpack");
+				new bpstring[230], titlestring[64];
+				switch(GetPVarInt(playerid, "Edit_Type"))
+				{
+		   			case TYPE_CASH: // Editing Backpack Cash
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Cash", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Digit below to set the Cash of %s ($%s / $%s Cash)",
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bCash]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new cash = strval(inputtext);
+					    if(cash > BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+						{
+		       				format(titlestring, sizeof(titlestring), "Editing the Backpack Cash", index);
+						    format(bpstring, sizeof(bpstring)," \
+              					WARNING: $%s / $%s Backpack is on Maximum Limit!\n\n\
+								Input a Digit below to set the Cash of %s ($%s / $%s Cash)",
+								number_format(cash),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH)),
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bCash]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Cash in your $%s from %s to $%s Cash", GetPlayerRPName(playerid), GetPlayerStorageType(userid), number_format(BackpackInfo[index][bCash]), number_format(cash));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+       						format(bpstring, sizeof(bpstring), "* You have edit the Cash from $%s to $%s of Owner: %s %s", number_format(BackpackInfo[index][bCash]), number_format(cash), GetPlayerRPName(userid) ,GetBackpackSize(index));
+			       	 		SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bCash] = cash;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_POT: // Editing Backpack Pots
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Pots", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Digit below to set the Pots of %s (%sg / %sg Pots)",
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bPot]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new pots = strval(inputtext);
+					    if(pots > BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+						{
+		       				format(titlestring, sizeof(titlestring), "Editing the Backpack Pots", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %sg / %sg  Backpack is on Maximum Limit!\n\n\
+								Input a Digit below to set the Pots of %s (%sg / %sg Pots)",
+								number_format(pots),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT)),
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bPot]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Pots in your %s from %sg to %sg Pots", GetPlayerRPName(playerid), GetPlayerStorageType(userid), number_format(BackpackInfo[index][bPot]), number_format(pots));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Pots from %sg to %sg of Owner: %s %s", number_format(BackpackInfo[index][bPot]), number_format(pots) , GetPlayerRPName(userid), GetBackpackSize(index));
+				        	SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bPot] = pots;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_CRACK: // Editing Backpack Cracks
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Cracks", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Digit below to set the Cracks of %s (%sg / %sg Cracks)",
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bCrack]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new cracks = strval(inputtext);
+					    if(cracks > BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+						{
+		       				format(titlestring, sizeof(titlestring), "Editing the Backpack Cracks", index);
+						    format(bpstring, sizeof(bpstring)," \
+						         WARNING: %sg / %sg  Backpack is on Maximum Limit!\n\n\
+								Input a Digit below to set the Cracks of %s (%sg / %sg Cracks)",
+								number_format(cracks),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK)),
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bCrack]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Cracks in your %s from %sgg to %sg Cracks", GetPlayerRPName(playerid), GetPlayerStorageType(userid), number_format(BackpackInfo[index][bCrack]), number_format(cracks));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+       						format(bpstring, sizeof(bpstring), "* You have edit the Cracks from %sg to %sg of Owner: %s %s", number_format(BackpackInfo[index][bCrack]), number_format(cracks) , GetPlayerRPName(userid), GetBackpackSize(index));
+				        	SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bCrack] = cracks;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_MATS: // Editing Backpack Mats
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Mats", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Digit below to set the Mats of %s (%s / %s Mats)",
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bMats]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new mats = strval(inputtext);
+					    if(mats > BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+						{
+		       				format(titlestring, sizeof(titlestring), "Editing the Backpack Mats", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %sg / %sg  Backpack is on Maximum Limit!\n\n\
+								Input a Digit below to set the Mats of %s (%s / %s Mats)",
+								number_format(mats),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS)),
+								GetBackpackSize(index),
+								number_format(BackpackInfo[index][bMats]),
+								number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Materials in your %s from %s to %s Mats", GetPlayerRPName(playerid), GetPlayerStorageType(userid), number_format(BackpackInfo[index][bMats]), number_format(mats));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Mats from %s to %s of Owner: %s %s", number_format(BackpackInfo[index][bMats]), number_format(mats) , GetPlayerRPName(userid), GetBackpackSize(index));
+				        	SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bMats] = mats;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_GUN1: // Editing Backpack Gun1
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Gun1", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][0])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new gunid = strval(inputtext);
+					    if(!IsRoleplayWeapon(gunid))
+						{
+			   				format(titlestring, sizeof(titlestring), "Editing the Backpack Gun1", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %s cannot be insert into the Backpack\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetWeaponNameEx(gunid),
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][0])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Gun1 in your %s from %s to %s", GetPlayerRPName(playerid), GetPlayerStorageType(userid), GetWeaponNameEx(BackpackInfo[index][bGun][0]), GetWeaponNameEx(gunid));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Gun1 from %s to %s of Backpack Owner: %s  %s", GetWeaponNameEx(BackpackInfo[index][bGun][0]), GetWeaponNameEx(gunid) ,  GetPlayerRPName(userid), GetBackpackSize(index));
+							SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+
+				        BackpackInfo[index][bGun][0] = gunid;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_GUN2: // Editing Backpack Gun2
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Gun2", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][1])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new gunid = strval(inputtext);
+					    if(!IsRoleplayWeapon(gunid))
+						{
+			   				format(titlestring, sizeof(titlestring), "Editing the Backpack Gun2", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %s cannot be insert into the Backpack\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetWeaponNameEx(gunid),
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][1])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Gun2 in your %s from %s to %s", GetPlayerRPName(playerid), GetPlayerStorageType(userid), GetWeaponNameEx(BackpackInfo[index][bGun][1]), GetWeaponNameEx(gunid));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Gun2 from %s to %s of Backpack Owner: %s  %s", GetWeaponNameEx(BackpackInfo[index][bGun][1]), GetWeaponNameEx(gunid) ,  GetPlayerRPName(userid), GetBackpackSize(index));
+							SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+
+						}
+				        BackpackInfo[index][bGun][1] = gunid;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_GUN3: // Editing Backpack Gun3
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Gun3", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][2])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new gunid = strval(inputtext);
+					    if(!IsRoleplayWeapon(gunid))
+						{
+			   				format(titlestring, sizeof(titlestring), "Editing the Backpack Gun3", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %s cannot be insert into the Backpack\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetWeaponNameEx(gunid),
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][2])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Gun3 in your %s from %s to %s", GetPlayerRPName(playerid), GetPlayerStorageType(userid), GetWeaponNameEx(BackpackInfo[index][bGun][2]), GetWeaponNameEx(gunid));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Gun3 from %s to %s of Backpack Owner: %s  %s", GetWeaponNameEx(BackpackInfo[index][bGun][2]), GetWeaponNameEx(gunid) ,  GetPlayerRPName(userid), GetBackpackSize(index));
+							SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bGun][2] = gunid;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_GUN4: // Editing Backpack Gun4
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Gun4", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][3])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new gunid = strval(inputtext);
+					    if(!IsRoleplayWeapon(gunid))
+						{
+			   				format(titlestring, sizeof(titlestring), "Editing the Backpack Gun4", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %s cannot be insert into the Backpack\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetWeaponNameEx(gunid),
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][3])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Gun4 in your %s from %s to %s", GetPlayerRPName(playerid), GetPlayerStorageType(userid), GetWeaponNameEx(BackpackInfo[index][bGun][3]), GetWeaponNameEx(gunid));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Gun4 from %s to %s of Backpack Owner: %s  %s", GetWeaponNameEx(BackpackInfo[index][bGun][3]), GetWeaponNameEx(gunid) ,  GetPlayerRPName(userid), GetBackpackSize(index));
+							SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bGun][3] = gunid;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+					case TYPE_GUN5: // Editing Backpack Gun5
+					{
+					    if(!IsNumeric(inputtext))
+						{
+					        format(titlestring, sizeof(titlestring), "Editing the Backpack Gun5", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: That's not a number!\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][4])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new gunid = strval(inputtext);
+					    if(!IsRoleplayWeapon(gunid))
+						{
+			   				format(titlestring, sizeof(titlestring), "Editing the Backpack Gun5", index);
+						    format(bpstring, sizeof(bpstring)," \
+						        WARNING: %s cannot be insert into the Backpack\n\n\
+								Input a Weapon ID below to set the Weapon of %s (%s)",
+								GetWeaponNameEx(gunid),
+								GetBackpackSize(index),
+								GetWeaponNameEx(BackpackInfo[index][bGun][4])
+							);
+			                ShowPlayerDialog(playerid, DIALOG_EDITITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Edit", "Back");
+			                return 1;
+					    }
+					    new userid = -1;
+						if(BackpackInfo[index][bBackpackOwner] != -1) {
+							foreach(new i: Player) {
+							    if(backpackid[i] == MAX_BACKPACKS+1) continue;
+								if(BackpackInfo[index][bBackpackOwner] == GetPlayerSQLId(i)) {
+									userid = i;
+									break;
+								}
+							}
+						}
+						if(userid != -1) {
+							format(string, sizeof(string), "* Admin %s has edit your Gun5 in your %s from %s to %s", GetPlayerRPName(playerid), GetPlayerStorageType(userid), GetWeaponNameEx(BackpackInfo[index][bGun][4]), GetWeaponNameEx(gunid));
+							SendClientMessageEx(userid, COLOR_LIGHTBLUE, string);
+							format(bpstring, sizeof(bpstring), "* You have edit the Gun5 from %s to %s of Backpack Owner: %s  %s", GetWeaponNameEx(BackpackInfo[index][bGun][4]), GetWeaponNameEx(gunid) ,  GetPlayerRPName(userid), GetBackpackSize(index));
+							SendClientMessageEx(playerid, COLOR_WHITE, bpstring);
+						}
+				        BackpackInfo[index][bGun][4] = gunid;
+				        SaveBackpack(index);
+				        DeletePVar(playerid, "Edit_Type");
+				        return ShowEditBackpackDialog(playerid, index);
+					}
+				}
+		    }
+		    else ShowEditBackpackDialog(playerid, index), DeletePVar(playerid, "Edit_Type");
+		}
+		case DIALOG_BACKPACKMENU:
+		{
+		    if(response)
+			{
+			    if(!PlayerHasBackpack(playerid)) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Backpack");
+				SetPVarInt(playerid, "Listitem_Backpack", listitem);
+				ShowBackpackActionChoice(playerid);
+			}
+			else DeletePVar(playerid, "Listitem_Backpack");
+		}
+		case DIALOG_PUTAKEITEMS:
+		{
+		    if(response)
+		    {
+		        new bpstring[300], titlestring[64], index = GetPlayerBackpackID(playerid), rpstring[128];
+		        if(!GetPVarType(playerid, "Type_Action")) return SendClientMessageEx(playerid, COLOR_GREY, "An Error Occur during the Action Taking/Putting Items");
+		        if(isnull(inputtext)) return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+		        switch(GetPVarInt(playerid, "Type_Action"))
+		        {
+		            case 1: // Put Items
+		            {
+						switch(GetPVarInt(playerid, "Listitem_Backpack"))
+						{
+						    case 0: // Cash
+						    {
+						        if(!IsNumeric(inputtext))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: That's not a number!\n\n\
+										Input the amount of Cash that you will put in your %s ($%s / $%s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								new cash = strval(inputtext);
+								if(cash < 1)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Cash that you will put in your %s ($%s / $%s)",
+										number_format(cash),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if(GetPlayerCash(playerid) < cash)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: You don't have enough $%s Cash to put\n\n\
+										Input the amount of Cash that you will put in your %s ($%s / $%s)",
+										number_format(cash),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if((BackpackInfo[index][bCash]+cash) > BackpackLimit(BackpackInfo[index][bBackpackSize] , LIMIT_CASH))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: $%s cannot be put,Cash in your Backpack is on Maximum Limit ($%s/$%s)\n\n\
+										Input the amount of Cash that you will put in your %s ($%s / $%s)",
+										number_format(cash),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH)),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								format(rpstring, sizeof(rpstring), "Take's out some cash and put it in his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerCash(playerid, -cash);
+								BackpackInfo[index][bCash] +=cash;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+						    }
+						    case 1: // Pots
+						    {
+						        if(!IsNumeric(inputtext))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: That's not a number!\n\n\
+										Input the amount of Pots that you will put in your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								new pots = strval(inputtext);
+								if(pots < 1)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Pots that you will put in your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if(PlayerInfo[playerid][pWeed] < pots)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: You don't have enough %sg Pots to put\n\n\
+										Input the amount of Pots that you will put in your %s (%sg / %sg)",
+										number_format(pots),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if((BackpackInfo[index][bPot]+pots) > BackpackLimit(BackpackInfo[index][bBackpackSize] , LIMIT_POT))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: %sg cannot be put,Pots in your Backpack is on Maximum Limit (%sg/%sg)\n\n\
+										Input the amount of Pots that you will put in your %s (%sg / %sg)",
+										number_format(pots),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT)),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								format(rpstring, sizeof(rpstring), "Take's out some pots and put it in his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								PlayerInfo[playerid][pWeed] -= pots;
+								BackpackInfo[index][bPot] += pots;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+
+						    }
+						    case 2: // Cracks
+						    {
+						        if(!IsNumeric(inputtext))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: That's not a number!\n\n\
+										Input the amount of Cracks that you will put in your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								new Cracks = strval(inputtext);
+								if(Cracks < 1)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Cracks that you will put in your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if(PlayerInfo[playerid][pCrack] < Cracks)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: You don't have enough %sg Pots to put\n\n\
+										Input the amount of Cracks that you will put in your %s (%sg / %sg)",
+										number_format(Cracks),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if((BackpackInfo[index][bCrack]+Cracks) > BackpackLimit(BackpackInfo[index][bBackpackSize] , LIMIT_CRACK))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: %sg cannot be put,Cracks in your Backpack is on Maximum Limit (%sg/%sg)\n\n\
+										Input the amount of Cracks that you will put in your %s (%sg / %sg)",
+										number_format(Cracks),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK)),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								format(rpstring, sizeof(rpstring), "Take's out some cracks and put it in his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								PlayerInfo[playerid][pCrack] -= Cracks;
+								BackpackInfo[index][bCrack] += Cracks;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+
+						    }
+						    case 3: // Mats
+						    {
+						        if(!IsNumeric(inputtext))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Mats in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: That's not a number!\n\n\
+										Input the amount of Mats that you will put in your %s (%s / %s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								new Mats = strval(inputtext);
+								if(Mats < 1)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Mats in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Mats that you will put in your %s (%s / %s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if(PlayerInfo[playerid][pMaterials] < Mats)
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Mats in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: You don't have enough %sg Mats to put\n\n\
+										Input the amount of Mats that you will put in your %s (%s / %s)",
+										number_format(Mats),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								if((BackpackInfo[index][bMats]+Mats) > BackpackLimit(BackpackInfo[index][bBackpackSize] , LIMIT_MATS))
+								{
+							        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+										WARNING: %sg cannot be put,Mats in your Backpack is on Maximum Limit (%sg/%sg)\n\n\
+										Input the amount of Mats that you will put in your %s (%sg / %sg)",
+										number_format(Mats),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS)),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+				                	ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                	return 1;
+								}
+								format(rpstring, sizeof(rpstring), "Take's out some mats and put it in his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								PlayerInfo[playerid][pMaterials] -= Mats;
+								BackpackInfo[index][bMats] += Mats;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+
+							}
+						}
+
+		            }
+		            case 2: // Take Items
+		            {
+		               	switch(GetPVarInt(playerid, "Listitem_Backpack"))
+						{
+						    case 0: // Cash
+						    {
+						        if(!IsNumeric(inputtext))
+								{
+									format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: That's not a number!\n\n\
+										Input the amount of Cash that you will take from your %s ($%s / $%s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+								new amount = strval(inputtext);
+								if(amount < 1)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Cash that you will take from your %s ($%s / $%s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+
+								}
+								if(BackpackInfo[index][bCash] < amount)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cash in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: You don't have enough $%s Cash in your Backpack!\n\n\
+										Input the amount of Cash that you will take from your %s ($%s / $%s)",
+										number_format(amount),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCash]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+								format(rpstring, sizeof(rpstring), "Take's out some cash from his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerCash(playerid, amount);
+								BackpackInfo[index][bCash] -= amount;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+
+							}
+							case 1: // Pots
+							{
+							    if(!IsNumeric(inputtext))
+								{
+									format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: That's not a number!\n\n\
+										Input the amount of Pots that you will take from your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+								new amount = strval(inputtext);
+								if(amount < 1)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Pots that you will take from your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+
+								}
+								if(BackpackInfo[index][bPot] < amount)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Pots in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: You don't have enough %sg Pots in your Backpack!\n\n\
+										Input the amount of Pots that you will take from your %s (%sg / %sg)",
+										number_format(amount),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bPot]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+							    format(rpstring, sizeof(rpstring), "Take's out some pots from his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								PlayerInfo[playerid][pWeed] += amount;
+								BackpackInfo[index][bPot] -= amount;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+							}
+							case 2: // Cracks
+							{
+							    if(!IsNumeric(inputtext))
+								{
+									format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: That's not a number!\n\n\
+										Input the amount of Cracks that you will take from your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+								new amount = strval(inputtext);
+								if(amount < 1)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Cracks that you will take from your %s (%sg / %sg)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+
+								}
+								if(BackpackInfo[index][bCrack] < amount)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cracks in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: You don't have enough %sg Pots in your Backpack!\n\n\
+										Input the amount of Cracks that you will take from your %s (%sg / %sg)",
+										number_format(amount),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bCrack]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+							    format(rpstring, sizeof(rpstring), "Take's out some cracks from his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								PlayerInfo[playerid][pCrack] += amount;
+								BackpackInfo[index][bCrack] -= amount;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+							}
+							case 3: // Mats
+							{
+							    if(!IsNumeric(inputtext))
+								{
+									format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Mats in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: That's not a number!\n\n\
+										Input the amount of Mats that you will take from your %s (%s / %s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+								new amount = strval(inputtext);
+								if(amount < 1)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Mats in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: Must not be 0 or a Negative value!\n\n\
+										Input the amount of Mats that you will take from your %s (%s / %s)",
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+
+								}
+								if(BackpackInfo[index][bMats] < amount)
+								{
+								    format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Mats in your %s", GetBackpackSize(index));
+								    format(bpstring, sizeof(bpstring)," \
+								        WARNING: You don't have enough %sg Pots in your Backpack!\n\n\
+										Input the amount of Mats that you will take from your %s (%s / %s)",
+										number_format(amount),
+										GetBackpackSize(index),
+										number_format(BackpackInfo[index][bMats]),
+										number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+									);
+					                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+					                return 1;
+								}
+							    format(rpstring, sizeof(rpstring), "Take's out some mats from his %s", GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								PlayerInfo[playerid][pMaterials] += amount;
+								BackpackInfo[index][bMats] -= amount;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+							}
+						}
+		            }
+		        }
+		    }
+		    else ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack"), DeletePVar(playerid, "Type_Action");
+		}
+		case DIALOG_ACTIONBACKPACKMENU:
+		{
+			if(response)
+			{
+			    new bpstring[230], titlestring[64], index = GetPlayerBackpackID(playerid), rpstring[128];
+			    switch(listitem)
+				{
+			    	case 0: { // Put Items into Backpack
+						switch(GetPVarInt(playerid, "Listitem_Backpack")) {
+						    case 0: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cash in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Cash that you will put in your %s ($%s / $%s)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bCash]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                SetPVarInt(playerid, "Type_Action", 1);
+						    }
+						    case 1: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Pots in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Pots that you will put in your %s (%sg / %sg)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bPot]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                SetPVarInt(playerid, "Type_Action", 1);
+						    }
+						    case 2: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Cracks in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Cracks that you will put in your %s (%sg / %sg)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bCrack]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                SetPVarInt(playerid, "Type_Action", 1);
+						    }
+						    case 3: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Putting a Mats in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Materials that you will put in your %s (%s / %s)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bMats]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Put", "Back");
+				                SetPVarInt(playerid, "Type_Action", 1);
+						    }
+						    case 4: {
+								new gunid = GetPlayerWeapon(playerid);
+								if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Gun Equipped"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(!IsRoleplayWeapon(gunid)) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put this kind of Weapon in your Backpack"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								////if(PlayerInfo[playerid][pAGuns][GetWeaponSlot(gunid)] == gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put Admin Weapons in the Backpack!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(BackpackInfo[index][bGun][0] != 0) return SendClientMessageEx(playerid, COLOR_GREY, "There is already weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Put his %s into their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								BackpackInfo[index][bGun][0] = gunid;
+								RemovePlayerWeapon(playerid, gunid);
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+							case 5: {
+								new gunid = GetPlayerWeapon(playerid);
+								if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Gun Equipped"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(!IsRoleplayWeapon(gunid)) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put this kind of Weapon in your Backpack"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								//if(PlayerInfo[playerid][pAGuns][GetWeaponSlot(gunid)] == gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put Admin Weapons in the Backpack!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(BackpackInfo[index][bGun][1] != 0) return SendClientMessageEx(playerid, COLOR_GREY, "There is already weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Put his %s into their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								BackpackInfo[index][bGun][1] = gunid;
+								RemovePlayerWeapon(playerid, gunid);
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						    case 6: {
+								new gunid = GetPlayerWeapon(playerid);
+								if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Gun Equipped"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(!IsRoleplayWeapon(gunid)) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put this kind of Weapon in your Backpack"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								//if(PlayerInfo[playerid][pAGuns][GetWeaponSlot(gunid)] == gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put Admin Weapons in the Backpack!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(BackpackInfo[index][bGun][2] != 0) return SendClientMessageEx(playerid, COLOR_GREY, "There is already weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Put his %s into their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								BackpackInfo[index][bGun][2] = gunid;
+								RemovePlayerWeapon(playerid, gunid);
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						    case 7: {
+								new gunid = GetPlayerWeapon(playerid);
+								if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Gun Equipped"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(!IsRoleplayWeapon(gunid)) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put this kind of Weapon in your Backpack"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								//if(PlayerInfo[playerid][pAGuns][GetWeaponSlot(gunid)] == gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put Admin Weapons in the Backpack!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(BackpackInfo[index][bGun][3] != 0) return SendClientMessageEx(playerid, COLOR_GREY, "There is already weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Put his %s into their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								BackpackInfo[index][bGun][3] = gunid;
+								RemovePlayerWeapon(playerid, gunid);
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						    case 8: {
+								new gunid = GetPlayerWeapon(playerid);
+								if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You don't have any Gun Equipped"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(!IsRoleplayWeapon(gunid)) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put this kind of Weapon in your Backpack"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								//if(PlayerInfo[playerid][pAGuns][GetWeaponSlot(gunid)] == gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You cannot put Admin Weapons in the Backpack!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								if(BackpackInfo[index][bGun][4] != 0) return SendClientMessageEx(playerid, COLOR_GREY, "There is already weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Put his %s into their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								BackpackInfo[index][bGun][4] = gunid;
+								RemovePlayerWeapon(playerid, gunid);
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						}
+					}
+					case 1: { // Take Items from the Backpack
+					    switch(GetPVarInt(playerid, "Listitem_Backpack")) {
+						    case 0: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cash in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Cash that you will take from your %s ($%s / $%s)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bCash]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CASH))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+				                SetPVarInt(playerid, "Type_Action", 2);
+						    }
+						    case 1: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Pots in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Pots that you will put from your %s (%sg / %sg)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bPot]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_POT))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+				                SetPVarInt(playerid, "Type_Action", 2);
+						    }
+						    case 2: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Cracks in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Cracks that you will put from your %s (%sg / %sg)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bCrack]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_CRACK))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+				                SetPVarInt(playerid, "Type_Action", 2);
+						    }
+						    case 3: {
+						        format(titlestring, sizeof(titlestring), "{FFFFFF}Taking a Mats in your %s", GetBackpackSize(index));
+							    format(bpstring, sizeof(bpstring)," \
+									Input the amount of Materials that you will put from your %s (%s / %s)",
+									GetBackpackSize(index),
+									number_format(BackpackInfo[index][bMats]),
+									number_format(BackpackLimit(BackpackInfo[index][bBackpackSize], LIMIT_MATS))
+								);
+				                ShowPlayerDialog(playerid, DIALOG_PUTAKEITEMS, DIALOG_STYLE_INPUT, titlestring, bpstring, "Take", "Back");
+				                SetPVarInt(playerid, "Type_Action", 2);
+						    }
+						    case 4: {
+						        new gunid = BackpackInfo[index][bGun][0];
+						        if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						        if(PlayerInfo[playerid][pWeapons][GetWeaponSlot(gunid)] == gunid) return  SendClientMessageEx(playerid, COLOR_GREY, "You already have this weapon in your hand!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Take his %s from their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerWeaponEx(playerid, gunid, 60000);
+								BackpackInfo[index][bGun][0] = 0;
+								OnPlayerStatsUpdate(playerid);
+							 	ShowPlayerBackpack(playerid);
+							  	DeletePVar(playerid, "Listitem_Backpack");
+							  	return 1;
+						    }
+							case 5: {
+						        new gunid = BackpackInfo[index][bGun][1];
+						        if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						        if(PlayerInfo[playerid][pWeapons][GetWeaponSlot(gunid)] == gunid) return  SendClientMessageEx(playerid, COLOR_GREY, "You already have this weapon in your hand!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Take his %s from their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerWeaponEx(playerid, gunid, 60000);
+								BackpackInfo[index][bGun][1] = 0;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						    case 6: {
+						        new gunid = BackpackInfo[index][bGun][2];
+						        if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						        if(PlayerInfo[playerid][pWeapons][GetWeaponSlot(gunid)] == gunid) return  SendClientMessageEx(playerid, COLOR_GREY, "You already have this weapon in your hand!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Take his %s from their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerWeaponEx(playerid, gunid, 60000);
+								BackpackInfo[index][bGun][2] = 0;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						    case 7: {
+						        new gunid = BackpackInfo[index][bGun][3];
+						        if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						        if(PlayerInfo[playerid][pWeapons][GetWeaponSlot(gunid)] == gunid) return  SendClientMessageEx(playerid, COLOR_GREY, "You already have this weapon in your hand!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Take his %s from their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerWeaponEx(playerid, gunid, 60000);
+								BackpackInfo[index][bGun][3] = 0;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						    case 8: {
+						        new gunid = BackpackInfo[index][bGun][4];
+						        if(!gunid) return SendClientMessageEx(playerid, COLOR_GREY, "You dont have any Weapon in this Slot!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						        if(PlayerInfo[playerid][pWeapons][GetWeaponSlot(gunid)] == gunid) return  SendClientMessageEx(playerid, COLOR_GREY, "You already have this weapon in your hand!"), ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+								format(rpstring, sizeof(rpstring), "Take his %s from their %s", GetWeaponNameEx(gunid),GetPlayerStorageType(playerid));
+								cmd_me(playerid, rpstring);
+								GivePlayerWeaponEx(playerid, gunid, 60000);
+								BackpackInfo[index][bGun][4] = 0;
+								OnPlayerStatsUpdate(playerid);
+								return ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+						    }
+						}
+					}
+				}
+			}
+			else  ShowPlayerBackpack(playerid), DeletePVar(playerid, "Listitem_Backpack");
+		}
+	}
+	return 1;
+}
+
+hook OnPlayerConnect(playerid)
+{
+    backpackid[playerid] = MAX_BACKPACKS+1;
+	return 1;
+}

+ 7006 - 0
gamemodes/inc/server_maps.inc

@@ -0,0 +1,7006 @@
+//============================[ Faction maps ]==================================
+#define COLOR_YELLOW 0xFFFF00AA
+
+stock RemoveServerBuildings(playerid)
+{
+
+	//LSPD exterior
+	/*RemoveBuildingForPlayer(playerid, 4064, 1571.6016, -1675.7500, 35.6797, 0.25);
+	RemoveBuildingForPlayer(playerid, 3976, 1571.6016, -1675.7500, 35.6797, 0.25);*/
+	//Camp ground
+	RemoveBuildingForPlayer(playerid, 3276, 1564.8984, -52.3594, 20.7656, 0.25);
+	RemoveBuildingForPlayer(playerid, 3276, 1564.2109, -64.4688, 20.7031, 0.25);
+	RemoveBuildingForPlayer(playerid, 3276, 1563.3359, -76.2734, 20.6328, 0.25);
+	RemoveBuildingForPlayer(playerid, 3276, 1562.3203, -88.1875, 20.3750, 0.25);
+	RemoveBuildingForPlayer(playerid, 935, 1550.5625, 11.1094, 23.6328, 0.25);
+	RemoveBuildingForPlayer(playerid, 935, 1551.5000, 10.7422, 23.5859, 0.25);
+	RemoveBuildingForPlayer(playerid, 13002, 1554.0547, -0.3125, 26.8125, 0.25);
+	RemoveBuildingForPlayer(playerid, 1427, 1554.0625, 13.2969, 23.8516, 0.25);
+	RemoveBuildingForPlayer(playerid, 13003, 1559.6250, 20.0156, 23.5469, 0.25);
+	RemoveBuildingForPlayer(playerid, 3276, 1564.3438, -40.5938, 20.9453, 0.25);
+	RemoveBuildingForPlayer(playerid, 706, 1589.2109, 15.3594, 21.5234, 0.25);
+	//Furniture Store Exterior
+	RemoveBuildingForPlayer(playerid, 5931, 1114.3125, -1348.1016, 17.9844, 0.25);
+	RemoveBuildingForPlayer(playerid, 5810, 1114.3125, -1348.1016, 17.9844, 0.25);
+	//Bratva
+	RemoveBuildingForPlayer(playerid, 13744, 1272.5938, -803.1094, 86.3594, 0.25);
+	RemoveBuildingForPlayer(playerid, 617, 1254.7656, -763.2578, 90.8516, 0.25);
+	RemoveBuildingForPlayer(playerid, 617, 1317.4297, -812.0938, 75.2969, 0.25);
+	//Prison
+	RemoveBuildingForPlayer(playerid, 3366, 276.6563, 1955.7656, 16.6328, 0.25);
+	RemoveBuildingForPlayer(playerid, 16094, 191.1406, 1870.0391, 21.4766, 0.25);
+	RemoveBuildingForPlayer(playerid, 3268, 276.6563, 1955.7656, 16.6328, 0.25);
+	//FBI
+	RemoveBuildingForPlayer(playerid, 4075, 1791.7969, -1716.9844, 12.5234, 0.25);
+	RemoveBuildingForPlayer(playerid, 4076, 1783.1016, -1702.3047, 14.3516, 0.25);
+	RemoveBuildingForPlayer(playerid, 4077, 1781.4766, -1648.4219, 26.8359, 0.25);
+	RemoveBuildingForPlayer(playerid, 4078, 1783.1016, -1647.3125, 23.2578, 0.25);
+	RemoveBuildingForPlayer(playerid, 1531, 1767.2109, -1617.5391, 15.0391, 0.25);
+	RemoveBuildingForPlayer(playerid, 1531, 1799.1328, -1708.7656, 14.1016, 0.25);
+	RemoveBuildingForPlayer(playerid, 713, 1807.5156, -1625.8828, 12.7031, 0.25);
+	RemoveBuildingForPlayer(playerid, 1266, 1805.0234, -1692.4453, 25.1484, 0.25);
+	RemoveBuildingForPlayer(playerid, 1283, 1750.2656, -1719.6328, 15.6250, 0.25);
+	RemoveBuildingForPlayer(playerid, 1294, 1788.2031, -1727.9063, 16.9063, 0.25);
+	RemoveBuildingForPlayer(playerid, 4018, 1791.7969, -1716.9844, 12.5234, 0.25);
+	RemoveBuildingForPlayer(playerid, 4027, 1783.1016, -1702.3047, 14.3516, 0.25);
+	RemoveBuildingForPlayer(playerid, 700, 1777.8516, -1677.1953, 14.3125, 0.25);
+	RemoveBuildingForPlayer(playerid, 1294, 1753.7656, -1671.3125, 17.2500, 0.25);
+	RemoveBuildingForPlayer(playerid, 1260, 1805.0234, -1692.4453, 25.1484, 0.25);
+	RemoveBuildingForPlayer(playerid, 700, 1761.4609, -1651.7422, 14.3125, 0.25);
+	RemoveBuildingForPlayer(playerid, 4028, 1781.4766, -1648.4219, 26.8359, 0.25);
+	RemoveBuildingForPlayer(playerid, 3984, 1783.1016, -1647.3125, 23.2578, 0.25);
+	RemoveBuildingForPlayer(playerid, 1294, 1753.7656, -1632.0625, 17.2500, 0.25);
+	RemoveBuildingForPlayer(playerid, 700, 1792.8047, -1640.9531, 14.3125, 0.25);
+	
+	//LEC
+	RemoveBuildingForPlayer(playerid, 1268, 193.9453, -1453.7344, 24.6406, 0.25);
+	RemoveBuildingForPlayer(playerid, 730, 184.7031, -1451.4297, 10.2031, 0.25);
+	RemoveBuildingForPlayer(playerid, 1268, 218.2266, -1434.5625, 24.6406, 0.25);
+	RemoveBuildingForPlayer(playerid, 732, 188.8984, -1464.4063, 11.2969, 0.25);
+	RemoveBuildingForPlayer(playerid, 6362, 201.4453, -1476.8516, 17.9609, 0.25);
+	RemoveBuildingForPlayer(playerid, 1308, 198.3984, -1461.6563, 12.2578, 0.25);
+	RemoveBuildingForPlayer(playerid, 673, 193.1484, -1449.2344, 11.0703, 0.25);
+	RemoveBuildingForPlayer(playerid, 673, 189.2422, -1444.7734, 11.0703, 0.25);
+	RemoveBuildingForPlayer(playerid, 1259, 193.9453, -1453.7344, 24.6406, 0.25);
+	RemoveBuildingForPlayer(playerid, 673, 197.9688, -1454.4609, 11.0703, 0.25);
+	RemoveBuildingForPlayer(playerid, 6350, 247.3906, -1454.8281, 37.7344, 0.25);
+	RemoveBuildingForPlayer(playerid, 1259, 218.2266, -1434.5625, 24.6406, 0.25);
+	RemoveBuildingForPlayer(playerid, 1226, 203.1953, -1429.2031, 15.8125, 0.25);
+	RemoveBuildingForPlayer(playerid, 673, 223.0469, -1419.7266, 11.0703, 0.25);
+	RemoveBuildingForPlayer(playerid, 673, 227.8672, -1424.9531, 11.0703, 0.25);
+	RemoveBuildingForPlayer(playerid, 1308, 232.5000, -1426.0078, 12.5859, 0.25);
+	RemoveBuildingForPlayer(playerid, 620, 235.8906, -1422.5469, 10.3203, 0.25);
+	RemoveBuildingForPlayer(playerid, 6499, 290.8750, -1412.0938, 21.3047, 0.25);
+	RemoveBuildingForPlayer(playerid, 16336, -225.1875, 1394.8359, 68.5781, 0.25);
+	RemoveBuildingForPlayer(playerid, 16614, -346.6719, 1595.0781, 79.6641, 0.25);
+	RemoveBuildingForPlayer(playerid, 16615, -389.7656, 1515.1641, 74.5547, 0.25);
+	RemoveBuildingForPlayer(playerid, 16616, -326.6953, 1541.3906, 74.5547, 0.25);
+	RemoveBuildingForPlayer(playerid, 16335, -225.1875, 1394.8359, 68.5781, 0.25);
+	RemoveBuildingForPlayer(playerid, 16137, -389.7656, 1515.1641, 74.5547, 0.25);
+	RemoveBuildingForPlayer(playerid, 16138, -326.6953, 1541.3906, 74.5547, 0.25);
+	RemoveBuildingForPlayer(playerid, 16136, -350.0625, 1594.3438, 75.3125, 0.25);
+	
+	//ugly SF tree in the middle of city
+	RemoveBuildingForPlayer(playerid, 713, -1920.1875, 882.1953, 34.1406, 0.25);
+	//mat pickup 1 water
+	RemoveBuildingForPlayer(playerid, 4711, 1392.1875, -1336.8047, 15.9844, 0.25);
+	//taxi
+	RemoveBuildingForPlayer(playerid, 1226, 1774.7578, -1931.3125, 16.3750, 0.25);
+	RemoveBuildingForPlayer(playerid, 5024, 1748.8438, -1883.0313, 14.1875, 0.25);
+	RemoveBuildingForPlayer(playerid, 5083, 1748.8438, -1883.0313, 14.1875, 0.25);
+	RemoveBuildingForPlayer(playerid, 1226, 1774.7578, -1901.5391, 16.3750, 0.25);
+	//SANG Gate house and radar
+	RemoveBuildingForPlayer(playerid, 3337, -92.0469, 2072.0313, 16.6719, 0.25);
+	RemoveBuildingForPlayer(playerid, 1411, 347.1953, 1799.2656, 18.7578, 0.25);
+	RemoveBuildingForPlayer(playerid, 1411, 342.9375, 1796.2891, 18.7578, 0.25);
+	//courthouse
+	RemoveBuildingForPlayer(playerid, 2172, 217.1875, 169.9688, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 215.5625, 170.2266, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 170.2266, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 170.1641, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 217.8516, 170.6016, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 223.2031, 170.2422, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2166, 198.8672, 170.8672, 1002.0313, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 210.2813, 171.3047, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 171.5469, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 216.1953, 170.9453, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 217.1875, 171.9844, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 171.4922, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 211.3203, 173.4453, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2356, 211.3828, 174.2344, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2356, 215.2188, 172.3125, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 215.5625, 174.2266, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 216.1953, 172.9609, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 217.1875, 174.0234, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 217.8516, 172.6172, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 222.2188, 172.2656, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 174.3047, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 223.2266, 174.4063, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 210.3203, 175.4688, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 175.5938, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 216.1953, 175.0000, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2356, 218.1484, 174.5781, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 222.2109, 176.4297, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 175.6250, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 199.3047, 166.8828, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2166, 199.8594, 166.9375, 1002.0313, 0.25);
+	RemoveBuildingForPlayer(playerid, 14856, 198.4688, 168.6797, 1003.8984, 0.25);
+	RemoveBuildingForPlayer(playerid, 2356, 198.7813, 169.0313, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2165, 199.8594, 168.8984, 1002.0313, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 210.1875, 148.1094, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 211.4688, 148.1094, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 215.0078, 147.3125, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 216.6328, 147.2578, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 216.6719, 148.2031, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 215.1094, 148.2422, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1714, 211.0313, 150.0156, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 215.0859, 149.2500, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 216.6563, 149.2578, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2029, 215.9844, 149.9531, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 215.8594, 150.8047, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 210.2969, 162.9531, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 210.3203, 167.1172, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 211.3203, 160.9297, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 161.6875, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 163.0156, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 211.3125, 165.0938, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 165.8281, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 211.3047, 169.2813, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 210.9844, 167.1484, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 215.5625, 162.5078, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 216.1953, 163.2813, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 215.5625, 164.5547, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 216.1953, 165.2969, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2356, 215.2188, 166.8516, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 216.1953, 167.3359, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 220.1797, 147.2969, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1715, 221.4531, 147.2031, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1714, 221.1094, 149.2969, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 217.1875, 164.3203, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 217.1875, 162.3047, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2172, 217.1875, 166.3594, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 217.8516, 162.9375, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 217.8516, 164.9609, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 217.8516, 166.9375, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 161.7266, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 223.2031, 161.8906, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 163.0547, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 222.2031, 163.9219, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 1806, 222.6250, 165.7656, 1002.0156, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 223.2422, 166.0547, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2356, 222.2031, 167.2188, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 2193, 222.2188, 168.0781, 1002.0234, 0.25);
+	RemoveBuildingForPlayer(playerid, 14887, 228.3594, 167.5156, 1004.0703, 0.25);
+	RemoveBuildingForPlayer(playerid, 14885, 244.6875, 166.6953, 1005.5781, 0.25);
+	//gym light
+	RemoveBuildingForPlayer(playerid, 1315, 2221.9531, -1725.0156, 15.7188, 0.25);
+	//blueberry junkyard
+	RemoveBuildingForPlayer(playerid, 13191, 65.2578, -303.9844, 14.4531, 0.25);
+	RemoveBuildingForPlayer(playerid, 13192, 164.7109, -234.1875, 0.4766, 0.25);
+	RemoveBuildingForPlayer(playerid, 13193, 173.5156, -323.8203, 0.5156, 0.25);
+	RemoveBuildingForPlayer(playerid, 13195, 36.8281, -256.2266, 0.4688, 0.25);
+	RemoveBuildingForPlayer(playerid, 1426, 29.1719, -292.2734, 1.4063, 0.25);
+	RemoveBuildingForPlayer(playerid, 1431, 36.4297, -291.0625, 1.5703, 0.25);
+	RemoveBuildingForPlayer(playerid, 1426, 24.5938, -291.7578, 1.4063, 0.25);
+	RemoveBuildingForPlayer(playerid, 1438, 29.2344, -286.0547, 1.2188, 0.25);
+	RemoveBuildingForPlayer(playerid, 1440, 32.4063, -289.2188, 1.6484, 0.25);
+	RemoveBuildingForPlayer(playerid, 1438, 33.6016, -279.3516, 1.1172, 0.25);
+	RemoveBuildingForPlayer(playerid, 12861, 36.8281, -256.2266, 0.4688, 0.25);
+	RemoveBuildingForPlayer(playerid, 1450, 43.4844, -252.5703, 1.2031, 0.25);
+	RemoveBuildingForPlayer(playerid, 1449, 43.1094, -254.9609, 1.2188, 0.25);
+	RemoveBuildingForPlayer(playerid, 12859, 173.5156, -323.8203, 0.5156, 0.25);
+	RemoveBuildingForPlayer(playerid, 12805, 65.2578, -303.9844, 14.4531, 0.25);
+	RemoveBuildingForPlayer(playerid, 12956, 96.3281, -261.1953, 3.8594, 0.25);
+	RemoveBuildingForPlayer(playerid, 12860, 164.7109, -234.1875, 0.4766, 0.25);
+	//lspd jail cells
+	RemoveBuildingForPlayer(playerid, 14843, 266.3516, 81.1953, 1001.2813, 0.25);
+	//dillimore pd jail
+	RemoveBuildingForPlayer(playerid, 14883, 320.8672, 314.2109, 1000.1484, 0.25);
+	RemoveBuildingForPlayer(playerid, 2602, 317.0391, 317.6797, 998.6641, 0.25);
+	
+	//demorgan fence
+	RemoveBuildingForPlayer(playerid, 16094, 191.1406, 1870.0391, 21.4766, 0.25);
+
+	return 1;
+}
+stock CreateSANGLSAIR()
+{
+    //exterior
+	CreateDynamicObject(8253, 1446.32, -2422.67, 16.45,   0.00, 0.00, 270.00);
+	CreateDynamicObject(8247, 1491.43, -2415.10, 16.45,   0.00, 0.00, 270.00);
+	CreateDynamicObject(7981, 1479.16, -2414.78, 17.53,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1682, 1478.00, -2420.52, 28.39,   0.00, 0.00, 142.00);
+	CreateDynamicObject(944, 1457.33, -2417.85, 13.33,   0.00, 0.00, 80.00);
+	CreateDynamicObject(1332, 1460.09, -2433.35, 13.55,   0.00, 0.00, 80.00);
+	CreateDynamicObject(1333, 1460.66, -2430.90, 13.40,   0.00, 0.00, 91.00);
+	CreateDynamicObject(1327, 1459.84, -2434.82, 13.40,   0.00, 10.00, 120.00);
+	CreateDynamicObject(923, 1459.76, -2428.59, 13.44,   0.00, 0.00, 100.00);
+	CreateDynamicObject(2607, 1453.58, -2414.33, 13.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1412, 1503.58, -2402.47, 13.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8673, 1502.97, -2437.14, 14.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8673, 1502.95, -2464.87, 14.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8673, 1492.95, -2475.30, 14.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(10252, 1502.31, -2451.22, 13.70,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1412, 1503.59, -2397.20, 13.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1412, 1503.57, -2391.91, 13.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8673, 1472.51, -2475.32, 14.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3036, 1503.00, -2454.81, 13.74,   0.00, 0.00, 156.00);
+	CreateDynamicObject(3036, 1503.00, -2454.81, 10.84,   0.00, 0.00, 156.00);
+	CreateDynamicObject(3568, 1489.00, -2437.23, 15.02,   0.00, 0.00, 260.00);
+	CreateDynamicObject(11292, 1454.12, -2413.26, 13.94,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2197, 1454.49, -2411.64, 12.72,   0.00, 0.00, 270.00);
+	CreateDynamicObject(11295, 1372.93, -2423.40, 18.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3035, 1432.86, -2429.13, 13.29,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3761, 1438.26, -2411.14, 13.74,   0.00, 0.00, 272.00);
+	CreateDynamicObject(2921, 1458.96, -2435.28, 18.10,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3172, 1488.83, -2399.07, 12.52,   0.00, 0.00, -84.00);
+	CreateDynamicObject(2738, 1457.73, -2411.63, 13.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2515, 1458.17, -2414.02, 13.73,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2685, 1458.40, -2413.69, 14.23,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2741, 1458.35, -2414.09, 14.26,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2904, 1456.08, -2412.28, 13.95,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2904, 1456.03, -2412.28, 13.95,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2197, 1454.48, -2412.36, 12.72,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2595, 1455.46, -2412.26, 14.77,   0.00, 0.00, -142.00);
+	CreateDynamicObject(1806, 1451.82, -2412.69, 12.73,   0.00, 0.00, 98.00);
+	CreateDynamicObject(1808, 1450.25, -2411.61, 12.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3066, 1435.84, -2418.87, 13.54,   0.00, 0.00, 0.00);
+	CreateDynamicObject(943, 1448.95, -2413.10, 13.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1431, 1437.95, -2412.68, 13.09,   0.00, 0.00, 11.00);
+	CreateDynamicObject(1431, 1442.84, -2410.80, 13.09,   0.00, 0.00, 178.00);
+	CreateDynamicObject(1226, 1459.58, -2437.32, 16.39,   0.00, 0.00, 90.00);
+	CreateDynamicObject(11631, 1450.59, -2413.47, 13.93,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1778, 1456.32, -2412.02, 12.73,   0.00, 0.00, 171.00);
+	CreateDynamicObject(2613, 1456.00, -2412.14, 12.73,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1334, 1497.55, -2401.07, 13.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1339, 1495.14, -2396.68, 13.18,   0.00, 0.00, -229.00);
+	CreateDynamicObject(1328, 1495.41, -2397.61, 13.05,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3262, 1503.89, -2456.67, 12.54,   0.00, 0.00, 105.00);
+	CreateDynamicObject(1536, 1479.25, -2401.84, 12.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8673, 1428.79, -2475.33, 14.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8673, 1408.35, -2475.33, 14.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8673, 1387.90, -2475.33, 14.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8673, 1374.60, -2475.34, 14.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3664, 1374.34, -2457.75, 19.34,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2960, 1438.89, -2475.22, 13.29,   0.00, 90.00, 90.00);
+	CreateDynamicObject(2960, 1462.06, -2475.17, 13.29,   0.00, 90.00, 90.00);
+
+
+
+	//interior - will put this into interior ID hence hiding objects at this height (and shadows ect)
+	CreateDynamicObject(16642, 263.70, 1773.81, 400.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16642, 263.19, 1773.87, 400.71,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(19169, 266.16, 1751.15, 398.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19168, 264.66, 1751.15, 398.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2163, 266.55, 1749.99, 398.03,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2163, 265.84, 1751.53, 398.03,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(19170, 264.66, 1749.65, 398.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19171, 266.16, 1749.65, 398.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2163, 264.99, 1749.30, 398.03,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2163, 264.29, 1750.86, 398.03,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2198, 266.41, 1751.36, 398.99,   0.00, 180.00, 0.00, 50, 50);
+	CreateDynamicObject(2198, 265.44, 1751.32, 398.99,   0.00, 180.00, 0.00, 50, 50);
+	CreateDynamicObject(2198, 264.47, 1749.48, 398.99,   0.00, 180.00, 180.00, 50, 50);
+	CreateDynamicObject(2198, 265.37, 1749.51, 398.99,   0.00, 180.00, 180.00, 50, 50);
+	CreateDynamicObject(2163, 265.84, 1751.53, 397.39,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2163, 264.29, 1750.86, 397.39,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2163, 264.99, 1749.30, 397.39,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2163, 266.55, 1749.99, 397.39,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2161, 272.13, 1751.19, 398.29,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2167, 271.90, 1752.18, 398.29,   0.00, 0.00, 273.00, 50, 50);
+	CreateDynamicObject(11292, 276.75, 1750.13, 399.29,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(11292, 276.33, 1753.97, 399.29,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2197, 270.76, 1749.93, 398.29,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16644, 262.55, 1746.70, 400.70,   90.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3386, 251.74, 1752.49, 397.79,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3384, 271.24, 1753.93, 399.63,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3567, 268.05, 1745.40, 400.59,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(3567, 268.06, 1745.42, 402.59,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(16087, 266.09, 1743.26, 399.54,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(8595, 265.65, 1734.50, 400.99,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2356, 263.13, 1751.32, 398.28,   0.00, 0.00, -164.00, 50, 50);
+	CreateDynamicObject(2356, 262.80, 1749.34, 398.28,   0.00, 0.00, -69.00, 50, 50);
+	CreateDynamicObject(2356, 265.47, 1747.76, 398.28,   0.00, 0.00, 33.00, 50, 50);
+	CreateDynamicObject(2356, 267.35, 1751.70, 398.28,   0.00, 0.00, 99.00, 50, 50);
+	CreateDynamicObject(2356, 269.04, 1753.53, 398.28,   0.00, 0.00, 4.00, 50, 50);
+	CreateDynamicObject(2356, 269.93, 1755.14, 398.28,   0.00, 0.00, -127.00, 50, 50);
+	CreateDynamicObject(11631, 268.47, 1754.85, 399.53,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(945, 265.41, 1750.33, 408.98,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2197, 270.78, 1753.05, 398.29,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(3017, 271.72, 1749.99, 399.98,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3031, 269.97, 1747.30, 399.87,   0.00, 0.00, 47.00, 50, 50);
+	CreateDynamicObject(2902, 270.23, 1747.69, 398.93,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(2707, 271.24, 1750.82, 400.55,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2707, 271.23, 1752.45, 400.55,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19602, 271.93, 1751.41, 399.71,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19787, 270.75, 1752.02, 401.19,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(19805, 261.28, 1746.80, 400.35,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(19814, 267.86, 1755.55, 399.44,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19825, 270.64, 1752.03, 402.35,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(19826, 262.67, 1755.55, 399.71,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11706, 266.33, 1755.28, 398.29,   0.00, 0.00, 3.00, 50, 50);
+	CreateDynamicObject(11711, 264.30, 1755.58, 400.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11728, 267.02, 1755.63, 399.58,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11727, 258.58, 1747.66, 400.81,   0.00, 0.00, -225.00, 50, 50);
+	CreateDynamicObject(11727, 255.96, 1750.33, 400.81,   0.00, 0.00, -225.00, 50, 50);
+	CreateDynamicObject(11729, 251.46, 1753.52, 398.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11730, 251.48, 1754.20, 398.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11729, 251.46, 1754.91, 398.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11738, 251.52, 1754.11, 398.54,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11745, 251.98, 1753.48, 398.52,   0.00, 0.00, 5.00, 50, 50);
+	CreateDynamicObject(11292, 253.41, 1756.17, 399.57,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11721, 261.41, 1755.54, 399.01,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19942, 263.87, 1749.84, 398.98,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(19907, 240.94, 1748.88, 398.19,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(19903, 251.73, 1756.82, 398.36,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19816, 252.20, 1757.26, 398.56,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19815, 253.16, 1757.49, 399.93,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19843, 253.17, 1757.32, 398.82,   0.00, 70.00, -90.00, 50, 50);
+	CreateDynamicObject(19846, 253.44, 1757.18, 398.62,   -10.00, 70.00, -90.00, 50, 50);
+	CreateDynamicObject(19623, 252.43, 1757.35, 398.41,   0.00, 0.00, 30.00, 50, 50);
+	CreateDynamicObject(2171, 258.50, 1748.46, 398.29,   0.00, 0.00, 135.00, 50, 50);
+	CreateDynamicObject(2184, 258.99, 1747.65, 398.29,   0.00, 0.00, -20.00, 50, 50);
+	CreateDynamicObject(2196, 260.43, 1747.87, 399.06,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(328, 258.43, 1748.50, 399.07,   90.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1271, 259.59, 1751.71, 398.61,   0.00, 0.00, 10.00, 50, 50);
+	CreateDynamicObject(3016, 259.61, 1751.75, 399.08,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1421, 255.73, 1752.53, 399.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3006, 259.51, 1754.90, 398.10,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19858, 263.59, 1760.47, 399.52,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(8555, 265.14, 1757.42, 374.95,   0.00, 0.00, 0.00, 50, 50); //floor
+	CreateDynamicObject(3113, 274.38, 1760.59, 399.72,   0.00, 15.50, 90.00, 50, 50);
+	CreateDynamicObject(2202, 257.37, 1749.60, 398.28,   0.00, 0.00, 135.00, 50, 50);
+	return 1;
+
+}
+stock CreateSAnewsINT()
+{
+	SetDynamicObjectMaterial(CreateDynamicObject(6959, -1934.02039, 521.73389, 1182.36780,   0.00000, 90.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(6959, -1959.85217, 547.42078, 1189.16968,   0.00000, 90.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19362, -1954.18396, 529.84302, 1201.23291,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19362, -1954.18396, 529.84302, 1197.73364,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19435, -1954.20215, 526.67981, 1201.94690,   90.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19435, -1954.25781, 526.65521, 1203.50232,   90.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19362, -1954.18396, 523.70300, 1201.23291,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19362, -1954.18396, 523.70300, 1197.73267,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19454, -1949.44482, 531.35992, 1198.60376,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19454, -1949.46118, 531.37140, 1202.69177,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19454, -1939.81274, 531.35992, 1198.60376,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19454, -1939.81274, 531.35992, 1202.69177,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1961.72571, 537.48901, 1198.60217,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1949.80566, 537.48901, 1198.60217,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1948.98145, 542.29999, 1198.60217,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1949.80566, 544.33099, 1198.60217,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1959.42981, 544.33301, 1198.60217,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1945.07715, 542.21710, 1198.60217,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1959.79333, 520.51007, 1198.60217,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1959.79333, 520.51007, 1209.64917,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1957.03052, 530.40948, 1209.64917,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1950.99854, 530.40747, 1209.64917,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1942.48254, 530.40948, 1212.52954,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1939.26355, 530.40747, 1209.64917,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 8947, "vgslockup", "villainnwall02_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1965.77625, 529.17993, 1191.82495,   0.00000, 0.00000, 90.00000, 1, -1, -1), 0, 14596, "papaerchaseoffice", "wall_stone6_256", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, -1960.94202, 525.74072, 1215.33960,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 14596, "papaerchaseoffice", "wall_stone6_256", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(6959, -1940.10730, 527.49188, 1209.93347,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 13724, "docg01_lahills", "sw_mansionwin", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(6959, -1939.45740, 537.86249, 1202.97363,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 1491, "int_doors", "CJ_W_wood", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(6959, -1940.12939, 527.52997, 1198.63281,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 1491, "int_doors", "CJ_W_wood", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(6959, -1939.45740, 537.86249, 1204.57422,   0.00000, 0.00000, 0.00000, 1, -1, -1), 0, 1491, "int_doors", "CJ_W_wood", 0xFFFFFFFF);
+	CreateDynamicObject(9518, -1943.89392, 500.71091, 1198.82068,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(9518, -1954.87610, 500.71091, 1208.40674,   0.00000, 180.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1951.99902, 507.11160, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1946.85400, 507.11160, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1949.98303, 507.11160, 1203.74390,   90.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1949.64697, 507.11160, 1209.13391,   90.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1958.76794, 507.11160, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1940.08496, 507.11160, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1940.08496, 517.15662, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1958.76221, 517.13745, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1949.54895, 517.15662, 1198.59888,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1961.79895, 517.15662, 1198.58496,   -90.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(1806, -1952.85095, 518.90991, 1198.60046,   0.00000, 0.00000, 200.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1950.97180, 517.11139, 1198.60156,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(19176, -1949.41003, 506.82651, 1200.05762,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1949.64697, 517.15662, 1209.13391,   90.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(8947, -1966.96448, 510.99741, 1201.49414,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(8947, -1932.43347, 509.79639, 1201.49414,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(8947, -1932.43347, 520.04541, 1207.54211,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(3850, -1955.93225, 517.13678, 1205.05261,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(3850, -1952.35596, 517.15521, 1205.05261,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(3850, -1946.72034, 517.13678, 1205.05261,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(3850, -1943.02429, 517.13678, 1205.05261,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(14867, -1946.60461, 521.21088, 1200.13196,   0.00000, 0.00000, -180.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1958.76794, 522.00763, 1191.04675,   0.00000, 180.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1954.16174, 522.00763, 1191.04675,   0.00000, 180.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1966.63501, 522.00763, 1202.16406,   -90.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2008, -1954.96606, 517.27197, 1198.57007,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(640, -1955.46460, 507.50919, 1199.30115,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(640, -1943.42859, 507.50919, 1199.30115,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2240, -1957.09094, 516.95880, 1199.89844,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2257, -1939.84680, 511.87280, 1203.90710,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1956.08569, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1957.07971, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1955.09167, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1954.09766, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1953.10376, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1952.10974, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2707, -1951.25769, 517.56567, 1202.88489,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2011, -1947.16211, 508.57126, 1198.60181,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2011, -1951.52979, 508.49530, 1198.60181,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2011, -1949.39539, 515.59241, 1198.60181,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1952.67773, 509.06290, 1198.60181,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1955.86890, 509.05807, 1198.60181,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2855, -1954.05420, 510.73621, 1199.08362,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1935.61487, 514.42932, 1198.83984,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1935.61487, 514.42932, 1199.33667,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1931.05017, 513.19043, 1199.34668,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(825, -1942.37158, 515.30511, 1200.32983,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14455, -1959.44824, 514.25989, 1200.19238,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1954.28821, 512.58069, 1198.60181,   0.00000, 0.00000, 360.00000, 1, -1, -1);
+	CreateDynamicObject(2315, -1954.27979, 510.60620, 1198.60046,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2854, -1953.50586, 510.59689, 1198.65771,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2852, -1956.47754, 510.77734, 1199.09314,   0.00000, 0.00000, 84.00000, 1, -1, -1);
+	CreateDynamicObject(14596, -1966.33569, 530.11639, 1203.49451,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(8947, -1966.96252, 510.99640, 1206.03308,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2164, -1959.45435, 518.68103, 1198.59607,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1959.06909, 520.61798, 1198.60242,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1947.42102, 517.83759, 1203.74390,   -90.00000, 0.00000, 270.00000, 1, -1, -1);
+	CreateDynamicObject(3851, -1948.53760, 531.28870, 1200.39600,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(1806, -1955.97778, 519.07062, 1198.60046,   0.00000, 0.00000, 165.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1960.20251, 529.77881, 1203.44226,   -90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1960.20642, 529.77881, 1203.74414,   -90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14597, -1945.36548, 543.63977, 1206.54224,   0.00000, 0.00000, 270.12000, 1, -1, -1);
+	CreateDynamicObject(14598, -1933.57349, 534.16309, 1202.71008,   0.00000, 0.00000, 270.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1960.20642, 529.77881, 1209.24084,   -90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14393, -1945.37817, 526.44971, 1200.89172,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(14392, -1945.47375, 526.44159, 1199.89063,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(3851, -1937.23669, 531.28870, 1200.39600,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(8947, -1929.18616, 538.15411, 1201.38306,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(8947, -1930.89795, 548.13538, 1201.38306,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2132, -1938.82947, 538.67548, 1198.60193,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2133, -1938.82947, 539.67999, 1198.60059,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2131, -1938.82947, 542.68060, 1198.60181,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2147, -1938.82947, 540.66949, 1198.60107,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(1432, -1941.95947, 539.95538, 1198.71191,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2616, -1944.94666, 540.08228, 1200.19714,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2611, -1944.97620, 539.78668, 1200.30408,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2149, -1938.69250, 539.66638, 1199.79907,   0.00000, 0.00000, 268.20499);
+	CreateDynamicObject(1209, -1944.66223, 541.80719, 1198.59985,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2241, -1938.72070, 541.73328, 1201.49609,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2011, -1944.23572, 537.85986, 1198.60132,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2261, -1938.77234, 538.10681, 1200.73035,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1957.38135, 512.58484, 1198.60181,   0.00000, 0.00000, 360.00000, 1, -1, -1);
+	CreateDynamicObject(2315, -1957.57727, 510.71524, 1198.60046,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(19325, -1945.06824, 528.03540, 1199.48462,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(9518, -1934.89038, 549.92542, 1198.79272,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2606, -1960.05505, 540.34998, 1200.59387,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2606, -1960.05505, 540.34998, 1201.03394,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2606, -1960.05505, 540.34998, 1201.47388,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2606, -1960.05505, 542.31000, 1201.03394,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2606, -1960.05505, 542.31000, 1200.59387,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2606, -1960.05505, 542.31000, 1201.47388,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1960.20251, 553.42383, 1203.44226,   -90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2169, -1955.04236, 540.01801, 1198.60168,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2169, -1954.01746, 540.96051, 1198.59973,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2169, -1953.04736, 540.01801, 1198.60168,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2190, -1954.73901, 540.85962, 1199.38379,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(330, -1954.14514, 540.37744, 1199.36865,   90.00000, 0.00000, -188.00000, 1, -1, -1);
+	CreateDynamicObject(2232, -1956.22961, 543.59515, 1199.21265,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2894, -1954.39661, 540.97510, 1199.39001,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1962, -1954.94324, 544.18701, 1200.88147,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1958, -1953.51221, 540.89130, 1199.38635,   0.00000, 0.00000, 193.00000, 1, -1, -1);
+	CreateDynamicObject(1955, -1954.58667, 540.55579, 1199.39526,   -113.00000, -11.00000, 324.00000, 1, -1, -1);
+	CreateDynamicObject(1955, -1954.57129, 540.86603, 1199.68018,   0.00000, 295.00000, 1.00000, 1, -1, -1);
+	CreateDynamicObject(1954, -1954.00977, 540.46661, 1199.45703,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2190, -1955.38867, 541.32648, 1199.38379,   0.00000, 0.00000, 127.00000, 1, -1, -1);
+	CreateDynamicObject(3387, -1954.71497, 543.76270, 1198.60205,   0.00000, 0.00000, -91.00000, 1, -1, -1);
+	CreateDynamicObject(3387, -1953.35913, 543.66864, 1198.60205,   0.00000, 0.00000, -91.00000, 1, -1, -1);
+	CreateDynamicObject(1663, -1954.61328, 541.95819, 1199.02515,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1663, -1954.78625, 539.29608, 1199.02515,   0.00000, 0.00000, 142.00000, 1, -1, -1);
+	CreateDynamicObject(1663, -1951.89148, 540.62250, 1199.02515,   0.00000, 0.00000, 273.00000, 1, -1, -1);
+	CreateDynamicObject(1955, -1953.32446, 540.37268, 1199.39526,   -113.00000, -11.00000, 251.00000, 1, -1, -1);
+	CreateDynamicObject(1955, -1953.02930, 540.55847, 1199.70117,   0.00000, -91.00000, -55.00000, 1, -1, -1);
+	CreateDynamicObject(1955, -1954.54614, 540.35889, 1199.39526,   -113.00000, -55.00000, 120.00000, 1, -1, -1);
+	CreateDynamicObject(1955, -1954.45605, 540.09308, 1199.74316,   0.00000, -76.00000, 207.00000, 1, -1, -1);
+	CreateDynamicObject(2002, -1952.24963, 543.68512, 1198.60254,   0.00000, 0.00000, 4.00000, 1, -1, -1);
+	CreateDynamicObject(2002, -1946.32642, 508.53812, 1198.60254,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2225, -1953.05627, 539.56293, 1198.60144,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2611, -1951.66418, 537.64160, 1200.09204,   0.00000, 0.00000, -180.00000, 1, -1, -1);
+	CreateDynamicObject(14633, -1954.85486, 546.61298, 1200.06116,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1937.55957, 542.85272, 1204.54626,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2166, -1939.53674, 541.86206, 1204.54492,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1935.59961, 542.85272, 1204.54626,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1935.59961, 546.85669, 1204.54626,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2166, -1933.37390, 546.71063, 1204.54492,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1939.06323, 546.89581, 1204.54626,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2164, -1941.07166, 547.39948, 1204.54724,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2167, -1936.78479, 547.47406, 1204.54504,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2200, -1931.98755, 543.53192, 1204.54565,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2356, -1938.66870, 541.63470, 1204.54541,   0.00000, 0.00000, 25.00000, 1, -1, -1);
+	CreateDynamicObject(2356, -1936.80847, 541.63501, 1204.54541,   0.00000, 0.00000, -11.00000, 1, -1, -1);
+	CreateDynamicObject(2356, -1935.24158, 542.25085, 1204.54541,   0.00000, 0.00000, 193.00000, 1, -1, -1);
+	CreateDynamicObject(2356, -1933.34326, 546.01453, 1204.54541,   0.00000, 0.00000, 258.00000, 1, -1, -1);
+	CreateDynamicObject(2356, -1934.97510, 545.61475, 1204.54541,   0.00000, 0.00000, 360.00000, 1, -1, -1);
+	CreateDynamicObject(2356, -1938.13147, 545.79950, 1204.54541,   0.00000, 0.00000, 4.00000, 1, -1, -1);
+	CreateDynamicObject(2309, -1941.79089, 541.25653, 1204.54370,   0.00000, 0.00000, 273.00000, 1, -1, -1);
+	CreateDynamicObject(2309, -1941.73120, 542.78320, 1204.54370,   0.00000, 0.00000, 267.00000, 1, -1, -1);
+	CreateDynamicObject(2173, -1939.12500, 535.52509, 1204.54504,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2173, -1937.08496, 535.52509, 1204.54504,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2173, -1936.06946, 536.55389, 1204.54504,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2173, -1938.10974, 536.55341, 1204.54504,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2173, -1935.08521, 535.56427, 1204.54504,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(1671, -1933.80042, 536.47375, 1204.96484,   0.00000, 0.00000, -89.00000, 1, -1, -1);
+	CreateDynamicObject(1671, -1936.51099, 534.50018, 1204.96484,   0.00000, 0.00000, -192.94000, 1, -1, -1);
+	CreateDynamicObject(1671, -1938.75024, 534.41394, 1205.07312,   0.00000, 0.00000, 162.61290, 1, -1, -1);
+	CreateDynamicObject(1671, -1940.14941, 535.94818, 1204.96484,   0.00000, 0.00000, -273.00000, 1, -1, -1);
+	CreateDynamicObject(1671, -1938.65833, 537.38788, 1204.96484,   0.00000, 0.00000, -360.00000, 1, -1, -1);
+	CreateDynamicObject(1671, -1936.79517, 537.56537, 1204.96484,   0.00000, 0.00000, -287.00000, 1, -1, -1);
+	CreateDynamicObject(3077, -1931.81958, 536.16486, 1204.03821,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(14532, -1932.48853, 533.35852, 1205.51794,   0.00000, 0.00000, 62.00000, 1, -1, -1);
+	CreateDynamicObject(19165, -1931.82385, 536.85382, 1206.22021,   90.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2615, -1931.87231, 535.31671, 1206.08679,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2076, -1938.61792, 536.06763, 1207.82764,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2076, -1936.47595, 536.06763, 1207.82764,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2010, -1940.60071, 539.12891, 1204.54700,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2010, -1940.63049, 532.75623, 1204.54700,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2206, -1944.64856, 553.10278, 1204.54724,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(14455, -1942.63196, 550.14148, 1206.18481,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(14455, -1948.07202, 554.49353, 1206.18481,   0.00000, 0.00000, 270.00000, 1, -1, -1);
+	CreateDynamicObject(1714, -1945.41040, 554.61230, 1204.55103,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1811, -1951.16870, 544.92328, 1205.16235,   0.00000, 0.00000, 344.26666, 1, -1, -1);
+	CreateDynamicObject(2161, -1947.10510, 556.78223, 1204.56335,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2164, -1944.95068, 556.73285, 1204.55103,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2254, -1946.60400, 556.68604, 1207.17737,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1705, -1946.69214, 548.79785, 1204.54614,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(1705, -1943.13208, 548.78027, 1204.54614,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2166, -1953.66296, 545.68860, 1204.54492,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2960, -1951.92285, 544.01288, 1206.68457,   0.00000, 90.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2960, -1952.07410, 543.88818, 1206.68457,   0.00000, 90.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(19325, -1955.50696, 543.88141, 1206.60864,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1955.67749, 545.70795, 1204.54626,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2894, -1953.60754, 545.74323, 1205.33484,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2165, -1955.15723, 542.18420, 1204.54626,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1958.43481, 540.83649, 1204.54346,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1958.43481, 540.83649, 1205.94348,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1958.43481, 541.84448, 1204.54346,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1958.43481, 542.82452, 1204.54346,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1958.43481, 542.82452, 1205.94348,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2007, -1958.43481, 541.84448, 1205.94348,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2163, -1956.11536, 540.24768, 1204.54529,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(1806, -1953.72083, 545.00745, 1204.54541,   0.00000, 0.00000, 288.09891, 1, -1, -1);
+	CreateDynamicObject(1702, -1949.47766, 543.36475, 1204.54578,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(2199, -1958.76160, 544.89795, 1204.54468,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2200, -1958.14050, 547.50775, 1204.54431,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14391, -1946.69812, 527.21100, 1199.61255,   0.00000, 0.00000, 196.00000, 1, -1, -1);
+	CreateDynamicObject(14391, -1958.94348, 540.84711, 1199.53247,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14632, -1950.26172, 546.02649, 1206.02905,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(948, -1949.68982, 540.60999, 1204.54797,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(949, -1949.56250, 546.71442, 1205.17163,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2011, -1954.97815, 540.51892, 1204.54431,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2194, -1946.11047, 552.86908, 1205.75696,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2247, -1956.63074, 547.24384, 1206.84570,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14867, -1953.25696, 539.44427, 1206.03674,   0.00000, 0.00000, -180.00000, 1, -1, -1);
+	CreateDynamicObject(2191, -1949.64014, 533.13544, 1204.54761,   0.00000, 0.00000, 181.00000, 1, -1, -1);
+	CreateDynamicObject(2167, -1958.79883, 534.60309, 1204.54382,   0.00000, 0.00000, 91.00000, 1, -1, -1);
+	CreateDynamicObject(2258, -1951.81738, 547.56226, 1207.12842,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18755, -1934.64197, 533.66669, 1200.50586,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18756, -1934.62891, 535.58551, 1200.47754,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18757, -1934.62891, 531.59912, 1200.47754,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18755, -1937.91895, 527.55402, 1206.45300,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18756, -1937.92590, 529.56940, 1206.42017,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18757, -1937.92590, 525.61169, 1206.42017,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1954.30237, 518.21448, 1209.47192,   90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1949.54895, 518.21448, 1209.47192,   90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1944.30103, 518.21448, 1209.47192,   90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1940.08496, 518.21448, 1209.46985,   90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2774, -1959.98376, 518.21033, 1209.45190,   90.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2202, -1952.49231, 532.86145, 1204.54480,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2167, -1958.84949, 535.63458, 1204.54382,   0.00000, 0.00000, 91.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1936.75269, 521.48163, 1204.74829,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1936.75269, 521.48163, 1205.24634,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1931.19067, 521.48163, 1205.26233,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(9345, -1931.19067, 520.03961, 1205.26233,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(14402, -1943.99548, 521.96399, 1205.90747,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(14402, -1941.67419, 521.40784, 1205.90747,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(638, -1953.05054, 529.71680, 1205.20667,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(2257, -1951.86792, 530.28522, 1207.21680,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1216, -1943.72400, 511.85321, 1199.20776,   0.00000, 0.00000, -16.00000, 1, -1, -1);
+	CreateDynamicObject(1216, -1941.27466, 511.12018, 1199.20776,   0.00000, 0.00000, -16.00000, 1, -1, -1);
+	CreateDynamicObject(1663, -1957.26672, 540.24512, 1199.02515,   0.00000, 0.00000, 280.00000, 1, -1, -1);
+	CreateDynamicObject(2256, -1950.42664, 537.40106, 1201.00012,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2010, -1958.71924, 524.23828, 1198.60132,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(2010, -1959.05115, 528.69135, 1198.60132,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18075, -1946.83398, 510.12341, 1208.73242,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18075, -1957.02075, 510.13211, 1208.73242,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18075, -1957.01941, 524.43011, 1208.73242,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18075, -1946.83398, 524.43011, 1208.73242,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(945, -1954.02405, 540.15125, 1207.89270,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18075, -1959.55554, 530.48059, 1203.00244,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1734, -1941.82349, 539.76111, 1202.94458,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(18075, -1948.15674, 532.04657, 1203.00244,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(1533, -1961.12585, 527.12506, 1210.19922,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(1533, -1963.48926, 529.30328, 1192.77478,   0.00000, 0.00000, -180.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1959.11353, 530.25732, 1198.60181,   0.00000, 0.00000, 89.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1952.12598, 536.62579, 1198.60181,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1950.94189, 529.35504, 1204.54370,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1957.20605, 529.49261, 1204.54370,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(1713, -1938.40918, 539.22144, 1204.54370,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(17556, -1919.38330, 557.78351, 1174.05945,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(10183, -1907.13855, 564.07758, 1169.76855,   0.00000, 0.00000, -44.43500, 1, -1, -1);
+	CreateDynamicObject(10183, -1931.38086, 563.97272, 1169.76855,   0.00000, 0.00000, 135.46001, 1, -1, -1);
+	CreateDynamicObject(17556, -1919.38135, 567.87952, 1174.00134,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(2949, -1910.73669, 541.28729, 1169.68884,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(18755, -1921.05676, 586.37207, 1171.66675,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(18756, -1921.02234, 582.54999, 1171.66785,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(18757, -1921.04077, 582.54999, 1171.66785,   0.00000, 0.00000, -90.00000, 1, -1, -1);
+	CreateDynamicObject(3055, -1918.98547, 541.33447, 1170.18042,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(982, -1937.66223, 588.59460, 34.97530,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(982, -1937.58875, 571.72052, 35.00330,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(984, -1924.77246, 578.23779, 35.00300,   0.00000, 0.00000, 0.00000, 1, -1, -1);
+	CreateDynamicObject(984, -1956.77258, 571.72778, 34.94730,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(983, -1953.64978, 588.59833, 34.97530,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(983, -1957.76575, 588.59833, 34.97530,   0.00000, 0.00000, 90.00000, 1, -1, -1);
+	CreateDynamicObject(983, -1960.96484, 585.34497, 34.97530,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(983, -1924.75317, 585.38013, 34.97530,   0.00000, 0.00000, 180.00000, 1, -1, -1);
+	CreateDynamicObject(1811, -1945.63403, 551.45215, 1205.16235,   0.00000, 0.00000, -84.00000, 1, -1, -1);
+	return 1;
+}
+//LSPD stuff by Nate/Jacob
+stock CustObjectLSPDExterior(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+	new LSPDExterior=CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+	SetDynamicObjectMaterial(LSPDExterior, 6, 10398, "countryclub_sfs", "hc_brickwall1", 0); //Wall
+	SetDynamicObjectMaterial(LSPDExterior, 12, 10789, "xenon_sfse", "newindow4", 0); //Windows
+	SetDynamicObjectMaterial(LSPDExterior, 4, 10053, "slapart01sfe", "whitedecosfe4", 0); //White pill
+	SetDynamicObjectMaterial(LSPDExterior, 5, 10053, "slapart01sfe", "whitedecosfe4", 0); //White pill
+	SetDynamicObjectMaterial(LSPDExterior, 2, 3979, "civic01_lan", "sl_laglasswall2", 0); //Glass above the door
+	SetDynamicObjectMaterial(LSPDExterior, 8, 10398, "countryclub_sfs", "hc_brickwall1", 0); //Garage wall
+	SetDynamicObjectMaterial(LSPDExterior, 9, 16150, "ufo_bar", "GEwhite1_64", 0); //Roof
+	SetDynamicObjectMaterial(LSPDExterior, 7, 10053, "slapart01sfe", "whitedecosfe4", 0); //Top
+}
+
+stock CreateFurnitureExterior(){
+	new IKEA;
+	IKEA = CreateObject(5810, 1114.31250, -1348.10156, 17.98440,   0.00000, 0.00000, 0.00000);
+	SetObjectMaterial(IKEA, 5, 18265, "w_town3cs_t", "ws_whitewall2_top", 0);//Blue
+	SetObjectMaterial(IKEA, 1, 13014, "sw_block04", "studiowall2_law", 0);//Yellow
+	SetObjectMaterial(IKEA, 7, 10359, "roads_sfs", "ws_carparknew2", 0);//Roof
+	SetObjectMaterial(IKEA, 2, 8488, "flamingo1", "shopwindowlow2_256", 0);//windows
+	//I
+	new IKEAI;
+	IKEAI = CreateDynamicObject(19327,1095.7576900,-1369.6868900,20.9198000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEAI, 0, "D", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 180, 1, 0xFF0000BB, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//K
+	new IKEAK;
+	IKEAK = CreateDynamicObject(19327,1096.5737300,-1369.6888400,20.9198000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEAK, 0, "I", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 180, 1, 0xFF0000BB, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//E
+	new IKEAE;
+	IKEAE = CreateDynamicObject(19327,1097.3896500,-1369.6908000,20.9198000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEAE, 0, "K", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 180, 1, 0xFF0000BB, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//A
+	new IKEAA;
+	IKEAA = CreateDynamicObject(19327,1098.2055700,-1369.6927500,20.9198000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEAA, 0, "K", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 180, 1, 0xFF0000BB, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//Home
+	new IKEAHome;
+	IKEAHome = CreateDynamicObject(19327,1096.0216100,-1369.6927500,19.9958000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEAHome, 0, "HOME", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 40, 1, 0xFF0000BB, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//Furnishing
+	new IKEAFurnishing;
+	IKEAFurnishing = CreateDynamicObject(19327,1098.3575400,-1369.6927500,19.9958000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEAFurnishing, 0, "FURNISHING", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 40, 1, 0xFF0000BB, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//Sign
+	new IKEASign;
+	IKEASign = CreateDynamicObject(19327,1136.5773900,-1369.6822500,14.9830000,0.0000000,0.0000000,0.0000000); //
+	SetDynamicObjectMaterialText(IKEASign, 0, "Nate", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 12, 1, 0xFF000000, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	//Bushes
+	new IKEABushes;
+	IKEABushes = CreateDynamicObject(8650,1122.3241000,-1376.8032200,13.3878000,0.0000000,0.0000000,90.8400000); //
+	SetDynamicObjectMaterial(IKEABushes, 0, 8463, "vgseland", "Grass_128HV", 0);//
+	SetDynamicObjectMaterial(IKEABushes, 1, 8463, "vgseland", "Grass_128HV", 0);//
+	//Rest of the stuff
+	CreateDynamicObject(1368,1127.6096200,-1375.0481000,13.6554000,0.0000000,0.0000000,180.0000000); //
+	CreateDynamicObject(1368,1111.2086200,-1375.0481000,13.6554000,0.0000000,0.0000000,180.0000000); //
+	CreateDynamicObject(1569,1117.6226800,-1369.2399900,12.9812000,0.0000000,0.0000000,0.0000000); //
+	CreateDynamicObject(1569,1120.6220700,-1369.2342500,12.9812000,0.0000000,0.0000000,180.0000000); //
+	CreateDynamicObject(1340,1083.3314200,-1382.2330300,13.8944000,0.0000000,0.0000000,0.0000000); //
+	CreateDynamicObject(1216,1136.5850800,-1369.9587400,13.5766000,0.0000000,0.0000000,0.0000000); //
+	CreateDynamicObject(1216,1137.2031300,-1369.9587400,13.5766000,0.0000000,0.0000000,0.0000000); //
+	CreateDynamicObject(1572,1114.0332000,-1370.3498500,13.5412000,0.0000000,0.0000000,-25.8600000); //
+	return 1;
+}
+
+stock CreateLEC(){
+	//LEC
+	CreateDynamicObject(6875, -356.65, 1606.59, 62.63,   0.00, 0.00, 136.02);
+	CreateDynamicObject(3873, -327.31, 1597.54, 90.39,   0.00, 0.00, 333.17);
+	CreateDynamicObject(4141, -350.67, 1591.49, 81.45,   0.00, 0.00, 135.79);
+	CreateDynamicObject(621, -321.25, 1576.79, 71.83,   0.00, 0.00, 162.78);
+	CreateDynamicObject(621, -315.66, 1580.03, 71.83,   0.00, 0.00, 180.37);
+	CreateDynamicObject(621, -329.90, 1575.11, 71.83,   0.00, 0.00, 180.37);
+	CreateDynamicObject(621, -309.97, 1585.22, 71.83,   0.00, 0.00, 180.37);
+	CreateDynamicObject(1569, -369.77, 1581.49, 75.08,   -0.22, 0.66, 320.38);
+	CreateDynamicObject(1569, -367.61, 1579.47, 75.08,   0.00, 0.00, 134.85);
+	CreateDynamicObject(1247, -368.25, 1579.89, 76.83,   0.00, 0.00, 314.89);
+	CreateDynamicObject(1247, -369.29, 1580.91, 76.83,   -2.40, 1.44, 314.67);
+	CreateDynamicObject(3498, -370.47, 1582.22, 77.26,   0.00, 0.00, 0.00);
+	CreateDynamicObject(624, -392.38, 1428.13, 36.08,   0.00, 0.00, 288.87);
+	CreateDynamicObject(624, -381.46, 1403.79, 39.19,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -386.72, 1415.62, 37.82,   0.00, 0.00, 84.31);
+	CreateDynamicObject(624, -375.90, 1393.09, 39.67,   0.00, 0.00, 236.70);
+	CreateDynamicObject(624, -339.06, 1341.60, 50.22,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -369.82, 1380.79, 42.54,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -366.05, 1373.63, 44.27,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -400.95, 1445.42, 34.50,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -359.18, 1362.32, 44.66,   0.00, 0.00, 0.90);
+	CreateDynamicObject(624, -353.66, 1351.87, 46.67,   0.00, 0.00, 359.66);
+	CreateDynamicObject(624, -330.54, 1337.61, 51.26,   0.00, 0.00, 2.33);
+	CreateDynamicObject(624, -347.93, 1345.84, 49.08,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -355.83, 1324.11, 42.64,   -11.22, -1.98, 0.49);
+	CreateDynamicObject(624, -350.18, 1318.25, 49.29,   -0.96, 6.30, 0.49);
+	CreateDynamicObject(624, -341.71, 1309.29, 47.70,   0.00, 0.00, 1.56);
+	CreateDynamicObject(624, -333.54, 1377.44, 54.52,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -325.84, 1361.39, 54.52,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -342.10, 1390.79, 54.52,   0.00, 0.00, 335.46);
+	CreateDynamicObject(624, -347.78, 1400.86, 54.52,   0.00, 0.00, 16.23);
+	CreateDynamicObject(624, -352.39, 1409.33, 54.52,   0.00, 0.00, 232.18);
+	CreateDynamicObject(624, -358.28, 1420.88, 54.52,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -364.51, 1433.10, 54.52,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -369.49, 1444.58, 54.52,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -364.02, 1456.29, 60.67,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -354.58, 1452.72, 62.34,   0.00, 0.00, 326.01);
+	CreateDynamicObject(624, -349.65, 1445.06, 63.74,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -344.03, 1434.99, 63.74,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -339.19, 1425.27, 63.74,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -334.18, 1415.52, 63.74,   0.00, 0.00, 0.49);
+	CreateDynamicObject(624, -328.89, 1401.88, 63.74,   0.00, 0.00, 0.49);
+	CreateDynamicObject(1597, -302.21, 1501.98, 77.22,   0.00, 0.00, 5.61);
+	CreateDynamicObject(16112, -354.67, 1445.03, 53.35,   0.00, 0.00, 54.74);
+	CreateDynamicObject(16122, -342.57, 1419.05, 48.62,   0.00, 0.00, 238.46);
+	CreateDynamicObject(996, -406.11, 1422.34, 37.86,   -3.60, -6.76, 295.01);
+	CreateDynamicObject(996, -410.55, 1431.89, 36.60,   2.28, -3.34, 296.17);
+	CreateDynamicObject(996, -397.51, 1404.63, 40.03,   -3.60, -5.80, 296.09);
+	CreateDynamicObject(996, -401.97, 1413.63, 39.03,   -3.60, -6.76, 295.34);
+	CreateDynamicObject(996, -388.74, 1387.31, 42.47,   -3.60, -5.80, 296.58);
+	CreateDynamicObject(996, -393.24, 1396.17, 41.24,   -3.60, -5.80, 295.64);
+	CreateDynamicObject(996, -383.95, 1377.91, 43.56,   -3.60, -5.80, 296.58);
+	CreateDynamicObject(996, -379.22, 1368.86, 44.78,   -3.60, -5.80, 296.58);
+	CreateDynamicObject(996, -374.50, 1359.56, 46.05,   -3.60, -5.80, 296.58);
+	CreateDynamicObject(996, -369.89, 1350.51, 47.13,   -3.60, -5.80, 296.27);
+	CreateDynamicObject(898, -349.91, 1310.52, 51.59,   0.00, 0.00, -89.88);
+	CreateDynamicObject(898, -358.09, 1319.17, 48.66,   0.00, 0.00, 359.17);
+	CreateDynamicObject(898, -363.72, 1327.74, 49.40,   100.62, -67.20, 81.24);
+	CreateDynamicObject(898, -371.15, 1339.43, 46.27,   299.46, -40.56, 30.18);
+	CreateDynamicObject(898, -371.52, 1331.32, 41.90,   74.34, -66.36, 82.97);
+	CreateDynamicObject(5837, -429.17, 1444.97, 34.88,   0.00, 0.00, 202.15);
+	CreateDynamicObject(1597, -425.56, 1436.92, 36.32,   3.60, -1.80, 302.62);
+	CreateDynamicObject(1597, -431.05, 1452.99, 35.84,   -2.40, 0.60, 104.47);
+	CreateDynamicObject(8673, -434.72, 1464.11, 34.62,   0.00, 0.00, 295.14);
+	CreateDynamicObject(8673, -439.69, 1483.54, 34.63,   0.00, 0.00, 273.22);
+	CreateDynamicObject(8673, -440.89, 1503.96, 34.64,   0.00, 0.00, 273.22);
+	CreateDynamicObject(8673, -435.26, 1521.94, 34.63,   0.00, 0.00, 230.73);
+	CreateDynamicObject(8673, -426.37, 1417.43, 32.90,   0.06, 3.66, 286.12);
+	CreateDynamicObject(8673, -420.42, 1397.95, 31.77,   -0.12, 2.58, 287.93);
+	CreateDynamicObject(8673, -409.80, 1381.35, 31.62,   2.70, -1.62, 316.64);
+	CreateDynamicObject(645, -420.88, 1425.18, 32.43,   0.00, 0.00, 0.00);
+	CreateDynamicObject(645, -415.56, 1410.27, 33.48,   0.00, 0.00, 0.00);
+	CreateDynamicObject(645, -409.18, 1394.79, 35.16,   0.00, 0.00, 0.00);
+	CreateDynamicObject(897, -423.98, 1428.28, 33.62,   0.00, 0.00, 342.18);
+	CreateDynamicObject(897, -424.88, 1428.17, 35.53,   34.02, -7.74, 366.76);
+	CreateDynamicObject(897, -417.75, 1434.66, 35.77,   44.40, -60.66, 93.77);
+	CreateDynamicObject(897, -421.69, 1429.66, 35.53,   13.74, -18.36, 366.76);
+	CreateDynamicObject(897, -431.47, 1458.83, 35.77,   44.40, -60.66, 93.77);
+	CreateDynamicObject(897, -425.15, 1459.58, 35.53,   34.02, -7.74, 396.10);
+	CreateDynamicObject(897, -418.73, 1460.23, 35.77,   44.40, -60.66, 230.75);
+	CreateDynamicObject(823, -371.60, 1347.69, 47.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(823, -364.35, 1336.99, 47.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -416.47, 1425.76, 38.67,   0.00, 0.00, 0.10);
+	CreateDynamicObject(762, -410.08, 1417.23, 38.15,   0.00, 0.00, 53.23);
+	CreateDynamicObject(762, -420.50, 1420.76, 36.06,   4.86, -15.36, 0.10);
+	CreateDynamicObject(3498, -366.89, 1578.83, 77.16,   0.00, 0.00, 0.00);
+	CreateDynamicObject(6875, -268.30, 1572.67, 62.23,   0.00, 0.00, 315.57);
+	CreateDynamicObject(6875, -268.30, 1572.69, 43.22,   0.00, 0.00, 315.57);
+	CreateDynamicObject(4141, -288.53, 1604.78, 85.70,   0.00, 0.00, 46.24);
+	CreateDynamicObject(4141, -288.53, 1604.78, 75.62,   0.00, 0.00, 46.60);
+	CreateDynamicObject(10378, -320.16, 1593.46, 74.35,   0.00, 0.00, 45.63);
+	CreateDynamicObject(6875, -307.31, 1615.60, 48.78,   0.00, 0.00, -14.16);
+	CreateDynamicObject(9241, -321.77, 1628.28, 81.54,   0.00, 0.00, 75.92);
+	CreateDynamicObject(12942, -256.82, 1534.36, 74.58,   0.00, 0.00, 133.32);
+	CreateDynamicObject(18234, -329.38, 1500.35, 74.45,   0.00, 0.00, 270.07);
+	CreateDynamicObject(12943, -268.65, 1497.79, 74.54,   0.00, 0.00, 287.64);
+	CreateDynamicObject(5706, -234.23, 1534.71, 69.12,   0.00, 0.00, 313.80);
+	CreateDynamicObject(5706, -234.23, 1534.71, 77.02,   0.00, 0.00, 313.80);
+	CreateDynamicObject(10832, -241.88, 1525.65, 76.28,   0.00, 0.00, 42.24);
+	CreateDynamicObject(16770, -246.59, 1497.13, 75.95,   0.00, 0.00, -90.48);
+	CreateDynamicObject(16122, -277.12, 1455.78, 62.37,   0.00, 0.00, 228.83);
+	CreateDynamicObject(16122, -275.70, 1446.61, 60.48,   0.00, 0.00, 232.67);
+	CreateDynamicObject(16113, -212.80, 1415.06, 61.90,   -6.60, -3.18, 246.18);
+	CreateDynamicObject(10984, -223.49, 1420.66, 74.20,   -37.80, -11.52, 359.55);
+	CreateDynamicObject(10984, -235.43, 1415.78, 74.20,   -33.78, -10.44, 359.55);
+	CreateDynamicObject(898, -220.34, 1394.67, 69.51,   0.00, 0.00, -69.00);
+	CreateDynamicObject(4816, -213.98, 1458.93, 63.82,   -43.38, 32.76, 131.58);
+	CreateDynamicObject(4816, -268.04, 1436.70, 65.14,   -37.68, 35.10, 330.18);
+	CreateDynamicObject(14469, -287.19, 1457.60, 77.23,   55.92, 2.64, -66.96);
+	CreateDynamicObject(14469, -278.26, 1435.42, 73.52,   0.00, 0.00, -81.48);
+	CreateDynamicObject(14469, -288.57, 1456.77, 74.74,   52.38, 3.78, -81.48);
+	CreateDynamicObject(14469, -291.94, 1467.57, 75.23,   63.36, -16.74, -81.48);
+	CreateDynamicObject(896, -282.47, 1499.07, 73.77,   -42.66, -44.16, 43.68);
+	CreateDynamicObject(1411, -286.31, 1505.30, 76.10,   0.00, 0.00, 134.70);
+	CreateDynamicObject(1411, -289.91, 1508.96, 76.10,   0.00, 0.00, 134.70);
+	CreateDynamicObject(1411, -289.83, 1512.84, 76.10,   0.00, 0.00, 41.64);
+	CreateDynamicObject(1411, -285.97, 1516.24, 76.10,   0.00, 0.00, 41.64);
+	CreateDynamicObject(1411, -282.13, 1519.68, 76.10,   0.00, 0.00, 41.64);
+	CreateDynamicObject(1411, -278.26, 1523.10, 76.10,   0.00, 0.00, 41.64);
+	CreateDynamicObject(1411, -266.53, 1534.62, 76.10,   0.00, 0.00, 54.72);
+	CreateDynamicObject(1411, -269.99, 1530.71, 76.10,   0.00, 0.00, 41.64);
+	CreateDynamicObject(1411, -266.48, 1553.05, 76.10,   0.00, 0.00, 137.46);
+	CreateDynamicObject(1411, -262.64, 1549.57, 76.10,   0.00, 0.00, 137.46);
+	CreateDynamicObject(1411, -260.10, 1545.39, 76.10,   0.00, 0.00, 104.28);
+	CreateDynamicObject(660, -261.93, 1548.19, 73.68,   0.00, 0.00, 80.16);
+	CreateDynamicObject(660, -266.22, 1552.90, 73.68,   0.00, 0.00, 307.69);
+	CreateDynamicObject(660, -268.48, 1533.18, 73.68,   0.00, 0.00, 80.16);
+	CreateDynamicObject(660, -280.01, 1522.44, 73.68,   0.00, 0.00, 80.16);
+	CreateDynamicObject(660, -282.95, 1519.85, 73.68,   0.00, 0.00, 236.00);
+	CreateDynamicObject(660, -286.13, 1516.86, 73.68,   0.00, 0.00, -171.00);
+	CreateDynamicObject(660, -289.37, 1514.29, 73.68,   0.00, 0.00, -105.00);
+	CreateDynamicObject(660, -291.68, 1512.07, 73.68,   0.00, 0.00, -121.00);
+	CreateDynamicObject(660, -291.91, 1507.73, 73.68,   0.00, 0.00, -121.00);
+	CreateDynamicObject(660, -292.99, 1501.97, 73.68,   0.00, 0.00, 149.00);
+	CreateDynamicObject(660, -294.28, 1495.60, 73.68,   0.00, 0.00, -229.00);
+	CreateDynamicObject(660, -289.54, 1488.23, 76.75,   0.00, 0.00, -76.00);
+	CreateDynamicObject(1597, -293.39, 1539.81, 77.22,   0.00, 0.00, 45.49);
+	CreateDynamicObject(1597, -295.05, 1535.42, 77.22,   0.00, 0.00, 89.47);
+	CreateDynamicObject(11445, -232.94, 1423.18, 71.56,   0.00, 0.00, -1.02);
+	CreateDynamicObject(11428, -252.10, 1425.49, 77.68,   -4.14, 3.12, -102.48);
+	CreateDynamicObject(11442, -223.08, 1450.03, 73.22,   0.00, 0.00, -153.36);
+	CreateDynamicObject(2669, -232.91, 1496.28, 75.97,   0.00, 0.00, -105.00);
+	CreateDynamicObject(2035, -237.79, 1493.15, 75.31,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2035, -239.30, 1493.00, 75.31,   0.00, 0.00, -47.88);
+	CreateDynamicObject(1409, -251.84, 1494.97, 74.67,   0.00, 0.00, -20.94);
+	CreateDynamicObject(1409, -241.51, 1494.91, 74.67,   0.00, 0.00, -2.64);
+	CreateDynamicObject(3593, -250.47, 1443.84, 74.15,   0.00, 0.00, 52.86);
+	CreateDynamicObject(13591, -230.20, 1444.49, 73.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(933, -263.33, 1496.74, 74.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(910, -269.34, 1506.81, 75.43,   0.00, 0.00, -169.14);
+	CreateDynamicObject(1227, -272.25, 1505.90, 75.41,   0.00, 0.00, -163.80);
+	CreateDynamicObject(1450, -273.86, 1505.49, 75.27,   0.00, 0.00, -74.70);
+	CreateDynamicObject(1686, -264.48, 1538.24, 74.22,   0.00, 0.00, -46.92);
+	CreateDynamicObject(1215, -263.75, 1538.84, 74.83,   0.00, 0.00, 9.12);
+	CreateDynamicObject(1215, -260.82, 1541.73, 74.83,   0.00, 0.00, 9.12);
+	CreateDynamicObject(1215, -265.18, 1537.63, 74.83,   0.00, 0.00, 9.12);
+	CreateDynamicObject(922, -270.33, 1504.80, 75.40,   0.00, 0.00, 17.34);
+	CreateDynamicObject(1214, -258.13, 1529.07, 74.43,   0.00, 0.00, -18.18);
+	CreateDynamicObject(1214, -254.78, 1525.67, 74.43,   0.00, 0.00, -18.18);
+	CreateDynamicObject(1687, -275.62, 1569.16, 94.85,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1687, -286.73, 1591.99, 97.53,   0.00, 0.00, 56.82);
+	CreateDynamicObject(1688, -257.10, 1581.47, 94.94,   0.00, 0.00, -37.86);
+	CreateDynamicObject(1688, -227.90, 1516.91, 74.56,   0.00, 0.00, 44.07);
+	CreateDynamicObject(927, -228.64, 1516.87, 75.59,   0.00, 0.00, 45.73);
+	CreateDynamicObject(927, -319.25, 1500.37, 76.14,   0.00, 0.00, 90.32);
+	CreateDynamicObject(1687, -318.67, 1497.84, 75.31,   0.00, 0.00, -88.08);
+	CreateDynamicObject(3660, -325.82, 1536.07, 76.94,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3660, -337.32, 1536.08, 76.94,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3660, -345.90, 1544.61, 76.96,   0.00, 0.00, 630.13);
+	CreateDynamicObject(3660, -337.26, 1553.04, 76.96,   0.00, 0.00, 539.47);
+	CreateDynamicObject(615, -355.54, 1539.91, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(615, -362.30, 1547.97, 74.21,   0.00, 0.00, -360.00);
+	CreateDynamicObject(615, -356.39, 1557.34, 73.49,   0.00, 2.00, -324.00);
+	CreateDynamicObject(996, -311.64, 1534.22, 75.23,   0.00, 0.00, -1.44);
+	CreateDynamicObject(620, -344.02, 1536.09, 74.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(620, -329.89, 1535.62, 74.34,   0.00, 0.00, -360.00);
+	CreateDynamicObject(620, -316.52, 1535.85, 74.34,   0.00, 0.00, -360.00);
+	CreateDynamicObject(620, -287.20, 1447.68, 66.01,   0.00, 0.00, -360.00);
+	CreateDynamicObject(620, -283.20, 1435.84, 66.01,   0.00, 0.00, 62.00);
+	CreateDynamicObject(620, -285.13, 1424.57, 66.01,   0.00, 0.00, 128.00);
+	CreateDynamicObject(620, -284.64, 1413.09, 66.01,   0.00, 0.00, 128.00);
+	CreateDynamicObject(620, -287.86, 1398.23, 66.01,   0.00, 0.00, 128.00);
+	CreateDynamicObject(620, -299.15, 1388.34, 66.01,   0.00, 0.00, 128.00);
+	CreateDynamicObject(620, -274.28, 1387.33, 66.01,   0.00, 0.00, 128.00);
+	CreateDynamicObject(789, -316.72, 1389.35, 84.00,   0.00, 0.00, 50.69);
+	CreateDynamicObject(3263, -426.62, 1443.95, 33.29,   0.00, 0.00, -55.00);
+	CreateDynamicObject(3264, -406.86, 1452.42, 34.84,   0.00, 0.00, -55.00);
+	CreateDynamicObject(4726, -407.04, 1520.85, 72.11,   0.00, 0.00, -82.54);
+	CreateDynamicObject(3881, -382.78, 1514.51, 76.39,   0.00, 0.00, 448.80);
+	CreateDynamicObject(9153, -362.40, 1492.79, 69.84,   0.00, 0.00, 343.59);
+	CreateDynamicObject(4726, -406.86, 1521.03, 73.62,   0.00, 0.00, -82.54);
+	CreateDynamicObject(4726, -407.01, 1520.84, 67.49,   0.00, 0.00, -82.54);
+	CreateDynamicObject(4726, -407.01, 1520.84, 70.42,   0.00, 0.00, -82.54);
+	CreateDynamicObject(4726, -407.01, 1520.84, 68.88,   0.00, 0.00, -82.54);
+	CreateDynamicObject(1687, -415.44, 1515.73, 73.30,   0.00, 0.00, 279.07);
+	CreateDynamicObject(1626, -380.30, 1512.41, 75.27,   0.00, 0.00, 90.27);
+	CreateDynamicObject(1617, -386.84, 1514.51, 76.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8948, -383.36, 1512.32, 76.37,   0.00, 0.00, -90.90);
+	CreateDynamicObject(11544, -396.00, 1509.30, 74.53,   0.00, 0.00, 88.78);
+	CreateDynamicObject(1698, -395.28, 1509.16, 75.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -394.98, 1509.16, 75.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -395.88, 1509.16, 74.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1364, -335.75, 1551.20, 75.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1364, -341.97, 1551.04, 75.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1364, -329.94, 1551.17, 75.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1364, -294.11, 1537.86, 75.18,   0.00, 0.00, -116.22);
+	CreateDynamicObject(762, -314.20, 1494.02, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -326.76, 1488.21, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -336.84, 1490.95, 75.03,   0.00, 0.00, -229.00);
+	CreateDynamicObject(762, -320.51, 1489.67, 75.03,   0.00, 0.00, -229.00);
+	CreateDynamicObject(762, -343.70, 1494.66, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -347.38, 1501.94, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -364.76, 1566.01, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -366.96, 1554.93, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -366.98, 1554.89, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -357.28, 1550.29, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -354.98, 1559.30, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(878, -352.69, 1546.93, 75.05,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3806, -326.97, 1506.11, 74.88,   0.00, 0.00, 88.34);
+	CreateDynamicObject(673, -321.25, 1506.11, 74.33,   0.00, 0.00, 26.52);
+	CreateDynamicObject(673, -324.84, 1506.09, 74.33,   0.00, 0.00, 26.52);
+	CreateDynamicObject(673, -333.86, 1505.47, 74.33,   0.00, 0.00, 26.52);
+	CreateDynamicObject(673, -338.39, 1505.55, 74.33,   0.00, 0.00, 26.52);
+	CreateDynamicObject(897, -313.32, 1500.99, 70.86,   0.00, 0.00, 0.29);
+	CreateDynamicObject(1214, -347.88, 1525.29, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -347.91, 1527.69, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -347.93, 1530.63, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -348.08, 1533.18, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -304.92, 1535.00, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -301.97, 1535.02, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1597, -313.65, 1515.45, 77.22,   0.00, 0.00, 0.03);
+	CreateDynamicObject(1597, -346.98, 1516.25, 77.22,   0.00, 0.00, 0.75);
+	CreateDynamicObject(1597, -296.91, 1440.46, 74.75,   1.90, 4.00, 4.94);
+	CreateDynamicObject(1597, -299.97, 1476.20, 76.62,   3.06, 0.84, 5.35);
+	CreateDynamicObject(1597, -304.49, 1551.34, 77.22,   0.00, 0.00, 45.49);
+	CreateDynamicObject(1214, -299.95, 1546.87, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -297.78, 1544.48, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -302.86, 1567.81, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -300.68, 1570.12, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -276.74, 1549.20, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -290.55, 1536.13, 74.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1597, -273.62, 1552.62, 76.93,   0.00, 0.00, -43.88);
+	CreateDynamicObject(1597, -295.67, 1573.35, 76.92,   0.00, 0.00, -43.64);
+	CreateDynamicObject(1568, -299.32, 1535.71, 74.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1568, -315.41, 1535.69, 74.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16409, -232.58, 1508.13, 74.57,   0.00, 0.00, -11.22);
+	CreateDynamicObject(792, -237.15, 1517.76, 77.88,   0.00, 0.00, 5.57);
+	CreateDynamicObject(1214, -285.06, 1571.69, 84.57,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -285.07, 1571.71, 85.71,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -285.07, 1571.71, 86.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -285.08, 1571.71, 83.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -285.09, 1571.80, 83.87,   0.00, 91.00, -47.00);
+	CreateDynamicObject(1214, -284.24, 1570.96, 83.55,   0.00, 91.00, -47.00);
+	CreateDynamicObject(1214, -283.39, 1570.09, 83.55,   0.00, 91.00, -47.00);
+	CreateDynamicObject(1214, -284.86, 1571.52, 86.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -284.88, 1571.51, 85.71,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -284.91, 1571.53, 84.57,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -284.77, 1571.63, 83.04,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -284.88, 1571.54, 83.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -285.12, 1571.79, 83.55,   0.00, 91.00, -47.00);
+	CreateDynamicObject(1214, -283.34, 1570.09, 83.84,   0.00, 91.00, -47.00);
+	CreateDynamicObject(1214, -284.23, 1570.94, 83.84,   0.00, 91.00, -47.00);
+	CreateDynamicObject(1214, -281.83, 1568.42, 86.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.66, 1568.17, 86.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.86, 1568.45, 85.66,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.86, 1568.45, 84.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.86, 1568.45, 83.29,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.66, 1568.19, 83.29,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.62, 1568.23, 84.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.63, 1568.21, 85.66,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.86, 1568.45, 86.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1214, -281.51, 1568.17, 83.55,   103.50, 85.00, 320.54);
+	CreateDynamicObject(1214, -281.60, 1568.18, 83.86,   0.00, 91.00, 317.24);
+	CreateDynamicObject(1214, -280.70, 1567.37, 83.84,   0.00, 91.00, 316.22);
+	CreateDynamicObject(1214, -280.69, 1567.37, 83.54,   0.00, 91.00, 316.23);
+	CreateDynamicObject(1214, -281.50, 1568.07, 85.55,   0.00, 91.00, 315.93);
+	CreateDynamicObject(1214, -281.55, 1568.12, 85.87,   0.00, 91.00, 316.21);
+	CreateDynamicObject(1214, -281.49, 1568.14, 87.91,   0.00, 91.00, 315.26);
+	CreateDynamicObject(1214, -281.03, 1567.62, 85.55,   0.00, 91.00, 317.47);
+	CreateDynamicObject(1214, -281.07, 1567.69, 85.87,   0.00, 91.00, 316.19);
+	CreateDynamicObject(1214, -280.71, 1567.41, 87.91,   0.00, 91.00, 315.02);
+	CreateDynamicObject(1214, -281.49, 1568.14, 87.61,   0.00, 91.00, 317.21);
+	CreateDynamicObject(1214, -280.68, 1567.39, 87.61,   0.00, 91.00, 317.27);
+	CreateDynamicObject(1214, -277.61, 1564.36, 87.91,   4.02, 90.94, 315.02);
+	CreateDynamicObject(1214, -278.93, 1565.52, 87.09,   10.04, 47.92, 323.71);
+	CreateDynamicObject(1214, -278.86, 1565.48, 86.06,   0.00, 0.00, 359.39);
+	CreateDynamicObject(1214, -278.86, 1565.48, 85.00,   0.00, 0.00, 359.39);
+	CreateDynamicObject(1214, -278.30, 1564.91, 83.47,   -35.16, -27.12, 359.39);
+	CreateDynamicObject(1214, -278.88, 1565.47, 84.29,   0.00, 0.00, 359.39);
+	CreateDynamicObject(1214, -278.41, 1565.00, 83.51,   0.12, 90.46, 318.65);
+	CreateDynamicObject(1214, -277.55, 1564.27, 83.52,   0.12, 90.46, 312.88);
+	CreateDynamicObject(1214, -278.30, 1564.94, 87.91,   4.02, 90.94, 315.02);
+	CreateDynamicObject(1214, -277.56, 1564.31, 87.71,   4.02, 90.94, 315.02);
+	CreateDynamicObject(1214, -278.69, 1565.26, 86.91,   10.04, 47.92, 324.82);
+	CreateDynamicObject(1214, -278.22, 1564.93, 87.71,   4.02, 90.94, 315.02);
+	CreateDynamicObject(1214, -278.64, 1565.23, 86.06,   0.00, 0.00, 359.39);
+	CreateDynamicObject(1214, -278.60, 1565.24, 85.00,   0.00, 0.00, 359.39);
+	CreateDynamicObject(1214, -278.63, 1565.25, 84.29,   0.00, 0.00, 359.39);
+	CreateDynamicObject(1214, -278.11, 1564.73, 83.47,   -35.16, -27.12, 359.39);
+	CreateDynamicObject(1214, -278.41, 1565.00, 83.82,   0.12, 90.46, 318.12);
+	CreateDynamicObject(1214, -277.55, 1564.27, 83.83,   0.12, 90.46, 312.88);
+	CreateDynamicObject(1411, -384.96, 1519.90, 76.10,   0.00, 0.00, -91.00);
+	CreateDynamicObject(1411, -384.91, 1525.08, 76.10,   0.00, 0.00, -91.00);
+	CreateDynamicObject(1411, -386.46, 1529.88, 76.10,   0.00, 0.00, -55.00);
+	CreateDynamicObject(1411, -389.44, 1534.07, 76.10,   0.00, 0.00, -55.00);
+	CreateDynamicObject(1411, -392.44, 1538.36, 76.10,   0.00, 0.00, -55.00);
+	CreateDynamicObject(1411, -395.42, 1542.60, 76.10,   0.00, 0.00, -55.00);
+	CreateDynamicObject(1411, -399.61, 1544.67, 75.90,   0.00, 0.00, 4.00);
+	CreateDynamicObject(1411, -404.77, 1544.39, 75.70,   0.00, 0.00, 4.00);
+	CreateDynamicObject(1411, -409.99, 1543.97, 75.20,   0.00, 0.00, 4.00);
+	CreateDynamicObject(1411, -415.25, 1543.44, 74.67,   0.00, 0.00, 4.00);
+	CreateDynamicObject(1411, -419.23, 1540.89, 74.12,   0.00, 0.00, 62.00);
+	CreateDynamicObject(659, -386.09, 1583.15, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(659, -380.99, 1587.70, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(659, -390.83, 1578.01, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(659, -394.46, 1572.90, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(659, -399.08, 1565.80, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(659, -399.78, 1557.45, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(659, -399.70, 1549.18, 73.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -399.64, 1553.41, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -400.04, 1561.35, 75.03,   0.00, 0.00, 50.00);
+	CreateDynamicObject(762, -397.23, 1569.99, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(762, -394.35, 1577.78, 75.03,   0.00, 0.00, -149.00);
+	CreateDynamicObject(762, -384.78, 1587.54, 75.03,   0.00, 0.00, -149.00);
+	CreateDynamicObject(762, -388.69, 1581.30, 75.03,   0.00, 0.00, -149.00);
+	CreateDynamicObject(627, -371.38, 1581.69, 76.94,   0.00, 0.00, 0.00);
+	CreateDynamicObject(627, -366.99, 1577.68, 76.94,   0.00, 0.00, 0.00);
+	CreateDynamicObject(622, -385.66, 1574.98, 73.51,   32.94, 1.44, 65.22);
+	CreateDynamicObject(622, -381.01, 1577.75, 73.27,   36.90, 18.18, 65.22);
+	CreateDynamicObject(622, -389.80, 1569.40, 74.16,   32.94, 1.44, 65.22);
+	CreateDynamicObject(762, -395.64, 1499.84, 75.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(615, -363.55, 1519.29, 74.31,   0.00, 0.00, -302.28);
+	CreateDynamicObject(660, -349.41, 1513.65, 72.59,   0.00, 0.00, -25.00);
+	CreateDynamicObject(660, -349.57, 1516.50, 72.59,   0.00, 0.00, -360.00);
+	CreateDynamicObject(660, -349.52, 1519.26, 72.59,   0.00, 0.00, -229.00);
+	CreateDynamicObject(660, -349.28, 1522.07, 72.59,   0.00, 0.00, 193.00);
+	CreateDynamicObject(816, -349.51, 1523.46, 74.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(816, -352.53, 1537.91, 74.77,   0.00, 0.00, -215.00);
+	CreateDynamicObject(816, -352.53, 1537.95, 74.77,   0.00, 0.00, -215.00);
+	CreateDynamicObject(816, -350.16, 1537.49, 74.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(874, -356.15, 1545.42, 74.90,   0.00, 0.00, 8.64);
+	CreateDynamicObject(874, -364.63, 1520.22, 74.93,   0.00, 0.00, 445.24);
+	CreateDynamicObject(874, -375.05, 1549.51, 74.93,   0.00, 0.00, 346.84);
+	CreateDynamicObject(874, -312.76, 1488.63, 74.90,   0.00, 0.00, 2.46);
+	CreateDynamicObject(874, -334.19, 1336.73, 53.56,   8.16, -6.30, 2.46);
+	CreateDynamicObject(897, -387.01, 1469.80, 61.78,   -0.30, -37.80, 93.47);
+	CreateDynamicObject(897, -390.99, 1455.42, 59.33,   32.40, 22.44, 93.47);
+	CreateDynamicObject(897, -391.90, 1461.72, 59.33,   193.32, 10.32, 93.47);
+	CreateDynamicObject(897, -391.35, 1447.84, 57.50,   38.16, 2.52, 93.47);
+	CreateDynamicObject(875, -376.95, 1475.59, 62.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(875, -355.53, 1422.08, 61.44,   26.04, -33.90, 0.00);
+	CreateDynamicObject(624, -432.40, 1468.68, 31.68,   0.00, 0.00, 0.49);
+	CreateDynamicObject(874, -383.40, 1499.85, 73.17,   0.00, 0.00, 2.46);
+	CreateDynamicObject(874, -329.71, 1571.21, 74.90,   0.00, 0.00, -220.98);
+	CreateDynamicObject(996, -321.66, 1506.56, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -346.27, 1506.50, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -356.75, 1506.68, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -365.05, 1506.67, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -373.34, 1506.70, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -381.51, 1506.70, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -389.75, 1506.69, 74.88,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -370.16, 1511.22, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -373.74, 1515.78, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(996, -362.01, 1511.22, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -353.92, 1511.20, 74.98,   0.00, 0.00, 0.00);
+	CreateDynamicObject(996, -379.15, 1521.58, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(996, -373.71, 1523.90, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(762, -355.27, 1518.58, 75.03,   0.00, 0.00, 3.30);
+	CreateDynamicObject(762, -385.78, 1523.55, 75.03,   0.00, 0.00, 7.50);
+	CreateDynamicObject(816, -372.63, 1527.62, 74.77,   0.00, 0.00, -215.00);
+	CreateDynamicObject(816, -383.68, 1526.82, 74.77,   0.00, 0.00, -215.00);
+	CreateDynamicObject(899, -362.41, 1520.62, 69.95,   0.00, 0.00, 27.90);
+	CreateDynamicObject(762, -368.58, 1520.57, 75.03,   0.00, 0.00, -1.74);
+	CreateDynamicObject(1364, -364.28, 1526.76, 75.28,   0.00, 0.00, -192.72);
+	CreateDynamicObject(874, -315.75, 1499.13, 74.90,   0.00, 0.00, -229.38);
+	CreateDynamicObject(874, -345.48, 1557.98, 74.90,   0.00, 0.00, -260.10);
+	CreateDynamicObject(874, -330.74, 1574.03, 74.90,   0.00, 0.00, -274.74);
+	CreateDynamicObject(1568, -325.00, 1507.78, 74.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1568, -333.39, 1507.86, 74.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3660, -280.74, 1566.53, 76.96,   0.00, 0.00, 314.62);
+	CreateDynamicObject(1557, -297.61, 1583.10, 74.49,   0.00, 0.00, -44.00);
+	CreateDynamicObject(1557, -295.43, 1581.02, 74.49,   0.00, 0.00, -223.88);
+	CreateDynamicObject(3494, -298.47, 1583.99, 78.20,   0.00, 0.00, 46.15);
+	CreateDynamicObject(3494, -294.60, 1580.08, 78.20,   0.00, 0.00, 46.15);
+	CreateDynamicObject(628, -299.36, 1582.96, 76.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(628, -295.54, 1579.06, 76.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -376.97, 1512.97, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -379.24, 1515.66, 74.53,   0.00, 0.00, 90.86);
+	CreateDynamicObject(1698, -376.98, 1519.58, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -376.97, 1522.87, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -376.97, 1526.26, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -376.98, 1529.12, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -376.99, 1516.30, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -329.60, 1505.87, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -330.99, 1505.85, 74.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -243.94, 1522.00, 74.46,   0.00, 0.00, -134.00);
+	CreateDynamicObject(1698, -256.43, 1527.35, 74.47,   0.00, 0.00, -135.00);
+	CreateDynamicObject(874, -290.64, 1505.02, 74.90,   0.00, 0.00, -229.38);
+	CreateDynamicObject(874, -284.85, 1510.04, 74.90,   0.00, 0.00, -229.38);
+	CreateDynamicObject(874, -259.33, 1552.84, 74.90,   0.00, 0.00, 11.00);
+	CreateDynamicObject(1698, -370.05, 1581.07, 81.00,   1.00, -91.00, 18.00);
+	CreateDynamicObject(3660, -381.57, 1581.13, 76.79,   0.00, 0.00, 18.42);
+	CreateDynamicObject(3660, -372.37, 1568.66, 76.79,   0.00, 0.00, 44.18);
+	CreateDynamicObject(996, -379.18, 1548.55, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(996, -379.20, 1548.54, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(996, -397.08, 1559.39, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(996, -397.48, 1550.13, 74.98,   0.00, 0.00, 89.70);
+	CreateDynamicObject(1597, -387.44, 1552.22, 77.22,   0.00, 0.00, 0.75);
+	CreateDynamicObject(1597, -395.88, 1566.65, 77.02,   0.00, 0.00, -34.35);
+	CreateDynamicObject(1597, -390.64, 1574.28, 77.12,   0.00, 0.00, -34.35);
+	CreateDynamicObject(1597, -379.20, 1571.10, 77.52,   0.00, 0.00, -45.51);
+	CreateDynamicObject(1682, -372.67, 1590.28, 100.24,   0.00, 0.00, -151.56);
+	CreateDynamicObject(9833, -369.62, 1580.21, 77.21,   0.00, 0.00, 341.65);
+	CreateDynamicObject(1247, -369.85, 1579.40, 80.24,   0.00, 0.00, 316.20);
+	CreateDynamicObject(1698, -369.08, 1579.96, 75.01,   0.00, -11.00, 48.00);
+	CreateDynamicObject(1698, -368.01, 1579.19, 80.96,   1.00, -91.00, 74.94);
+	CreateDynamicObject(622, -393.26, 1563.81, 74.16,   32.94, 1.44, 65.22);
+	CreateDynamicObject(622, -395.52, 1557.02, 74.16,   32.94, 1.44, 65.22);
+	CreateDynamicObject(1878, -363.17, 1575.26, 83.31,   0.00, 0.00, 359.81);
+	CreateDynamicObject(3660, -297.84, 1551.92, 76.13,   0.00, 0.00, 314.26);
+	CreateDynamicObject(3660, -285.21, 1518.36, 76.13,   0.00, 0.00, 402.10);
+	CreateDynamicObject(644, -319.54, 1568.00, 77.56,   0.00, 0.00, 0.00);
+	CreateDynamicObject(644, -313.25, 1568.01, 76.33,   0.00, 0.00, 0.00);
+	CreateDynamicObject(644, -311.03, 1566.77, 75.66,   0.00, 0.00, 0.00);
+	CreateDynamicObject(644, -322.23, 1567.04, 77.90,   0.00, 0.00, 0.00);
+	CreateDynamicObject(644, -316.44, 1568.42, 76.97,   0.00, 0.00, 0.00);
+	CreateDynamicObject(644, -309.16, 1565.11, 74.93,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1247, -302.86, 1567.82, 75.74,   -178.00, -236.00, 45.00);
+	CreateDynamicObject(1247, -300.66, 1570.11, 75.74,   -178.00, -236.00, 45.00);
+	CreateDynamicObject(1247, -296.74, 1581.85, 77.47,   -175.96, -118.08, -41.00);
+	CreateDynamicObject(6052, -318.33, 1562.14, 76.73,   0.00, 0.00, -124.92);
+	CreateDynamicObject(3515, -313.51, 1561.84, 74.29,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3515, -319.83, 1563.01, 74.11,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3515, -325.78, 1559.23, 73.95,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18234, 207.93, -1434.45, 12.17,   0.00, 0.00, 227.28);
+	CreateDynamicObject(1411, 210.91, -1446.29, 13.42,   0.00, 0.00, 229.56);
+	CreateDynamicObject(1411, 207.56, -1450.25, 13.42,   0.00, 0.00, 229.56);
+	CreateDynamicObject(1411, 201.27, -1457.58, 13.42,   0.00, 0.00, 229.56);
+	CreateDynamicObject(1411, 181.42, -1458.47, 13.42,   0.00, 0.00, 137.40);
+	CreateDynamicObject(12943, 191.12, -1456.55, 11.71,   0.00, 0.00, -52.02);
+	CreateDynamicObject(8169, 193.92, -1461.30, 11.95,   0.00, 0.00, -125.22);
+	CreateDynamicObject(8169, 191.08, -1457.71, 11.95,   0.00, 0.00, -125.22);
+	CreateDynamicObject(8169, 188.26, -1454.11, 11.95,   0.00, 0.00, -125.22);
+	CreateDynamicObject(8169, 185.60, -1450.61, 11.97,   0.06, -0.42, -125.22);
+	CreateDynamicObject(13028, 196.00, -1462.72, 13.21,   0.00, 0.00, 127.78);
+	CreateDynamicObject(8169, 193.86, -1446.61, 11.95,   0.06, -0.42, -125.22);
+	CreateDynamicObject(1533, -299.35, 1623.12, 80.40,   -1.14, 0.00, -133.86);
+	CreateDynamicObject(1247, -317.76, 1558.93, 76.76,   2.10, -1.96, 401.41);
+	CreateDynamicObject(3660, -309.09, 1582.86, 76.98,   0.00, 0.00, 45.42);
+	CreateDynamicObject(803, -325.76, 1574.40, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -319.40, 1578.12, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -314.37, 1582.96, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -308.59, 1589.21, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -320.81, 1573.39, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -333.07, 1570.67, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -336.28, 1566.31, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -336.28, 1566.31, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(803, -337.35, 1557.10, 75.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(11428, -263.95, 1457.32, 78.07,   0.00, 0.00, 228.91);
+	CreateDynamicObject(1461, -240.94, 1471.12, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -242.90, 1470.17, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -244.65, 1469.31, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -246.53, 1468.33, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -248.33, 1467.25, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -250.33, 1466.12, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -252.41, 1464.72, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -245.27, 1430.92, 73.38,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -234.42, 1440.66, 74.25,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -227.93, 1442.35, 75.15,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -235.10, 1424.92, 72.57,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -229.58, 1425.82, 72.02,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1461, -238.82, 1424.54, 72.02,   0.00, 0.00, 359.38);
+	CreateDynamicObject(1254, -245.41, 1431.21, 73.99,   0.00, 0.00, -6.18);
+	CreateDynamicObject(1254, -238.85, 1424.72, 72.47,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -235.08, 1425.09, 73.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -248.90, 1430.06, 76.58,   0.00, 0.00, 358.44);
+	CreateDynamicObject(1254, -255.88, 1430.14, 75.71,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -234.40, 1440.83, 74.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -227.99, 1442.48, 75.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -229.21, 1445.43, 74.73,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -258.71, 1460.06, 77.18,   0.00, 0.00, 357.69);
+	CreateDynamicObject(1254, -267.24, 1460.02, 75.54,   0.00, 0.00, 357.18);
+	CreateDynamicObject(1254, -260.11, 1455.89, 75.53,   -7.56, 5.28, 85.60);
+	CreateDynamicObject(1254, -240.91, 1471.29, 75.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -242.89, 1470.34, 75.40,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -244.63, 1469.40, 75.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -246.53, 1468.50, 75.61,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -248.32, 1467.42, 75.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -250.31, 1466.29, 75.54,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1254, -252.45, 1464.90, 75.56,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1242, -245.40, 1431.12, 73.68,   0.00, 0.00, 358.32);
+	CreateDynamicObject(2035, -245.57, 1431.31, 73.76,   49.14, 232.50, -94.98);
+	CreateDynamicObject(1254, -245.24, 1431.38, 73.99,   0.00, 0.00, -6.18);
+	CreateDynamicObject(1275, -245.24, 1431.28, 73.66,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 184.89, -1447.60, 13.42,   0.00, 0.00, 140.88);
+	CreateDynamicObject(1247, 211.89, -1432.68, 14.71,   0.00, 0.00, -38.76);
+	CreateDynamicObject(1597, 221.44, -1434.49, 14.74,   0.00, 0.00, 134.40);
+	CreateDynamicObject(1597, 222.97, -1418.41, 14.84,   0.00, 0.00, 220.78);
+	CreateDynamicObject(1532, 201.50, -1434.06, 12.04,   0.30, -0.90, -43.92);
+	CreateDynamicObject(14853, -350.32, 905.55, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14858, -370.31, 906.11, 664.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, -324.50, 913.92, 665.37,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, -322.37, 907.33, 665.37,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, -328.90, 913.92, 665.37,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, -330.90, 907.28, 665.37,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1649, -326.64, 913.89, 666.04,   0.00, 0.00, 179.11);
+	CreateDynamicObject(1649, -326.64, 913.89, 662.79,   0.00, 0.00, 178.93);
+	CreateDynamicObject(1649, -322.37, 907.47, 666.06,   0.00, 0.00, 288.34);
+	CreateDynamicObject(1649, -322.37, 907.47, 662.79,   0.00, 0.00, 288.34);
+	CreateDynamicObject(3440, -323.19, 909.71, 665.37,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1649, -330.70, 907.62, 662.79,   0.00, 0.00, 253.71);
+	CreateDynamicObject(3440, -330.14, 909.64, 665.37,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1649, -330.70, 907.62, 666.02,   0.00, 0.00, 253.71);
+	CreateDynamicObject(19358, -322.61, 923.59, 664.81,   0.00, 0.00, 90.69);
+	CreateDynamicObject(2434, -323.95, 922.84, 663.09,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2435, -324.88, 922.84, 663.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2435, -325.81, 922.84, 663.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2435, -326.74, 922.85, 663.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2435, -327.67, 922.85, 663.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2435, -328.59, 922.85, 663.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19358, -319.40, 923.63, 664.81,   0.00, 0.00, 90.69);
+	CreateDynamicObject(19358, -317.86, 922.04, 664.81,   0.00, 0.00, 0.84);
+	CreateDynamicObject(19358, -317.81, 918.84, 664.81,   0.00, 0.00, 0.84);
+	CreateDynamicObject(2403, -320.35, 914.02, 663.10,   0.00, 0.00, 272.78);
+	CreateDynamicObject(19404, -316.89, 915.95, 664.82,   0.00, 0.00, 34.69);
+	CreateDynamicObject(19358, -314.44, 914.69, 664.81,   0.00, 0.00, 90.64);
+	CreateDynamicObject(19358, -320.70, 908.07, 664.84,   0.00, 0.00, 182.86);
+	CreateDynamicObject(2435, -316.61, 915.56, 663.20,   0.00, 0.00, 306.08);
+	CreateDynamicObject(2435, -317.15, 916.30, 663.20,   0.00, 0.00, 306.08);
+	CreateDynamicObject(3498, -317.61, 916.71, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -316.42, 914.81, 664.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -320.60, 909.57, 664.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -320.72, 907.06, 664.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -317.99, 923.51, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -324.28, 923.60, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1723, -332.77, 908.63, 663.10,   0.00, 0.00, -182.28);
+	CreateDynamicObject(1724, -335.85, 909.08, 663.10,   0.00, 0.00, 121.02);
+	CreateDynamicObject(1724, -331.01, 909.27, 663.10,   0.00, 0.00, 209.64);
+	CreateDynamicObject(861, -337.67, 907.99, 663.40,   0.00, 0.00, 0.00);
+	CreateDynamicObject(861, -338.74, 908.01, 663.40,   0.00, 0.00, -135.00);
+	CreateDynamicObject(861, -339.89, 907.96, 663.40,   0.00, 0.00, 18.00);
+	CreateDynamicObject(861, -341.13, 907.91, 663.40,   0.00, 0.00, -258.00);
+	CreateDynamicObject(861, -342.29, 907.99, 663.40,   0.00, 0.00, 185.00);
+	CreateDynamicObject(861, -343.56, 908.03, 663.40,   0.00, 0.00, 183.00);
+	CreateDynamicObject(861, -345.05, 908.05, 663.40,   0.00, 0.00, -265.00);
+	CreateDynamicObject(861, -346.41, 908.00, 663.40,   0.00, 0.00, -149.00);
+	CreateDynamicObject(861, -347.87, 907.77, 663.40,   0.00, 0.00, -149.00);
+	CreateDynamicObject(869, -339.72, 909.35, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(869, -340.76, 910.48, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(869, -343.23, 908.92, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(869, -343.23, 910.61, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(869, -345.80, 909.37, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(869, -344.54, 910.99, 664.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2253, -338.02, 910.91, 664.29,   0.00, 0.00, 35.94);
+	CreateDynamicObject(2253, -339.43, 912.31, 664.29,   0.00, 0.00, 66.21);
+	CreateDynamicObject(2253, -336.84, 908.13, 664.36,   0.00, 0.00, 73.12);
+	CreateDynamicObject(628, -331.65, 907.71, 665.05,   0.00, 0.00, 0.00);
+	CreateDynamicObject(628, -326.71, 897.84, 665.15,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2434, -329.72, 923.01, 663.08,   0.00, 0.00, 269.88);
+	CreateDynamicObject(19358, -330.89, 923.54, 664.81,   0.00, 0.00, 90.69);
+	CreateDynamicObject(19358, -334.03, 923.50, 664.81,   0.00, 0.00, 90.69);
+	CreateDynamicObject(19358, -336.79, 922.48, 664.81,   0.00, 0.00, 129.68);
+	CreateDynamicObject(19358, -342.30, 922.96, 664.81,   0.00, 0.00, 89.28);
+	CreateDynamicObject(19388, -339.35, 922.23, 664.80,   0.00, 0.00, 61.81);
+	CreateDynamicObject(3498, -329.25, 923.65, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1649, -326.76, 923.63, 667.47,   0.00, 0.00, 178.93);
+	CreateDynamicObject(644, -323.01, 922.68, 663.32,   0.00, 0.00, 230.98);
+	CreateDynamicObject(644, -330.31, 922.60, 663.32,   0.00, 0.00, 230.98);
+	CreateDynamicObject(1878, -328.13, 913.82, 665.62,   0.00, 0.00, 348.65);
+	CreateDynamicObject(1878, -328.13, 913.82, 666.21,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -327.16, 913.84, 665.85,   -88.62, -99.36, 348.24);
+	CreateDynamicObject(1878, -327.38, 913.89, 666.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -327.89, 913.83, 665.39,   -88.62, -99.36, -11.46);
+	CreateDynamicObject(1878, -326.94, 913.87, 665.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -327.10, 913.86, 666.43,   -88.62, -99.36, 348.24);
+	CreateDynamicObject(1878, -327.14, 913.82, 665.37,   -88.62, -99.36, 348.24);
+	CreateDynamicObject(1878, -326.60, 913.86, 666.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -326.34, 913.81, 666.43,   -88.62, -99.36, 348.24);
+	CreateDynamicObject(1878, -326.08, 913.81, 666.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -326.58, 913.82, 665.54,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -326.30, 913.81, 665.85,   -88.78, -99.98, 348.24);
+	CreateDynamicObject(1878, -325.72, 913.79, 666.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -325.73, 913.76, 665.54,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -325.16, 913.81, 665.68,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -325.16, 913.81, 666.09,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1878, -325.38, 913.85, 665.34,   -262.56, -69.24, 348.24);
+	CreateDynamicObject(1878, -325.44, 913.81, 666.40,   -132.42, -95.10, 348.24);
+	CreateDynamicObject(3498, -335.63, 923.26, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -337.97, 921.60, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -340.75, 922.96, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3498, -342.95, 923.00, 664.19,   0.00, 0.00, 0.00);
+	CreateDynamicObject(644, -318.64, 916.82, 663.32,   0.00, 0.00, 230.98);
+	CreateDynamicObject(2710, -317.07, 910.76, 665.03,   -0.06, 0.00, -145.68);
+	CreateDynamicObject(1247, -315.94, 912.03, 665.33,   0.00, 0.00, 68.64);
+	CreateDynamicObject(1247, -315.64, 912.55, 665.31,   0.00, 0.00, 69.90);
+	CreateDynamicObject(1247, -315.94, 912.03, 665.33,   0.00, 0.00, 68.64);
+	CreateDynamicObject(1247, -315.64, 912.55, 665.31,   0.00, 0.00, 69.90);
+	CreateDynamicObject(1247, -316.22, 911.59, 665.34,   0.00, 0.00, 56.94);
+	CreateDynamicObject(2035, -316.10, 912.11, 664.72,   85.50, -7.98, -112.14);
+	CreateDynamicObject(1314, -315.81, 912.51, 665.28,   0.00, 0.00, 62.34);
+	CreateDynamicObject(1239, -317.86, 909.73, 664.76,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1247, -317.87, 909.73, 664.60,   86.10, -31.74, 0.00);
+	CreateDynamicObject(1274, -319.97, 909.16, 665.07,   0.00, 0.00, 9.28);
+	CreateDynamicObject(1247, -319.96, 909.21, 664.88,   86.10, -31.74, 0.00);
+	CreateDynamicObject(1247, -317.87, 909.73, 665.18,   86.10, -31.74, 0.00);
+	CreateDynamicObject(19330, -315.42, 913.36, 664.97,   -0.72, -87.60, 87.42);
+	CreateDynamicObject(19347, -316.74, 910.99, 665.45,   126.48, 220.32, -0.66);
+	CreateDynamicObject(19347, -316.86, 910.88, 665.45,   126.48, 220.32, -0.66);
+	CreateDynamicObject(19347, -316.93, 910.78, 665.45,   126.48, 220.32, -0.66);
+	CreateDynamicObject(19347, -317.01, 910.69, 665.45,   126.48, 220.32, -0.66);
+	CreateDynamicObject(772, -320.68, 1556.69, 74.67,   0.00, 0.00, 0.00);
+	return 1;
+}
+
+stock CreateBarracksInterior(){	
+	CreateDynamicObject(2068, 1237.09, 2482.57, 1003.67,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2068, 1237.24, 2476.37, 1003.67,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2068, 1235.58, 2484.51, 1002.17,   90.00, 0.00, 0.00);
+	CreateDynamicObject(2068, 1235.84, 2476.15, 1002.17,   90.00, 0.00, 0.00);
+	CreateDynamicObject(1218, 1238.44, 2483.83, 1000.59,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19169, 1238.96, 2483.52, 1002.37,   0.00, -90.00, 0.00);
+	CreateDynamicObject(19168, 1238.94, 2477.35, 1002.37,   0.00, -90.00, 0.00);
+	CreateDynamicObject(19165, 1234.06, 2477.76, 1002.37,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19165, 1234.07, 2483.73, 1002.37,   0.00, 90.00, 0.00);
+	CreateDynamicObject(3014, 1236.57, 2484.18, 1000.29,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3014, 1235.96, 2484.25, 1000.29,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3014, 1236.21, 2484.15, 1000.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2036, 1234.12, 2479.63, 1003.30,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2036, 1234.12, 2479.63, 1002.30,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2036, 1234.12, 2481.63, 1002.30,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2036, 1234.12, 2481.63, 1003.30,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2481.81, 1003.01,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2479.31, 1003.01,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2479.31, 1002.51,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2481.81, 1002.51,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2044, 1238.94, 2480.87, 1002.77,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2044, 1238.90, 2480.18, 1002.77,   90.00, 0.00, -90.00);
+	CreateDynamicObject(921, 1234.24, 2476.67, 1003.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(921, 1238.84, 2476.42, 1003.13,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1893, 1235.61, 2477.75, 1003.82,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1893, 1235.99, 2483.03, 1003.82,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1221, 1234.60, 2483.58, 1000.59,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14401, 1236.94, 2480.34, 1000.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2036, 1234.12, 2479.63, 1001.30,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2036, 1234.12, 2481.63, 1001.30,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2481.81, 1001.81,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2044, 1238.94, 2480.87, 1002.20,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2044, 1238.90, 2480.18, 1002.20,   90.00, 0.00, -90.00);
+	CreateDynamicObject(2035, 1238.90, 2479.31, 1001.81,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2481.81, 1000.81,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2035, 1238.90, 2479.31, 1000.81,   90.00, 0.00, 90.00);
+	CreateDynamicObject(2044, 1238.90, 2480.18, 1001.42,   90.00, 0.00, -90.00);
+	CreateDynamicObject(2044, 1238.94, 2480.87, 1001.42,   90.00, 0.00, 90.00);
+	CreateDynamicObject(16644, 1236.14, 2481.70, 1000.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16644, 1233.54, 2481.41, 1000.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16644, 1238.76, 2485.07, 1000.06,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1217, 1238.52, 2476.72, 1000.59,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18653, 1237.93, 2477.79, 1003.60,   0.00, -90.00, 0.00);
+	CreateDynamicObject(2372, 1236.25, 2478.58, 1000.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2372, 1236.30, 2481.09, 1000.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18653, 1238.28, 2482.95, 1003.60,   0.00, -90.00, 0.00);
+
+	//Floor
+	SetObjectMaterial(CreateObject(19452, 1238.21, 2480.69, 1000.00,   0.00, 90.00, 0.00), 0, 17925, "lae2fake_int", "ab_wood1", 0xFFFFFFFF);
+	SetObjectMaterial(CreateObject(19452, 1234.72, 2480.40, 1000.00,   0.00, 90.00, 0.00), 0, 17925, "lae2fake_int", "ab_wood1", 0xFFFFFFFF);
+	//Walls
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1239.05, 2480.34, 1000.09,   0.00, 0.00, 0.00), 0, 11326, "oldgarage_sfse", "ws_corr_metal1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1233.98, 2480.44, 1000.09,   0.00, 0.00, 0.00), 0, 11326, "oldgarage_sfse", "ws_corr_metal1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1236.83, 2485.16, 1000.09,   0.00, 0.00, 90.00), 0, 11326, "oldgarage_sfse", "ws_corr_metal1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1236.42, 2476.18, 1000.09,   0.00, 0.00, 90.00), 0, 11326, "oldgarage_sfse", "ws_corr_metal1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1236.43, 2481.15, 1004.09,   0.00, 90.00, 0.00), 0, 11326, "oldgarage_sfse", "ws_corr_metal1", 0xFFFFFFFF);
+	//Holders
+	SetDynamicObjectMaterial(CreateDynamicObject(2395, 1238.90, 2481.92, 1000.52,   0.00, 0.00, -90.00), 0, 3241, "conhooses", "ws_corr_metal2", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(2395, 1234.12, 2479.25, 1001.02,   0.00, 0.00, 90.00), 0, 3241, "conhooses", "ws_corr_metal2", 0xFFFFFFFF);
+	return 1;
+}
+
+stock CustObjectLSPDEWindow(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+new LSPDWindow=CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+SetDynamicObjectMaterial(LSPDWindow, 0, 3979, "civic01_lan", "sl_laglasswall2", 0); //Glass above the door
+}
+
+stock CustObjectLSPDEBrickWall(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+new LSPDBrickWall=CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+SetDynamicObjectMaterial(LSPDBrickWall, 0, 10398, "countryclub_sfs", "hc_brickwall1", 0); //BrickWall
+}
+
+stock CustObjectLSPDEPillar(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+new LSPDEPillar=CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+SetDynamicObjectMaterial(LSPDEPillar, 0, 16150, "ufo_bar", "GEwhite1_64", 0); //Pillars
+}
+stock LSPDPCLEG(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+new LSPDcompleg = CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+SetDynamicObjectMaterial(LSPDcompleg, 0, 2267, "picture_frame", "CJ_WOOD_DARK", 0xFF1D1D1D);
+}
+stock LSPDMONf(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+	new LSPDMONs = CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+	SetDynamicObjectMaterial(LSPDMONs, 0, 2267, "picture_frame", "CJ_WOOD_DARK", 0xFF1D1D1D); //
+	SetDynamicObjectMaterial(LSPDMONs, 1, 16150, "ufo_bar", "GEwhite1_64", 0xFF2A2A2A); //
+}
+stock LSPDMONb(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+	new LSPDMONs = CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+	SetDynamicObjectMaterial(LSPDMONs, 0, 2267, "picture_frame", "CJ_WOOD_DARK", 0xFF1D1D1D); //
+	SetDynamicObjectMaterial(LSPDMONs, 1, 2267, "picture_frame", "CJ_WOOD_DARK", 0xFF1D1D1D); //
+}
+stock LSPDMONlight(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+	new LSPDMONs = CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+	SetDynamicObjectMaterial(LSPDMONs, 0, 18644, "mattextures", "screw", 0xFFD51717); //
+}
+stock LSPDMONkeys(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) //
+{
+	new LSPDMONs = CreateDynamicObject(objectid, x, y, z, rx, ry, rz); //
+	SetDynamicObjectMaterial(LSPDMONs, 0, 2009, "cj_office", "of_key_256", 0xFF292929); //
+}
+new LSPDINTtxt;
+stock LoadLSPD() //by Jacob/Nate
+{
+	
+	//sign by jacob ;)
+	/*new
+		sign = CreateDynamicObject(10837, 1555.01, -1676.77, 21.59,   0.00, 0.00, -15.00);
+
+	SetDynamicObjectMaterial(sign, 1, 7009, "vgndwntwn1", "newpolice_sa", 0);
+	CreateDynamicObject(19357, 1555.1271, -1675.4456, 23.7983,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19357, 1555.1292, -1675.7859, 23.7983,   0.00, 0.00, 0.00);*/
+	
+	/*sign = CreateDynamicObject(2722, 1555.00, -1674.60, 24.92,   0.00, 0.00, 270.00);
+	SetDynamicObjectMaterialText(sign, 0, "Los", 13, "Cambria", 55, 1, -584707328, 0, 1);
+	sign = CreateDynamicObject(2722, 1554.90, -1675.89, 24.92,   0.00, 0.00, 270.00);
+	SetDynamicObjectMaterialText(sign, 0, "Santos", 13, "Cambria", 55, 1, -584707328, 0, 1);
+	sign = CreateDynamicObject(2655, 1554.902, -1674.9597, 25.2000,   0.00, 90.00, 270.00);
+	SetDynamicObjectMaterial(sign, 0, 18265, "w_town3cs_t", "ws_whitewall2_top", 0xFFFFFFFF);
+	sign = CreateDynamicObject(2655, 1555.0000, -1676.3397, 25.2000,   0.00, 90.00, 270.00);
+	SetDynamicObjectMaterial(sign, 0, 18265, "w_town3cs_t", "ws_whitewall2_top", 0xFFFFFFFF);*/
+
+	CreateDynamicObject(19304, 1586.38, -1676.85, 1096.12,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19304, 1584.74, -1676.86, 1096.12,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19304, 1583.24, -1676.85, 1096.12,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19304, 1581.80, -1676.86, 1096.12,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19304, 1588.03, -1676.98, 1095.12,   0.00, 90.00, 0.00);
+	//==========
+	LSPDINTtxt = CreateObject(19301, 1560.76, -1678.22, 1101.57,   0.00, 0.00, 0.00);
+	SetObjectMaterial(LSPDINTtxt, 1, 16150, "ufo_bar", "sa_wood08_128", 0); //Dark wooden fringe covering the walls
+	SetObjectMaterial(LSPDINTtxt, 2, 1515, "dsfs", "CJ_WOOD6", 0); //Desk top in the lobby
+	SetObjectMaterial(LSPDINTtxt, 3, 13746, "lahillshilhs1z", "ws_stationfloor", 0); //Blue carper, 2nd floor
+	SetObjectMaterial(LSPDINTtxt, 4, 10871, "blacksky_sfse", "ws_slatetiles", 0); //Tiles, behind the desk in the lobby
+	SetObjectMaterial(LSPDINTtxt, 5, 10053, "slapart01sfe", "whitedecosfe4", 0); //Wall in the lobby
+	SetObjectMaterial(LSPDINTtxt, 6, 6060, "shops2_law", "gun_ceiling1", 0); //Ceiling in the lobby
+	SetObjectMaterial(LSPDINTtxt, 8, 6060, "shops2_law", "gun_ceiling1", 0); //Ceiling tile, main hall ceiling
+	SetObjectMaterial(LSPDINTtxt, 9, 16150, "ufo_bar", "sa_wood08_128", 0); //Wooden fringe all around the building.
+	SetObjectMaterial(LSPDINTtxt, 10, 12841, "cos_pizzaplace", "b_wtilesreflect", 0); //Floor in the briefing room
+	SetObjectMaterial(LSPDINTtxt, 12, 14389, "madpoolbit", "ah_wallstyle1", 0); //Wall upstairs.
+	SetObjectMaterial(LSPDINTtxt, 13, 10932, "station_sfse", "ws_stationfloor", 0); //Floor
+	SetObjectMaterial(LSPDINTtxt, 15, 10871, "blacksky_sfse", "ws_slatetiles", 0); //Floor in the training room
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1570.94, -1676.89, 1106.48,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1593.46, -1676.89, 1106.48,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1579.2395, -1676.8884, 1113.0282,   0.00, 0.00, 90.01), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19458, 1570.96, -1676.88, 1104.43,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19366, 1590.24, -1676.88, 1104.43,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19458, 1570.95, -1676.93, 1104.44,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1571.17, -1676.94, 1103.63,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1583.5779, -1676.9312, 1103.6300,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1583.58, -1676.86, 1103.64,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1593.21, -1676.86, 1103.64,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1571.18, -1676.86, 1103.64,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1574.26, -1668.99, 1106.48,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19378, 1574.27, -1669.00, 1100.93,   0.00, 0.00, 0.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1583.83, -1676.89, 1106.48,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19458, 1583.63, -1676.93, 1104.43,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19440, 1533.22, -1682.24, 1105.58,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19440, 1533.2078, -1682.8201, 1105.5800,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	CreateDynamicObject(19440, 1533.22, -1682.16, 1102.08,   0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(CreateDynamicObject(19439, 1579.6024, -1676.9076, 1106.0916,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19439, 1575.1743, -1676.9089, 1106.0916,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1583.83, -1676.91, 1106.48,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1570.94, -1676.92, 1106.48,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19439, 1577.2996, -1676.9027, 1108.3997,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19377, 1579.24, -1676.92, 1113.03,   0.00, 0.00, 90.01), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19458, 1583.82, -1676.88, 1104.43,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19379, 1574.28, -1669.01, 1100.15,   0.00, 0.00, 0.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19379, 1579.42, -1684.89, 1105.092,   0.00, 90.00, 0.00), 0, 19301, "mp_policesf", "mp_cop_carpet", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19379, 1580.97, -1684.90, 1105.09,   0.00, 90.00, 0.00), 0, 19301, "mp_policesf", "mp_cop_carpet", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19371, 1529.32, -1674.74, 1103.69,   0.00, 90.00, 0.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19371, 1529.32, -1676.51, 1103.691,   0.00, 90.00, 0.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1580.7000, -1688.4000, 1108.2800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1580.7000, -1688.4000, 1104.7800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1578.5200, -1688.3961, 1103.9100,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1576.1600, -1688.4039, 1104.7800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1576.1600, -1688.4000, 1108.2800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1575.8000, -1688.4137, 1104.7800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1575.7708, -1688.4117, 1108.2800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1579.2000, -1688.7100, 1108.2800,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1579.1899, -1689.9200, 1108.2800,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1577.6801, -1689.9100, 1108.2800,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1578.5000, -1690.0601, 1107.5900,   0.00, 90.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1579.2000, -1688.4098, 1109.2600,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1580.23, -1688.37, 1100.59,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1576.73, -1688.37, 1100.59,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19462, 1575.99, -1688.36, 1100.58,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(2463, 1578.64, -1688.80, 1106.40,   0.00, 0.00, 180.00), 1, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1531.01, -1676.55, 1105.53,   0.00, 0.00, 0.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1531.03, -1676.54, 1102.24,   0.00, 0.00, 0.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1529.39, -1677.99, 1105.53,   0.00, 0.00, 90.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1528.10, -1676.41, 1105.53,   0.00, 0.00, 0.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1528.09, -1674.83, 1105.53,   0.00, 0.00, 0.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1531.0198, -1676.5385, 1105.5300,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1529.4659, -1673.3516, 1105.5300,   0.00, 0.00, 90.00), 0, 12853, "cunte_gas01", "sw_floor1", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19363, 1529.52, -1673.33, 1105.53,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0);
+
+	//Wall block to cell rooms
+	SetDynamicObjectMaterial(CreateDynamicObject(19364, 1577.6206, -1682.8900, 1103.30000,   0.00, 0.00, 90.00), 0, 19301, "mp_policesf", "mp_cop_wall", 0xFFEDEFC2);
+	SetDynamicObjectMaterial(CreateDynamicObject(19364, 1574.4094, -1682.8900, 1103.3000,   0.00, 0.00, 90.00), 0, 19301, "mp_policesf", "mp_cop_wall", 0xFFEDEFC2);
+	SetDynamicObjectMaterial(CreateDynamicObject(19364, 1577.6200, -1682.8900, 1099.8000,   0.00, 180.00, 90.00), 0, 19301, "mp_policesf", "mp_cop_wall", 0xFFEDEFC2);
+	SetDynamicObjectMaterial(CreateDynamicObject(19364, 1574.4100, -1682.8900, 1099.8000,  0.00, 180.00, 90.00), 0, 19301, "mp_policesf", "mp_cop_wall", 0xFFEDEFC2);
+	//Integration room walls
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1543.61, -1676.43, 1102.26,   0.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1541.87, -1675.00, 1105.49,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19355, 1541.87, -1675.00, 1108.99,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1543.37, -1673.45, 1105.49,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1544.92, -1673.46, 1105.49,   0.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19367, 1546.52, -1674.96, 1105.49,   0.00, 0.00, 0.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19395, 1543.47, -1676.49, 1105.61,   90.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19395, 1543.46, -1676.44, 1105.60,   90.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19440, 1545.74, -1676.41, 1108.03,   180.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19440, 1545.74, -1676.50, 1108.04,   180.00, 0.00, 90.00), 0, 14389, "madpoolbit", "ah_wallstyle1", 0xFFCBD777);
+	SetDynamicObjectMaterial(CreateDynamicObject(19395, 1543.4954, -1676.4845, 1105.6400,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19440, 1545.7394, -1676.4791, 1108.0200,   180.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19395, 1543.51, -1676.48,  1105.5500,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(19395, 1543.49, -1676.44, 1108.85,   90.00, 0.00, 90.00), 0, 16150, "ufo_bar", "sa_wood08_128", 0xFFFFFFFF);
+	//Integration window, blacked
+	SetDynamicObjectMaterial(CreateDynamicObject(2395, 1544.4600, -1676.4399, 1108.0199,   0.00, 90.00, 180.00), 0, 14598, "papaerchaseoffice", "barbersmir1", 0xFF4A4A4A);
+
+	//Counter (main)
+	SetDynamicObjectMaterial(CreateDynamicObject(14638, 1585.6515, -1673.8605, 1106.1299,   0.00, 90.00, 0.00), 0, 1999, "cj_office", "CJ_DESK", 0);
+	SetDynamicObjectMaterial(CreateDynamicObject(14638, 1582.6503, -1673.8606, 1106.1299,   0.00, 90.00, 0.00), 0, 1999, "cj_office", "CJ_DESK", 0);
+	//PC legs
+	LSPDPCLEG(2192, 1559.42, -1682.95, 1105.98,   0.00, 0.00, 0.00);
+	LSPDPCLEG(2192, 1562.79, -1682.05, 1105.98,   0.00, 0.00, -62.50);
+	LSPDPCLEG(2192, 1564.83, -1680.07, 1105.98,   0.00, 0.00, 104.50);
+	LSPDPCLEG(2192, 1567.37, -1682.94, 1105.98,   0.00, 0.00, 35.50);
+	LSPDPCLEG(2192, 1576.03, -1685.96, 1106.11,   0.00, 0.00, 194.21);
+	LSPDPCLEG(2192, 1583.77, -1672.41, 1106.12,   0.00, 0.00, 29.15);
+	LSPDPCLEG(2192, 1586.78, -1672.79, 1106.12,   0.00, 0.00, -16.00);
+	LSPDPCLEG(2192, 1529.90, -1668.73, 1104.57,   0.00, 0.00, 90.00);
+	LSPDPCLEG(2192, 1535.84, -1672.43, 1104.57,   0.00, 0.00, 0.00);
+	LSPDPCLEG(2192, 1534.00, -1672.43, 1104.57,   0.00, 0.00, 0.00);
+	LSPDPCLEG(2192, 1531.39, -1668.15, 1104.57,   0.00, 0.00, 180.00);
+	LSPDPCLEG(2192, 1532.04, -1672.38, 1104.57,   0.00, 0.00, 13.74);
+	LSPDPCLEG(2192, 1533.3795, -1668.1261, 1104.5699,   0.00, 0.00, 176.59);
+	LSPDPCLEG(2192, 1535.25, -1668.13, 1104.57,   0.00, 0.00, 180.14);
+
+	//PC mons front
+	LSPDMONf(2265, 1586.93, -1672.61, 1106.66,   -15.00, 90.00, 164.00);
+	LSPDMONf(2265, 1583.74, -1672.18, 1106.66,   -14.82, 90.00, 209.15);
+	LSPDMONf(2265, 1575.98, -1686.20, 1106.66,   -13.28, 90.00, 14.21);
+	LSPDMONf(2265, 1567.33, -1682.70, 1106.48,   -12.24, 90.00, 213.90);
+	LSPDMONf(2265, 1563.03, -1681.97, 1106.48,   -12.24, 90.00, 120.50);
+	LSPDMONf(2265, 1564.58, -1680.05, 1106.48,   -12.24, 90.00, 284.50);
+	LSPDMONf(2265, 1559.52, -1682.72, 1106.53,   -12.24, 90.00, 180.00);
+	LSPDMONf(2265, 1535.92, -1672.21, 1105.14,   -10.93, 90.00, 180.00);
+	LSPDMONf(2265, 1534.11, -1672.21, 1105.14,   -10.93, 90.00, 180.00);
+	LSPDMONf(2265, 1532.08, -1672.14, 1105.14,   -10.93, 90.00, 193.74);
+	LSPDMONf(2265, 1529.67, -1668.63, 1105.11,   -10.93, 90.00, -90.00);
+	LSPDMONf(2265, 1531.30, -1668.39, 1105.11,   -10.93, 90.00, 0.00);
+	LSPDMONf(2265, 1533.27, -1668.36, 1105.11,   -10.93, 90.00, -3.59);
+	LSPDMONf(2265, 1535.16, -1668.36, 1105.11,   -10.93, 90.00, 0.14);
+	LSPDMONf(2267, 1528.18, -1670.12, 1106.06,   0.00, 0.00, 90.00);
+	LSPDMONf(2267, 1541.96, -1669.59, 1105.90,   0.00, 0.00, 90.00);
+	LSPDMONf(2267, 1578.48, -1688.25, 1108.17,   4.94, 0.00, 180.00);
+	LSPDMONf(2267, 1564.02, -1688.88, 1108.13,   0.00, 0.00, 180.00);
+	LSPDMONf(2267, 1564.02, -1688.88, 1108.10,   0.00, 0.00, 180.00);
+
+	//PC mons back
+	LSPDMONb(2265, 1585.97, -1673.33, 1106.41,   14.82, 90.00, -16.00);
+	LSPDMONb(2265, 1530.64, -1669.35, 1104.92,   10.93, 90.00, 90.00);
+	LSPDMONb(2265, 1558.81, -1683.69, 1106.32,   12.24, 90.00, 0.00);
+	LSPDMONb(2265, 1561.85, -1681.82, 1106.27,   12.24, 90.00, -60.50);
+	LSPDMONb(2265, 1567.28, -1683.90, 1106.27,   12.24, 90.00, 33.90);
+	LSPDMONb(2265, 1576.45, -1685.11, 1106.44,   13.28, 90.00, 194.21);
+	LSPDMONb(2265, 1583.58, -1673.36, 1106.41,   14.82, 90.00, 29.15);
+
+	//TV lights
+	LSPDMONlight(18644, 1541.92, -1670.17, 1105.47,   0.00, 90.00, 0.00);
+	LSPDMONlight(18644, 1528.14, -1670.72, 1105.64,   90.00, 0.00, 90.00);
+	LSPDMONlight(18644, 1579.15, -1688.32, 1107.74,   0.00, 94.00, 90.00);
+	LSPDMONlight(18644, 1564.60, -1688.91, 1107.68,   0.00, 90.00, 90.00);
+
+	//Keyboards
+	LSPDMONkeys(1547, 1583.11, -1672.65, 1106.18,   0.00, 0.00, 174.66);
+	LSPDMONkeys(1547, 1586.92, -1672.60, 1106.18,   0.00, 0.00, 185.00);
+	LSPDMONkeys(1547, 1576.92, -1685.81, 1106.11,   0.00, 0.00, 0.66);
+	LSPDMONkeys(1547, 1535.57, -1668.26, 1104.57,   0.00, 0.00, 0.00);
+	LSPDMONkeys(1547, 1533.56, -1668.18, 1104.57,   0.00, 0.00, 0.00);
+	LSPDMONkeys(1547, 1531.54, -1668.28, 1104.57,   0.00, 0.00, 3.71);
+	LSPDMONkeys(1547, 1535.58, -1672.26, 1104.57,   0.00, 0.00, 177.94);
+	LSPDMONkeys(1547, 1533.72, -1672.26, 1104.57,   0.00, 0.00, 181.03);
+	LSPDMONkeys(1547, 1531.66, -1672.26, 1104.57,   0.00, 0.00, 185.36);
+	LSPDMONkeys(1547, 1529.88, -1668.87, 1104.58,   0.00, 0.00, 91.00);
+
+	//Lights
+	CreateDynamicObject(14438, 1579.06, -1672.37, 1111.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1583.34, -1681.55, 1111.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1561.90, -1689.56, 1111.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1535.34, -1688.65, 1109.75,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1544.15, -1676.80, 1109.75,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1543.83, -1672.33, 1109.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1523.66, -1666.22, 1109.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1523.66, -1668.46, 1109.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1581.01, -1692.11, 1110.68,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14438, 1581.48, -1678.10, 1099.97,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14438, 1575.40, -1684.94, 1099.47,   0.00, 0.00, 0.00);
+
+
+	CreateDynamicObject(2611, 1580.13, -1676.76, 1106.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2612, 1583.01, -1676.76, 1106.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(14852, 1560.64, -1667.08, 1103.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14848, 1562.35, -1680.63, 1099.57,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14892, 1557.15, -1688.60, 1104.47,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19325, 1584.82, -1673.78, 1109.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19325, 1591.46, -1673.78, 1109.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19089, 1589.13, -1673.79, 1107.25,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19089, 1596.51, -1673.79, 1107.25,   0.00, 90.00, 0.00);
+	CreateDynamicObject(2601, 1584.79, -1672.46, 1106.26,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2186, 1588.83, -1668.53, 1105.17,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2610, 1581.69, -1672.73, 1106.00,   0.00, 0.00, 174.33);
+	CreateDynamicObject(2610, 1589.01, -1672.81, 1106.00,   0.00, 0.00, 178.69);
+	CreateDynamicObject(2164, 1582.40, -1667.51, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2161, 1584.19, -1667.50, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2610, 1581.12, -1672.70, 1106.00,   0.00, 0.00, 178.69);
+	CreateDynamicObject(626, 1578.77, -1668.03, 1107.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2205, 1576.20, -1685.61, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1714, 1576.98, -1687.37, 1105.17,   0.00, 0.00, 194.40);
+	CreateDynamicObject(14455, 1581.80, -1690.45, 1106.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2161, 1578.61, -1688.78, 1105.18,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2140, 1579.77, -1688.49, 1105.38,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2140, 1580.75, -1688.49, 1105.38,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2140, 1577.18, -1688.49, 1105.38,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2140, 1576.20, -1688.49, 1105.38,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2140, 1575.22, -1688.49, 1105.38,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2123, 1576.21, -1684.21, 1105.88,   0.00, 0.00, 111.24);
+	CreateDynamicObject(2123, 1577.87, -1684.06, 1105.88,   0.00, 0.00, 72.36);
+	CreateDynamicObject(2894, 1577.64, -1685.73, 1106.11,   0.00, 0.00, -13.32);
+	CreateDynamicObject(2010, 1581.65, -1685.11, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2163, 1574.25, -1681.49, 1105.18,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19100, 1574.55, -1681.24, 1106.17,   0.00, -90.00, -35.87);
+	CreateDynamicObject(19325, 1574.16, -1685.49, 1106.92,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2257, 1578.29, -1680.13, 1107.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2261, 1581.45, -1683.18, 1106.67,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2737, 1578.65, -1672.22, 1106.68,   0.00, 0.00, -219.24);
+	CreateDynamicObject(1808, 1580.18, -1672.80, 1105.17,   0.00, 0.00, 170.64);
+	CreateDynamicObject(1722, 1567.97, -1683.71, 1105.18,   0.00, 0.00, -3.50);
+	CreateDynamicObject(1715, 1563.44, -1680.11, 1105.18,   0.00, 0.00, -25.00);
+	CreateDynamicObject(2066, 1568.16, -1680.19, 1105.18,   0.00, 0.00, -6.50);
+	CreateDynamicObject(2164, 1569.50, -1680.27, 1105.18,   0.00, 0.00, -90.00);
+	CreateDynamicObject(630, 1566.08, -1680.19, 1106.19,   0.00, 0.00, 47.40);
+	CreateDynamicObject(2169, 1563.29, -1681.77, 1105.17,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2171, 1562.18, -1680.82, 1105.18,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2169, 1565.02, -1680.30, 1105.17,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1715, 1566.63, -1681.78, 1105.18,   0.00, 0.00, 30.50);
+	CreateDynamicObject(1715, 1564.52, -1680.80, 1105.18,   0.00, 0.00, 91.00);
+	CreateDynamicObject(1722, 1565.28, -1682.28, 1105.18,   0.00, 0.00, 82.00);
+	CreateDynamicObject(1722, 1561.83, -1683.59, 1105.18,   0.00, 0.00, -87.00);
+	CreateDynamicObject(630, 1562.83, -1688.51, 1106.19,   0.00, 0.00, 47.40);
+	CreateDynamicObject(2201, 1562.35, -1680.34, 1105.97,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2162, 1558.21, -1679.83, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2169, 1559.24, -1683.23, 1105.17,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1715, 1558.78, -1681.46, 1105.18,   0.00, 0.00, 4.78);
+	CreateDynamicObject(630, 1561.18, -1680.16, 1106.19,   0.00, 0.00, 47.40);
+	CreateDynamicObject(2601, 1557.90, -1683.13, 1106.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2894, 1558.58, -1683.22, 1105.96,   0.00, 0.00, 164.73);
+	CreateDynamicObject(2468, 1561.45, -1682.92, 1105.17,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2610, 1561.17, -1682.09, 1105.98,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2610, 1561.17, -1681.57, 1105.98,   0.00, 0.00, -85.97);
+	CreateDynamicObject(2716, 1557.73, -1682.13, 1106.95,   0.00, 2.48, 90.00);
+	CreateDynamicObject(2163, 1556.21, -1679.80, 1106.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2139, 1556.66, -1680.33, 1105.15,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2140, 1554.98, -1680.24, 1105.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2139, 1554.01, -1680.33, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2139, 1554.04, -1680.94, 1105.17,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2149, 1554.03, -1680.14, 1106.38,   0.00, 0.00, 9.88);
+	CreateDynamicObject(2154, 1555.98, -1679.96, 1105.14,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2139, 1557.07, -1680.32, 1105.14,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2687, 1555.93, -1680.28, 1107.06,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2863, 1556.62, -1680.13, 1106.21,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2637, 1553.92, -1682.80, 1105.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2121, 1554.32, -1681.77, 1105.79,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2121, 1554.05, -1684.22, 1105.79,   0.00, 0.00, 98.00);
+	CreateDynamicObject(2310, 1554.53, -1682.53, 1105.79,   0.00, 0.00, 11.00);
+	CreateDynamicObject(2647, 1554.10, -1682.25, 1106.14,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2342, 1553.99, -1683.28, 1106.11,   0.00, 0.00, -10.20);
+	CreateDynamicObject(2611, 1559.27, -1688.86, 1107.20,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2737, 1557.24, -1688.86, 1106.97,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2180, 1544.31, -1674.87, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1722, 1546.19, -1673.79, 1103.78,   0.00, 0.00, 131.00);
+	CreateDynamicObject(1722, 1542.07, -1673.86, 1103.78,   0.00, 0.00, -98.00);
+	CreateDynamicObject(2196, 1544.48, -1674.13, 1104.58,   0.00, 0.00, 258.00);
+	CreateDynamicObject(1886, 1545.78, -1675.87, 1107.51,   23.00, 0.00, -113.00);
+	CreateDynamicObject(2310, 1547.34, -1668.45, 1104.26,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2310, 1546.83, -1669.69, 1104.26,   0.00, 0.00, -3.34);
+	CreateDynamicObject(2310, 1547.34, -1671.01, 1104.26,   0.00, 0.00, -0.67);
+	CreateDynamicObject(2310, 1547.34, -1672.34, 1104.26,   0.00, 0.00, -16.37);
+	CreateDynamicObject(2310, 1545.67, -1668.45, 1104.26,   0.00, 0.00, 3.34);
+	CreateDynamicObject(2310, 1545.74, -1670.59, 1104.26,   0.00, 0.00, -16.00);
+	CreateDynamicObject(2310, 1545.67, -1672.12, 1104.26,   0.00, 0.00, -18.04);
+	CreateDynamicObject(2310, 1544.57, -1672.79, 1104.26,   0.00, 0.00, -74.15);
+	CreateDynamicObject(2344, 1543.25, -1669.33, 1104.92,   -22.74, 0.00, 96.23);
+	CreateDynamicObject(19171, 1543.08, -1673.36, 1105.91,   90.00, 90.00, 90.00);
+	CreateDynamicObject(1737, 1531.12, -1672.51, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1737, 1533.14, -1672.51, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1737, 1535.15, -1672.51, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1737, 1535.08, -1668.07, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1737, 1533.06, -1668.07, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1737, 1531.04, -1668.07, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1806, 1535.60, -1669.42, 1103.78,   0.00, 0.00, 3.46);
+	CreateDynamicObject(1806, 1533.57, -1669.54, 1103.78,   0.00, 0.00, -2.69);
+	CreateDynamicObject(1806, 1531.44, -1669.51, 1103.78,   0.00, 0.00, 4.24);
+	CreateDynamicObject(1806, 1533.69, -1670.97, 1103.78,   0.00, 0.00, 178.85);
+	CreateDynamicObject(1806, 1531.38, -1670.97, 1103.78,   0.00, 0.00, 189.24);
+	CreateDynamicObject(1806, 1535.62, -1671.18, 1103.78,   0.00, 0.00, 176.54);
+	CreateDynamicObject(2173, 1529.97, -1668.12, 1103.78,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1671, 1528.52, -1668.82, 1104.22,   0.00, 0.00, 81.12);
+	CreateDynamicObject(2894, 1529.99, -1668.10, 1104.58,   0.00, 0.00, -77.00);
+	CreateDynamicObject(2167, 1529.85, -1673.05, 1103.77,   0.00, 0.00, 180.00);
+	CreateDynamicObject(630, 1528.82, -1672.60, 1104.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1808, 1538.93, -1673.26, 1103.78,   0.00, 0.00, 84.97);
+	CreateDynamicObject(14782, 1534.75, -1673.73, 1104.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14842, 1528.99, -1677.02, 1105.56,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2372, 1527.33, -1675.47, 1104.97,   0.00, 90.00, 0.00);
+	CreateDynamicObject(2716, 1531.16, -1676.50, 1106.19,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19327, 1535.39, -1677.90, 1106.50,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1721, 1541.41, -1668.35, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1541.41, -1668.95, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1541.41, -1669.56, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(630, 1541.27, -1670.26, 1104.81,   0.00, 0.00, 47.00);
+	CreateDynamicObject(1721, 1541.55, -1674.80, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1541.55, -1675.41, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1541.55, -1676.02, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1541.55, -1676.64, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1574.46, -1671.42, 1105.18,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1721, 1574.46, -1672.03, 1105.18,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1721, 1574.46, -1672.64, 1105.18,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1721, 1574.46, -1670.81, 1105.18,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1535, 1546.75, -1683.45, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 1579.18, -1679.63, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1721, 1579.76, -1679.63, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1721, 1580.35, -1679.63, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1721, 1580.93, -1679.63, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19440, 1533.22, -1682.82, 1102.08,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1533, 1533.10, -1681.77, 1103.78,   0.00, 0.00, -90.00);
+	CreateDynamicObject(19302, 1578.71, -1673.05, 1095.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19302, 1582.60, -1673.04, 1095.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19302, 1586.59, -1673.06, 1095.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19302, 1590.52, -1673.06, 1095.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1771, 1590.37, -1668.82, 1094.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2602, 1592.99, -1668.58, 1094.46,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2602, 1586.07, -1668.47, 1094.46,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2602, 1582.10, -1668.36, 1094.46,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2602, 1580.86, -1667.87, 1094.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1738, 1580.23, -1676.63, 1094.50,   0.00, 0.00, 0.00);
+	CreateDynamicObject(17969, 1577.58, -1673.83, 1094.86,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14401, 1526.24, -1663.19, 1104.08,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2819, 1532.99, -1676.12, 1104.40,   -1.00, 0.00, -10.00);
+	CreateDynamicObject(2161, 1571.11, -1688.89, 1105.18,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2162, 1569.75, -1688.90, 1105.18,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1722, 1561.37, -1683.79, 1105.18,   0.00, 0.00, 69.00);
+	CreateDynamicObject(1722, 1566.28, -1688.78, 1105.18,   0.00, 0.00, 5.00);
+	CreateDynamicObject(1722, 1565.61, -1688.77, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1564.98, -1688.80, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1564.32, -1688.77, 1105.18,   0.00, 0.00, -7.00);
+	CreateDynamicObject(1722, 1563.70, -1688.77, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2172, 1585.83, -1687.53, 1105.12,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2182, 1583.79, -1688.37, 1105.17,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2191, 1582.79, -1684.97, 1105.10,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2193, 1584.69, -1685.54, 1105.10,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2198, 1585.67, -1684.52, 1105.15,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1806, 1585.31, -1683.04, 1105.17,   0.00, 0.00, 135.00);
+	CreateDynamicObject(1806, 1582.58, -1686.47, 1105.17,   0.00, 0.00, -62.00);
+	CreateDynamicObject(1806, 1584.57, -1686.04, 1105.17,   0.00, 0.00, -135.00);
+	CreateDynamicObject(2613, 1584.23, -1687.55, 1105.16,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2139, 1557.03, -1680.96, 1105.16,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2637, 1553.01, -1682.79, 1105.59,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1713, 1556.99, -1681.96, 1105.15,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2187, 1558.33, -1683.31, 1105.00,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2187, 1566.27, -1683.36, 1105.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2187, 1562.13, -1681.81, 1105.00,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2894, 1587.50, -1673.65, 1106.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2162, 1585.42, -1673.05, 1105.22,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2163, 1585.42, -1673.05, 1105.22,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2163, 1585.42, -1673.05, 1105.18,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2163, 1585.41, -1673.06, 1105.16,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1722, 1561.84, -1682.81, 1105.18,   0.00, 0.00, -90.00);
+	CreateDynamicObject(1722, 1565.32, -1683.32, 1105.18,   0.00, 0.00, 98.00);
+	CreateDynamicObject(2173, 1567.22, -1683.32, 1105.17,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2187, 1564.96, -1682.29, 1105.00,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2191, 1566.35, -1681.46, 1105.06,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2468, 1566.78, -1680.44, 1105.17,   0.00, 0.00, -11.00);
+	CreateDynamicObject(19466, 1543.09, -1676.50, 1105.55,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19355, 1541.87, -1675.00, 1108.99,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1542.61, -1675.93, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19355, 1543.40, -1673.49, 1108.99,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19355, 1544.92, -1673.48, 1108.99,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19355, 1546.52, -1674.98, 1108.99,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2606, 1542.90, -1676.65, 1106.62,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1806, 1542.14, -1677.58, 1103.78,   0.00, 0.00, -91.00);
+	CreateDynamicObject(2190, 1542.69, -1676.56, 1104.80,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2385, 1542.55, -1676.57, 1103.41,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1535, 1546.50, -1676.59, 1103.78,   0.00, 0.00, 93.00);
+	CreateDynamicObject(14401, 1526.22, -1661.54, 1104.08,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2167, 1531.12, -1676.28, 1103.77,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2167, 1531.12, -1677.22, 1103.77,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1428, 1583.90, -1669.48, 1094.39,   15.00, 0.00, 270.00);
+	CreateDynamicObject(630, 1574.81, -1673.59, 1106.19,   0.00, 0.00, -4.00);
+	CreateDynamicObject(630, 1568.36, -1676.27, 1106.19,   0.00, 0.00, -25.00);
+	CreateDynamicObject(2315, 1572.94, -1669.72, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2315, 1572.47, -1669.73, 1105.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2855, 1574.53, -1669.73, 1105.67,   0.00, 0.00, 4.00);
+	CreateDynamicObject(14633, 1527.38, -1661.28, 1105.29,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1999, 1551.08, -1676.19, 1103.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14633, 1565.21, -1645.84, 1105.29,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14598, 1542.89, -1657.86, 1107.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2009, 1549.10, -1674.26, 1103.77,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1806, 1552.30, -1677.32, 1103.77,   0.00, 0.00, 55.00);
+	CreateDynamicObject(1806, 1548.20, -1674.68, 1103.77,   0.00, 0.00, 193.00);
+	CreateDynamicObject(1220, 1549.02, -1675.30, 1104.88,   0.00, 0.00, 10.00);
+	CreateDynamicObject(2687, 1553.45, -1675.58, 1105.97,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2001, 1553.03, -1676.33, 1103.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2515, 1553.20, -1674.84, 1104.94,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2741, 1553.39, -1674.88, 1105.48,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2685, 1553.45, -1674.40, 1105.58,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2161, 1547.38, -1673.58, 1103.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(630, 1553.05, -1688.54, 1106.19,   0.00, 0.00, 47.40);
+	CreateDynamicObject(1721, 1551.70, -1675.33, 1103.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2372, 1534.74, -1676.44, 1103.77,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2394, 1534.16, -1676.66, 1104.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2385, 1542.55, -1676.56, 1102.41,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14458, 1587.65, -1673.36, 1106.11,   0.00, 0.00, 135.00);
+	CreateDynamicObject(14458, 1582.96, -1673.77, 1106.11,   0.00, 0.00, 98.00);
+	CreateDynamicObject(1721, 1578.94, -1680.31, 1105.17,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1721, 1579.70, -1680.32, 1105.17,   0.00, 0.00, 183.00);
+	CreateDynamicObject(1808, 1580.85, -1680.32, 1105.18,   0.00, 0.00, 0.00);
+	CreateDynamicObject(931, 1579.17, -1684.06, 1095.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1421, 1580.40, -1683.12, 1094.68,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2608, 1587.39, -1684.12, 1094.64,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2007, 1579.89, -1682.03, 1093.97,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2007, 1579.89, -1681.03, 1093.97,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2000, 1579.94, -1680.15, 1093.97,   0.00, 0.00, 100.00);
+	CreateDynamicObject(2007, 1582.00, -1683.73, 1093.97,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2007, 1582.00, -1682.72, 1093.97,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2007, 1581.99, -1681.72, 1093.97,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2007, 1583.03, -1681.71, 1093.97,   0.00, 0.00, 93.00);
+	CreateDynamicObject(2007, 1583.08, -1682.88, 1093.97,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2197, 1583.60, -1684.64, 1093.97,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2000, 1583.13, -1683.83, 1093.97,   0.00, 0.00, 78.00);
+	CreateDynamicObject(2197, 1580.47, -1678.49, 1093.97,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1417, 1581.26, -1684.93, 1094.21,   0.00, 0.00, 180.00);
+	CreateDynamicObject(16378, 1584.59, -1678.60, 1094.71,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2612, 1586.83, -1678.58, 1095.96,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2616, 1579.44, -1680.14, 1096.00,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2163, 1585.72, -1685.24, 1095.65,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2165, 1585.64, -1684.72, 1093.97,   0.00, 0.00, 176.00);
+	CreateDynamicObject(1537, 1593.35, -1682.71, 1093.97,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2606, 1584.05, -1677.27, 1096.90,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2606, 1582.06, -1677.27, 1096.90,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1771, 1590.36, -1668.81, 1095.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1771, 1588.51, -1668.87, 1094.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1771, 1584.51, -1669.14, 1094.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1771, 1584.52, -1669.13, 1095.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1428, 1591.13, -1669.35, 1094.39,   17.00, 0.00, 270.00);
+	CreateDynamicObject(1771, 1578.26, -1668.84, 1094.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1771, 1578.25, -1668.83, 1095.34,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1428, 1578.97, -1669.37, 1094.39,   17.00, 0.00, 270.00);
+	CreateDynamicObject(13599, 1584.22, -1684.78, 1105.31,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19304, 1587.49, -1673.04, 1097.12,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19304, 1583.47, -1673.03, 1097.12,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19304, 1579.62, -1673.05, 1097.12,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19304, 1591.41, -1673.03, 1097.12,   0.00, 0.00, 0.00);
+
+
+
+	//Upstairs: gym/firing range
+
+    CreateDynamicObject(2886, 1086.25, -1712.67, 1136.76,   0.00, 0.00, 90.00);
+	CreateObject(18036, 1079.90, -1707.92, 1137.45,   0.00, 0.00, 0.00); //Floor
+	CreateDynamicObject(18051, 1082.33, -1705.71, 1136.95,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8636, 1019.28, -1776.25, 1134.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1017.37, -1776.38, 1134.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1015.69, -1776.39, 1134.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1014.11, -1776.27, 1134.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1012.41, -1776.29, 1134.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1010.31, -1776.30, 1134.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(18050, 1086.50, -1706.18, 1138.25,   0.00, 0.00, 0.00);
+	CreateObject(14488, 1102.36, -1706.43, 1137.875,   0.00, 0.00, 270.00); //Floor
+	CreateDynamicObject(14486, 1101.89, -1706.10, 1136.94,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8636, 1031.62, -1770.47, 1137.18,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1031.90, -1770.39, 1137.18,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 1031.90, -1770.39, 1140.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2616, 1091.95, -1707.82, 1137.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2616, 1091.94, -1703.12, 1137.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2615, 1091.28, -1708.35, 1137.18,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2616, 1091.29, -1708.65, 1137.03,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2612, 1091.29, -1705.90, 1137.13,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2627, 1096.75, -1697.85, 1135.44,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2627, 1093.94, -1698.03, 1135.44,   0.00, 0.00, 5.00);
+	CreateDynamicObject(2627, 1099.06, -1698.00, 1135.44,   0.00, 0.00, -2.00);
+	CreateDynamicObject(2628, 1096.77, -1702.93, 1135.44,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2628, 1095.19, -1702.96, 1135.44,   0.00, 0.00, -2.00);
+	CreateDynamicObject(2629, 1102.87, -1698.70, 1135.44,   0.00, 0.00, 62.00);
+	CreateDynamicObject(2629, 1105.47, -1697.85, 1135.44,   0.00, 0.00, -4.00);
+	CreateDynamicObject(2631, 1096.90, -1700.19, 1135.44,   0.00, 0.00, 1.00);
+	CreateDynamicObject(2632, 1101.09, -1700.21, 1135.44,   0.00, 0.00, 10.00);
+	CreateDynamicObject(2630, 1111.26, -1700.21, 1135.45,   0.00, 0.00, 272.00);
+	CreateDynamicObject(2630, 1109.74, -1698.34, 1135.45,   0.00, 0.00, 309.00);
+	CreateDynamicObject(1985, 1109.47, -1713.34, 1138.38,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1985, 1106.28, -1713.87, 1138.38,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2915, 1092.24, -1706.55, 1136.05,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2915, 1092.23, -1707.52, 1136.05,   0.00, 0.00, 40.00);
+	CreateDynamicObject(3065, 1108.74, -1707.22, 1135.57,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3496, 1113.23, -1706.64, 1135.45,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3496, 1101.45, -1706.66, 1135.45,   0.00, 0.00, 270.00);
+
+	//CustObjectLSPDExterior(3976,1571.6015600,-1675.7500000,35.6797000,0.0000000,0.0000000,0.0000000); //
+ 	/*CustObjectLSPDEWindow(19379,1558.4709500,-1675.8220200,45.7540000,0.0000000,0.0000000,0.0000000); //
+  	CustObjectLSPDEWindow(19379,1558.4709500,-1675.8220200,35.2500000,0.0000000,0.0000000,0.0000000); //
+   	CustObjectLSPDEWindow(19379,1558.4709500,-1675.8220200,24.7510000,0.0000000,0.0000000,0.0000000); //
+   	CustObjectLSPDEWindow(19379,1571.4309100,-1675.8220200,24.7510000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEWindow(19379,1571.4309100,-1675.8220200,35.2500000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEWindow(19379,1571.4309100,-1675.8220200,45.7540000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1643.9904800,14.7048000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1643.9904800,18.2128000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1643.9904800,21.7088000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1643.9904800,25.2048000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1707.4985400,14.7048000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1707.4985400,18.2128000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1707.4985400,21.7088000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1543.1839600,-1707.4985400,25.2048000,0.0000000,0.0000000,0.0000000); //
+	CustObjectLSPDEBrickWall(19366,1578.8708500,-1713.7370600,15.7389000,0.0000000,0.0000000,90.0000000); //
+	CustObjectLSPDEBrickWall(19366,1578.8708500,-1713.7351100,17.1229000,0.0000000,0.0000000,90.0000000); //
+	CustObjectLSPDEBrickWall(19366,1589.9469000,-1713.7370600,15.7389000,0.0000000,0.0000000,90.0000000); //
+	CustObjectLSPDEBrickWall(19366,1589.9469000,-1713.7391400,17.1229000,0.0000000,0.0000000,90.0000000); //
+	CustObjectLSPDEBrickWall(19366,1602.4898700,-1713.7331500,15.7389000,0.0000000,0.0000000,90.0000000); //
+ 	CustObjectLSPDEBrickWall(19366,1602.4898700,-1713.7352300,17.1229000,0.0000000,0.0000000,90.0000000); //
+ 	CustObjectLSPDEPillar(18980,1589.7446300,-1713.9975600,18.3752000,0.0000000,90.0000000,0.0000000); //
+	CustObjectLSPDEPillar(18980,1592.2515900,-1713.9995100,18.3732000,0.0000000,90.0000000,0.0000000); //
+ 	CustObjectLSPDEPillar(18980,1604.2595200,-1701.9959700,18.3752000,0.0000000,90.0000000,90.0000000); //
+  	CustObjectLSPDEPillar(18980,1604.2595200,-1677.0119600,18.3752000,0.0000000,90.0000000,90.0000000); //
+	CustObjectLSPDEPillar(18980,1604.2595200,-1652.0240500,18.3752000,0.0000000,90.0000000,90.0000000); //
+ 	CustObjectLSPDEPillar(18980,1604.2614700,-1649.4870600,18.3732000,0.0000000,90.0000000,90.0000000); //
+	CustObjectLSPDEPillar(18980,1592.2559800,-1637.4827900,18.3752000,0.0000000,90.0000000,0.0000000); //
+ 	CustObjectLSPDEPillar(18980,1589.7500000,-1637.4847400,18.3732000,0.0000000,90.0000000,0.0000000); //
+	CreateDynamicObject(3934,1548.7753900,-1707.1717500,27.3879000,0.0000000,0.0000000,0.0000000); //
+	CreateDynamicObject(3934,1548.7753900,-1643.6328100,27.3879000,0.0000000,0.0000000,0.0000000); //
+	//Los
+	new LosText911 = CreateObject(19327, 1555.04846, -1674.63354, 23.37980,   0.00000, 0.00000, -90.00000);
+	SetObjectMaterialText(LosText911, "Los", 0, OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 50, 1, 0xFF072CBA, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	new SantosText911 = CreateObject(19327, 1555.04822, -1676.25159, 23.37980,   0.00000, 0.00000, -90.00000);
+	SetObjectMaterialText(SantosText911, "Santos", 0, OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 50, 1, 0xFF072CBA, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	new PoliceText991 = CreateObject(19327, 1555.04846, -1675.62048, 22.62780,   0.00000, 0.00000, -90.00000);
+	SetObjectMaterialText(PoliceText991, "Police", 0, OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 50, 1, 0xFF072CBA, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	new DepartmentText911 = CreateObject(19327, 1555.04846, -1675.62048, 21.78180,   0.00000, 0.00000, -90.00000);
+	SetObjectMaterialText(DepartmentText911, "Department", 0, OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 50, 1, 0xFF072CBA, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+	*/
+	//Integration room in addition
+	SetDynamicObjectMaterial(CreateDynamicObject(19380, 318.33, 1761.52, 547.01,   0.00, 0.00, 0.00), 0, 18007, "int_cutbar3", "barbers_wall1", 0); // wall
+	SetDynamicObjectMaterial(CreateDynamicObject(19378, 318.29, 1761.50, 541.80,   0.00, 0.00, 0.00), 0, 18007, "int_cutbar3", "barbers_wall2", 0); // wall
+	SetDynamicObjectMaterial(CreateDynamicObject(19378, 318.29, 1761.50, 555.02,   0.00, 0.00, 0.00), 0, 18007, "int_cutbar3", "barbers_wall2", 0); // wall
+	SetDynamicObjectMaterial(CreateDynamicObject(19378, 315.08, 1766.21, 555.02,   0.00, 0.00, 90.00), 0, 18007, "int_cutbar3", "barbers_wall2", 0); // wall
+	SetDynamicObjectMaterial(CreateDynamicObject(19378, 317.81, 1766.21, 541.80,   0.00, 0.00, 90.00), 0, 18007, "int_cutbar3", "barbers_wall2", 0); // wall
+
+	CreateDynamicObject(14572, 315.05, 1770.08, 548.57,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3089, 311.88, 1771.17, 547.38,   0.00, 0.00, -90.00);
+	CreateDynamicObject(3089, 311.87, 1768.18, 547.38,   0.00, 0.00, -270.00);
+	CreateDynamicObject(16500, 311.91, 1771.05, 551.18,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16500, 311.94, 1766.42, 551.18,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16500, 315.94, 1771.02, 551.18,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16500, 315.91, 1766.40, 551.18,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16500, 311.89, 1775.66, 551.18,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16500, 315.89, 1775.65, 551.18,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16500, 313.65, 1766.41, 545.93,   0.00, 90.00, 0.00);
+	CreateDynamicObject(18007, 315.69, 1766.27, 548.26,   0.00, 0.00, -360.00);
+	CreateDynamicObject(2949, 311.24, 1763.61, 546.08,   0.00, 0.00, -270.00);
+	CreateDynamicObject(16500, 310.20, 1763.67, 550.50,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2700, 313.30, 1765.84, 548.31,   0.00, 0.00, -54.00);
+	CreateDynamicObject(2611, 315.55, 1761.39, 547.69,   0.00, 0.00, -180.00);
+	CreateDynamicObject(0, 307.46, 1771.01, 546.07,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2412, 307.17, 1769.23, 546.07,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1738, 311.18, 1762.40, 546.63,   0.00, 0.00, -91.00);
+	CreateDynamicObject(2606, 315.21, 1765.94, 548.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2605, 316.03, 1761.76, 546.49,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1810, 314.35, 1769.36, 546.02,   0.00, 0.00, 105.00);
+	CreateDynamicObject(1810, 314.51, 1770.76, 546.02,   0.00, 0.00, 76.00);
+	CreateDynamicObject(1810, 316.45, 1769.76, 546.02,   0.00, 0.00, -76.00);
+	CreateDynamicObject(1737, 315.24, 1769.27, 546.00,   0.00, 0.00, 84.00);
+	CreateDynamicObject(2196, 314.86, 1769.45, 546.79,   0.00, 0.00, 84.00);
+	CreateDynamicObject(14572, 308.70, 1770.05, 548.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2949, 308.54, 1766.39, 546.08,   0.00, 0.00, -89.00);
+	CreateDynamicObject(0, 319.73, 1762.11, 546.89,   0.00, 0.00, 29.00);
+	CreateDynamicObject(16780, 315.58, 1763.25, 550.43,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1744, 313.52, 1766.43, 546.72,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1744, 315.46, 1766.43, 546.72,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1744, 317.39, 1766.43, 546.72,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1808, 314.08, 1761.54, 546.14,   0.00, 0.00, 178.00);
+	CreateDynamicObject(1886, 317.61, 1765.62, 548.89,   18.00, 2.00, -47.00);
+	CreateDynamicObject(1886, 317.55, 1773.13, 551.20,   30.00, 2.00, -47.00);
+	CreateDynamicObject(1886, 311.43, 1773.32, 551.03,   25.00, 0.00, -41.00);
+	CreateDynamicObject(2886, 308.84, 1766.31, 547.19,   0.00, 0.00, -180.00);
+	CreateDynamicObject(2690, 313.21, 1764.15, 547.06,   0.00, 0.00, 91.00);
+	CreateDynamicObject(1721, 311.34, 1766.70, 546.08,   0.00, 0.00, 9.00);
+	CreateDynamicObject(16500, 306.69, 1764.96, 548.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 306.57, 1769.93, 548.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 306.73, 1779.62, 548.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 306.74, 1774.82, 548.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 312.04, 1773.71, 548.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 312.17, 1773.21, 548.00,   90.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 314.36, 1774.02, 548.00,   0.00, 0.00, -89.00);
+	CreateDynamicObject(16500, 307.59, 1773.93, 548.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 309.03, 1766.19, 548.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 309.05, 1766.20, 548.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 310.33, 1766.16, 548.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 312.20, 1766.12, 548.00,   89.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 312.05, 1766.14, 548.00,   89.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 316.74, 1773.93, 548.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 318.43, 1771.31, 548.00,   0.00, 0.00, -180.00);
+	CreateDynamicObject(16500, 318.44, 1767.82, 548.00,   0.00, 0.00, -180.00);
+	CreateDynamicObject(16500, 311.80, 1773.96, 551.90,   0.00, 0.00, -89.00);
+	CreateDynamicObject(16500, 308.04, 1773.90, 551.90,   0.00, 0.00, -89.00);
+	CreateDynamicObject(16500, 306.52, 1771.32, 550.00,   0.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 306.56, 1768.79, 550.00,   0.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 310.53, 1766.16, 550.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 306.36, 1766.19, 550.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 318.40, 1767.80, 550.00,   0.00, 0.00, -180.00);
+	CreateDynamicObject(16500, 318.39, 1771.29, 550.00,   0.00, 0.00, -180.00);
+	CreateDynamicObject(16500, 316.63, 1773.94, 550.00,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 311.79, 1769.70, 543.54,   89.00, 0.00, 0.00);
+	CreateDynamicObject(16500, 311.83, 1769.42, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(0, 319.81, 1762.04, 546.14,   0.00, 0.00, 29.00);
+	CreateDynamicObject(1806, 316.44, 1762.62, 546.13,   0.00, 0.00, -222.00);
+	CreateDynamicObject(1806, 317.48, 1764.78, 546.13,   0.00, 0.00, -316.00);
+	CreateDynamicObject(16500, 311.98, 1769.35, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 312.18, 1769.35, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 312.38, 1769.37, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 312.16, 1769.75, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 312.00, 1769.75, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(16500, 312.40, 1769.65, 543.53,   89.00, 0.00, 1.00);
+	CreateDynamicObject(2894, 315.16, 1769.79, 546.79,   0.00, 0.00, -84.00);
+	CreateDynamicObject(2967, 315.89, 1766.06, 547.05,   0.00, 0.00, 40.00);
+	CreateDynamicObject(2074, 315.21, 1769.78, 550.84,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19362, 310.20, 1775.65, 545.98,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19362, 306.71, 1775.65, 545.98,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19362, 310.28, 1775.42, 545.98,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19364, 311.88, 1773.97, 550.34,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2930, 310.07, 1774.64, 551.00,   90.00, 0.00, 0.00);
+	CreateDynamicObject(2930, 310.07, 1777.27, 551.00,   90.00, 0.00, 0.00);
+	CreateDynamicObject(2412, 307.74, 1770.57, 541.07,   0.00, 0.00, -90.00);
+	CreateDynamicObject(16500, 309.56, 1771.49, 547.50,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3089, 311.92, 1768.18, 547.38,   0.00, 0.00, -270.00);
+	CreateDynamicObject(3089, 311.92, 1771.17, 547.38,   0.00, 0.00, -90.00);
+	CreateDynamicObject(11292, 310.19, 1768.71, 544.50,   0.00, 0.00, 90.00);
+	CreateDynamicObject(11292, 305.97, 1768.76, 544.50,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3454, 304.63, 1785.74, 547.32,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 332.01, 1711.61, 546.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8636, 331.93, 1706.35, 546.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2412, 307.23, 1771.53, 546.07,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14572, 308.71, 1770.04, 547.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1620, 311.90, 1767.50, 549.32,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2986, 311.90, 1767.37, 548.83,   0.00, 90.00, 0.00);
+	CreateDynamicObject(2986, 311.90, 1767.61, 548.83,   0.00, 90.00, 0.00);
+	CreateDynamicObject(2986, 311.89, 1767.49, 549.47,   0.00, 90.00, 0.00);
+	CreateDynamicObject(3454, 292.48, 1762.33, 547.32,   0.00, 0.00, 180.00);
+	CreateDynamicObject(8636, 366.63, 1771.16, 546.65,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8636, 366.62, 1789.64, 546.65,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1721, 310.54, 1766.65, 546.08,   0.00, 0.00, 2.00);
+	CreateDynamicObject(10186, 311.87, 1773.15, 543.32,   90.00, 0.00, 270.00);
+	CreateDynamicObject(10186, 311.88, 1773.36, 543.32,   90.00, 0.00, 270.00);
+	CreateDynamicObject(10186, 311.88, 1773.57, 543.32,   90.00, 0.00, 270.00);
+	CreateDynamicObject(10632, 311.89, 1769.87, 540.00,   90.00, 0.00, 180.00);
+	CreateDynamicObject(10632, 311.90, 1769.87, 540.00,   90.00, 0.00, 180.00);
+	CreateDynamicObject(1721, 308.98, 1767.55, 546.08,   0.00, 0.00, -120.00);
+	CreateDynamicObject(8636, 372.16, 1826.15, 546.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8636, 391.93, 1826.15, 549.40,   180.00, 0.00, 180.00);
+	CreateDynamicObject(3454, 319.59, 1752.06, 554.32,   0.00, 0.00, -90.00);
+	CreateDynamicObject(19325, 315.31, 1766.42, 548.55,   0.00, 0.00, 90.00);
+	CreateDynamicObject(10632, 311.93, 1770.72, 540.00,   90.00, 0.00, 0.00);
+	CreateDynamicObject(10632, 311.92, 1768.54, 540.00,   90.00, 0.00, 0.00);
+	CreateDynamicObject(7034, 299.47, 1787.07, 546.23,   0.00, 0.00, 270.00);
+	CreateDynamicObject(7034, 299.48, 1787.01, 549.34,   0.00, 0.00, 270.00);
+	CreateDynamicObject(7034, 297.67, 1753.14, 546.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(7034, 299.34, 1753.32, 546.25,   0.00, 0.00, 90.00);
+	return 1;
+}
+stock LoadCampGround()
+{
+	CreateDynamicObject(3566, 1566.49, 22.82, 25.38,   0.00, 0.00, 9.78);
+	CreateDynamicObject(8407, 1581.98, 38.11, 24.96,   0.00, 0.00, 97.92);
+	CreateDynamicObject(3174, 1557.43, 52.75, 24.18,   0.00, 0.00, 12.78);
+	CreateDynamicObject(3171, 1564.81, 50.77, 24.51,   0.00, 0.00, 217.38);
+	CreateDynamicObject(3172, 1564.28, 44.67, 23.41,   0.00, 0.00, 55.62);
+	CreateDynamicObject(690, 1546.94, 98.39, 26.73,   0.00, 0.00, -59.10);
+	CreateDynamicObject(690, 1549.49, 90.11, 27.46,   0.00, 0.00, -63.00);
+	CreateDynamicObject(690, 1552.17, 81.76, 26.54,   0.00, 0.00, -106.38);
+	CreateDynamicObject(690, 1520.77, 82.06, 26.20,   0.00, 0.00, -294.18);
+	CreateDynamicObject(690, 1527.78, 70.57, 25.84,   0.00, 0.00, -401.76);
+	CreateDynamicObject(690, 1526.59, 59.13, 23.73,   0.00, 0.00, -493.80);
+	CreateDynamicObject(690, 1523.44, 46.82, 21.66,   0.00, 0.00, -499.38);
+	CreateDynamicObject(690, 1518.43, 34.98, 21.13,   0.00, 0.00, -545.16);
+	CreateDynamicObject(690, 1502.85, 28.82, 20.58,   0.00, 0.00, -506.64);
+	CreateDynamicObject(690, 1501.37, 16.12, 20.58,   0.00, 0.00, -602.94);
+	CreateDynamicObject(690, 1503.74, 3.30, 20.58,   0.00, 0.00, -518.34);
+	CreateDynamicObject(690, 1515.55, -3.61, 20.58,   0.00, 0.00, -602.04);
+	CreateDynamicObject(690, 1525.45, -5.89, 20.15,   0.00, 0.00, -660.06);
+	CreateDynamicObject(690, 1531.90, -12.95, 20.46,   0.00, 0.00, -656.34);
+	CreateDynamicObject(690, 1533.82, -24.73, 19.36,   0.00, 0.00, -711.90);
+	CreateDynamicObject(690, 1535.07, -35.61, 19.36,   0.00, 0.00, -667.08);
+	CreateDynamicObject(690, 1549.15, -46.61, 17.93,   0.00, 0.00, -692.94);
+	CreateDynamicObject(3566, 1570.16, 27.21, 25.53,   0.00, 0.00, -170.64);
+	CreateDynamicObject(690, 1561.26, 73.17, 24.15,   0.00, 0.00, -131.28);
+	CreateDynamicObject(690, 1570.66, 64.66, 23.20,   0.00, 0.00, -206.46);
+	CreateDynamicObject(690, 1577.80, 57.65, 23.12,   0.00, 0.00, -259.56);
+	CreateDynamicObject(690, 1584.84, 48.06, 22.53,   0.00, 0.00, -272.82);
+	CreateDynamicObject(690, 1594.46, 15.08, 21.05,   0.00, 0.00, -436.08);
+	CreateDynamicObject(690, 1589.80, 12.59, 19.54,   0.00, 0.00, -527.22);
+	CreateDynamicObject(690, 1585.79, -1.00, 19.02,   0.00, 0.00, -549.18);
+	CreateDynamicObject(690, 1580.10, -14.15, 17.61,   0.00, 0.00, -614.82);
+	CreateDynamicObject(690, 1572.41, -24.25, 16.98,   0.00, 0.00, -644.52);
+	CreateDynamicObject(3172, 1549.74, 8.35, 22.86,   0.00, 0.00, -72.24);
+	CreateDynamicObject(935, 1554.08, 12.49, 23.47,   356.86, 0.00, 3.14);
+	CreateDynamicObject(3174, 1539.30, 11.47, 22.99,   0.00, 0.00, -116.22);
+	CreateDynamicObject(19954, 1541.28, 104.60, 28.17,   0.00, 0.00, -121.20);
+	CreateDynamicObject(19953, 1520.55, 94.09, 28.45,   0.00, 0.00, 158.16);
+	CreateDynamicObject(3171, 1534.50, 16.83, 22.97,   0.00, 0.00, 201.30);
+	CreateDynamicObject(3172, 1550.79, 24.62, 23.08,   0.00, 0.00, 17.76);
+	CreateDynamicObject(725, 1551.84, 1.34, 20.27,   0.00, 0.00, -93.18);
+	CreateDynamicObject(725, 1542.98, 5.46, 13.69,   0.00, 0.00, -48.60);
+	CreateDynamicObject(725, 1546.53, 42.74, 7.83,   0.00, 0.00, -50.82);
+	CreateDynamicObject(11461, 1517.03, 10.65, 15.40,   0.00, 0.00, 228.60);
+	CreateDynamicObject(3172, 1540.52, 37.96, 23.06,   0.00, 0.00, 104.82);
+	CreateDynamicObject(3626, 1518.17, 19.36, 24.24,   0.00, 0.00, 103.62);
+	CreateDynamicObject(3626, 1514.46, 18.46, 24.24,   0.00, 0.00, 103.62);
+	CreateDynamicObject(3626, 1518.17, 19.36, 21.61,   0.00, 0.00, 103.62);
+	CreateDynamicObject(3626, 1514.46, 18.46, 21.69,   0.00, 0.00, 103.62);
+	CreateDynamicObject(1522, 1520.43, 16.78, 23.10,   0.00, 0.00, 102.24);
+	CreateDynamicObject(19588, 1573.80, -50.52, 20.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18609, 1522.62, 19.68, 24.06,   0.00, 0.00, 15.30);
+	CreateDynamicObject(18609, 1546.95, 9.37, 24.17,   0.00, 0.00, 55.98);
+	CreateDynamicObject(18566, 1564.76, 31.43, 23.41,   0.54, -1.98, -80.34);
+	CreateDynamicObject(3276, 1564.11, -69.65, 20.64,   3.00, 0.00, 84.00);
+	CreateDynamicObject(3276, 1564.77, -40.82, 20.83,   2.58, 0.09, 94.50);
+	CreateDynamicObject(2120, 1547.34, 22.78, 23.69,   0.00, 0.00, 32.76);
+	CreateDynamicObject(2120, 1547.28, 25.52, 23.69,   0.00, 0.00, -14.82);
+	CreateDynamicObject(2120, 1539.69, 34.46, 23.69,   0.00, 0.00, 75.42);
+	CreateDynamicObject(2120, 1536.09, 33.48, 23.69,   0.00, 0.00, 89.22);
+	CreateDynamicObject(2120, 1536.05, 20.02, 23.69,   0.00, 0.00, 191.04);
+	CreateDynamicObject(2120, 1538.06, 17.56, 23.69,   0.00, 0.00, 218.52);
+	CreateDynamicObject(2120, 1539.98, 17.06, 23.69,   0.00, 0.00, 254.10);
+	CreateDynamicObject(19953, 1528.69, 84.48, 27.38,   0.00, 0.00, 132.42);
+	CreateDynamicObject(19953, 1532.71, 77.42, 26.71,   0.00, 0.00, 127.44);
+	CreateDynamicObject(19954, 1540.48, 95.60, 27.59,   0.00, 0.00, -77.34);
+	CreateDynamicObject(19954, 1543.08, 85.62, 26.86,   0.00, 0.00, -76.68);
+	CreateDynamicObject(11695, 1493.27, -7.05, -14.10,   0.00, 0.00, -84.00);
+	CreateDynamicObject(10444, 1570.63, -45.65, 18.88,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3276, 1565.14, -57.84, 20.64,   3.00, 1.00, 84.00);
+	CreateDynamicObject(13023, 1501.57, -6.74, 10.05,   0.00, 0.00, 18.00);
+	CreateDynamicObject(758, 1568.13, -46.38, 17.88,   0.00, 0.00, 0.00);
+	CreateDynamicObject(905, 1567.85, -53.16, 18.87,   0.00, 0.00, 0.00);
+	CreateDynamicObject(744, 1579.70, -60.06, 14.87,   0.00, 0.00, 0.00);
+	CreateDynamicObject(745, 1570.27, -60.00, 17.88,   0.00, 0.00, 0.00);
+	CreateDynamicObject(13023, 1496.95, -71.76, 10.05,   0.00, 0.00, 47.00);
+	CreateDynamicObject(745, 1566.50, -68.42, 17.58,   0.00, 0.00, 222.00);
+	CreateDynamicObject(746, 1576.52, -60.23, 17.19,   0.00, 0.00, 98.00);
+	CreateDynamicObject(11696, 1528.38, -35.65, -87.70,   0.00, 0.00, 265.00);
+	CreateDynamicObject(745, 1572.51, -30.72, 17.88,   0.00, 0.00, -40.00);
+	CreateDynamicObject(745, 1577.10, -54.18, 16.88,   0.00, 0.00, 0.00);
+	CreateDynamicObject(13023, 1538.70, -115.23, 9.05,   0.00, 0.00, 95.00);
+	CreateDynamicObject(13702, 1539.39, -22.37, -10.77,   0.00, 0.00, 185.00);
+	CreateDynamicObject(6230, 1587.02, -17.98, 10.97,   0.00, 0.00, 180.00);
+	CreateDynamicObject(17071, 1579.68, -55.19, 13.03,   0.00, 0.00, 25.00);
+	CreateDynamicObject(688, 1569.79, -80.29, 14.36,   0.00, 0.00, 0.00);
+	CreateDynamicObject(744, 1578.32, -65.51, 12.87,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19982, 1546.52, 74.71, 26.74,   0.00, 0.00, -149.00);
+	CreateDynamicObject(1333, 1516.97, 24.43, 23.73,   0.00, 0.00, 193.00);
+	CreateDynamicObject(1338, 1519.03, 25.16, 23.73,   0.00, 0.00, -20.00);
+	CreateDynamicObject(3276, 1541.60, -59.49, 20.64,   3.00, -2.00, 78.00);
+	CreateDynamicObject(3276, 1539.73, -71.12, 20.14,   3.00, -2.00, 85.00);
+	CreateDynamicObject(690, 1528.01, -58.45, 18.93,   0.00, 0.00, -692.94);
+	CreateDynamicObject(688, 1534.39, -68.68, 17.36,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3171, 1547.78, -56.16, 19.87,   0.00, 0.00, 91.00);
+	CreateDynamicObject(705, 1515.08, -83.69, 18.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(759, 1554.65, -38.70, 20.11,   3.14, 0.00, 0.44);
+	CreateDynamicObject(19630, 1571.73, -49.31, 18.56,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19630, 1570.91, -44.80, 18.56,   0.00, 0.00, 80.00);
+
+	return 1;
+}
+stock LoadFMDmap()
+{
+	//All Saints/FMD interior, credits to Nate (Jayden Riggs).
+        //LSFMD Gym-----------------
+    new MainLSFMDGym;
+    MainLSFMDGym = CreateDynamicObject(14488,1175.9776600,-1402.6922600,1096.9824200,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(MainLSFMDGym, 8, 12983, "sw_med1", "ws_carparkwall1", 0);//walls
+    SetDynamicObjectMaterial(MainLSFMDGym, 9, 12983, "sw_med1", "ws_carparkwall1", 0);//pillar
+    SetDynamicObjectMaterial(MainLSFMDGym, 6, 4010, "lanblokb2", "sl_lavicdtwall1", 0);//brick windows
+    SetDynamicObjectMaterial(MainLSFMDGym, 1, 9169, "vgslowbuild", "marinawindow1_256", 0);//roof windows
+    SetDynamicObjectMaterial(MainLSFMDGym, 7, 16150, "ufo_bar", "sa_wood08_128", 0);//windows
+    SetDynamicObjectMaterial(MainLSFMDGym, 11, 16150, "ufo_bar", "sa_wood08_128", 0);//Fringes
+    CreateDynamicObject(1533,1184.2160600,-1413.2012900,1094.5741000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(946,1176.2281500,-1394.1346400,1096.6744400,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1985,1183.4294400,-1398.7733200,1097.4708300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1985,1182.9113800,-1395.5733600,1097.4708300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1533,1169.4884000,-1413.0516400,1094.5741000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2627,1167.4543500,-1399.8131100,1094.5509000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2627,1167.4543500,-1397.7071500,1094.5509000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2627,1167.4543500,-1395.7181400,1094.5509000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2628,1167.4647200,-1406.1763900,1094.5474900,0.0000000,0.0000000,95.0310000); //
+    CreateDynamicObject(2628,1167.4119900,-1404.5338100,1094.5474900,0.0000000,0.0000000,91.5210000); //
+    CreateDynamicObject(2630,1185.0208700,-1403.7791700,1094.5501700,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2630,1185.0208700,-1405.5341800,1094.5501700,0.0000000,0.0000000,-93.8610000); //
+    CreateDynamicObject(2629,1169.5015900,-1393.4914600,1094.5557900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2916,1166.6204800,-1392.5013400,1094.6649200,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2916,1167.1988500,-1392.8286100,1094.6649200,0.0000000,0.0000000,43.9799900); //
+    CreateDynamicObject(2916,1166.7523200,-1392.8968500,1094.6649200,0.0000000,0.0000000,28.0799800); //
+    CreateDynamicObject(2631,1168.3408200,-1402.2078900,1094.5522500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1946,1178.4797400,-1396.0882600,1094.7539100,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2231,1166.2817400,-1412.6701700,1094.5429700,0.0000000,0.0000000,146.1599300); //
+    CreateDynamicObject(2231,1185.8383800,-1412.9790000,1094.5429700,0.0000000,0.0000000,232.2599200); //
+    CreateDynamicObject(2002,1180.1424600,-1412.5341800,1094.5529800,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1368,1177.4917000,-1412.7014200,1095.2189900,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2647,1171.6396500,-1413.3458300,1095.7999300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2737,1186.1518600,-1408.2410900,1096.3960000,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(14441,1176.1706500,-1409.8546100,1100.6208500,0.0000000,0.0000000,90.0000000); //
+    //LSFMD Class------------------------
+    new MainLSFMDClass;
+    MainLSFMDClass = CreateDynamicObject(14530,1156.3581500,-1415.9625200,1099.4997600,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(MainLSFMDClass, 11, 8396, "sphinx01", "luxorceiling01_128", 0);//wall
+    SetDynamicObjectMaterial(MainLSFMDClass, 12, 8396, "sphinx01", "luxorceiling01_128", 0);//wall
+    new LSFMDClassPCFront;
+    LSFMDClassPCFront = CreateDynamicObject(2265,1161.8498500,-1415.5412600,1098.8527800,0.0000000,90.0000000,90.0000000); //
+    SetDynamicObjectMaterial(LSFMDClassPCFront, 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    SetDynamicObjectMaterial(LSFMDClassPCFront, 1, 14530, "estate2", "Auto_Slamvan2", 0);//0xFF2A2A2A
+    new LSFMDClassPCBack;
+    LSFMDClassPCBack = CreateDynamicObject(2265,1160.8643800,-1414.8212900,1098.8527800,0.0000000,90.0000000,-90.0000000); //
+    SetDynamicObjectMaterial(LSFMDClassPCBack, 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    SetDynamicObjectMaterial(LSFMDClassPCBack, 1, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    new LSFMDClassKeyboard;
+    LSFMDClassKeyboard = CreateDynamicObject(1547,1161.7768600,-1415.2827100,1098.5030500,0.0000000,0.0000000,93.4800000); //
+    SetDynamicObjectMaterialText(LSFMDClassKeyboard, 0, "cccccccccccccccccc\ncccccccccccccccccc\nccccccccccccccccc\nccccccccccccccccc\nccccccccccccccccc", OBJECT_MATERIAL_SIZE_256x128, "webdings", 18, 1, 0xFFFFFFFF, 0xFF000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    new LSFMDClassLegs[4];
+    LSFMDClassLegs[0] = CreateDynamicObject(2752,1161.3022500,-1415.2005600,1098.5191700,0.0000000,0.0000000,0.0000000); //
+    LSFMDClassLegs[1] = CreateDynamicObject(2752,1161.3022500,-1415.0466300,1098.7912600,90.0000000,0.0000000,0.0000000); //
+    LSFMDClassLegs[2] = CreateDynamicObject(2040,1161.2894300,-1415.1842000,1098.4051500,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=2; i++) SetDynamicObjectMaterial(LSFMDClassLegs[i], 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    new LSFMDClassProjector;
+    LSFMDClassProjector = CreateDynamicObject(1787,1156.3720700,-1417.9329800,1101.0896000,9.8020000,0.0000000,90.0000000); //
+    SetDynamicObjectMaterial(LSFMDClassProjector, 0, 1676, "wshxrefpump", "black64", 0);
+    SetDynamicObjectMaterial(LSFMDClassProjector, 1, 1676, "wshxrefpump", "black64", 0);
+    SetDynamicObjectMaterial(LSFMDClassProjector, 2, 1676, "wshxrefpump", "black64", 0);
+    new LSFDMClassProjectorLight[4];
+    LSFDMClassProjectorLight[0] = CreateDynamicObject(1860,1156.4010000,-1417.8835400,1101.1021700,0.0000000,9.8020000,0.0000000); //
+    LSFDMClassProjectorLight[1] = CreateDynamicObject(1860,1156.4010000,-1417.8835400,1101.1142600,0.0000000,9.8020000,0.0000000); //
+    LSFDMClassProjectorLight[2] = CreateDynamicObject(1860,1156.3969700,-1417.8835400,1101.0902100,0.0000000,9.8020000,0.0000000); //
+    for(new i = 0; i<=2; i++) SetDynamicObjectMaterial(LSFDMClassProjectorLight[i], 0, 16150, "ufo_bar", "GEwhite1_64", 0);
+    new LSFMDClassWalls[3];
+    LSFMDClassWalls[0] = CreateDynamicObject(19385,1155.4649700,-1413.8813500,1099.4421400,0.0000000,0.0000000,90.0000000); //
+    LSFMDClassWalls[1] = CreateDynamicObject(19385,1155.4792500,-1420.6032700,1099.4641100,0.0000000,0.0000000,90.0000000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(LSFMDClassWalls[i], 0, 8396, "sphinx01", "luxorceiling01_128", 0);
+
+    CreateDynamicObject(1533,1154.6888400,-1413.9379900,1097.7143600,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1533,1156.2161900,-1420.5590800,1097.7004400,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2169,1161.6242700,-1415.7719700,1097.7126500,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1714,1163.3166500,-1414.8317900,1097.7147200,0.0000000,0.0000000,-75.7199800); //
+    CreateDynamicObject(16101,1156.3751200,-1417.9384800,1111.9547100,0.0000000,180.0000000,0.0000000); //
+    CreateDynamicObject(1722,1149.2360800,-1419.7968800,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1722,1149.3043200,-1418.8106700,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1722,1149.2496300,-1417.6948200,1097.7130100,0.0000000,0.0000000,-93.0000100); //
+    CreateDynamicObject(1722,1149.2496300,-1416.5507800,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1722,1149.2496300,-1415.1988500,1097.7130100,0.0000000,0.0000000,-87.8999800); //
+    CreateDynamicObject(1722,1150.9682600,-1418.8106700,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1722,1150.9682600,-1419.7968800,1097.7130100,0.0000000,0.0000000,-87.2399900); //
+    CreateDynamicObject(1722,1150.9682600,-1416.5507800,1097.7130100,0.0000000,0.0000000,-96.7200200); //
+    CreateDynamicObject(1722,1150.9682600,-1415.1790800,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1722,1152.6323200,-1419.7968800,1097.7130100,0.0000000,0.0000000,-85.3199900); //
+    CreateDynamicObject(1722,1152.6323200,-1418.8106700,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1722,1152.6323200,-1416.5507800,1097.7130100,0.0000000,0.0000000,-86.7000000); //
+    CreateDynamicObject(1722,1152.6323200,-1415.1790800,1097.7130100,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1850,1157.7242400,-1420.0911900,1097.7139900,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2690,1158.9461700,-1420.1053500,1098.9982900,90.0000000,90.0000000,186.1540100); //
+    CreateDynamicObject(19330,1158.1663800,-1420.2334000,1099.4169900,0.0000000,-90.0000000,-10.8000000); //
+    CreateDynamicObject(19331,1157.7818600,-1420.2880900,1099.4169900,0.0000000,-90.0000000,17.9400100); //
+    CreateDynamicObject(1211,1159.3474100,-1419.5125700,1098.2708700,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1613,1158.3507100,-1414.0262500,1098.5904500,0.0000000,0.0000000,90.0000000); //
+        //Floor
+    new SaintsFloor[7];
+    SaintsFloor[0] = CreateDynamicObject(3678,1171.0333300,-1332.6423300,1083.0133100,0.0000000,0.0000000,90.0000000); //
+    SaintsFloor[1] = CreateDynamicObject(3678,1171.0333300,-1322.784300,1083.0113500,0.0000000,0.0000000,90.0000000); //
+    SaintsFloor[2] = CreateDynamicObject(3678,1171.0333300,-1322.7802700,1083.0113500,0.0000000,0.0000000,90.0000000); //
+    SaintsFloor[3] = CreateDynamicObject(3678,1171.0333300,-1345.2022700,1083.0133100,0.0000000,0.0000000,90.0000000); //
+    SaintsFloor[4] = CreateDynamicObject(3678,1176.6319600,-1354.4211400,1087.3062700,0.0000000,0.0000000,90.0000000); //
+    SaintsFloor[5] = CreateDynamicObject(3678,1198.195300,-1354.4034400,1087.3062700,0.0000000,0.0000000,90.0000000); //
+    for(new i = 0; i<=5; i++) SetDynamicObjectMaterial(SaintsFloor[i], 6, 13007, "sw_bankint", "woodfloor1", 0);
+    for(new i = 0; i<=5; i++) SetDynamicObjectMaterial(SaintsFloor[i], 7, 13007, "sw_bankint", "woodfloor1", 0);
+    //Lobby Walls
+    new SaintsLobbyWalls[13];
+    SaintsLobbyWalls[0] = CreateDynamicObject(19378,1179.7840600,-1330.636600,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsLobbyWalls[1] = CreateDynamicObject(19378,1182.7879600,-1334.6662600,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyWalls[2] = CreateDynamicObject(19378,1170.1679700,-1334.6662600,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyWalls[3] = CreateDynamicObject(19378,1176.8900100,-1334.6701700,1096.3360600,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyWalls[4] = CreateDynamicObject(19378,1179.7840600,-1321.0035400,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsLobbyWalls[5] = CreateDynamicObject(19378,1179.7861300,-1311.9555700,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsLobbyWalls[6] = CreateDynamicObject(19378,1182.7919900,-1313.4543500,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyWalls[7] = CreateDynamicObject(19378,1170.1550300,-1313.4543500,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyWalls[8] = CreateDynamicObject(19378,1179.7080100,-1313.4522700,1096.3360600,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyWalls[9] = CreateDynamicObject(19378,1166.7396200,-1317.8877000,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsLobbyWalls[10] = CreateDynamicObject(19378,1166.7396200,-1330.3836700,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsLobbyWalls[11] = CreateDynamicObject(19378,1166.7375500,-1326.4077100,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=11; i++) SetDynamicObjectMaterial(SaintsLobbyWalls[i], 0, 8678, "wddngchplgrnd01", "gnhotelwall02_128", 0);
+    //Lobby Windows
+    new SaintsLobbyWin[3];
+    SaintsLobbyWin[0] = CreateDynamicObject(19448,1166.7813700,-1331.1346400,1090.8690200,0.0000000,0.0000000,0.0000000); //
+    SaintsLobbyWin[1] = CreateDynamicObject(19448,1166.7813700,-1317.6706500,1090.8690200,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsLobbyWin[i], 0, 6052, "law_doontoon", "sf_window_mod1", 0);
+    //Lobby Ceiling
+    new SaintsLobbyCeil[7];
+    SaintsLobbyCeil[0] = CreateDynamicObject(19380,1169.8830600,-1318.0806900,1093.5799600,0.0000000,90.0000000,0.0000000); //
+    SaintsLobbyCeil[1] = CreateDynamicObject(19380,1169.8830600,-1326.4077100,1093.5820300,0.0000000,90.0000000,0.0000000); //
+    SaintsLobbyCeil[2] = CreateDynamicObject(19380,1169.8830600,-1330.3836700,1093.5799600,0.0000000,90.0000000,0.0000000); //
+    SaintsLobbyCeil[3] = CreateDynamicObject(19380,1180.3811000,-1318.0806900,1093.5799600,0.0000000,90.0000000,0.0000000); //
+    SaintsLobbyCeil[4] = CreateDynamicObject(19380,1180.3811000,-1326.4077100,1093.5820300,0.0000000,90.0000000,0.0000000); //
+    SaintsLobbyCeil[5] = CreateDynamicObject(19380,1180.3811000,-1330.3836700,1093.5799600,0.0000000,90.0000000,0.0000000); //
+    for(new i = 0; i<=5; i++) SetDynamicObjectMaterial(SaintsLobbyCeil[i], 0, 3975, "lanbloke", "ceiling_256", 0);
+    //Lobby desk
+    new SaintsLobbyDesk[3];
+    SaintsLobbyDesk[0] = CreateDynamicObject(18092,1175.9068600,-1327.4947500,1089.0670200,0.0000000,0.0000000,90.0000000); //
+    SaintsLobbyDesk[1] = CreateDynamicObject(18092,1175.9068600,-1320.9668000,1089.0670200,0.0000000,0.0000000,90.0000000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsLobbyDesk[i], 0, 9239, "stuff2_sfn", "sl_whitewood01", 0);
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsLobbyDesk[i], 1, 12954, "sw_furniture", "CJ_WOOD5", 0);//top
+    //Pillars
+    new SaintsPillars1[9];
+    SaintsPillars1[0] = CreateDynamicObject(18980,1166.5584700,-1326.4636200,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[1] = CreateDynamicObject(18980,1166.5584700,-1322.3835400,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[2] = CreateDynamicObject(18980,1178.4677700,-1334.7023900,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[3] = CreateDynamicObject(18980,1174.4887700,-1334.7023900,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[4] = CreateDynamicObject(18980,1175.2473100,-1330.1073000,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[5] = CreateDynamicObject(18980,1175.2473100,-1318.2163100,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[6] = CreateDynamicObject(18980,1174.4887700,-1313.6864000,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars1[7] = CreateDynamicObject(18980,1178.4677700,-1313.6864000,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=7; i++) SetDynamicObjectMaterial(SaintsPillars1[i], 0, 14430, "dr_gsnew", "mp_cloth_subwall", 0);
+    new SaintsPillars2[10];
+    SaintsPillars2[0] = CreateDynamicObject(18980,1178.4593500,-1338.1087600,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[1] = CreateDynamicObject(18980,1181.4158900,-1341.9887700,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[2] = CreateDynamicObject(18980,1181.4158900,-1344.7187500,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[3] = CreateDynamicObject(18980,1178.0273400,-1338.3815900,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[4] = CreateDynamicObject(18980,1178.0273400,-1341.6369600,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[5] = CreateDynamicObject(18980,1172.4807100,-1341.9487300,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[6] = CreateDynamicObject(18980,1184.6246300,-1338.5227100,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[7] = CreateDynamicObject(18980,1177.3656000,-1350.7246100,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    SaintsPillars2[8] = CreateDynamicObject(18980,1178.4593500,-1341.9887700,1088.5749500,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=8; i++) SetDynamicObjectMaterial(SaintsPillars2[i], 0, 8678, "wddngchplgrnd01", "gnhotelwall02_128", 0);
+    //PC Front
+    new SaintsPCFront[3];
+    SaintsPCFront[0] = CreateDynamicObject(2265,1176.0014600,-1321.5124500,1089.9611800,0.0000000,90.0000000,90.0000000); //
+    SaintsPCFront[1] = CreateDynamicObject(2265,1176.1529500,-1327.6041300,1089.9611800,0.0000000,90.0000000,106.3090000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsPCFront[i], 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsPCFront[i], 1, 16150, "ufo_bar", "GEwhite1_64", 0xFF2A2A2A);
+    //PC Back
+    new SaintsPCBack[3];
+    SaintsPCBack[0] = CreateDynamicObject(2265,1175.0280800,-1320.7922400,1089.9611800,0.0000000,90.0000000,-90.0000000); //
+    SaintsPCBack[1] = CreateDynamicObject(2265,1175.0095200,-1327.1894500,1089.9611800,0.0000000,90.0000000,286.3089900); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsPCBack[i], 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsPCBack[i], 1, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    //PC Legs
+    new SaintsPCLegs[5];
+    SaintsPCLegs[0] = CreateDynamicObject(2752,1175.4544700,-1321.1528300,1089.5898400,0.0000000,0.0000000,0.0000000); //
+    SaintsPCLegs[1] = CreateDynamicObject(2752,1175.4458000,-1320.9907200,1089.8718300,90.0000000,0.0000000,0.0000000); //
+    SaintsPCLegs[2] = CreateDynamicObject(2752,1175.5167200,-1327.4251700,1089.5898400,0.0000000,0.0000000,0.0000000); //
+    SaintsPCLegs[3] = CreateDynamicObject(2752,1175.4803500,-1327.2680700,1089.8737800,90.0000000,0.0000000,16.3090000); //
+    for(new i = 0; i<=3; i++) SetDynamicObjectMaterial(SaintsPCLegs[i], 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    //PC Holds
+    new SaintsPCHolds[3];
+    SaintsPCHolds[0] = CreateDynamicObject(2040,1175.4337200,-1321.1529500,1089.4753400,0.0000000,0.0000000,0.0000000); //
+    SaintsPCHolds[1] = CreateDynamicObject(2040,1175.5063500,-1327.4227300,1089.4753400,0.0000000,0.0000000,16.3090000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsPCHolds[i], 0, 11631, "mp_ranchcut", "mpCJ_WOOD_DARK", 0xFF000000);
+    //Keyboards
+    new SaintsKeyboards[3];
+    SaintsKeyboards[0] = CreateDynamicObject(1547,1175.8493700,-1321.1461200,1089.5656700,0.0000000,0.0000000,84.4600000); //
+    SaintsKeyboards[1] = CreateDynamicObject(1547,1175.8382600,-1326.8830600,1089.5656700,0.0000000,0.0000000,92.4930000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterialText(SaintsKeyboards[i], 0, "cccccccccccccccccc\ncccccccccccccccccc\nccccccccccccccccc\nccccccccccccccccc\nccccccccccccccccc", OBJECT_MATERIAL_SIZE_256x128, "webdings", 18, 1, 0xFFFFFFFF, 0xFF000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    //Hallway
+    new SaintsHallway;
+    SaintsHallway = CreateDynamicObject(14425,1149.2067900,-1301.8315400,1085.9050300,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsHallway, 0, 6095, "shops01_law", "hotwall1_law", 0);//Side tiles
+    SetDynamicObjectMaterial(SaintsHallway, 3, 14430, "dr_gsnew", "mp_cloth_subwall", 0);//Around the doors
+    SetDynamicObjectMaterial(SaintsHallway, 4, 8678, "wddngchplgrnd01", "gnhotelwall02_128", 0);//Walls
+    SetDynamicObjectMaterial(SaintsHallway, 5, 13007, "sw_bankint", "woodfloor1", 0);//Floor middle
+    SetDynamicObjectMaterial(SaintsHallway, 6, 11301, "carshow_sfse", "ws_officy_ceiling", 0);//Ceiling
+    //Hallways door frames
+    new SaintsHallwayDoorFrames[8];
+    SaintsHallwayDoorFrames[0] = CreateDynamicObject(19385,1173.3564500,-1303.2366900,1090.3200700,0.0000000,0.0000000,0.0000000); //
+    SaintsHallwayDoorFrames[1] = CreateDynamicObject(19385,1173.3564500,-1291.2686800,1090.3200700,0.0000000,0.0000000,0.0000000); //
+    SaintsHallwayDoorFrames[2] = CreateDynamicObject(19385,1173.3564500,-1279.2806400,1090.3200700,0.0000000,0.0000000,0.0000000); //
+    SaintsHallwayDoorFrames[3] = CreateDynamicObject(19385,1179.5885000,-1299.2490200,1090.3200700,0.0000000,0.0000000,0.0000000); //
+    SaintsHallwayDoorFrames[4] = CreateDynamicObject(19385,1179.5885000,-1287.2531700,1090.3200700,0.0000000,0.0000000,0.0000000); //
+    SaintsHallwayDoorFrames[5] = CreateDynamicObject(19385,1179.6932400,-1311.2753900,1090.1821300,0.0000000,0.0000000,0.0000000); //
+    SaintsHallwayDoorFrames[6] = CreateDynamicObject(19385,1179.6951900,-1311.3033400,1090.3200700,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=6; i++) SetDynamicObjectMaterial(SaintsHallwayDoorFrames[i], 0, 14430, "dr_gsnew", "mp_cloth_subwall", 0);
+    //Doors
+    new SaintsDoors[9];
+    SaintsDoors[0] = CreateDynamicObject(1502,1177.6279300,-1347.2807600,1092.8697500,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[1] = CreateDynamicObject(1502,1177.6279300,-1355.6547900,1092.8697500,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[2] = CreateDynamicObject(1502,1184.6506300,-1349.2126500,1092.8697500,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[3] = CreateDynamicObject(1502,1179.6090100,-1287.9998800,1088.5462600,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[4] = CreateDynamicObject(1502,1179.6090100,-1300.0019500,1088.5462600,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[5] = CreateDynamicObject(1502,1173.3835400,-1303.9826700,1088.5462600,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[6] = CreateDynamicObject(1502,1173.3835400,-1292.0186800,1088.5462600,0.0000000,0.0000000,90.0000000); //
+    SaintsDoors[7] = CreateDynamicObject(1502,1173.3835400,-1280.0305200,1088.5462600,0.0000000,0.0000000,90.0000000); //
+    for(new i = 0; i<=7; i++) SetDynamicObjectMaterial(SaintsDoors[i], 1, 11390, "hubint2", "GEwhite1_64", 0);
+    //Room walls
+    new SaintsRoomWalls[8];
+    SaintsRoomWalls[0] = CreateDynamicObject(19377,1183.8785400,-1294.9152800,1088.5734900,0.0000000,0.0000000,90.0000000); //
+    SaintsRoomWalls[1] = CreateDynamicObject(19377,1184.5284400,-1284.5520000,1088.5734900,0.0000000,0.0000000,90.0000000); //
+    SaintsRoomWalls[2] = CreateDynamicObject(19377,1168.5756800,-1282.5808100,1088.5734900,0.0000000,0.0000000,90.0000000); //
+    SaintsRoomWalls[3] = CreateDynamicObject(19377,1168.6793200,-1294.3774400,1088.5734900,0.0000000,0.0000000,90.0000000); //
+    SaintsRoomWalls[4] = CreateDynamicObject(19377,1168.5474900,-1309.2171600,1088.5734900,0.0000000,0.0000000,90.0000000); //
+    SaintsRoomWalls[5] = CreateDynamicObject(19377,1168.5919200,-1276.2182600,1088.5734900,0.0000000,0.0000000,90.0000000); //
+    for(new i = 0; i<=5; i++) SetDynamicObjectMaterial(SaintsRoomWalls[i], 0, 8678, "wddngchplgrnd01", "gnhotelwall02_128", 0);
+    //Hallway end wall
+    new SaintsHallwayEnd;
+    SaintsHallwayEnd = CreateDynamicObject(19381,1177.5813000,-1273.3315400,1089.9334700,0.0000000,0.0000000,90.0000000); //
+    SetDynamicObjectMaterial(SaintsHallwayEnd, 0, 8678, "wddngchplgrnd01", "gnhotelwall02_128", 0);
+    //Staff wall
+    new SaintsStaffWall[12];
+    SaintsStaffWall[0] = CreateDynamicObject(19376,1177.0400400,-1341.6765100,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsStaffWall[1] = CreateDynamicObject(19376,1183.1345200,-1338.4200400,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsStaffWall[2] = CreateDynamicObject(19376,1184.6563700,-1342.7985800,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsStaffWall[3] = CreateDynamicObject(19376,1176.9427500,-1344.9790000,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsStaffWall[4] = CreateDynamicObject(19376,1172.9237100,-1350.7181400,1092.0999800,0.0000000,0.0000000,90.0000000); //
+    SaintsStaffWall[5] = CreateDynamicObject(19376,1184.6563700,-1354.1025400,1092.0999800,0.0000000,0.0000000,0.0000000); //
+    SaintsStaffWall[6] = CreateDynamicObject(19376,1184.6584500,-1347.4025900,1100.6300000,0.0000000,0.0000000,0.0000000); //
+    SaintsStaffWall[7] = CreateDynamicObject(19376,1172.4909700,-1346.5866700,1087.3029800,0.0000000,0.0000000,0.0000000); //
+    SaintsStaffWall[8] = CreateDynamicObject(19450,1178.3863500,-1336.7630600,1093.0378400,90.0000000,0.0000000,0.0000000); //
+    SaintsStaffWall[9] = CreateDynamicObject(19450,1181.7124000,-1343.2813700,1093.0378400,90.0000000,0.0000000,0.0000000); //
+    SaintsStaffWall[10] = CreateDynamicObject(19450,1177.7076400,-1340.4937700,1096.0717800,90.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=10; i++) SetDynamicObjectMaterial(SaintsStaffWall[i], 0, 8496, "lowbuild03_lvs", "vgshopwall05_64", 0);
+    //Staff Wall 2
+    new SaintsStaffWalls[8];
+    SaintsStaffWalls[0] = CreateDynamicObject(4199,1166.7298600,-1357.3662100,1094.8745100,0.0000000,0.0000000,180.0000000); //
+    SaintsStaffWalls[1] = CreateDynamicObject(4199,1170.7906500,-1361.9917000,1094.8745100,0.0000000,0.0000000,-90.0000000); //
+    SaintsStaffWalls[2] = CreateDynamicObject(4199,1200.2656300,-1356.2915000,1094.8745100,0.0000000,0.0000000,-90.0000000); //
+    SaintsStaffWalls[3] = CreateDynamicObject(4199,1200.4854700,-1338.6317100,1094.8745100,0.0000000,0.0000000,90.0000000); //
+    SaintsStaffWalls[4] = CreateDynamicObject(4199,1200.6190200,-1343.2734400,1094.8745100,0.0000000,0.0000000,0.0000000); //
+    SaintsStaffWalls[5] = CreateDynamicObject(4199,1162.2938200,-1350.3945300,1089.8344700,0.0000000,0.0000000,180.0000000); //
+    SaintsStaffWalls[6] = CreateDynamicObject(4199,1162.8772000,-1350.5960700,1089.8344700,0.0000000,0.0000000,-90.0000000); //
+    for(new i = 0; i<=6; i++) SetDynamicObjectMaterial(SaintsStaffWalls[i], 1, 6095, "shops01_law", "GB_chatwall03b", 0);
+    //Staff Ceiling
+    new SaintsStaffCeil[4];
+    SaintsStaffCeil[0] = CreateDynamicObject(18981,1178.3054200,-1344.4759500,1096.9713100,0.0000000,90.0000000,0.0000000); //
+    SaintsStaffCeil[1] = CreateDynamicObject(18981,1165.2935800,-1347.1109600,1092.1473400,0.0000000,90.0000000,0.0000000); //
+    SaintsStaffCeil[2] = CreateDynamicObject(18981,1203.3033400,-1344.4759500,1096.9713100,0.0000000,90.0000000,0.0000000); //
+    for(new i = 0; i<=2; i++) SetDynamicObjectMaterial(SaintsStaffCeil[i], 0, 3975, "lanbloke", "ceiling_256", 0);
+    //Staff door blocks
+    new SaintsStaffDoorBlocks[3];
+    SaintsStaffDoorBlocks[0] = CreateDynamicObject(18764,1186.9035600,-1353.7755100,1094.9997600,0.0000000,0.0000000,0.0000000); //
+    SaintsStaffDoorBlocks[1] = CreateDynamicObject(18764,1183.0014600,-1358.7003200,1094.9997600,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(SaintsStaffDoorBlocks[i], 0, 8396, "sphinx01", "luxorceiling01_128", 0);
+    //Shower wall
+    new SaintsShowerWall;
+    SaintsShowerWall = CreateDynamicObject(19375,1192.2337600,-1343.9447000,1092.8701200,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsShowerWall, 0, 16150, "ufo_bar", "offwhitebrix", 0);
+    //Shower floor
+    new SaintsShowerFloor;
+    SaintsShowerFloor = CreateDynamicObject(19377,1197.4167500,-1345.9106400,1092.7861300,0.0000000,90.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsShowerFloor, 0, 8390, "vegasemulticar", "Bow_sub_walltiles", 0);
+    //Poles
+    new SaintsPoles[7];
+    SaintsPoles[0] = CreateDynamicObject(16101,1177.6193800,-1347.3497300,1092.8690200,0.0000000,0.0000000,0.0000000); //
+    SaintsPoles[1] = CreateDynamicObject(16101,1177.6193800,-1345.6737100,1092.8690200,0.0000000,0.0000000,0.0000000); //
+    SaintsPoles[2] = CreateDynamicObject(16101,1177.6193800,-1354.0477300,1092.8690200,0.0000000,0.0000000,0.0000000); //
+    SaintsPoles[3] = CreateDynamicObject(16101,1177.6193800,-1355.7237500,1092.8690200,0.0000000,0.0000000,0.0000000); //
+    SaintsPoles[4] = CreateDynamicObject(16101,1184.6337900,-1347.6224400,1092.8690200,0.0000000,0.0000000,0.0000000); //
+    SaintsPoles[5] = CreateDynamicObject(16101,1184.6337900,-1349.2784400,1092.8690200,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=5; i++) SetDynamicObjectMaterial(SaintsPoles[i], 0, 9098, "vgesvhouse01", "black32", 0);
+    //Staff stair
+    new SaintsStaffStair;
+    SaintsStaffStair = CreateDynamicObject(14395,1181.5526100,-1341.4909700,1090.7088600,0.0000000,0.0000000,-90.0000000); //
+    SetDynamicObjectMaterial(SaintsStaffStair, 1, 6095, "shops01_law", "hotwall1_law", 0);
+    //Room 1
+    new SaintsRoom1;
+    SaintsRoom1 = CreateDynamicObject(14430,1149.2099600,-1301.8297100,1085.9050300,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsRoom1, 5, 10871, "blacksky_sfse", "ws_slatetiles", 0);
+    SetDynamicObjectMaterial(SaintsRoom1, 1, 13007, "sw_bankint", "woodfloor1", 0);
+    //Room 2
+    new SaintsRoom2;
+    SaintsRoom2 = CreateDynamicObject(14431,1149.2113000,-1301.8299600,1085.9050300,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsRoom2, 5, 10871, "blacksky_sfse", "ws_slatetiles", 0);
+    SetDynamicObjectMaterial(SaintsRoom2, 1, 13007, "sw_bankint", "woodfloor1", 0);
+    //Room 3
+    new SaintsRoom3;
+    SaintsRoom3 = CreateDynamicObject(14427,1149.2103300,-1301.8324000,1085.9050300,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsRoom3, 6, 10871, "blacksky_sfse", "ws_slatetiles", 0);
+    SetDynamicObjectMaterial(SaintsRoom3, 2, 13007, "sw_bankint", "woodfloor1", 0);
+    //Room 4
+    new SaintsRoom4;
+    SaintsRoom4 = CreateDynamicObject(14429,1149.2032500,-1301.8302000,1085.9050300,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsRoom4, 5, 10871, "blacksky_sfse", "ws_slatetiles", 0);
+    SetDynamicObjectMaterial(SaintsRoom4, 1, 13007, "sw_bankint", "woodfloor1", 0);
+    //Room 5
+    new SaintsRoom5;
+    SaintsRoom5 = CreateDynamicObject(14426,1149.2032500,-1301.8324000,1085.9051500,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(SaintsRoom5, 6, 10871, "blacksky_sfse", "ws_slatetiles", 0);
+    SetDynamicObjectMaterial(SaintsRoom5, 2, 13007, "sw_bankint", "woodfloor1", 0);
+    //All
+    new SaintsAll;
+    SaintsAll = CreateDynamicObject(19357,1179.7796600,-1323.079900,1092.0964400,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterialText(SaintsAll, 0, "All", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 50, 1, 0xFF937960, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    //Saints
+    new SaintsSaints;
+    SaintsSaints = CreateDynamicObject(19357,1179.7817400,-1324.925900,1092.0964400,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterialText(SaintsSaints, 0, "Saints", OBJECT_MATERIAL_SIZE_256x128, "Tahoma", 50, 1, 0xFF937960, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    //Hospital
+    new SaintsHospital;
+    SaintsHospital = CreateDynamicObject(19358,1179.7777100,-1324.2060500,1090.827600,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterialText(SaintsHospital, 0, "Hospital", OBJECT_MATERIAL_SIZE_256x128, "Arial Black", 50, 1, 0xFF999999, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    //ASH Plan
+    new SaintsASHPlan;
+    SaintsASHPlan = CreateDynamicObject(1547,1171.3352100,-1334.5792200,1091.1584500,90.0000000,0.0000000,180.0000000); //
+    SetDynamicObjectMaterialText(SaintsASHPlan, 0, "ASH Plan", OBJECT_MATERIAL_SIZE_256x128, "Comic Sans MS,", 40, 1, 0xFFFFFFFF, 0xFF4B63C0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    //Signature
+    new SaintsSignature;
+    SaintsSignature = CreateDynamicObject(1547,1171.3352100,-1334.5792200,1090.0334500,90.0000000,0.0000000,180.0000000); //
+    SetDynamicObjectMaterialText(SaintsSignature, 0, "Architect: Nate", OBJECT_MATERIAL_SIZE_256x128, "Comic Sans MS,", 25, 1, 0xFFFFFFFF, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
+    //Rest of the stuff
+    CreateDynamicObject(1569,1166.8764600,-1325.9160200,1088.5753200,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1569,1166.8741500,-1322.9158900,1088.5753200,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1533,1175.0307600,-1313.4649700,1088.5759300,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1533,1177.9239500,-1311.9460400,1088.5759300,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(14485,1149.2037400,-1301.8481400,1085.9050300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(19325,1177.6536900,-1350.6965300,1093.3208000,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(19325,1177.6536900,-1342.2645300,1093.3208000,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(19325,1177.6536900,-1348.3864700,1097.4448200,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(19325,1181.5628700,-1379.2095900,1093.3208000,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(19325,1177.6536900,-1355.0284400,1097.4448200,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1533,1184.3729200,-1351.7446300,1092.8685300,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1533,1184.3729200,-1353.2436500,1092.8685300,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(3657,1167.3775600,-1317.8048100,1089.0922900,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(3657,1167.3775600,-1330.7647700,1089.0922900,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(626,1167.9726600,-1314.5943600,1090.6010700,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(626,1168.0189200,-1333.7392600,1090.6010700,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(932,1171.9134500,-1314.3011500,1088.5737300,0.0000000,0.0000000,22.1600000); //
+    CreateDynamicObject(932,1172.9039300,-1314.0550500,1088.5737300,0.0000000,0.0000000,0.2770000); //
+    CreateDynamicObject(932,1173.6832300,-1314.0908200,1088.5737300,0.0000000,0.0000000,-4.1550000); //
+    CreateDynamicObject(1671,1177.2791700,-1327.4327400,1089.0293000,0.0000000,0.0000000,-82.9710000); //
+    CreateDynamicObject(1671,1177.3501000,-1320.8906300,1089.0293000,0.0000000,0.0000000,-88.9350000); //
+    CreateDynamicObject(2164,1179.6673600,-1327.3512000,1088.5749500,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2161,1179.6634500,-1322.4652100,1088.5765400,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2609,1179.2058100,-1326.4709500,1089.3046900,0.0000000,0.0000000,-96.6000000); //
+    CreateDynamicObject(2609,1179.2188700,-1325.7901600,1089.3046900,0.0000000,0.0000000,-85.5120000); //
+    CreateDynamicObject(1776,1170.2410900,-1313.9821800,1089.6671100,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(3111,1170.9423800,-1334.5747100,1090.6875000,90.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(3657,1178.6221900,-1303.5223400,1089.0922900,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(3657,1178.6159700,-1293.6206100,1089.0922900,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2878,1179.6767600,-1312.0056200,1089.7440200,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1997,1175.0134300,-1275.4217500,1088.5789800,0.0000000,0.0000000,46.0000000); //
+    CreateDynamicObject(2994,1174.4412800,-1297.1251200,1089.0776400,0.0000000,0.0000000,8.0400000); //
+    CreateDynamicObject(2830,1174.4827900,-1297.1466100,1089.4520300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(3657,1174.3823200,-1286.2175300,1089.0922900,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2267,1174.0008500,-1295.1571000,1091.0655500,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2267,1174.0028100,-1295.1551500,1091.0456500,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(18644,1173.9672900,-1295.1090100,1090.6230500,0.0000000,90.0000000,0.0000000); //
+    CreateDynamicObject(932,1178.5717800,-1274.6438000,1088.5793500,0.0000000,0.0000000,-15.7080000); //
+    CreateDynamicObject(1796,1165.9304200,-1279.9101600,1088.5793500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1796,1168.6153600,-1279.8292200,1088.5793500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1796,1168.6923800,-1281.9429900,1088.5793500,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1997,1186.7081300,-1288.6622300,1088.5800800,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2069,1180.2147200,-1288.8791500,1088.5922900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2167,1182.2192400,-1284.6782200,1088.5797100,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1796,1186.6295200,-1288.1604000,1088.5793500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1796,1184.2896700,-1288.1754200,1088.5793500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1997,1172.0587200,-1281.6637000,1088.5800800,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2167,1171.2386500,-1276.3522900,1088.5797100,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2069,1172.6778600,-1276.8931900,1088.5922900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(3383,1184.2983400,-1299.0584700,1088.5803200,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2518,1165.6977500,-1304.5550500,1088.6429400,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2167,1173.1535600,-1307.7719700,1088.5800800,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(3384,1185.5694600,-1295.5997300,1089.9881600,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(3388,1184.4335900,-1295.3322800,1088.5799600,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1796,1165.6551500,-1292.2692900,1088.5793500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1796,1167.5714100,-1292.2877200,1088.5793500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2167,1171.1904300,-1288.8204300,1088.5797100,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1997,1172.1108400,-1293.5612800,1088.5800800,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2069,1166.7058100,-1289.0656700,1088.5922900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(3383,1169.1610100,-1306.4737500,1088.5803200,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(3388,1167.4810800,-1301.1674800,1088.5799600,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(3384,1168.6068100,-1301.4753400,1089.9881600,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2167,1179.7933300,-1296.3538800,1088.5800800,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2518,1187.2662400,-1296.0520000,1088.6429400,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(18757,1170.2200900,-1343.0122100,1090.4968300,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(18756,1170.2159400,-1343.0128200,1090.4968300,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2737,1175.2291300,-1341.5446800,1090.1619900,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1721,1179.5620100,-1345.2747800,1092.8691400,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1721,1180.1500200,-1345.2747800,1092.8691400,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1721,1178.9740000,-1345.2747800,1092.8691400,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2609,1182.9677700,-1355.8144500,1093.5976600,0.0000000,0.0000000,184.4620100); //
+    CreateDynamicObject(2609,1182.4405500,-1355.7893100,1093.5976600,0.0000000,0.0000000,175.1499900); //
+    CreateDynamicObject(1533,1182.0843500,-1356.1857900,1092.8685300,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1808,1181.5081800,-1345.4317600,1092.8697500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(1533,1172.3774400,-1342.8437500,1088.5772700,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1209,1168.3566900,-1340.1713900,1088.5769000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1703,1169.9270000,-1335.4493400,1088.5773900,0.0000000,0.0000000,-0.4800000); //
+    CreateDynamicObject(1703,1169.1716300,-1338.3469200,1088.5773900,0.0000000,0.0000000,96.1800600); //
+    CreateDynamicObject(1819,1172.4860800,-1336.1401400,1088.5770300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2816,1172.9935300,-1335.6335400,1089.0733600,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2010,1168.7529300,-1335.2904100,1088.5761700,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2010,1173.3387500,-1341.2462200,1088.5761700,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14782,1187.8775600,-1344.7911400,1093.8636500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14782,1187.8714600,-1350.0474900,1093.8636500,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(14842,1193.1975100,-1346.1995800,1094.5345500,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14401,1189.5771500,-1348.1181600,1092.8703600,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2372,1191.4520300,-1347.2491500,1092.8704800,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2372,1188.9019800,-1347.2491500,1092.8704800,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2686,1184.7695300,-1347.2356000,1094.1062000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2688,1188.8342300,-1344.4831500,1094.4085700,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2687,1183.0755600,-1338.5330800,1092.4199200,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2169,1174.5461400,-1351.3378900,1092.8702400,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1714,1172.7973600,-1347.9200400,1092.8703600,0.0000000,0.0000000,92.1390300); //
+    CreateDynamicObject(1715,1176.2918700,-1351.5789800,1092.8700000,0.0000000,0.0000000,-78.0020000); //
+    CreateDynamicObject(2601,1174.4038100,-1350.9887700,1093.7363300,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(19325,1177.6536900,-1359.1204800,1093.3208000,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2164,1172.5813000,-1355.6958000,1092.8703600,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2204,1176.4147900,-1356.1377000,1092.8701200,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(19330,1188.3566900,-1350.2259500,1094.9860800,0.0000000,-90.0000000,17.3740000); //
+    CreateDynamicObject(2256,1172.5396700,-1352.9068600,1094.6909200,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2202,1176.4841300,-1350.1268300,1092.8704800,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2173,1174.3223900,-1347.3895300,1092.8709700,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1714,1172.9866900,-1351.8341100,1092.8703600,0.0000000,0.0000000,75.2190000); //
+    CreateDynamicObject(2173,1174.3223900,-1347.3895300,1092.8709700,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1715,1176.1696800,-1348.4805900,1092.8700000,0.0000000,0.0000000,-111.0019600); //
+    CreateDynamicObject(2167,1172.5573700,-1345.6745600,1092.8707300,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(2164,1174.2489000,-1350.5504200,1092.8703600,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(630,1176.8392300,-1345.5925300,1093.8667000,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14438,1179.3369100,-1292.3758500,1095.9480000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(14438,1191.4249300,-1300.6521000,1094.1929900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14438,1191.7176500,-1283.6324500,1094.1929900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14438,1161.1132800,-1275.8077400,1094.1929900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14438,1161.0011000,-1288.2436500,1094.1929900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14438,1160.3817100,-1302.0935100,1094.1929900,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14438,1165.2966300,-1324.2414600,1095.3630400,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(14441,1179.7852800,-1347.1763900,1096.4679000,0.0000000,0.0000000,0.0000000); //
+	//All Saints exterior, credits to Nate (Jayden Riggs)
+    //Main <-----------Remade as CreateObject
+    new AllSaintsMain;
+    AllSaintsMain = CreateObject(5708,1134.2500000,-1338.0781300,23.1563000,0.0000000,0.0000000,0.0000000, 300.0); //
+    SetObjectMaterial(AllSaintsMain, 10, 4010, "lanblokb2", "sl_lavicdtwall1", 0);//Walls
+    SetObjectMaterial(AllSaintsMain, 9, 13746, "lahillshilhs1z", "ws_stationfloor", 0);//Frindge around the grass yard
+    SetObjectMaterial(AllSaintsMain, 7, 8664, "casnorylgrnd", "ws_floortiles4", 0);//Pavement/Pedwalk or w/s/e
+    SetObjectMaterial(AllSaintsMain, 6, 6052, "law_doontoon", "sf_window_mod1", 0);//Side windows
+    SetObjectMaterial(AllSaintsMain, 3, 9900, "pointysfe", "ws_trans_window1", 0);//Front lower windows
+    SetObjectMaterial(AllSaintsMain, 2, 9169, "vgslowbuild", "marinawindow1_256", 0);//Front Main windows
+    SetObjectMaterial(AllSaintsMain, 0, 5735, "studio01_lawn", "Grass_128HV", 0);//Grass
+    //Walls
+    new AllSaintsFDWalls[14];
+    AllSaintsFDWalls[0] = CreateDynamicObject(19377,1145.8793900,-1311.1214600,12.6080000,0.0000000,0.0000000,90.0000000); //
+    AllSaintsFDWalls[1] = CreateDynamicObject(19377,1136.2493900,-1311.1214600,12.6080000,0.0000000,0.0000000,90.0000000); //
+    AllSaintsFDWalls[2] = CreateDynamicObject(19377,1126.6193800,-1311.1214600,12.6080000,0.0000000,0.0000000,90.0000000); //
+    AllSaintsFDWalls[3] = CreateDynamicObject(19377,1121.5373500,-1311.1235400,12.6080000,0.0000000,0.0000000,90.0000000); //
+    AllSaintsFDWalls[4] = CreateDynamicObject(19377,1116.8184800,-1306.3746300,12.6080000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDWalls[5] = CreateDynamicObject(19377,1116.8165300,-1297.1186500,12.6080000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDWalls[6] = CreateDynamicObject(19377,1149.9793700,-1306.3009000,12.6080000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDWalls[7] = CreateDynamicObject(19377,1149.9774200,-1297.1186500,12.6080000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDWalls[8] = CreateDynamicObject(19454,1149.4492200,-1292.8739000,13.0415000,90.0000000,90.0000000,0.0000000); //
+    AllSaintsFDWalls[9] = CreateDynamicObject(19454,1139.7772200,-1292.8739000,13.0415000,90.0000000,90.0000000,0.0000000); //
+    AllSaintsFDWalls[10] = CreateDynamicObject(19454,1130.1121800,-1292.8739000,13.0415000,90.0000000,90.0000000,0.0000000); //
+    AllSaintsFDWalls[11] = CreateDynamicObject(19454,1120.4552000,-1292.8739000,13.0415000,90.0000000,90.0000000,0.0000000); //
+    AllSaintsFDWalls[12] = CreateDynamicObject(19454,1118.4571500,-1292.8758500,13.0415000,90.0000000,90.0000000,0.0000000); //
+    for(new i = 0; i<=12; i++) SetDynamicObjectMaterial(AllSaintsFDWalls[i], 0, 4010, "lanblokb2", "sl_lavicdtwall1", 0);
+    //Roof
+    new AllSaintsFDRoof[9];
+    AllSaintsFDRoof[0] = CreateDynamicObject(19378,1121.5373500,-1297.1186500,17.7790000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[1] = CreateDynamicObject(19378,1132.0253900,-1297.1186500,17.7790000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[2] = CreateDynamicObject(19378,1142.5194100,-1297.1186500,17.7790000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[3] = CreateDynamicObject(19378,1153.0134300,-1297.1186500,17.7790000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[4] = CreateDynamicObject(19378,1121.5394300,-1306.5085400,17.7770000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[5] = CreateDynamicObject(19378,1132.0253900,-1306.5085400,17.7770000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[6] = CreateDynamicObject(19378,1142.5194100,-1306.5065900,17.7770000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDRoof[7] = CreateDynamicObject(19378,1153.0134300,-1306.5085400,17.7770000,0.0000000,90.0000000,0.0000000); //
+    for(new i = 0; i<=7; i++) SetDynamicObjectMaterial(AllSaintsFDRoof[i], 0,  6056, "venice_law", "rooftop_gz4", 0);
+    //Concrete
+    new AllSaintsFDConcrete[15];
+    AllSaintsFDConcrete[0] = CreateDynamicObject(18980,1116.7760000,-1292.6317100,5.3604000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDConcrete[1] = CreateDynamicObject(18980,1150.0040300,-1292.6317100,5.3604000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDConcrete[2] = CreateDynamicObject(18980,1128.7800300,-1292.6297600,17.6044000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDConcrete[3] = CreateDynamicObject(18980,1153.7800300,-1292.6297600,17.6044000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDConcrete[4] = CreateDynamicObject(18980,1153.7800300,-1292.6278100,16.6744000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDConcrete[5] = CreateDynamicObject(18980,1128.7800300,-1292.6278100,16.6744000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDConcrete[6] = CreateDynamicObject(18980,1116.7760000,-1310.9616700,5.3604000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDConcrete[7] = CreateDynamicObject(18980,1150.0040300,-1310.9616700,5.3604000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDConcrete[8] = CreateDynamicObject(18980,1128.7800300,-1310.9597200,17.6044000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDConcrete[9] = CreateDynamicObject(18980,1153.7800300,-1310.9597200,17.6044000,0.0000000,90.0000000,0.0000000); //
+    AllSaintsFDConcrete[10] = CreateDynamicObject(18762,1116.7740500,-1304.5533400,17.6024000,0.0000000,90.0000000,90.0000000); //
+    AllSaintsFDConcrete[11] = CreateDynamicObject(18762,1116.7719700,-1308.9173600,17.6004000,0.0000000,90.0000000,90.0000000); //
+    AllSaintsFDConcrete[12] = CreateDynamicObject(18762,1116.7740500,-1294.6413600,17.6024000,0.0000000,90.0000000,90.0000000); //
+    AllSaintsFDConcrete[13] = CreateDynamicObject(18762,1116.7740500,-1299.5974100,17.6024000,0.0000000,90.0000000,90.0000000); //
+    for(new i = 0; i<=13; i++) SetDynamicObjectMaterial(AllSaintsFDConcrete[i], 0, 3985, "pershingsq", "duskyred_64", 0);
+    new AllSaintsFDConcrete2[3];
+    AllSaintsFDConcrete2[0] = CreateDynamicObject(18980,1129.4777800,-1302.3747600,5.3604000,0.0000000,0.0000000,0.0000000); //
+    AllSaintsFDConcrete2[1] = CreateDynamicObject(18980,1139.3887900,-1302.3747600,5.3604000,0.0000000,0.0000000,0.0000000); //
+    for(new i = 0; i<=1; i++) SetDynamicObjectMaterial(AllSaintsFDConcrete2[i], 0, 16150, "ufo_bar", "GEwhite1_64", 0);
+    //Droor block
+    new AllSaintsDoorBlock;
+    AllSaintsDoorBlock = CreateDynamicObject(18764,1152.4080800,-1301.7189900,19.1933000,0.0000000,0.0000000,0.0000000); //
+    SetDynamicObjectMaterial(AllSaintsDoorBlock, 0, 3985, "pershingsq", "duskyred_64", 0);
+
+	CreateDynamicObject(1368,1177.8037100,-1319.1646700,13.7577000,0.0000000,-2.7450000,0.0000000); //
+    CreateDynamicObject(1368,1177.6523400,-1328.5316200,13.7577000,0.0000000,2.7450000,180.0000000); //
+    CreateDynamicObject(3934,1132.5941200,-1301.8873300,17.8580000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1533,1149.8874500,-1300.2424300,17.8630000,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1533,1149.8874500,-1301.7464600,17.8630000,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(3934,1161.2640400,-1313.9383500,30.4888000,0.0000000,0.0000000,90.0000000); //
+    CreateDynamicObject(1533,1163.1114500,-1330.4676500,30.4866000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1533,1161.6134000,-1330.4676500,30.4866000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2690,1139.1561300,-1293.0833700,12.9833000,0.0000000,0.0000000,0.0000000); //
+    CreateDynamicObject(2922,1140.7110600,-1293.0089100,14.1859000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2922,1131.1510000,-1293.0089100,14.1859000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2922,1121.5109900,-1293.0089100,14.1859000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(1533,1149.8603500,-1305.0349100,12.6485000,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(1533,1149.8603500,-1306.5148900,12.6485000,0.0000000,0.0000000,-90.0000000); //
+    CreateDynamicObject(2737,1137.3712200,-1310.9870600,14.0169000,0.0000000,0.0000000,180.0000000); //
+    CreateDynamicObject(2986,1139.8222700,-1293.1480700,16.4192000,0.0000000,90.0000000,90.0000000); //
+    CreateDynamicObject(2986,1119.8902600,-1293.1480700,16.4192000,0.0000000,90.0000000,90.0000000); //
+    CreateDynamicObject(1368,1134.8315400,-1310.5899700,13.2565000,0.0000000,0.0000000,180.0000000); //
+	return 1;
+}
+stock LoadFBIMap()
+{
+	CreateObject(6966, 1796.58936, -1641.16870, 12.61000,   0.00000, 0.00000, 270.00000);
+	CreateObject(7245, 1783.75964, -1691.52808, 9.44000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(6970, 1786.79773, -1695.16907, 15.12000,   0.00000, 0.00000, 270.00000);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1799.28711, -1709.83386, 12.07000,   0.00000, 90.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1770.58508, -1629.01147, 12.00000,   0.00000, 90.00000, 256.42670), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1792.06250, -1709.83386, 12.05000,   0.00000, 90.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1767.02856, -1709.83386, 12.05000,   0.00000, 90.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1767.02856, -1684.89233, 12.05000,   0.00000, 90.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1767.02856, -1659.98596, 12.05000,   0.00000, 90.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18981, 1767.02856, -1635.07654, 12.05000,   0.00000, 90.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18766, 1759.56238, -1627.09656, 11.45000,   0.00000, 0.00000, 0.00000), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18766, 1760.86719, -1619.87305, 12.03000,   90.00000, 90.00000, 44.18820), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18766, 1760.95068, -1618.84827, 12.01000,   90.00000, 90.00000, 342.99521), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18766, 1756.99048, -1622.78259, 12.04000,   90.00000, 90.00000, 0.16580), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	SetDynamicObjectMaterial(CreateDynamicObject(18766, 1758.86206, -1616.02747, 7.50000,   0.00000, 90.00000, 65.29113), 0, 12931, "sw_brewery", "fancy_slab128", 0xFFFFFFFF);
+	CreateDynamicObject(3934, 1774.25806, -1692.60266, 23.45555,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3934, 1799.65710, -1692.64355, 23.45555,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1506, 1786.02673, -1680.54968, 23.40000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19454, 1786.10229, -1675.79211, 24.10000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19454, 1787.54114, -1675.79211, 24.10000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19435, 1786.82727, -1678.86230, 25.90000,   0.00000, 90.00000, 270.00000);
+	CreateDynamicObject(966, 1760.71057, -1680.12817, 12.50000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(966, 1760.71057, -1660.00781, 12.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1214, 1760.85510, -1672.38940, 12.50000,   0.00000, 0.00000, 358.98273);
+	CreateDynamicObject(1214, 1760.85510, -1667.72571, 12.50000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1214, 1760.85510, -1668.89587, 12.50000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1214, 1760.85510, -1670.03882, 12.50000,   0.00000, 0.00000, 359.79901);
+	CreateDynamicObject(1214, 1760.85510, -1671.14209, 12.50000,   0.00000, 0.00000, 359.18369);
+
+	CreateObject(17536, 1782.49524, -1712.96350, 24.13992,   0.00000, 0.00000, 90.00000); // buildings / the biz behind fbi
+	return 1;
+}
+stock LoadPrisonMap()
+{
+	CreateDynamic3DTextLabel("Garage", COLOR_YELLOW, 143.9877,1497.2058,989.4397, 5.0);
+	CreateDynamic3DTextLabel("Garage", COLOR_YELLOW, 184.0263,1823.5316,17.6406, 5.0);
+
+	new pWallWeed[5];
+	new pWallCon[25];
+	//naval stairs
+	CreateDynamicObject(7096, -1341.07, 481.08, 8.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1698, -1338.06, 486.35, 11.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -1336.70, 486.35, 11.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -1335.35, 486.36, 11.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, -1337.05, 484.75, 10.53,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1698, -1337.04, 484.99, 10.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1698, -1337.05, 485.18, 10.97,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1698, -1338.77, 486.30, 10.43,   0.00, 270.00, 0.00);
+	CreateDynamicObject(1698, -1334.64, 486.42, 10.43,   0.00, 270.00, 180.00);
+	CreateDynamicObject(1698, -1336.22, 487.97, 10.42,   0.00, 270.00, 270.00);
+	CreateDynamicObject(1698, -1337.22, 487.97, 10.41,   0.00, 270.00, 270.00);
+	//Cell beginning
+	CreateObject(10824, 2702.97, -2467.05, 1300.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16339, 2723.00, -2469.16, 1303.56,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(8533, 2744.29, -2461.51, 1298.01,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2766.27, -2447.57, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2747.35, -2527.43, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(14412, 2735.87, -2517.65, 1303.99,   0.00, 0.00, 270.00);
+	CreateDynamicObject(16339, 2749.11, -2498.58, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2749.11, -2523.57, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2722.52, -2520.95, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2722.51, -2501.39, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2722.51, -2476.39, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(1411, 2730.45, -2494.59, 1300.70,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1411, 2735.69, -2494.59, 1300.70,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1411, 2740.93, -2494.58, 1300.70,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2743.35, -2527.43, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2739.36, -2527.43, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2735.36, -2527.43, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2731.37, -2527.43, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2727.37, -2527.43, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2723.69, -2527.44, 1300.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14437, 2725.60, -2506.33, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2725.60, -2502.33, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2725.60, -2498.34, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2725.60, -2494.34, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2725.62, -2493.18, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2762.26, -2506.28, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2762.26, -2502.28, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2762.26, -2498.29, 1296.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9339, 2736.41, -2511.23, 1303.41,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9339, 2736.41, -2511.23, 1304.81,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9339, 2710.29, -2511.23, 1303.41,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9339, 2710.29, -2511.23, 1304.81,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2745.26, -2523.87, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2745.68, -2523.83, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2741.73, -2523.81, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2741.18, -2523.85, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2737.76, -2523.86, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2733.74, -2523.89, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2729.73, -2523.88, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2725.90, -2523.89, 1302.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2737.08, -2523.84, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2733.25, -2523.91, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2729.20, -2523.86, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2725.45, -2523.79, 1302.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(14416, 2742.75, -2496.90, 1295.59,   0.00, 0.00, 270.00);
+	pWallCon[19] = CreateDynamicObject(16339, 2713.83, -2486.52, 1302.86,   0.00, 0.00, 90.00, 50, 50);
+	pWallCon[18] = CreateDynamicObject(16339, 2741.84, -2486.52, 1302.86,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2719.18, -2486.51, 1313.86,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2720.22, -2485.73, 1313.81,   90.00, 0.00, 270.00, 50, 50);
+	pWallCon[17] = CreateDynamicObject(16339, 2713.85, -2485.72, 1302.86,   0.00, 0.00, 270.00, 50, 50);
+	pWallCon[16] = CreateDynamicObject(16339, 2741.85, -2485.72, 1302.86,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(7191, 2741.52, -2513.26, 1303.14,   0.00, 270.00, 90.00, 50, 50);
+	CreateDynamicObject(7191, 2741.16, -2517.22, 1303.14,   0.00, 270.00, 90.00, 50, 50);
+	CreateDynamicObject(2792, 2725.67, -2509.08, 1298.11,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2793, 2722.37, -2511.10, 1303.41,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2794, 2745.89, -2498.48, 1298.11,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2794, 2746.13, -2498.53, 1298.11,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1622, 2748.72, -2510.73, 1303.98,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1622, 2723.27, -2495.28, 1303.98,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1622, 2748.99, -2494.04, 1303.98,   0.00, 0.00, -45.00, 50, 50);
+	CreateDynamicObject(14439, 2740.16, -2502.62, 1305.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2448, 2738.17, -2490.14, 1298.73,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2446, 2738.13, -2491.13, 1298.73,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2446, 2738.13, -2492.13, 1298.73,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2589, 2748.57, -2492.30, 1304.71,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2415, 2742.22, -2487.08, 1298.82,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2417, 2743.10, -2486.81, 1298.82,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2419, 2745.16, -2490.07, 1298.80,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2418, 2745.14, -2487.56, 1298.81,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2446, 2744.92, -2486.58, 1298.73,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2446, 2745.39, -2489.28, 1298.73,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2803, 2748.29, -2493.49, 1299.25,   0.00, 0.00, -47.00, 50, 50);
+	CreateDynamicObject(2963, 2746.08, -2489.39, 1298.04,   180.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2417, 2744.08, -2486.82, 1298.82,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16101, 2745.81, -2494.87, 1303.24,   90.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16101, 2746.09, -2494.82, 1303.24,   90.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2649, 2743.22, -2486.87, 1303.05,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(16339, 2745.46, -2470.60, 1298.86,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16659, 2765.53, -2467.18, 1305.30,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18980, 2769.28, -2463.96, 1294.32,   0.00, 90.00, 0.00, 50, 50);
+	pWallWeed[1] = CreateDynamicObject(8533, 2744.37, -2456.30, 1302.80,   180.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2769.08, -2462.13, 1298.86,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16532, 2771.93, -2474.67, 1300.97,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16086, 2761.57, -2436.60, 1299.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1508, 2758.21, -2476.07, 1300.43,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2745.40, -2508.09, 1285.00,   90.00, 0.00, 270.00, 50, 50);
+	CreateObject(8185, 2730.92, -2383.48, 1298.66,   0.00, 90.00, 180.00);
+	CreateObject(8185, 2747.97, -2583.87, 1298.64,   0.00, 90.00, 180.00);
+	CreateDynamicObject(19313, 2734.78, -2494.70, 1306.10,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19313, 2748.81, -2494.70, 1306.07,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(994, 2738.91, -2508.71, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(994, 2732.64, -2508.71, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(994, 2726.41, -2508.72, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2729.96, -2508.10, 1285.00,   90.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(994, 2725.74, -2508.07, 1298.83,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(994, 2725.74, -2501.80, 1298.83,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(994, 2746.01, -2508.36, 1298.83,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(17969, 2731.60, -2508.20, 1296.12,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(5069, 2732.75, -2512.04, 1295.48,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(18665, 2739.20, -2508.16, 1295.71,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2949, 2736.98, -2508.19, 1294.69,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1368, 2739.91, -2501.92, 1295.31,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(1368, 2742.66, -2507.86, 1295.31,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(1368, 2732.47, -2495.27, 1295.31,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14578, 2726.47, -2505.63, 1305.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14578, 2738.44, -2509.33, 1305.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14578, 2750.41, -2513.04, 1305.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16101, 2745.83, -2480.62, 1300.08,   90.00, 180.00, 180.00, 50, 50);
+	CreateDynamicObject(16101, 2745.99, -2491.60, 1300.08,   90.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16101, 2746.04, -2480.64, 1300.08,   90.00, 180.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2754.76, -2460.85, 1298.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2767.39, -2473.49, 1298.86,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2773.97, -2475.92, 1298.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2778.55, -2480.38, 1302.86,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(14464, 2747.07, -2448.97, 1300.98,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2451, 2740.20, -2487.03, 1298.76,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2762, 2734.87, -2486.92, 1299.23,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2763, 2732.18, -2486.91, 1299.23,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2762, 2734.83, -2489.56, 1299.23,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2762, 2731.66, -2489.57, 1299.23,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2762, 2731.66, -2493.88, 1299.23,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2767, 2738.30, -2491.18, 1299.77,   0.00, 0.00, 105.00, 50, 50);
+	CreateDynamicObject(2310, 2732.71, -2490.98, 1299.25,   0.00, 0.00, -80.00, 50, 50);
+	CreateDynamicObject(2310, 2731.55, -2490.21, 1299.25,   0.00, 0.00, -98.00, 50, 50);
+	CreateDynamicObject(2310, 2730.60, -2488.15, 1299.25,   0.00, 0.00, -229.00, 50, 50);
+	CreateDynamicObject(2310, 2730.79, -2492.37, 1299.25,   0.00, 0.00, -273.00, 50, 50);
+	CreateDynamicObject(2310, 2729.52, -2493.66, 1299.25,   0.00, 0.00, -185.00, 50, 50);
+	CreateDynamicObject(2310, 2734.53, -2491.00, 1299.25,   0.00, 0.00, -127.00, 50, 50);
+	CreateDynamicObject(2310, 2733.51, -2486.77, 1299.25,   0.00, 0.00, -11.00, 50, 50);
+	CreateDynamicObject(2310, 2730.80, -2487.14, 1299.25,   0.00, 0.00, -164.00, 50, 50);
+	CreateDynamicObject(2310, 2736.94, -2486.90, 1299.25,   0.00, 0.00, 33.00, 50, 50);
+	CreateDynamicObject(2949, 2752.41, -2480.44, 1298.85,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(14867, 2761.99, -2480.71, 1299.63,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16101, 2745.99, -2491.59, 1298.08,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2714.37, -2503.84, 1286.30,   270.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16339, 2714.37, -2504.58, 1286.30,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2714.32, -2500.43, 1286.30,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2714.32, -2499.66, 1286.30,   270.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(7191, 2747.89, -2505.80, 1298.52,   0.00, 270.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2725.85, -2499.34, 1294.60,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2723.48, -2495.24, 1295.16,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2722.95, -2503.79, 1294.60,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2602, 2724.77, -2500.65, 1295.16,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2722.84, -2508.75, 1294.60,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2602, 2724.80, -2504.81, 1295.16,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2748.37, -2517.30, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2744.59, -2517.30, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2740.54, -2517.28, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2736.43, -2517.31, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2732.62, -2517.33, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2728.54, -2517.33, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2724.81, -2517.32, 1298.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2602, 2745.90, -2512.00, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2741.94, -2512.03, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2737.97, -2511.95, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2733.95, -2511.93, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2729.94, -2511.93, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2726.11, -2511.93, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2722.74, -2511.92, 1299.34,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14439, 2741.08, -2485.21, 1305.80,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14439, 2727.33, -2466.43, 1304.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2397, 2739.18, -2480.10, 1299.53,   -23.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2009, 2743.52, -2478.98, 1298.84,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16644, 2743.37, -2478.45, 1300.21,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(16644, 2745.04, -2479.35, 1300.21,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(16644, 2739.20, -2478.40, 1300.21,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(1495, 2740.94, -2478.47, 1298.83,   0.00, 0.00, 189.00, 50, 50);
+	CreateDynamicObject(2197, 2742.39, -2479.97, 1299.06,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2197, 2741.70, -2479.97, 1299.06,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2197, 2741.01, -2479.97, 1299.06,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2197, 2740.33, -2479.97, 1299.06,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(1806, 2743.51, -2480.32, 1298.82,   0.00, 0.00, -40.00, 50, 50);
+	CreateDynamicObject(2399, 2739.18, -2479.57, 1299.56,   -23.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2397, 2739.17, -2479.01, 1299.54,   -23.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2372, 2739.38, -2480.46, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16644, 2738.24, -2479.27, 1300.21,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(1622, 2756.88, -2480.07, 1302.58,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2949, 2722.90, -2477.98, 1298.85,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(10369, 2733.52, -2519.17, 1291.64,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10369, 2726.5903, -2483.9600, 1292.6300,   0.00, 0.00, 180.01, 50, 50);
+	CreateDynamicObject(10369, 2739.52, -2483.95, 1292.64,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2732.89, -2460.28, 1298.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2734.64, -2460.19, 1298.86,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(14437, 2728.82, -2470.56, 1300.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2728.82, -2466.56, 1300.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14437, 2728.82, -2462.57, 1300.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(8533, 2698.93, -2442.69, 1298.82,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(8185, 2726.54, -2383.33, 1298.66,   0.00, 90.00, 180.00, 50, 50);
+	CreateDynamicObject(10369, 2712.57, -2466.08, 1297.64,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16339, 2716.03, -2460.98, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2716.21, -2464.26, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16339, 2716.16, -2464.69, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2716.11, -2468.67, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2716.05, -2468.11, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16339, 2716.41, -2472.69, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2716.08, -2471.90, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16339, 2716.42, -2460.41, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(18980, 2728.50, -2472.68, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	pWallCon[2] = CreateDynamicObject(18980, 2728.20, -2460.11, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(7191, 2705.66, -2470.52, 1302.89,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(7191, 2705.66, -2466.56, 1302.89,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(7191, 2705.67, -2463.00, 1302.88,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(1411, 2725.44, -2472.37, 1300.30,   0.00, 0.00, 0.00, 50, 50);
+	pWallCon[1] = CreateDynamicObject(9339, 2728.86, -2472.49, 1300.61,   90.00, 0.00, 180.00, 50, 50);
+	pWallCon[0] = CreateDynamicObject(9339, 2728.30, -2473.04, 1300.61,   90.00, 0.00, 270.00, 50, 50);
+	pWallWeed[4] = CreateDynamicObject(9339, 2733.82, -2472.64, 1300.61,   90.00, 0.00, 90.00, 50, 50);
+	pWallWeed[2] = CreateDynamicObject(9339, 2738.28, -2472.35, 1300.61,   90.00, 0.00, 0.00, 50, 50);
+	pWallWeed[3] = CreateDynamicObject(9339, 2738.27, -2470.95, 1300.61,   90.00, 0.00, 0.00, 50, 50);
+	pWallCon[21] = CreateDynamicObject(9339, 2758.12, -2475.60, 1302.81,   0.00, 180.00, 0.00, 50, 50);
+	pWallCon[22] = CreateDynamicObject(9339, 2724.37, -2442.24, 1300.61,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2990, 2738.26, -2475.88, 1305.29,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(14578, 2733.74, -2466.38, 1302.80,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(14439, 2746.33, -2471.27, 1304.30,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2795, 2723.69, -2472.52, 1302.45,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11543, 2708.47, -2435.39, 1303.53,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(8260, 2723.51, -2413.35, 1295.66,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16659, 2719.26, -2435.06, 1305.61,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(8260, 2755.78, -2439.41, 1295.66,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14401, 2727.97, -2446.17, 1299.21,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(4724, 2723.41, -2436.57, 1299.46,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(4724, 2729.46, -2443.13, 1297.06,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16659, 2722.17, -2430.33, 1305.60,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2846, 2729.96, -2444.52, 1298.96,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1738, 2731.00, -2448.50, 1299.44,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1208, 2728.87, -2450.55, 1298.96,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1208, 2728.13, -2450.57, 1298.96,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1208, 2727.39, -2450.58, 1298.96,   0.00, 0.00, 1.00, 50, 50);
+	CreateDynamicObject(1208, 2726.65, -2450.57, 1298.96,   0.00, 0.00, -1.00, 50, 50);
+	CreateDynamicObject(14867, 2732.39, -2442.32, 1300.48,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2154, 2725.11, -2448.74, 1298.96,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1789, 2727.15, -2448.24, 1299.50,   0.00, 0.00, -69.00, 50, 50);
+	CreateDynamicObject(1778, 2729.60, -2450.67, 1298.96,   0.00, 0.00, -120.00, 50, 50);
+	CreateDynamicObject(14587, 2720.23, -2407.81, 1304.37,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14587, 2720.98, -2419.08, 1301.17,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14494, 2727.30, -2437.44, 1300.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14494, 2726.17, -2437.43, 1300.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14494, 2725.04, -2437.41, 1300.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14494, 2724.90, -2440.91, 1300.80,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(16101, 2727.83, -2451.35, 1301.38,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(19313, 2726.55, -2451.29, 1294.35,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(14439, 2724.83, -2443.07, 1303.70,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2819, 2728.19, -2451.08, 1299.87,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2732.62, -2517.33, 1299.78,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2727.22, -2471.46, 1298.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1800, 2722.69, -2465.09, 1298.80,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1800, 2727.17, -2463.80, 1298.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2723.88, -2469.11, 1299.33,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2724.44, -2467.88, 1299.33,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2602, 2725.50, -2461.20, 1299.33,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1800, 2727.17, -2463.80, 1299.80,   0.00, 0.00, 90.00, 50, 50);
+	pWallCon[20] = CreateDynamicObject(9339, 2748.60, -2494.47, 1300.61,   90.00, 0.00, 270.00, 50, 50);
+	pWallCon[24] = CreateDynamicObject(9339, 2748.60, -2494.74, 1300.61,   90.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(14798, 62.24, 2639.02, 1000.94,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2000, 62.63, 2638.35, 1001.85,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2000, 117.78, 1630.10, 999.46,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16101, 116.17, 1605.22, 1000.17,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(16101, 116.16, 1605.24, 1000.17,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(2949, 2748.36, -2480.45, 1298.85,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1989, 2747.31, -2486.87, 1298.84,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2543, 2748.35, -2486.92, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2539, 2746.54, -2487.77, 1297.84,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2539, 2746.54, -2488.79, 1297.84,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2803, 2748.61, -2490.29, 1299.25,   0.00, 0.00, -142.00, 50, 50);
+	CreateDynamicObject(3055, 1768.01, 1051.10, 1002.97,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2949, 1765.35, 1049.51, 997.90,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3109, 2542.87, -2519.34, 13.90,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(3109, 2559.93, -2529.57, 13.50,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(4724, 2737.80, -2435.75, 1297.06,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2744.19, -2451.58, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2737.95, -2451.51, 1312.36,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2715.49, -2452.44, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	pWallCon[5] = CreateDynamicObject(9339, 2727.89, -2451.62, 1300.61,   90.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2716.95, -2451.51, 1304.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2716.17, -2458.49, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(9339, 2722.84, -2457.31, 1300.61,   90.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(14464, 2708.77, -2480.52, 1300.98,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2702.81, -2439.84, 1303.56,   0.00, 0.00, 0.00, 50, 50);
+	pWallCon[3] = CreateDynamicObject(9339, 2728.52, -2459.34, 1300.61,   90.00, 0.00, 0.00, 50, 50);
+	pWallCon[4] = CreateDynamicObject(9339, 2727.96, -2458.76, 1300.61,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9339, 2722.84, -2458.71, 1300.61,   90.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(8533, 2684.37, -2449.40, 1302.80,   180.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14587, 2706.14, -2430.27, 1301.87,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2990, 2720.02, -2454.65, 1305.29,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(2990, 2720.08, -2461.31, 1300.29,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(16532, 2718.42, -2461.15, 1301.57,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(11148, 2702.91, -2458.76, 1300.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 2691.18, -2458.49, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(14464, 2682.77, -2480.51, 1300.97,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2990, 2720.20, -2448.25, 1300.29,   0.00, 180.00, 90.00, 50, 50);
+	pWallCon[11] = CreateDynamicObject(16339, 2679.57, -2462.47, 1303.56,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16339, 2683.52, -2469.05, 1303.56,   0.00, 0.00, 180.00, 50, 50);
+	pWallCon[6] = CreateDynamicObject(9339, 2683.24, -2453.61, 1300.61,   90.00, 0.00, 180.00, 50, 50);
+	pWallCon[9] = CreateDynamicObject(16339, 2683.51, -2445.69, 1312.36,   0.00, 0.00, 180.00, 50, 50);
+	pWallCon[23] = CreateDynamicObject(9339, 2683.25, -2450.36, 1300.61,   90.00, 0.00, 0.00, 50, 50);
+	pWallCon[7] = CreateDynamicObject(9339, 2683.25, -2456.85, 1300.61,   90.00, 0.00, 180.00, 50, 50);
+	pWallCon[8] = CreateDynamicObject(16339, 2682.64, -2459.13, 1312.36,   0.00, 0.00, 180.00, 50, 50);
+	pWallCon[10] = CreateDynamicObject(16339, 2682.65, -2460.56, 1312.36,   0.00, 0.00, 180.00, 50, 50);
+	pWallWeed[0] = CreateDynamicObject(8185, 2681.26, -2367.94, 1301.46,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(2990, 2683.29, -2460.83, 1300.29,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(2990, 2683.24, -2446.39, 1300.29,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(9339, 2683.23, -2453.61, 1300.61,   90.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2990, 2680.04, -2450.49, 1300.29,   0.00, 180.00, 0.00, 50, 50);
+	CreateDynamicObject(2990, 2688.26, -2450.50, 1305.29,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16644, 2688.89, -2450.56, 1293.86,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(16644, 2684.65, -2450.59, 1293.86,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(1495, 2687.90, -2450.50, 1298.86,   0.00, 0.00, 18.00, 50, 50);
+	CreateDynamicObject(16339, 2687.02, -2445.05, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16378, 2688.68, -2447.19, 1299.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2166, 2685.88, -2446.58, 1298.84,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2162, 2684.39, -2449.70, 1298.84,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2309, 2685.68, -2449.34, 1298.84,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2309, 2684.65, -2446.25, 1298.84,   0.00, 0.00, -142.00, 50, 50);
+	CreateDynamicObject(2606, 2686.14, -2450.12, 1301.62,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2606, 2688.13, -2450.12, 1301.62,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2794, 2720.40, -2451.37, 1301.42,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2794, 2720.41, -2450.98, 1301.42,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(931, 2724.29, -2457.69, 1299.83,   0.00, 0.00, 0.00, 50, 50);
+	pWallCon[13] = CreateDynamicObject(16339, 2670.67, -2453.26, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	pWallCon[12] = CreateDynamicObject(16339, 2670.70, -2453.98, 1303.56,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1800, 2682.91, -2456.16, 1298.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16339, 2670.63, -2456.58, 1303.56,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1800, 2683.12, -2451.49, 1298.80,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2602, 2681.08, -2454.20, 1299.33,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2602, 2680.06, -2453.04, 1299.33,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2949, 2714.15, -2452.33, 1298.85,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2949, 2700.22, -2450.70, 1298.85,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14439, 2718.21, -2442.14, 1304.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14439, 2702.70, -2442.14, 1304.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14439, 2687.73, -2435.35, 1304.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2961, 2690.58, -2447.19, 1299.99,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16086, 2653.1899, -2466.1077, 1299.7600,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16086, 2652.58, -2466.10, 1299.76,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16267, 2658.03, -2457.05, 1297.50,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1369, 2738.45, -2502.75, 1295.24,   0.00, 0.00, -20.00, 50, 50);
+	CreateDynamicObject(1810, 2739.95, -2502.92, 1294.62,   0.00, 0.00, 10.00, 50, 50);
+	CreateDynamicObject(1810, 2740.89, -2503.29, 1294.62,   0.00, 0.00, -33.00, 50, 50);
+	CreateDynamicObject(1810, 2732.56, -2504.03, 1294.62,   0.00, 0.00, 76.00, 50, 50);
+	CreateDynamicObject(1810, 2731.65, -2504.48, 1294.62,   0.00, 0.00, 273.00, 50, 50);
+	CreateDynamicObject(1810, 2732.11, -2502.08, 1294.64,   0.00, 90.00, 273.00, 50, 50);
+	CreateDynamicObject(2680, 2732.05, -2504.49, 1294.80,   -30.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1368, 2732.24, -2506.30, 1295.31,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(8533, 2742.54, -2481.14, 1304.80,   180.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2846, 2727.24, -2450.25, 1299.87,   0.00, 0.00, -164.00, 50, 50);
+	pWallCon[15] = CreateDynamicObject(9339, 2734.91, -2486.25, 1302.11,   180.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2990, 2738.25, -2469.43, 1297.59,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(2990, 2738.2603, -2482.4888, 1297.5900,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(2990, 2738.25, -2468.12, 1297.41,   0.00, 180.00, 90.00, 50, 50);
+	CreateDynamicObject(1368, 2731.37, -2506.27, 1295.31,   0.00, 0.00, 268.00, 50, 50);
+	pWallCon[14] = CreateDynamicObject(9339, 2734.78, -2485.98, 1302.11,   180.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14401, 2751.02, -2505.89, 1294.94,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14401, 2750.33, -2500.64, 1294.94,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1508, 2758.19, -2481.72, 1300.43,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1508, 2758.18, -2470.31, 1300.43,   0.00, 0.00, 0.00, 50, 50);
+	for(new i = 0; i < sizeof(pWallCon); i++)
+	{
+		SetDynamicObjectMaterial(pWallCon[i], 0, 10824, "subpen1_sfse", "ws_sub_pen_conc2", 0);
+
+	}
+	for(new i = 0; i < sizeof(pWallWeed); i++)
+	{
+		SetDynamicObjectMaterial(pWallWeed[i], 0, 10824, "subpen1_sfse", "ws_sub_pen_conc3", 0);
+	}
+	//cell end
+	//Bus interior
+	CreateDynamicObject(18038, 518.34, 1962.89, 1000.47,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16642, 518.67, 1977.07, 1000.82,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16642, 515.08, 1977.06, 1000.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(16642, 511.77, 1990.89, 1000.83,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16642, 497.3840, 1972.7500, 1000.8200,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(16642, 497.40, 1957.66, 1000.81,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(10154, 506.16, 1967.81, 999.62,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10154, 509.89, 1967.83, 999.62,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(7930, 507.77, 1968.62, 1001.23,   0.00, 270.00, 0.00, 50, 50);
+	CreateDynamicObject(7930, 510.75, 1968.66, 1001.22,   0.00, 270.00, 0.00, 50, 50);
+	CreateDynamicObject(19304, 509.84, 1968.14, 1000.01,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(19304, 509.85, 1971.64, 1000.01,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(19304, 506.24, 1968.15, 1000.01,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(19304, 506.24, 1971.65, 1000.01,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3033, 508.41, 1964.25, 999.09,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3033, 508.41, 1964.26, 1002.63,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3033, 506.36, 1967.22, 1003.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3033, 506.36, 1972.82, 1003.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3033, 509.76, 1971.29, 1003.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3033, 509.76, 1965.71, 1003.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3033, 509.73, 1963.34, 1001.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(10154, 509.88, 1964.26, 999.62,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14902, 508.19, 1949.41, 999.16,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(958, 508.61, 1964.27, 998.29,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1663, 509.07, 1965.81, 998.86,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1216, 509.79, 1965.10, 997.66,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2748, 508.85, 1968.23, 999.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2748, 508.87, 1970.26, 999.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2748, 508.86, 1972.28, 999.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19313, 515.15, 1966.80, 998.59,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19313, 516.85, 1966.83, 998.59,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19463, 509.63, 1969.10, 998.40,   0.00, 90.00, 0.00, 50, 50);
+	CreateDynamicObject(18762, 511.12, 1966.00, 998.29,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18074, 513.67, 1966.40, 998.90,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2911, 506.38, 1965.07, 998.40,   0.00, 0.00, 90.00, 50, 50);
+	//Bus interior end
+	CreateObject(14572, 1768.08, 1051.16, 1000.38,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3055, 1768.77, 1047.42, 999.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3055, 1771.30, 1051.28, 999.97,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3055, 1768.55, 1055.00, 999.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3055, 1765.21, 1051.29, 999.97,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14573, 1768.67, 1051.19, 1000.26,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14575, 1771.26, 1048.61, 1001.46,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14574, 1767.96, 1054.82, 999.15,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1264, 1767.83, 1053.27, 998.32,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1264, 1768.80, 1053.93, 998.92,   0.00, 0.00, -84.00, 50, 50);
+	CreateDynamicObject(929, 1767.17, 1054.14, 998.79,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1778, 1767.07, 1048.84, 997.88,   0.00, 0.00, 18.00, 50, 50);
+	CreateDynamicObject(2994, 1770.05, 1048.37, 998.38,   0.00, 0.00, 40.00, 50, 50);
+	CreateDynamicObject(2994, 1768.89, 1048.81, 998.38,   0.00, 0.00, 91.00, 50, 50);
+	CreateDynamicObject(2994, 1769.85, 1049.74, 998.38,   0.00, 0.00, -47.00, 50, 50);
+	CreateDynamicObject(1428, 1770.22, 1052.88, 999.32,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(16647, -613.69, 2423.20, 992.58,   0.00, 0.00, 180.00);
+	CreateDynamicObject(16642, -615.44, 2416.22, 1000.33,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16662, -621.01, 2431.09, 996.10,   0.00, 0.00, -25.00, 50, 50);
+	CreateDynamicObject(16662, -610.90, 2421.70, 996.31,   0.00, 0.00, 307.00, 50, 50);
+	CreateDynamicObject(16642, -614.46, 2410.26, 1000.34,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18980, -616.68, 2424.49, 996.51,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3117, -615.36, 2424.31, 995.69,   45.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2607, -615.86, 2423.30, 995.63,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3386, -613.55, 2420.23, 995.25,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16092, -616.89, 2425.74, 995.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11631, -618.23, 2423.32, 996.50,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16532, -616.80, 2427.12, 994.79,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14782, -613.44, 2419.04, 996.19,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1999, -614.49, 2423.41, 995.24,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1806, -618.27, 2421.99, 995.28,   0.00, 0.00, -33.00, 50, 50);
+	CreateDynamicObject(1806, -613.75, 2422.06, 995.28,   0.00, 0.00, 25.00, 50, 50);
+	CreateDynamicObject(1806, -615.82, 2421.87, 995.28,   0.00, 0.00, -11.00, 50, 50);
+	CreateDynamicObject(1806, -622.78, 2420.66, 995.28,   0.00, 0.00, -69.00, 50, 50);
+	CreateDynamicObject(1806, -620.70, 2420.08, 995.28,   0.00, 0.00, 11.00, 50, 50);
+	CreateDynamicObject(3109, -615.94, 2419.65, 996.51,   0.00, 0.00, 270.00, 50, 50);
+	CreateObject(16642, 125.02, 1621.15, 1000.75,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3396, 118.20, 1617.56, 998.24,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(3386, 120.38, 1624.42, 998.10,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3395, 118.23, 1624.28, 998.24,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(16642, 112.66, 1610.25, 999.05,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.35, 1625.53, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16339, 128.81, 1616.79, 998.55,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(18608, 118.94, 1628.32, 1002.98,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1616, 113.65, 1623.93, 1001.00,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(1616, 113.67, 1610.90, 1001.00,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(10632, 116.35, 1632.13, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14464, 96.04, 1618.78, 1001.50,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2343, 119.38, 1620.85, 998.82,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3384, 121.06, 1621.52, 999.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11353, 143.67, 1616.41, 998.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11353, 121.74, 1589.90, 997.63,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11353, 121.84, 1584.78, 997.49,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(18038, 128.58, 1615.57, 1000.48,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18038, 134.14, 1619.26, 1000.47,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3389, 121.51, 1622.58, 998.10,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11353, 121.87, 1643.49, 998.29,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11353, 121.84, 1638.99, 998.29,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18608, 107.00, 1620.80, 1003.88,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18608, 107.00, 1608.92, 1003.88,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3109, 121.36, 1609.40, 999.50,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(11353, 119.20, 1603.48, 997.63,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11353, 88.93, 1628.55, 998.29,   0.00, 0.00, -90.00, 50, 50);
+	CreateDynamicObject(11353, 143.49, 1625.80, 998.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(11353, 146.66, 1625.77, 998.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3109, 118.52, 1630.87, 999.50,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1516, 118.59, 1628.44, 998.43,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2310, 119.20, 1626.83, 998.74,   0.00, 0.00, 302.00, 50, 50);
+	CreateDynamicObject(2310, 119.82, 1629.84, 998.74,   0.00, 0.00, 76.00, 50, 50);
+	CreateDynamicObject(2310, 118.64, 1630.05, 998.74,   0.00, 0.00, 98.00, 50, 50);
+	CreateDynamicObject(1616, 117.01, 1630.40, 1001.20,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3109, 115.53, 1628.05, 999.36,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3109, 113.74, 1603.99, 999.36,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2412, 115.98, 1604.71, 998.30,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2412, 113.82, 1604.70, 998.30,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2412, 113.99, 1627.57, 998.30,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2412, 115.93, 1627.56, 998.30,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1722, 114.86, 1619.55, 998.30,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1722, 114.90, 1621.06, 998.30,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1722, 114.91, 1622.50, 998.30,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1722, 114.83, 1609.55, 998.30,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1722, 114.82, 1608.23, 998.30,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1722, 114.81, 1606.84, 998.30,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1722, 115.14, 1605.10, 998.30,   0.00, 0.00, 302.00, 50, 50);
+	CreateDynamicObject(19313, 113.24, 1616.54, 1004.10,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1499, 113.25, 1616.52, 998.28,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19313, 121.78, 1616.56, 997.41,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1810, 117.61, 1609.72, 998.25,   0.00, 0.00, -69.00, 50, 50);
+	CreateDynamicObject(1810, 117.68, 1608.15, 998.25,   0.00, 0.00, -95.00, 50, 50);
+	CreateDynamicObject(1810, 117.72, 1606.70, 998.25,   0.00, 0.00, -84.00, 50, 50);
+	CreateDynamicObject(1810, 118.20, 1605.34, 998.25,   0.00, 90.00, -114.00, 50, 50);
+	CreateDynamicObject(11353, 146.85, 1616.38, 998.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18980, 116.54, 1626.38, 999.18,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18980, 103.61, 1616.77, 1002.18,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(19313, 113.24, 1616.54, 1004.95,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18980, 116.34, 1610.96, 999.18,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18980, 116.34, 1603.79, 999.18,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2608, 113.47, 1620.80, 998.90,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3109, 121.37, 1619.07, 999.46,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3386, 120.67, 1617.46, 998.10,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.35, 1632.13, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.35, 1625.53, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.36, 1625.53, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.36, 1632.13, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.36, 1625.53, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.36, 1632.13, 1000.02,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(10632, 116.35, 1632.13, 1000.02,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(10632, 116.35, 1625.53, 1000.02,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(1808, 115.84, 1616.08, 998.20,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(18066, 115.99, 1609.44, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 115.99, 1608.02, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 115.99, 1606.60, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 115.99, 1605.18, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 116.43, 1604.99, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 115.99, 1603.76, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 116.43, 1606.41, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 116.43, 1607.82, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 116.43, 1609.24, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18066, 116.43, 1610.66, 999.09,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2894, 118.65, 1628.63, 998.96,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18980, 121.46, 1626.70, 999.18,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16101, 115.92, 1609.71, 999.01,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(16101, 115.93, 1609.65, 999.11,   0.00, 180.00, 254.00, 50, 50);
+	CreateDynamicObject(16101, 116.50, 1610.52, 999.01,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(16101, 116.50, 1605.62, 999.01,   0.00, 90.00, 270.00, 50, 50);
+	CreateObject(10781, 160.50, 1528.78, 992.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(10781, 241.12, 1486.00, 992.01,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3095, 191.57, 1502.55, 997.60,   90.00, 0.00, 90.00);
+	CreateDynamicObject(16775, 191.85, 1501.76, 992.00,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16775, 145.89, 1486.33, 992.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3095, 144.12, 1486.66, 997.60,   90.00, 0.00, 0.00);
+	CreateDynamicObject(18038, -72.33, 1536.04, 1000.30,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14438, -88.84, 1531.54, 1004.01,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2448, -88.59, 1524.70, 998.13,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2446, -89.57, 1524.73, 998.13,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2446, -90.57, 1524.73, 998.13,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2446, -91.57, 1524.73, 998.13,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2446, -92.56, 1524.73, 998.13,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2446, -93.56, 1524.73, 998.13,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2805, -89.58, 1517.49, 1000.00,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2803, -89.96, 1517.92, 998.72,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2543, -93.16, 1519.51, 998.00,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2539, -92.88, 1518.53, 997.08,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(1989, -89.74, 1519.45, 997.88,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2418, -92.59, 1522.92, 998.20,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2451, -87.03, 1521.43, 998.20,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2415, -88.94, 1521.53, 998.21,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2417, -92.82, 1521.95, 998.21,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2718, -88.22, 1520.97, 1000.56,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2446, -86.31, 1521.30, 998.13,   0.00, 0.00, 90.00, 50, 50);
+	CreateObject(18038, -105.78, 1527.26, 1000.47,   0.00, 0.00, 180.00);
+	CreateDynamicObject(11353, -82.41, 1542.97, 997.29,   0.00, 0.00, -90.00, 50, 50);
+	CreateDynamicObject(11353, -118.17, 1543.01, 995.89,   0.00, 0.00, -90.00, 50, 50);
+	CreateDynamicObject(3109, -84.84, 1527.33, 999.48,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3084, -93.16, 1535.76, 1002.54,   0.00, 180.00, 270.00, 50, 50);
+	CreateDynamicObject(2762, -92.63, 1533.66, 998.61,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2762, -88.52, 1533.29, 998.61,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(18057, -88.30, 1542.23, 998.61,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2310, -90.11, 1534.55, 998.73,   0.00, 0.00, 142.00, 50, 50);
+	CreateDynamicObject(2310, -88.86, 1531.96, 998.73,   0.00, 0.00, 258.00, 50, 50);
+	CreateDynamicObject(2310, -86.50, 1534.17, 998.73,   0.00, 0.00, 91.00, 50, 50);
+	CreateDynamicObject(2310, -92.67, 1535.97, 998.73,   0.00, 0.00, 91.00, 50, 50);
+	CreateDynamicObject(2310, -91.35, 1533.26, 998.73,   0.00, 0.00, -33.00, 50, 50);
+	CreateDynamicObject(2310, -89.88, 1541.31, 998.73,   0.00, 0.00, -33.00, 50, 50);
+	CreateDynamicObject(2310, -90.26, 1538.76, 998.73,   0.00, 0.00, 55.00, 50, 50);
+	CreateDynamicObject(2310, -88.94, 1537.15, 998.73,   0.00, 0.00, -11.00, 50, 50);
+	CreateDynamicObject(2310, -92.74, 1537.54, 998.73,   0.00, 0.00, -171.00, 50, 50);
+	CreateDynamicObject(2310, -86.04, 1535.85, 998.73,   0.00, 0.00, 18.00, 50, 50);
+	CreateDynamicObject(2310, -86.77, 1541.83, 998.73,   0.00, 0.00, 4.00, 50, 50);
+	CreateDynamicObject(2310, -88.95, 1539.57, 998.51,   90.00, 0.00, 33.00, 50, 50);
+	CreateDynamicObject(19313, -93.70, 1524.84, 1003.50,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19313, -79.63, 1524.82, 1004.10,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(19302, -85.09, 1524.01, 999.50,   0.00, 0.00, -100.00, 50, 50);
+	CreateDynamicObject(16656, -80.16, 1994.94, 1000.37,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3395, -82.39, 1999.06, 997.35,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3397, -91.49, 2000.68, 997.35,   0.00, 0.00, 180.00, 50, 50);
+	CreateObject(16656, -92.40, 1996.40, 1000.38,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3383, -91.35, 1995.16, 997.15,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(3389, -91.46, 1998.36, 997.35,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3384, -86.22, 1996.57, 998.75,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(3384, -87.71, 1996.43, 998.75,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3384, -87.71, 1995.39, 998.75,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3384, -86.22, 1995.53, 998.75,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(4724, -76.17, 2003.36, 998.11,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(4724, -82.73, 2010.69, 998.11,   0.00, 0.00, -90.00, 50, 50);
+	CreateDynamicObject(2994, -85.62, 1996.97, 997.86,   0.00, 0.00, 25.00, 50, 50);
+	CreateDynamicObject(1997, -83.31, 2003.99, 997.36,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1997, -86.13, 2003.86, 997.36,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1185, -85.55, 2005.16, 997.90,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(1185, -83.89, 2005.14, 997.90,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(1178, -84.20, 2005.09, 998.40,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(1178, -85.87, 2005.11, 998.40,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(1008, -85.50, 2004.99, 998.73,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(1008, -83.80, 2004.99, 998.73,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(14693, -84.24, 2003.44, 997.78,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1806, -84.60, 2003.90, 997.35,   0.00, 0.00, 113.00, 50, 50);
+	CreateDynamicObject(3109, -81.80, 1994.24, 998.61,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2146, -89.42, 2004.10, 997.82,   0.00, 0.00, 110.00, 50, 50);
+	CreateDynamicObject(9958, 2747.46, -2586.63, 800.09,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9958, 2748.17, -2593.06, 800.09,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9958, 2747.45, -2580.26, 800.09,   0.00, 0.00, 90.00, 50, 50);
+	CreateObject(5156, 2767.75, -2579.09, 793.69,   0.00, 0.00, 0.00);
+	CreateDynamicObject(9819, 2732.59, -2584.70, 794.63,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9822, 2733.14, -2585.39, 794.38,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(9583, 2742.12, -2589.14, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2741.93, -2584.08, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2734.51, -2589.15, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2728.76, -2589.15, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2728.60, -2586.50, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3675, 2743.48, -2588.43, 797.50,   180.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(14578, 2740.78, -2585.50, 797.92,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(3753, 2718.01, -2593.39, 800.94,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(3753, 2762.13, -2597.25, 800.94,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2634, 2747.49, -2586.66, 798.34,   270.00, 180.00, 0.00, 50, 50);
+	CreateDynamicObject(1437, 2747.44, -2586.59, 795.00,   20.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2634, 2727.67, -2587.79, 795.28,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(2634, 2752.47, -2585.77, 795.28,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2960, 2737.79, -2586.68, 797.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2960, 2731.99, -2586.55, 797.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2960, 2745.15, -2586.69, 797.29,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2606, 2736.25, -2584.24, 796.28,   20.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2606, 2734.25, -2584.24, 796.28,   20.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9822, 2733.68, -2592.37, 794.38,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9822, 2736.19, -2592.36, 794.38,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2752.25, -2584.11, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2752.31, -2587.28, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(9583, 2752.23, -2589.22, 793.57,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16662, 2739.33, -2577.66, 794.83,   0.00, 0.00, -25.00, 50, 50);
+	CreateDynamicObject(16782, 2727.83, -2585.38, 796.21,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2986, 2732.18, -2589.28, 795.85,   46.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2986, 2737.77, -2589.31, 795.85,   46.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2986, 2741.49, -2589.32, 795.85,   46.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(3787, 2749.99, -2588.84, 794.25,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(964, 2747.37, -2588.50, 793.70,   0.00, 0.00, 30.00, 50, 50);
+	CreateDynamicObject(9822, 2739.35, -2592.41, 794.38,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(1671, 2741.83, -2585.04, 794.13,   0.00, 0.00, -60.00, 50, 50);
+	CreateDynamicObject(1671, 2741.84, -2586.46, 794.13,   0.00, 0.00, -98.00, 50, 50);
+	CreateDynamicObject(1671, 2736.11, -2587.11, 794.13,   0.00, 0.00, -229.00, 50, 50);
+	CreateDynamicObject(14798, 58.67, 2633.13, 1000.97,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(8418, 50.98, 2621.20, 1001.27,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14782, 59.12, 2636.18, 1001.69,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(18062, 59.23, 2637.08, 1003.94,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(18109, 64.35, 2632.80, 1006.94,   0.00, 0.00, 0.00, 50, 50);
+	CreateObject(8418, 72.30, 2622.26, 1001.27,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18064, 54.58, 2638.16, 1001.73,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2358, 62.19, 2635.61, 1001.85,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2358, 62.99, 2635.62, 1001.85,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(2358, 62.61, 2635.61, 1002.07,   0.00, 0.00, 190.00, 50, 50);
+	CreateDynamicObject(14782, 62.36, 2633.23, 1001.69,   0.00, 0.00, 180.00, 50, 50);
+	CreateDynamicObject(14798, 64.85, 2639.86, 1000.95,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(14798, 62.24, 2639.02, 1000.94,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(16101, 116.17, 1605.22, 1000.17,   0.00, 90.00, 90.00, 50, 50);
+	CreateDynamicObject(16101, 116.16, 1605.24, 1000.17,   0.00, 90.00, 270.00, 50, 50);
+	CreateDynamicObject(2949, 2748.36, -2480.45, 1298.85,   0.00, 0.00, 270.00, 50, 50);
+	CreateDynamicObject(1989, 2747.31, -2486.87, 1298.84,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2543, 2748.35, -2486.92, 1298.83,   0.00, 0.00, 0.00, 50, 50);
+	CreateDynamicObject(2539, 2746.54, -2487.77, 1297.84,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2539, 2746.54, -2488.79, 1297.84,   0.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2803, 2748.61, -2490.29, 1299.25,   0.00, 0.00, -142.00, 50, 50);
+	CreateDynamicObject(3055, 1768.01, 1051.10, 1002.97,   90.00, 0.00, 90.00, 50, 50);
+	CreateDynamicObject(2949, 1765.35, 1049.51, 997.90,   0.00, 0.00, 180.00, 50, 50);
+	//New prison exterior, DeMorgan
+
+	CreateDynamicObject(5174, 216.37, 1929.74, 20.59,   0.00, 0.00, 180.00);
+	CreateObject(10610, 206.95, 1936.81, 19.94,   0.00, 0.00, 180.00);
+	CreateDynamicObject(8247, 275.67, 1953.40, 20.40,   0.00, 0.00, 0.00);
+	CreateDynamicObject(4199, 198.43, 1928.83, 15.62,   0.00, 0.00, 270.00);
+	CreateDynamicObject(4199, 209.00, 1928.86, 15.61,   0.00, 0.00, 270.00);
+	CreateDynamicObject(16093, 201.30, 1944.84, 30.43,   0.00, 0.00, 180.00);
+	CreateDynamicObject(16638, 201.23, 1945.81, 28.69,   0.00, 0.00, 180.00);
+	CreateDynamicObject(16095, 216.20, 1946.54, 30.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(4199, 210.78, 1949.06, 15.62,   0.00, 0.00, 270.00);
+	CreateDynamicObject(4199, 191.74, 1949.03, 15.61,   0.00, 0.00, 270.00);
+	CreateDynamicObject(5174, 195.06, 1947.84, 20.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(5174, 195.82, 1942.37, 13.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(5174, 207.75, 1935.62, 13.60,   0.00, 0.00, 180.00);
+	CreateDynamicObject(986, 215.78, 1950.35, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 207.75, 1950.35, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 199.72, 1950.35, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 191.69, 1950.35, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 187.66, 1950.35, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 183.65, 1946.32, 26.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(986, 183.65, 1938.29, 26.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(986, 183.66, 1931.47, 26.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(986, 187.68, 1927.47, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 195.71, 1927.47, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 203.74, 1927.47, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 211.76, 1927.47, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 215.78, 1927.46, 26.13,   0.00, 0.00, 0.00);
+	CreateDynamicObject(986, 219.80, 1931.47, 26.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(986, 219.80, 1939.50, 26.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(986, 219.81, 1946.31, 26.13,   0.00, 0.00, 90.00);
+	CreateDynamicObject(18762, 224.99, 1922.95, 16.61,   0.00, 90.00, 0.00);
+	CreateDynamicObject(19312, 191.20, 1869.81, 21.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1278, 182.91, 1952.41, 29.61,   0.00, 0.00, 135.00);
+	CreateDynamicObject(1278, 213.47, 1978.08, 25.61,   0.00, 0.00, 45.00);
+	CreateDynamicObject(17513, 199.63, 1991.87, 8.69,   0.00, 0.00, 0.00);
+	CreateDynamicObject(745, 212.74, 1973.71, 16.63,   0.00, 0.00, 76.00);
+	CreateDynamicObject(3819, 223.82, 1957.66, 17.62,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1226, 224.11, 1996.33, 20.45,   0.00, 0.00, 280.00);
+	CreateDynamicObject(1368, 213.55, 1988.83, 17.36,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1368, 206.14, 1980.58, 16.86,   136.00, 0.00, 290.00);
+	CreateDynamicObject(1368, 209.66, 1966.12, 17.36,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1368, 195.94, 1966.53, 17.36,   0.00, 0.00, 10.00);
+	CreateDynamicObject(1368, 209.29, 1967.97, 17.36,   0.00, 0.00, 193.00);
+	CreateDynamicObject(1368, 195.79, 1967.96, 17.36,   0.00, 0.00, 178.00);
+	CreateDynamicObject(984, 220.52, 1995.84, 18.31,   0.00, 0.00, 0.00);
+	CreateDynamicObject(11472, 222.11, 2005.41, 14.64,   0.00, 0.00, 90.00);
+	CreateDynamicObject(11472, 227.11, 1987.83, 14.44,   0.00, 0.00, 270.00);
+	CreateDynamicObject(18766, 229.15, 2000.86, 15.09,   0.00, 0.00, 90.00);
+	CreateDynamicObject(18766, 229.14, 1993.44, 15.08,   0.00, 0.00, 90.00);
+	CreateDynamicObject(18766, 220.14, 1992.74, 15.08,   0.00, 0.00, 90.00);
+	CreateDynamicObject(18766, 220.15, 2000.26, 15.09,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1446, 211.49, 1967.09, 17.40,   0.00, 0.00, -1.00);
+	CreateDynamicObject(8856, 203.52, 1966.70, 16.40,   0.00, -5.00, 89.00);
+	CreateDynamicObject(8856, 199.46, 1966.75, 16.39,   0.00, -5.00, 89.00);
+	CreateDynamicObject(1446, 206.82, 1967.18, 17.40,   0.00, 0.00, -1.00);
+	CreateDynamicObject(1446, 191.66, 1967.41, 17.40,   0.00, 0.00, -1.00);
+	CreateDynamicObject(1446, 196.40, 1967.48, 17.37,   -7.00, 0.00, -1.00);
+	CreateDynamicObject(1694, 195.41, 1934.44, 39.07,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1411, 223.15, 1955.33, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 226.40, 1955.30, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 217.86, 1954.24, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 212.58, 1954.25, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 207.28, 1954.24, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 202.00, 1954.27, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 196.73, 1954.28, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 191.48, 1954.32, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 186.15, 1954.33, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 180.55, 1955.26, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 177.39, 1955.23, 24.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1411, 174.53, 1952.39, 24.03,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1411, 174.52, 1949.34, 24.03,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1411, 175.40, 1943.79, 24.03,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1411, 175.39, 1938.53, 24.03,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1411, 229.14, 1952.44, 24.03,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1411, 229.13, 1949.14, 24.03,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1411, 228.24, 1943.84, 24.03,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1411, 228.24, 1938.60, 24.03,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1369, 195.24, 1989.76, 17.26,   0.00, 0.00, -273.00);
+	CreateDynamicObject(5069, 211.09, 1999.60, 17.10,   0.00, 0.00, 180.00);
+	CreateDynamicObject(14840, 219.60, 2010.06, 18.37,   0.00, 0.00, 270.00);
+	CreateDynamicObject(984, 209.99, 1967.19, 17.27,   0.00, 0.00, 89.00);
+	CreateDynamicObject(863, 213.79, 1968.07, 16.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(863, 198.58, 1967.01, 16.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(863, 203.88, 1966.90, 16.65,   0.00, 0.00, -84.00);
+	CreateDynamicObject(862, 203.99, 1966.87, 16.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(862, 211.73, 1966.24, 16.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(863, 190.08, 1990.89, 16.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(849, 198.47, 1966.45, 16.66,   0.00, 0.00, 0.00);
+	CreateDynamicObject(849, 226.67, 1992.67, 16.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(851, 225.50, 1993.35, 16.65,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1442, 223.89, 1995.00, 17.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1442, 209.25, 1984.15, 17.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(850, 223.62, 1999.18, 16.75,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2631, 236.85, 1997.30, 17.64,   0.00, 0.00, 10.00);
+	CreateDynamicObject(2628, 241.00, 2006.80, 17.64,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2629, 237.05, 2000.81, 17.64,   0.00, 0.00, -55.00);
+	CreateDynamicObject(2629, 232.18, 1997.96, 17.64,   0.00, 0.00, 55.00);
+	CreateDynamicObject(3071, 234.40, 1994.67, 17.85,   0.00, 90.00, 0.00);
+	CreateDynamicObject(3071, 235.15, 1994.67, 17.85,   0.00, 90.00, -62.00);
+	CreateDynamicObject(3071, 237.47, 2000.16, 17.85,   0.00, 90.00, -120.00);
+	CreateDynamicObject(745, 239.59, 1963.76, 16.63,   0.00, 0.00, 127.00);
+	CreateDynamicObject(16319, 236.12, 1968.44, 15.92,   6.00, 0.00, 180.00);
+	CreateDynamicObject(3286, 231.09, 1943.62, 21.32,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16305, 230.52, 1947.92, 18.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16317, 231.33, 1939.25, 15.41,   0.00, 0.00, -193.00);
+	CreateDynamicObject(2237, 236.72, 1944.47, 18.27,   0.00, 10.00, 0.00);
+	CreateDynamicObject(2237, 237.35, 1943.85, 18.27,   0.00, 10.00, 98.00);
+	CreateDynamicObject(2237, 235.46, 1944.26, 18.97,   0.00, 5.00, 98.00);
+	CreateDynamicObject(2936, 234.31, 1946.60, 17.68,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2936, 233.14, 1946.57, 18.00,   0.00, 0.00, -62.00);
+	CreateDynamicObject(2936, 237.49, 1944.99, 17.00,   0.00, 0.00, -120.00);
+	CreateDynamicObject(946, 201.32, 1975.56, 18.82,   0.00, 0.00, 0.00);
+	CreateDynamicObject(946, 201.41, 2003.24, 18.82,   0.00, 0.00, 180.00);
+	CreateDynamicObject(12926, 215.59, 1988.24, 16.07,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1432, 223.37, 1969.27, 16.71,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1432, 229.02, 1967.03, 16.71,   0.00, 0.00, 47.00);
+	CreateDynamicObject(1432, 236.93, 1973.17, 16.71,   0.00, 0.00, 47.00);
+	CreateDynamicObject(1432, 234.28, 1989.60, 17.71,   0.00, 0.00, 47.00);
+	CreateDynamicObject(1368, 229.81, 1994.73, 18.33,   0.00, 0.00, 91.00);
+	CreateDynamicObject(1368, 216.64, 1995.85, 18.33,   0.00, 0.00, 70.00);
+	CreateDynamicObject(1368, 224.37, 2007.99, 18.33,   0.00, 0.00, -4.00);
+	CreateDynamicObject(3035, 201.16, 1922.28, 17.39,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3035, 191.91, 1922.32, 17.39,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1439, 198.29, 1922.48, 16.64,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1439, 171.83, 1927.61, 17.24,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1635, 191.47, 1922.69, 20.34,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8879, 244.38, 2016.16, 22.60,   0.00, 0.00, 156.00);
+	CreateDynamicObject(8879, 192.11, 2015.00, 22.60,   0.00, 0.00, 222.00);
+	CreateDynamicObject(8879, 255.34, 1952.84, 22.60,   0.00, 0.00, 91.00);
+	CreateDynamicObject(8878, 241.48, 2010.27, 23.37,   0.00, 0.00, 18.00);
+	CreateDynamicObject(8878, 196.56, 2009.98, 23.37,   0.00, 0.00, 86.00);
+	CreateDynamicObject(8878, 248.68, 1952.75, 23.37,   0.00, 0.00, -45.00);
+	CreateDynamicObject(8151, 221.31, 1970.93, 19.71,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1358, 250.49, 2006.61, 17.83,   0.00, 0.00, 84.00);
+	CreateDynamicObject(746, 244.49, 1991.76, 16.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(747, 251.98, 1987.67, 16.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1358, 245.75, 2006.64, 17.76,   0.00, 0.00, 113.00);
+	CreateDynamicObject(1440, 245.51, 2002.99, 17.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1508, 209.24, 1923.42, 18.96,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3109, 206.02, 1954.20, 19.08,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3279, 194.81, 2023.05, 16.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3279, 257.43, 1972.78, 16.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(11472, 173.02, 1929.26, 15.04,   0.00, 0.00, 0.00);
+	CreateDynamicObject(11472, 174.50, 1929.27, 15.03,   0.00, 0.00, 0.00);
+	CreateDynamicObject(11472, 175.9998, 1929.2739, 15.0300,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3109, 174.98, 1926.08, 19.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(11472, 173.98, 1923.26, 14.31,   0.00, 0.00, 270.00);
+	CreateDynamicObject(11472, 173.61, 1924.76, 14.31,   0.00, 0.00, 270.00);
+	CreateDynamicObject(8674, 172.33, 1929.97, 17.54,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8674, 177.49, 1935.15, 17.54,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19385, 174.99, 1926.80, 19.16,   0.00, 0.00, 0.00);
+	CreateDynamicObject(4199, 210.55, 1852.36, 14.20,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2792, 286.59, 1981.04, 22.71,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2793, 286.39, 2015.19, 22.71,   0.00, 0.00, 270.00);
+	CreateDynamicObject(16770, 369.69, 2579.46, 17.00,   0.00, 0.00, 120.00);
+	CreateDynamicObject(3866, 355.56, 2614.49, 15.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(11443, 354.72, 2616.80, 15.47,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16317, 347.35, 2625.93, 15.47,   0.00, 0.00, 16.00);
+	CreateDynamicObject(4100, 369.16, 2573.75, 16.43,   0.00, 0.00, -5.00);
+	CreateDynamicObject(4100, 380.43, 2581.60, 16.43,   0.00, 0.00, -5.00);
+	CreateDynamicObject(16317, 345.06, 2606.56, 14.00,   0.00, 0.00, 16.00);
+	CreateDynamicObject(3025, 356.14, 2607.69, 18.48,   0.00, 0.00, 25.00);
+	CreateDynamicObject(1588, 356.14, 2607.68, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1589, 356.14, 2607.68, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1590, 356.14, 2607.68, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1591, 356.14, 2607.68, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1592, 356.14, 2607.68, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(3025, 359.22, 2611.44, 18.48,   0.00, 0.00, 25.00);
+	CreateDynamicObject(1588, 359.20, 2611.44, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1589, 359.20, 2611.44, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1590, 359.20, 2611.44, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1591, 359.20, 2611.44, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1592, 359.20, 2611.44, 16.91,   0.00, 0.00, 15.00);
+	CreateDynamicObject(3025, 353.65, 2619.95, 19.98,   0.00, 0.00, 25.00);
+	CreateDynamicObject(1588, 353.63, 2619.99, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1589, 353.63, 2619.99, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1590, 353.63, 2619.99, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1591, 353.63, 2619.99, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1592, 353.63, 2619.99, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(3025, 348.06, 2616.96, 19.98,   0.00, 0.00, 25.00);
+	CreateDynamicObject(1588, 348.03, 2617.00, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1589, 348.03, 2617.00, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1590, 348.03, 2617.00, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1591, 348.03, 2617.00, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(1592, 348.03, 2617.00, 18.41,   0.00, 0.00, 15.00);
+	CreateDynamicObject(3025, 349.39, 2605.29, 19.48,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1588, 349.39, 2605.29, 17.91,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1589, 349.39, 2605.29, 17.91,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1590, 349.39, 2605.29, 17.91,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1591, 349.39, 2605.29, 17.91,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1592, 349.39, 2605.29, 17.91,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1585, 349.24, 2605.47, 17.07,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3108, 355.18, 2502.16, 15.56,   0.00, 0.00, 0.00);
+	CreateDynamicObject(5174, 215.61, 1929.75, 20.60,   0.00, 0.00, 180.00);
+	CreateDynamicObject(18553, 226.70, 1872.51, 13.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3109, 263.76, 1859.02, 9.00,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3109, 268.09, 1852.29, 9.00,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3550, 191.97, 2010.70, 19.17,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1278, 252.57, 1930.78, 13.61,   0.00, 0.00, 135.00);
+	CreateDynamicObject(8210, 188.62, 1982.34, 18.10,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1278, 188.86, 2010.16, 25.61,   0.00, 0.00, -76.00);
+	CreateDynamicObject(18762, 228.59, 1925.87, 16.61,   0.00, 90.00, 90.00);
+	CreateDynamicObject(18762, 175.13, 1951.18, 16.99,   0.00, 90.00, 90.00);
+	CreateDynamicObject(2921, 190.84, 1950.74, 28.51,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2921, 213.41, 1978.12, 28.51,   0.00, 0.00, 98.00);
+	CreateDynamicObject(2921, 255.85, 1974.27, 28.51,   0.00, 0.00, 62.00);
+	CreateDynamicObject(2921, 220.56, 1922.62, 23.51,   0.00, 0.00, 62.00);
+	CreateDynamicObject(2921, 226.04, 1873.89, 15.51,   0.00, 0.00, 76.00);
+	CreateDynamicObject(2921, 160.44, 1934.49, 31.51,   0.00, 0.00, 4.00);
+	CreateDynamicObject(2921, 265.65, 1893.90, 31.51,   0.00, 0.00, 76.00);
+	CreateDynamicObject(2921, 263.61, 1809.10, 30.11,   0.00, 0.00, 229.00);
+
+	return 1;
+}
+stock loadInteriorObjects()
+{
+	//SF Naval Submarines
+	CreateDynamicObject(9958, -1396.73792, 426.79895, 4.48616,   0.00000, 0.00000, -269.28030); //submarine
+	CreateDynamicObject(9958, -1397.58215, 390.58801, 4.48616,   0.00000, 0.00000, -270.00034); //submarine
+	//Hitman HQ (June 2014, Calvin Catt)
+	CreateObject(5679, 1410.17517, -1333.37390, 900.03601,   0.00000, 0.00000, 0.00000);
+	CreateObject(4601, 1463.03137, -1406.39197, 785.34991,   0.00000, 0.00000, 0.00000);
+	CreateObject(4601, 1463.03137, -1366.40405, 785.32990,   0.00000, 0.00000, 0.00000);
+	CreateObject(4601, 1463.03137, -1326.41797, 785.32990,   0.00000, 0.00000, 0.00000);
+	CreateObject(4601, 1463.03137, -1286.20203, 785.32990,   0.11800, 0.00000, 0.00000);
+	CreateObject(4601, 1463.30884, -1239.21960, 785.55988,   5.64400, 0.00000, 0.00000);
+	CreateObject(4601, 1463.02930, -1446.30994, 785.34991,   0.04400, 0.00000, 0.00000);
+	CreateObject(4601, 1463.02930, -1486.29785, 785.34991,   0.04400, 0.00000, 0.00000);
+	CreateObject(4601, 1460.22888, -1588.32471, 917.84735,   -90.00000, 0.00000, 358.76950);
+	CreateObject(4601, 1464.92493, -1118.77466, 895.34418,   90.00000, 0.00000, 358.76950);
+	CreateObject(5679, 1411.77417, -1502.42029, 900.03400,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(3294, 1410.87817, -1476.92041, 898.34210,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3294, 1409.79224, -1227.91675, 900.34210,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3294, 298.18234, 1821.62866, 7.47733,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3294, 276.96243, 1821.63904, 7.47730,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3294, 246.94696, 1841.75525, 7.40570,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3294, 255.99239, 1835.57031, 3.70698,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2063, 245.18120, 1797.18970, 7.31240,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2063, 251.68040, 1805.36133, 7.31240,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2063, 245.18040, 1805.36133, 7.31240,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2063, 241.18040, 1805.36133, 7.31240,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(358, 250.76500, 1805.29773, 8.15910,   -90.00000, 0.00000, 0.53200);
+	CreateDynamicObject(358, 251.88550, 1805.32202, 8.14910,   -90.00000, 0.00000, 0.53200);
+	CreateDynamicObject(358, 251.84270, 1805.28516, 7.75790,   -90.00000, 0.00000, 0.53200);
+	CreateDynamicObject(358, 250.74289, 1805.27905, 7.75790,   -90.00000, 0.00000, 0.53200);
+	CreateDynamicObject(358, 251.84270, 1805.28516, 7.30390,   -90.95200, 0.00000, 0.53200);
+	CreateDynamicObject(358, 250.72040, 1805.24841, 6.83590,   -90.95200, 0.00000, 0.53200);
+	CreateDynamicObject(358, 250.72040, 1805.24841, 7.30590,   -90.95200, 0.00000, 0.53200);
+	CreateDynamicObject(358, 251.81999, 1805.21240, 6.83590,   -90.95200, 0.00000, 0.53200);
+	CreateDynamicObject(356, 244.42125, 1805.32959, 8.15460,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 245.36304, 1805.31396, 8.15460,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 245.36301, 1805.31396, 7.73460,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 244.42120, 1805.32959, 7.73460,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 245.36301, 1805.31396, 7.28660,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 244.42120, 1805.32959, 7.28660,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 245.36301, 1805.31396, 6.81060,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(356, 244.42120, 1805.32959, 6.81060,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 240.31877, 1805.27686, 8.17100,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 241.43880, 1805.27686, 8.17100,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 241.45917, 1805.31665, 7.73100,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 240.31880, 1805.27686, 7.73100,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 241.45920, 1805.31665, 7.31100,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 240.31880, 1805.27686, 7.33200,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 241.45920, 1805.31665, 6.82800,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 240.31880, 1805.27686, 6.82800,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2319, 247.00891, 1796.41516, 6.89586,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2319, 249.50890, 1796.41516, 6.89590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2319, 252.00890, 1796.41516, 6.89590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2055, 254.22211, 1798.10193, 8.08090,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3025, 252.60657, 1787.63635, 7.85826,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 250.60660, 1787.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 248.60660, 1787.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 249.60660, 1785.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 251.60660, 1785.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 254.10660, 1787.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 247.10660, 1787.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 248.10629, 1782.65637, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 253.60660, 1782.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3025, 250.60660, 1782.63635, 7.85830,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2049, 250.61357, 1787.73242, 7.41358,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2049, 248.61360, 1787.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2049, 252.61360, 1787.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2049, 254.11360, 1787.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2051, 251.61360, 1785.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2051, 249.61360, 1785.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2051, 250.61360, 1782.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2051, 248.11559, 1782.77246, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2051, 253.61360, 1782.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2049, 247.11360, 1787.73242, 7.41360,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(19424, 247.30161, 1796.60657, 7.40560,   0.00000, 0.00000, 135.92000);
+	CreateDynamicObject(19423, 246.98219, 1796.65088, 7.40560,   0.00000, 0.00000, 166.88000);
+	CreateDynamicObject(19424, 249.64081, 1796.57092, 7.40560,   0.00000, 0.00000, 135.98000);
+	CreateDynamicObject(19422, 249.84950, 1796.69092, 7.40560,   0.00000, 0.00000, 51.20000);
+	CreateDynamicObject(19422, 251.86250, 1796.56128, 7.40560,   0.00000, 0.00000, 197.53990);
+	CreateDynamicObject(19421, 252.17270, 1796.72339, 7.40560,   0.00000, 0.00000, 164.35992);
+	CreateDynamicObject(356, 253.56821, 1796.66516, 7.44190,   -90.00000, 0.00000, 180.00000);
+	CreateDynamicObject(356, 250.97935, 1796.57983, 7.44190,   -90.00000, 0.00000, 180.00000);
+	CreateDynamicObject(356, 248.45473, 1796.63220, 7.44190,   -90.00000, 0.00000, 180.00000);
+	CreateDynamicObject(3014, 253.76424, 1798.68005, 6.68681,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3014, 253.44861, 1797.64075, 6.68681,   0.00000, 0.00000, -28.44000);
+	CreateDynamicObject(3014, 253.86122, 1799.63806, 6.68681,   0.00000, 0.00000, -19.80000);
+	CreateDynamicObject(3014, 253.32814, 1804.59875, 6.68681,   0.00000, 0.00000, 13.20000);
+	CreateDynamicObject(3014, 249.58536, 1805.04224, 6.68681,   0.00000, 0.00000, 13.20000);
+	CreateDynamicObject(348, 250.06180, 1796.54980, 7.42900,   -90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(348, 252.63057, 1796.70007, 7.42900,   -90.00000, 0.00000, -134.10004);
+	CreateDynamicObject(348, 247.53537, 1796.51355, 7.42900,   -90.00000, 0.00000, -326.81998);
+	CreateDynamicObject(342, 244.54919, 1797.16650, 8.08750,   90.00000, -69.23300, 0.00000);
+	CreateDynamicObject(342, 245.80682, 1797.23218, 8.08750,   90.00000, -69.23300, 0.00000);
+	CreateDynamicObject(342, 245.19521, 1797.21387, 8.08750,   90.00000, -69.23300, 0.00000);
+	CreateDynamicObject(348, 244.34900, 1797.10779, 7.72100,   -90.00000, 0.00000, -326.82001);
+	CreateDynamicObject(348, 245.04739, 1797.12292, 7.72300,   -90.00000, 0.00000, -326.82001);
+	CreateDynamicObject(348, 245.81570, 1797.08240, 7.73300,   -90.00000, 0.00000, -326.82001);
+	CreateDynamicObject(357, 245.37607, 1797.32458, 7.29350,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(357, 244.33325, 1797.27637, 7.29350,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(355, 244.36980, 1797.22742, 6.80370,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(355, 245.48279, 1797.25134, 6.80370,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3015, 242.65692, 1798.46631, 6.50040,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3015, 242.78627, 1799.12744, 6.50040,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3015, 242.01219, 1798.72729, 6.50040,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3577, 240.95711, 1800.51587, 6.31690,   0.00000, 0.00000, -43.80000);
+	CreateDynamicObject(3015, 243.26537, 1805.08167, 6.50040,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19515, 242.68156, 1797.67456, 6.63880,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(19515, 243.41095, 1797.27393, 6.63880,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(19515, 246.84792, 1797.18115, 6.63880,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(19515, 249.45258, 1797.20752, 6.63880,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(19515, 252.14508, 1797.16589, 6.63880,   0.00000, -90.00000, 0.00000);
+	//psyche ward
+	CreateDynamicObject(17946, 260.53, 1989.20, 1020.70,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3971, 258.54, 1985.97, 1020.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14408, 253.42, 1981.78, 1020.73,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14408, 253.45, 1998.27, 1020.73,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14445, 254.51, 1982.83, 1019.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14445, 254.51, 1984.33, 1019.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1738, 251.34, 1987.01, 1018.21,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2208, 240.13, 1986.51, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2199, 245.54, 1984.58, 1017.73,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2604, 241.46, 1989.37, 1018.53,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2187, 239.13, 1990.17, 1017.74,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1795, 258.74, 1984.28, 1017.74,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1808, 243.12, 1995.35, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1828, 259.50, 1992.55, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2186, 247.73, 1984.95, 1017.72,   0.00, 0.00, 180.00);
+	CreateDynamicObject(14532, 259.33, 1985.02, 1018.71,   0.00, 0.00, 47.00);
+	CreateDynamicObject(1705, 243.77, 1995.04, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1705, 244.93, 1995.04, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1705, 241.57, 1995.02, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1705, 240.41, 1995.02, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2184, 245.72, 1989.31, 1017.75,   0.00, 0.00, 161.00);
+	CreateDynamicObject(1806, 239.09, 1987.49, 1017.74,   0.00, 0.00, 229.00);
+	CreateDynamicObject(1806, 242.49, 1987.93, 1017.74,   0.00, 0.00, 331.00);
+	CreateDynamicObject(1806, 240.69, 1988.86, 1017.74,   0.00, 0.00, 360.00);
+	CreateDynamicObject(1806, 244.46, 1987.54, 1017.74,   0.00, 0.00, 18.00);
+	CreateDynamicObject(2314, 246.55, 1995.10, 1017.75,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14408, 249.32, 1997.10, 1020.73,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14408, 251.65, 1991.09, 1020.73,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2723, 257.18, 1986.92, 1018.04,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1795, 262.41, 1991.76, 1017.74,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2723, 260.81, 1991.66, 1018.04,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14867, 240.20, 1984.34, 1019.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2777, 256.18, 1994.54, 1018.23,   0.00, 0.00, 62.00);
+	CreateDynamicObject(2777, 257.03, 1992.41, 1018.23,   0.00, 0.00, -207.00);
+	CreateDynamicObject(2777, 258.70, 1989.65, 1018.23,   0.00, 0.00, -287.00);
+	CreateDynamicObject(2777, 258.87, 1987.76, 1018.23,   0.00, 0.00, -236.00);
+	CreateDynamicObject(2166, 258.82, 1993.76, 1017.76,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2166, 260.49, 1988.33, 1017.76,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1806, 259.59, 1994.88, 1017.74,   0.00, 0.00, 118.00);
+	CreateDynamicObject(1806, 262.09, 1987.87, 1017.74,   0.00, 0.00, 40.00);
+	CreateDynamicObject(19465, 255.06, 1993.61, 1020.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19465, 255.05, 1987.67, 1020.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19464, 258.02, 1990.71, 1020.25,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19464, 263.95, 1990.72, 1020.25,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19464, 263.16, 1992.74, 1020.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19464, 263.16, 1986.80, 1020.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19464, 260.10, 1984.41, 1020.25,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19464, 254.17, 1984.41, 1020.25,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1502, 255.05, 1992.84, 1017.74,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1502, 255.07, 1986.89, 1017.74,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2257, 254.89, 1990.56, 1020.01,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2684, 263.01, 1992.88, 1019.57,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2684, 263.01, 1988.20, 1019.57,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2280, 262.55, 1994.08, 1019.41,   0.00, 0.00, 270.00);
+	CreateDynamicObject(14532, 262.28, 1991.64, 1018.71,   0.00, 0.00, 47.00);
+	CreateDynamicObject(2277, 262.54, 1988.88, 1019.09,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2066, 261.82, 1984.99, 1017.74,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2066, 261.24, 1984.99, 1017.74,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2066, 255.48, 1990.47, 1017.74,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2066, 248.94, 1986.55, 1017.74,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2066, 248.58, 1985.96, 1017.74,   0.00, 0.00, 270.00);
+	CreateDynamicObject(14455, 260.84, 1990.56, 1019.28,   0.00, 0.00, 180.00);
+	CreateDynamicObject(14455, 255.85, 1990.99, 1019.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3109, 237.86, 1994.44, 1018.93,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2894, 257.77, 1994.72, 1018.55,   0.00, 0.00, 80.00);
+	CreateDynamicObject(2894, 245.10, 1989.25, 1018.52,   0.00, 0.00, 135.00);
+	//mat pickup 1 water
+	CreateDynamicObject(10444, 1408.88794, -1315.26917, 7.64780,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(10444, 1408.88794, -1345.62024, 7.64780,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(10444, 1408.88794, -1375.97522, 7.64780,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(10444, 1408.88794, -1406.33032, 7.64780,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(9831, 1412.32458, -1303.24463, 8.36786,   0.00000, 0.00000, 191.28003);
+	CreateDynamicObject(9831, 1407.25427, -1303.55200, 8.36786,   0.00000, 0.00000, 191.28003);
+	CreateDynamicObject(9833, 1410.52356, -1300.33899, 7.07312,   0.00000, -180.00000, -17.64000);
+	//tiki store sign
+	CreateDynamicObject(2599, 2348.74390, -1458.50610, 23.48579,   0.00000, 0.00000, -1.50001);
+	//license sign
+	CreateDynamicObject(2599, 1289.89697, -1844.42358, 13.02007,   0.00000, 0.00000, 233.60361);
+	//taxi HQ
+	CreateDynamicObject(3602, 1777.22864, -1928.42883, 5.59230,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19457, 1784.77307, -1910.11511, 16.88750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1781.49512, -1910.11511, 16.88550,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1778.07715, -1910.11511, 16.88150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1774.69531, -1910.11511, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1771.19824, -1919.74109, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1774.69531, -1919.74109, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1778.07715, -1919.74109, 16.88150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1781.49512, -1919.74109, 16.88550,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1784.77307, -1919.74109, 16.88750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1774.69531, -1929.36511, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1778.07715, -1929.36511, 16.88150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1781.33716, -1928.81213, 16.88350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1785.27307, -1928.81213, 16.88550,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1774.69531, -1930.63623, 16.87750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1778.07507, -1930.63416, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(8615, 1770.40613, -1931.25598, 15.14350,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(19457, 1771.19824, -1910.11511, 16.88150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1771.19824, -1910.11511, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19325, 1769.43787, -1921.55774, 18.43726,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19325, 1786.57886, -1921.41797, 18.67030,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1491, 1782.13220, -1926.39954, 16.92590,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(19390, 1782.15698, -1927.17920, 18.68490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19361, 1777.93188, -1919.74097, 18.68490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19361, 1783.73853, -1925.75366, 18.68490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19390, 1781.26563, -1924.64307, 18.68490,   0.00000, 0.00000, 45.00000);
+	CreateDynamicObject(19361, 1779.03918, -1922.41553, 18.68490,   0.00000, 0.00000, 45.00000);
+	CreateDynamicObject(19361, 1777.92993, -1918.80298, 18.68490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2207, 1782.03857, -1919.54053, 16.97430,   0.00000, 0.00000, -45.00000);
+	CreateDynamicObject(1714, 1783.93237, -1918.63379, 16.97410,   0.00000, 0.00000, -32.16000);
+	CreateDynamicObject(2190, 1782.17297, -1919.07434, 17.74740,   0.00000, 0.00000, 85.00000);
+	CreateDynamicObject(2894, 1783.27002, -1920.32385, 17.74740,   0.00000, 0.00000, -23.48000);
+	CreateDynamicObject(1671, 1782.89551, -1921.71899, 17.40990,   0.00000, 0.00000, 206.54800);
+	CreateDynamicObject(2161, 1778.03259, -1920.78064, 16.97030,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2163, 1778.06689, -1919.44104, 16.96700,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(630, 1778.50635, -1917.83411, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1808, 1782.25305, -1925.18835, 16.97650,   0.00000, 0.00000, 134.14799);
+	CreateDynamicObject(2167, 1778.95825, -1922.14978, 16.97480,   0.00000, 0.00000, 136.00000);
+	CreateDynamicObject(1706, 1784.60681, -1925.16760, 16.97740,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1814, 1783.67346, -1923.73840, 16.97750,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2852, 1784.21753, -1923.20691, 17.48260,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2596, 1780.44263, -1923.26440, 19.32370,   0.00000, 0.00000, 136.00000);
+	CreateDynamicObject(630, 1785.19849, -1917.85681, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2254, 1783.79163, -1925.63757, 18.92790,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19361, 1782.15735, -1930.95593, 18.68490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19361, 1782.85681, -1933.99561, 18.68490,   0.00000, 0.00000, 25.46100);
+	CreateDynamicObject(19361, 1788.05322, -1935.37183, 18.68490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2008, 1789.02124, -1928.39099, 16.97470,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1806, 1788.32043, -1927.17383, 16.97740,   0.00000, 0.00000, 153.65109);
+	CreateDynamicObject(1806, 1788.71472, -1933.04846, 16.97740,   0.00000, 0.00000, 33.66597);
+	CreateDynamicObject(2161, 1785.97986, -1935.26501, 16.97450,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2162, 1782.85754, -1933.68005, 16.97520,   0.00000, 0.00000, 117.96600);
+	CreateDynamicObject(2167, 1784.07996, -1935.27075, 16.97500,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2002, 1784.85938, -1934.77515, 16.97510,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(630, 1783.67358, -1934.43384, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2276, 1784.94556, -1926.35706, 19.09170,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19521, 1782.61133, -1932.92688, 17.94890,   -13.08500, -90.00000, 180.00000);
+	CreateDynamicObject(2737, 1782.29651, -1929.74524, 18.83150,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(630, 1785.64453, -1925.08276, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(630, 1782.60400, -1926.20776, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(630, 1777.36548, -1919.85474, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2161, 1772.15808, -1917.34814, 16.97120,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2165, 1779.59802, -1930.10767, 16.96770,   0.00000, 0.00000, 67.64402);
+	CreateDynamicObject(2166, 1776.36194, -1917.79980, 16.96780,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1806, 1781.30420, -1929.70605, 16.97740,   0.00000, 0.00000, 101.33100);
+	CreateDynamicObject(1671, 1778.20337, -1929.90869, 17.40940,   0.00000, 0.00000, -231.93999);
+	CreateDynamicObject(2199, 1778.27124, -1921.90845, 16.97250,   0.00000, 0.00000, -45.50000);
+	CreateDynamicObject(1703, 1776.11133, -1934.76196, 16.96680,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1703, 1770.23669, -1921.36963, 16.96680,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1703, 1779.66150, -1934.79602, 16.96680,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(630, 1770.11926, -1923.80945, 17.95490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1819, 1769.74902, -1923.02808, 16.96600,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2855, 1770.33264, -1922.66479, 17.45920,   0.00000, 0.00000, 9.74400);
+	CreateDynamicObject(948, 1776.89270, -1934.88367, 16.96601,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1491, 1780.70056, -1924.10876, 16.92590,   0.00000, 0.00000, -45.44400);
+	CreateDynamicObject(2596, 1779.23499, -1923.17468, 19.50800,   0.00000, 0.00000, -45.44400);
+	CreateDynamicObject(10282, 1773.46338, -1900.28772, 13.57620,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14782, 1782.65100, -1935.03418, 13.58610,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(14826, 1771.74548, -1912.62927, 13.27720,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3440, 1773.35156, -1914.26501, 11.58310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3440, 1772.64343, -1913.99731, 11.13510,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3440, 1772.40454, -1910.78552, 11.49510,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3440, 1772.53906, -1911.81665, 11.13510,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1085, 1770.16333, -1915.37585, 13.08590,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1085, 1771.89087, -1912.34985, 13.08590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1085, 1771.89087, -1915.37585, 13.08590,   0.00000, 0.00000, 10.00000);
+	CreateDynamicObject(1085, 1770.16333, -1912.34985, 13.08590,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1431, 1770.91443, -1914.95569, 13.31930,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1431, 1771.13135, -1914.32654, 13.31930,   90.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1431, 1771.10461, -1914.97131, 13.31930,   90.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1431, 1770.66724, -1909.80237, 13.08530,   0.00000, 0.00000, -87.30900);
+	CreateDynamicObject(3498, 1775.36169, -1895.64368, 9.57590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1431, 1771.10168, -1915.54749, 13.08530,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3576, 1783.36145, -1917.65930, 12.58942,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2607, 1774.27332, -1915.06580, 12.95020,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18633, 1774.97778, -1915.12927, 13.37260,   1.79600, 90.00000, -10.00000);
+	CreateDynamicObject(18635, 1773.67444, -1915.18201, 13.34520,   90.00000, 90.00000, -20.86200);
+	CreateDynamicObject(18644, 1773.92700, -1914.83215, 13.36710,   -19.66000, 89.40800, 0.59200);
+	CreateDynamicObject(19308, 1772.19629, -1895.28516, 13.56720,   0.00000, 0.00000, 103.22400);
+	CreateDynamicObject(2922, 1785.49487, -1910.68640, 14.11670,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2922, 1785.53455, -1909.64746, 14.11670,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(13028, 1785.17236, -1921.43323, 16.20570,   0.00000, 93.00000, 0.00000);
+	CreateDynamicObject(13028, 1785.13672, -1913.97375, 16.20570,   0.00000, 93.00000, 0.00000);
+	CreateDynamicObject(1710, 1777.21130, -1934.92554, 12.59050,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1712, 1771.99451, -1932.43457, 12.58990,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2180, 1772.10791, -1929.63623, 12.59090,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2500, 1771.89392, -1929.52075, 13.37510,   0.00000, 0.00000, 91.96000);
+	CreateDynamicObject(2149, 1772.08179, -1928.61060, 13.54500,   0.00000, 0.00000, 85.83500);
+	CreateDynamicObject(2524, 1770.09192, -1906.55530, 12.58740,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1840, 1786.01013, -1925.25366, 16.14810,   0.00000, 180.00000, 180.00000);
+	CreateDynamicObject(2690, 1785.44336, -1910.17383, 12.93100,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2063, 1781.16650, -1895.31042, 13.48540,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2567, 1770.64526, -1920.98450, 14.46960,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3761, 1780.89771, -1902.71826, 14.57760,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2688, 1785.50928, -1910.16663, 14.00450,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(19328, 1769.52222, -1920.70276, 14.46830,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19327, 1774.36157, -1935.38208, 15.68270,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19310, 1781.31494, -1895.33313, 14.40140,   0.00000, 0.00000, 103.73998);
+	CreateDynamicObject(2986, 1786.46106, -1925.38147, 14.95000,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1738, 1769.71362, -1907.77771, 13.23850,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1738, 1778.59155, -1935.22351, 13.23850,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1224, 1797.51221, -1940.54443, 13.05194,   0.00000, 0.00000, 22.04000);
+	CreateDynamicObject(930, 1781.79492, -1917.59949, 13.05240,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(18766, 1788.65137, -1909.87903, 11.47980,   105.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3035, 1792.34839, -1940.83081, 13.12570,   0.00000, 0.00000, 177.83998);
+	CreateDynamicObject(966, 1810.10156, -1885.15698, 12.40630,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1810.31946, -1881.39160, 13.07216,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1811.32947, -1897.95728, 13.07216,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18285, 1779.15601, -1886.93665, 12.40062,   0.00000, 0.00000, 99.89998);
+	CreateDynamicObject(18285, 1807.94116, -1913.64758, 12.41860,   0.00000, -0.20000, -63.90000);
+	CreateDynamicObject(3035, 1795.21338, -1940.86633, 13.25209,   0.00000, 0.00000, -181.56015);
+	CreateDynamicObject(4100, 1774.78345, -1941.99658, 14.18802,   0.00000, 0.00000, -39.06001);
+	CreateDynamicObject(4100, 1758.29688, -1942.31555, 14.18800,   0.00000, 0.00000, -218.33987);
+	CreateDynamicObject(19459, 1780.87134, -1917.22510, 18.70430,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2774, 1790.34448, -1935.22095, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1786.86389, -1925.22583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1786.36389, -1917.72583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1786.36389, -1910.22583, 3.94270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1786.36389, -1902.72583, 3.94270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1786.36389, -1895.22583, 3.94270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(13028, 1785.13672, -1906.47375, 16.20570,   0.00000, 93.00000, 0.00000);
+	CreateDynamicObject(13028, 1785.13672, -1898.97375, 16.20570,   0.00000, 93.00000, 0.00000);
+	CreateDynamicObject(18766, 1788.65137, -1900.12402, 11.48080,   105.00000, 0.00000, 90.00000);
+	CreateDynamicObject(18766, 1788.65137, -1919.62402, 11.48080,   105.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3602, 1777.22864, -1913.42883, 5.59030,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3602, 1777.22864, -1902.92883, 5.59230,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2774, 1790.36389, -1925.22583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(19462, 1774.69824, -1930.63416, 16.91350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1778.19824, -1930.63416, 16.91350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1781.69824, -1930.63416, 16.91350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1785.19824, -1930.63416, 16.91350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1788.69824, -1930.63416, 16.91350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1771.19824, -1922.13416, 16.91150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1774.69910, -1922.15417, 16.91150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1778.19824, -1922.13416, 16.91150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1781.69824, -1922.13416, 16.91150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1785.19824, -1922.13416, 16.91150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19361, 1785.05322, -1935.37378, 18.68290,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19361, 1781.46680, -1933.99561, 18.68490,   0.00000, 0.00000, -25.46100);
+	CreateDynamicObject(19361, 1782.15527, -1930.38794, 18.68490,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19361, 1786.81848, -1925.75574, 18.68490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19361, 1788.23853, -1925.75366, 18.68490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2008, 1787.93787, -1931.77881, 16.97470,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19462, 1773.19617, -1930.63220, 16.91550,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(2774, 1769.36389, -1917.72583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1769.36389, -1925.22583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1769.36389, -1935.22583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1786.86389, -1935.22583, 7.44270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(19457, 1784.77307, -1900.61511, 16.88550,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(2774, 1769.36389, -1910.22583, 3.94270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1769.36389, -1902.72583, 3.94270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(2774, 1769.36389, -1895.22583, 3.94270,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(19325, 1787.17175, -1933.49512, 13.53310,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19325, 1787.17175, -1927.06812, 13.53310,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19435, 1788.26782, -1930.21497, 12.42280,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(19435, 1786.69580, -1930.21497, 12.42480,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(19466, 1787.18176, -1930.27319, 15.84980,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1569, 1787.21289, -1931.41162, 12.50830,   0.00000, 0.00000, -20.76000);
+	CreateDynamicObject(1569, 1787.20117, -1929.10266, 12.50830,   0.00000, 0.00000, 23.16002);
+	CreateDynamicObject(16101, 1787.16553, -1931.41760, 6.04500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(16101, 1787.16553, -1929.12964, 6.04500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19325, 1790.48718, -1931.21960, 18.80630,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19367, 1788.10950, -1935.45288, 18.55210,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19367, 1788.75269, -1925.53479, 18.62010,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19457, 1788.68945, -1930.38464, 16.88750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1771.19824, -1922.15515, 16.87750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1773.02930, -1930.63416, 16.87950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 1773.02222, -1930.63220, 16.91750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19447, 1782.07568, -1894.89282, 14.08925,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19453, 1781.05444, -1917.25500, 18.68740,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19361, 1771.45459, -1917.25391, 18.68690,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19390, 1774.63867, -1917.25525, 18.68810,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19457, 1781.27307, -1900.61511, 16.88750,   0.00000, 90.00000, 180.00000);
+	CreateDynamicObject(19457, 1777.77307, -1900.61511, 16.88550,   0.00000, 90.00000, 180.00000);
+	CreateDynamicObject(19457, 1774.27307, -1900.61511, 16.88550,   0.00000, 90.00000, 180.00000);
+	CreateDynamicObject(19457, 1771.19910, -1900.61511, 16.88750,   0.00000, 90.00000, 180.00000);
+	CreateDynamicObject(19428, 1786.70203, -1918.39490, 14.95881,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19447, 1773.57568, -1894.89075, 14.08930,   0.00000, 0.00000, 90.00000);
+	new yellow1 = CreateDynamicObject(18762, 1786.61121, -1896.94434, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow1, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow2 = CreateDynamicObject(18762, 1786.61121, -1901.94434, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow2, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow3 = CreateDynamicObject(18762, 1786.61121, -1906.94434, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow3, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow4 = CreateDynamicObject(18762, 1786.61121, -1911.94434, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow4, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow5 = CreateDynamicObject(18762, 1786.60925, -1916.94434, 17.10480,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow5, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow6 = CreateDynamicObject(18762, 1786.60925, -1921.94434, 17.10480,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow6, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow7 = CreateDynamicObject(18762, 1783.67004, -1894.94653, 17.10480,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow7, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow8 = CreateDynamicObject(18762, 1778.67004, -1894.94653, 17.10480,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow8, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow9 = CreateDynamicObject(18762, 1773.67004, -1894.94653, 17.10480,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow9, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow10 = CreateDynamicObject(18762, 1771.13000, -1894.94446, 17.10280,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow10, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow11 = CreateDynamicObject(18762, 1769.11121, -1896.94629, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow11, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow12 = CreateDynamicObject(18762, 1769.11121, -1901.94629, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow12, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow13 = CreateDynamicObject(18762, 1769.11121, -1906.94629, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow13, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow14 = CreateDynamicObject(18762, 1769.11121, -1911.94629, 17.10680,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow14, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow15 = CreateDynamicObject(18762, 1769.11316, -1915.44629, 17.10480,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow15, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow16 = CreateDynamicObject(18762, 1790.56091, -1926.96985, 20.75580,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow16, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow17 = CreateDynamicObject(18762, 1788.55981, -1924.96814, 20.75380,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow17, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow18 = CreateDynamicObject(18762, 1790.56091, -1933.46985, 20.75580,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow18, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow19 = CreateDynamicObject(18762, 1790.55896, -1930.46985, 20.75380,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow19, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow20 = CreateDynamicObject(18762, 1788.55725, -1935.45068, 20.75380,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow20, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow21 = CreateDynamicObject(18762, 1786.55933, -1921.97632, 20.75230,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow21, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow22 = CreateDynamicObject(18762, 1786.55725, -1919.41431, 20.75030,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow22, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow23 = CreateDynamicObject(18762, 1784.15601, -1917.41650, 20.75380,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow23, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow24 = CreateDynamicObject(18762, 1782.38916, -1917.41785, 20.75180,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow24, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow25 = CreateDynamicObject(18762, 1769.05261, -1933.46973, 20.74830,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow25, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow26 = CreateDynamicObject(18762, 1783.55725, -1935.45068, 20.75380,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow26, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow27 = CreateDynamicObject(18762, 1778.55725, -1935.45068, 20.75380,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow27, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow28 = CreateDynamicObject(18762, 1773.55725, -1935.45068, 20.75380,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow28, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow29 = CreateDynamicObject(18762, 1771.05530, -1935.45276, 20.75180,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow29, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow30 = CreateDynamicObject(18762, 1769.05261, -1928.46973, 20.74830,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow30, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow31 = CreateDynamicObject(18762, 1773.84888, -1917.03833, 20.75580,   90.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(yellow31, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow32 = CreateDynamicObject(18762, 1769.05261, -1923.46973, 20.74830,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow32, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow33 = CreateDynamicObject(18762, 1769.05066, -1919.05371, 20.75030,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow33, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	new yellow34 = CreateDynamicObject(18762, 1759.80591, -1916.49805, 19.86257,   90.00000, 0.00000, 0.00000);
+	SetDynamicObjectMaterial(yellow34, 0, 19377, "seabed", "la_carp3", 0xFFF2F900);
+	CreateDynamicObject(19428, 1786.69995, -1918.39294, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1924.45886, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1924.45691, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1917.04895, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1917.05090, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1910.90405, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1910.90295, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1909.56006, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1903.41211, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1902.02209, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.70203, -1895.93213, 14.95880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1909.56702, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1903.41101, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1902.02600, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19428, 1786.69995, -1895.93201, 14.20580,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19447, 1782.07373, -1894.89478, 15.37330,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19447, 1773.57568, -1894.88867, 14.91330,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19447, 1769.48511, -1900.76685, 14.08930,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1840, 1785.55225, -1917.70996, 16.14810,   0.00000, 180.00000, 180.00000);
+	CreateDynamicObject(19457, 1781.83716, -1928.81213, 16.88150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1781.33716, -1930.69507, 16.88550,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1781.83716, -1930.69507, 16.88350,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1785.27307, -1930.69507, 16.88750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19435, 1786.36560, -1926.71362, 12.42480,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(19435, 1786.36560, -1933.71362, 12.42480,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(19377, 1774.32690, -1900.07617, 16.96300,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1781.32690, -1900.07617, 16.96500,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1781.32690, -1909.57617, 16.96300,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1774.32690, -1909.57617, 16.96100,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1774.30713, -1912.52051, 16.95900,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1781.32690, -1912.51721, 16.95700,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19447, 1769.48315, -1910.26685, 14.08930,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19447, 1769.48523, -1919.76685, 14.08930,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19447, 1769.48315, -1929.76685, 14.08930,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19325, 1769.46411, -1899.16370, 15.33652,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19325, 1769.44226, -1906.43689, 15.33652,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19325, 1769.43762, -1913.96008, 15.33652,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19447, 1769.47717, -1929.76880, 17.56900,   0.00000, 180.00000, 0.00000);
+	CreateDynamicObject(19377, 1774.67163, -1921.38928, 20.46320,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19447, 1769.47925, -1921.76685, 15.24880,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19447, 1769.46118, -1929.77075, 18.87740,   180.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, 1774.70898, -1930.75452, 20.46520,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1781.31201, -1922.02747, 20.46720,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1785.18604, -1930.75452, 20.46320,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19377, 1785.18604, -1929.94653, 20.46120,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1784.77307, -1900.11511, 16.88750,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1781.27307, -1900.11511, 16.88950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1777.77307, -1900.11511, 16.88950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1774.27307, -1900.11511, 16.88950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19457, 1771.27307, -1900.11511, 16.89150,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19325, 1790.48523, -1929.21960, 18.80630,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19457, 1788.68945, -1930.66455, 16.88950,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19395, 1774.63940, -1917.22571, 18.70500,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19367, 1771.43884, -1917.22632, 18.70290,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19459, 1781.31714, -1935.66882, 18.70430,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19459, 1781.31909, -1935.67078, 15.45650,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19325, 1776.22644, -1935.58582, 18.39439,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19361, 1779.12988, -1935.49756, 18.68490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19361, 1778.10291, -1935.49963, 18.68490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19459, 1781.31909, -1935.67078, 11.95810,   180.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19459, 1774.32104, -1935.67285, 15.45650,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19459, 1774.32214, -1935.67285, 11.95810,   180.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19367, 1771.60950, -1935.67090, 18.72766,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19361, 1771.61084, -1935.49756, 18.61490,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3928, 1778.52747, -1904.32190, 17.05030,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1498, 1773.83765, -1917.19519, 16.94594,   0.00000, 0.00000, 117.30000);
+	CreateDynamicObject(8580, 1757.82739, -1923.14246, 20.82530,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(8572, 1781.13745, -1916.02295, 19.31480,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(8597, 1751.86047, -1916.53015, 21.09350,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(8580, 1757.68542, -1904.67908, 20.81930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(16101, 1769.39734, -1913.40332, 14.29180,   0.00000, -60.00000, 10.00000);
+	CreateDynamicObject(16101, 1769.35168, -1919.71167, 14.29180,   0.00000, -60.00000, -10.00000);
+	CreateDynamicObject(16101, 1750.22803, -1914.09216, 14.29180,   0.00000, -60.00000, -185.00000);
+	CreateDynamicObject(16101, 1750.13696, -1918.91077, 14.29180,   0.00000, -60.00000, -175.00000);
+	CreateDynamicObject(1569, 1751.16699, -1917.94116, 20.56838,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1569, 1751.15955, -1915.02124, 20.56840,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1432, 1761.50256, -1913.87976, 12.67390,   0.00000, 0.00000, 49.02002);
+	CreateDynamicObject(1432, 1761.38611, -1918.35803, 12.67390,   0.00000, 0.00000, 7.32002);
+	CreateDynamicObject(1432, 1761.38977, -1926.94250, 12.67390,   0.00000, 0.00000, 7.32002);
+	CreateDynamicObject(1432, 1761.43628, -1922.42883, 12.67390,   0.00000, 0.00000, 49.02002);
+	CreateDynamicObject(1432, 1763.89050, -1924.63818, 12.67390,   0.00000, 0.00000, -30.77998);
+	CreateDynamicObject(1432, 1764.06079, -1916.08667, 12.67390,   0.00000, 0.00000, -30.77998);
+	CreateDynamicObject(8990, 1767.66772, -1927.26294, 13.17137,   0.00000, 0.00000, -89.45995);
+	CreateDynamicObject(8990, 1767.60071, -1915.04211, 13.17137,   0.00000, 0.00000, -89.45995);
+	CreateDynamicObject(967, 1810.75000, -1893.52747, 12.40369,   0.00000, 0.00000, 0.00000);
+	new taxisign1 = CreateDynamicObject(19329, 1787.11743, -1895.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign1, 0, "Y", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign2 = CreateDynamicObject(19329, 1787.11743, -1896.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign2, 0, "N", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign3 = CreateDynamicObject(19329, 1787.11743, -1897.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign3, 0, "A", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign4 = CreateDynamicObject(19329, 1787.11743, -1898.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign4, 0, "P", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign5 = CreateDynamicObject(19329, 1787.11743, -1899.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign5, 0, "M", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign6 = CreateDynamicObject(19329, 1787.11743, -1900.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign6, 0, "O", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign7 = CreateDynamicObject(19329, 1787.11743, -1901.75610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign7, 0, "C", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign8 = CreateDynamicObject(19329, 1787.11743, -1905.25610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign8, 0, "I", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign9 = CreateDynamicObject(19329, 1787.11743, -1906.25610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign9, 0, "X", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign10 = CreateDynamicObject(19329, 1787.11743, -1907.25610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign10, 0, "A", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	new taxisign11 = CreateDynamicObject(19329, 1787.11743, -1908.25610, 17.05610,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterialText(taxisign11, 0, "T", 50, "Gill Sans", 30, 1, 0xFFF00000, 0, 1);
+	CreateObject(19377, 1778.60229, -1904.18823, 16.95700,   0.00000, 90.00000, 0.00000); // Helicopter base - so it won't fall trough
+	//sky platform
+	CreateDynamicObject(18809, 1543.47144, -1355.86145, 4542.74365,   0.00000, 0.00000, 0.00000);
+	CreateObject(18881, 1543.39929, -1355.84094, 4467.02295,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18809, 1543.47144, -1355.86145, 4493.03809,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18809, 1543.47144, -1355.86145, 4443.07715,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18809, 1543.47144, -1355.86145, 4393.21338,   0.00000, 0.00000, 0.00000);
+	//courthouse
+	CreateDynamicObject(2204, 212.98170, 168.54379, 1000.66962,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2048, 209.75410, 168.90700, 1004.97693,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2206, 212.34261, 168.48380, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2204, 212.56670, 165.91840, 1000.66760,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2206, 212.34261, 171.33681, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2204, 212.97771, 171.49680, 1000.66962,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2204, 210.04480, 171.91499, 1000.66962,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2206, 211.35159, 171.33681, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2206, 210.36360, 171.33681, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2206, 211.35460, 168.48579, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2206, 210.36360, 168.48680, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2204, 212.08670, 165.91640, 1000.66559,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2206, 209.37160, 168.48680, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2206, 209.37360, 171.33681, 1001.53241,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3657, 221.86830, 163.99170, 1002.52081,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3657, 223.27760, 163.99170, 1002.52081,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2204, 212.05544, 167.30965, 1000.53009,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(2204, 209.55260, 172.17509, 1000.53009,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 209.55060, 172.43750, 1000.39191,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2001, 216.78439, 176.63490, 1002.02332,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2001, 216.78439, 160.70889, 1002.02332,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1714, 210.47740, 168.86819, 1002.44531,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1886, 210.24135, 176.39240, 1005.80585,   0.00000, 0.00000, 46.20002);
+	CreateDynamicObject(1886, 210.24323, 160.78305, 1005.80579,   0.00000, 0.00000, 132.06001);
+	CreateDynamicObject(2412, 213.15553, 177.19862, 1002.04590,   0.00000, 0.00000, 179.99995);
+	CreateDynamicObject(2412, 215.60451, 177.19859, 1002.04590,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2173, 217.62053, 172.33624, 1002.03479,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2205, 211.97290, 169.51460, 1002.41571,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(970, 212.95239, 169.83650, 1002.14032,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(970, 212.95239, 167.98570, 1002.14032,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(970, 210.87207, 165.90637, 1002.14032,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 211.52460, 165.63921, 1000.73798,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(1715, 218.84669, 173.37430, 1001.98981,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1715, 218.84669, 172.29530, 1001.98981,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2372, 216.96426, 161.79689, 1002.02393,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2372, 217.00520, 164.10960, 1002.02393,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3657, 220.45830, 163.99170, 1002.52081,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2372, 217.00520, 174.49561, 1002.02393,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2372, 217.00520, 172.15260, 1002.02393,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2173, 217.62050, 164.21320, 1002.03479,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1715, 218.84669, 164.19540, 1001.98981,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1715, 218.84669, 165.17540, 1001.98981,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3657, 220.45830, 173.44070, 1002.52081,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3657, 221.86830, 173.44070, 1002.52081,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3657, 223.27760, 173.44070, 1002.52081,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(14532, 213.11891, 176.61356, 1002.99133,   0.00000, 0.00000, -181.07994);
+	CreateDynamicObject(1210, 212.03600, 170.10890, 1002.61639,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18756, 197.61659, 168.35960, 1003.91663,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18757, 197.61659, 168.35159, 1003.91663,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2412, 213.15550, 159.75360, 1002.04590,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2412, 215.60451, 159.75160, 1002.04590,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2001, 196.25090, 171.20360, 1002.02332,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2001, 196.25090, 165.35870, 1002.02332,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2206, 210.21674, 160.81532, 1001.29657,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1715, 210.10512, 160.55653, 1002.19879,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(1715, 211.04111, 160.55650, 1002.19879,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(1715, 211.97710, 160.55650, 1002.19879,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(1715, 212.91310, 160.55650, 1002.19879,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(970, 211.44440, 161.76720, 1001.90582,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 211.11571, 161.78870, 1000.44202,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2206, 211.21570, 160.81531, 1001.29462,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 211.27240, 161.69550, 1000.35168,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 211.11369, 161.26401, 1000.41559,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 211.11369, 160.72099, 1000.41559,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 211.27240, 161.17050, 1000.35168,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2204, 210.21370, 161.78670, 1000.44000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2616, 209.79973, 174.89075, 1003.69281,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1808, 223.55620, 169.97610, 1002.04688,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2491, 217.60471, 169.13699, 1001.14893,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1549, 208.61920, 160.34090, 1001.99731,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2841, 218.41721, 168.39140, 1002.01971,   0.00000, 0.00000, 89.00000);
+	CreateDynamicObject(1549, 208.59940, 177.03951, 1001.99731,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1886, 204.05963, 180.79108, 1005.80585,   0.00000, 0.00000, -24.17996);
+	CreateDynamicObject(1886, 204.07491, 156.62923, 1005.80579,   0.00000, 0.00000, 204.71983);
+	CreateDynamicObject(2166, 203.17790, 169.62350, 1002.02173,   0.00000, 0.00000, 0.48000);
+	CreateDynamicObject(2165, 202.96609, 167.63721, 1002.02173,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2166, 203.96140, 165.66217, 1002.02173,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1808, 208.55656, 176.44411, 1002.04688,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2202, 208.26891, 162.15590, 1002.01453,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2611, 204.30640, 166.85010, 1003.73187,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1808, 213.67870, 152.18230, 1002.04688,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2612, 204.30721, 169.60350, 1003.74103,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1714, 221.04950, 150.28130, 1001.99213,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1715, 222.25864, 146.52663, 1001.98981,   0.00000, 0.00000, -158.16016);
+	CreateDynamicObject(1715, 219.70795, 146.46851, 1001.98981,   0.00000, 0.00000, -201.12035);
+	CreateDynamicObject(1714, 210.89700, 150.61220, 1001.99213,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1715, 210.87230, 147.54781, 1001.98981,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(14819, 228.10820, 151.21960, 1003.18091,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(14819, 228.38820, 161.24760, 1003.18091,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(14819, 228.11020, 161.24060, 1003.18091,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(14819, 228.38820, 151.21860, 1003.18091,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(14819, 231.46860, 169.99200, 1003.18091,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14819, 231.46291, 169.71400, 1003.18091,   0.00000, 0.00000, -180.00000);
+	CreateDynamicObject(17566, 228.24640, 161.03680, 1002.96619,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(17566, 228.24670, 151.07919, 1002.96619,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(17566, 231.43680, 169.87050, 1002.96619,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19304, 209.02980, 179.13361, 1005.14258,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(19303, 209.02980, 180.01030, 1003.26581,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19304, 209.02980, 158.23560, 1005.14258,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(19303, 209.02980, 159.11230, 1003.26581,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19304, 189.57941, 177.10480, 1005.14258,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19302, 188.70290, 177.06081, 1003.26581,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19304, 193.82040, 160.25380, 1005.14258,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19302, 192.94290, 177.06081, 1003.26581,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19302, 197.18089, 177.06081, 1003.26581,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19304, 198.06140, 177.10480, 1005.14258,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19304, 189.57941, 160.25380, 1005.14258,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19302, 188.70290, 160.25380, 1003.26581,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19304, 193.82040, 177.10480, 1005.14258,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19302, 192.94290, 160.25380, 1003.26581,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19304, 198.06140, 160.25380, 1005.14258,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19302, 197.18089, 160.25380, 1003.26581,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2180, 216.24080, 148.89420, 1002.00421,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2180, 215.27620, 147.91679, 1002.00421,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2001, 217.94525, 151.93765, 1002.02332,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1722, 217.69254, 148.90927, 1002.03131,   3.14160, 0.00000, 90.00000);
+	CreateDynamicObject(1722, 217.67229, 147.95029, 1002.03125,   3.14159, 0.00000, 89.65080);
+	CreateDynamicObject(1722, 213.84393, 147.94577, 1002.03131,   3.14160, 0.00000, -90.00000);
+	CreateDynamicObject(1722, 213.82397, 148.94597, 1002.03131,   3.14160, 0.00000, -90.00000);
+	CreateDynamicObject(1722, 215.75009, 146.35727, 1002.03131,   3.14160, 0.00000, 0.00000);
+	CreateDynamicObject(1722, 215.76068, 150.43794, 1002.03131,   3.14160, 0.00000, 180.00000);
+	//fix for cell collisions
+	CreateDynamicObject(2957, 189.67110, 175.43919, 1001.94910,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 189.66811, 172.79550, 1001.94910,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 189.62660, 172.45860, 1004.12292,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 189.73750, 161.82359, 1001.95001,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 189.72530, 163.53101, 1001.94800,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 189.56979, 163.99690, 1004.13922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 187.74832, 162.14841, 1004.13922,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 191.41679, 162.47354, 1004.13922,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 195.66521, 162.47200, 1004.13922,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 192.01030, 162.47211, 1004.13922,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 193.87160, 164.01076, 1004.13922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 193.36960, 161.93570, 1001.94800,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 193.36710, 164.40289, 1001.95001,   90.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 191.99660, 174.84979, 1004.12292,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 191.41660, 174.85130, 1004.12292,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 191.71280, 174.86060, 1004.12292,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 187.74609, 174.80251, 1004.12292,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2957, 195.96983, 174.84273, 1004.12292,   0.00000, 0.00000, 90.00000);
+	//Submarine
+	CreateDynamicObject(9958, 3354.59009, -7724.20996, 4.27784,   0.00000, 0.00000, 97.38000);
+	//NG Boat
+	/*
+	CreateObject(10771, 3311.17090, -2829.03027, 5.44530,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(10772, 3312.51465, -2829.20996, 17.27340,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(10770, 3314.39746, -2836.57715, 38.67960,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(11237, 3314.44434, -2836.57715, 38.67960,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(11146, 3302.17871, -2828.47559, 12.28900,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(11145, 3248.28809, -2829.03027, 4.25780,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(11149, 3305.09277, -2834.23340, 11.98430,   0.00000, 0.00000, 0.00000, 1000.0);
+	CreateObject(3115, 3212.15894, -2829.03345, 16.93580,   0.00000, 0.00000, 0.00000);
+	CreateObject(3114, 3254.42407, -2813.86743, 16.63930,   0.00000, 0.00000, 0.00000, 1000.0);
+	//CreateObject(3113, 3203.04517, -2829.10010, 1.19886,   0.00000, 0.00000, 0.00000); //boat block
+	CreateDynamicObject(3885, 3344.53809, -2836.51465, 21.01560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3884, 3344.53809, -2836.51465, 21.05460,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3885, 3274.06152, -2836.92871, 18.00780,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3884, 3274.06152, -2836.92871, 18.04680,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3796, 3332.89746, -2830.39746, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3791, 3334.57715, -2832.71777, 10.67180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3791, 3335.81152, -2834.32715, 10.67180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3787, 3339.43652, -2830.72559, 10.77340,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3787, 3340.47559, -2832.38965, 10.77340,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3340.26465, -2834.28027, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3791, 3378.88965, -2835.55371, 10.67180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3791, 3378.36621, -2833.88965, 10.67180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3787, 3378.55371, -2832.36621, 10.77340,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3787, 3378.60059, -2830.36621, 10.77340,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3795, 3374.74902, -2830.99121, 10.54680,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3792, 3376.30591, -2833.18530, 10.71590,   0.00000, 0.00000, 89.58001);
+	CreateDynamicObject(3795, 3378.46777, -2826.85840, 10.54680,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3792, 3378.84570, -2826.00269, 10.75000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3794, 3374.24902, -2828.99902, 10.71870,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3371.12402, -2828.70996, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3370.65527, -2827.16309, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3787, 3368.22559, -2826.28809, 10.77340,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3788, 3374.85059, -2821.10840, 10.71870,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3793, 3374.85059, -2820.17090, 10.82030,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3375.63184, -2817.87402, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3789, 3367.28027, -2819.21777, 10.54680,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3792, 3367.28027, -2818.35840, 10.75000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3794, 3363.53027, -2819.13184, 10.71870,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3793, 3363.57715, -2818.17871, 10.82030,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3339.07715, -2817.92871, 10.09370,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3340.38184, -2820.85059, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3340.57715, -2827.22559, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3360.28809, -2841.71777, 13.85930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3360.29468, -2816.34277, 13.85930,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3339.14282, -2816.34277, 13.85930,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3318.02246, -2816.34277, 13.85930,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3339.15308, -2828.72559, 13.85930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3318.02026, -2828.72559, 13.85930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3296.89746, -2828.72559, 13.85930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3296.89746, -2816.34277, 13.85930,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3799, 3326.26465, -2827.52246, 10.09370,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3328.78027, -2827.78027, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3328.31152, -2826.23340, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3306.33496, -2824.57715, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3303.26465, -2827.53809, 10.09370,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3304.74902, -2825.49121, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3275.76465, -2816.34277, 13.85930,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3796, 3270.66968, -2827.52173, 10.20310,   0.00000, 0.00000, 61.68000);
+	CreateDynamicObject(3798, 3267.91113, -2831.52173, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3266.04565, -2833.84863, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3792, 3268.50586, -2825.37549, 11.15735,   40.00000, 45.00000, 113.16000);
+	CreateDynamicObject(3793, 3264.19141, -2829.49561, 10.82030,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3789, 3264.14160, -2827.11206, 10.54680,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3794, 3264.03809, -2830.44434, 10.71870,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3795, 3263.64600, -2835.73193, 10.54680,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3788, 3269.64355, -2835.94189, 10.71870,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3275.75903, -2841.71777, 13.82030,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3254.19434, -2841.71777, 13.85930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3233.05371, -2841.71777, 13.85930,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3243.61621, -2829.03809, 15.27340,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(3785, 3233.05371, -2816.34277, 13.85930,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3265.20215, -2829.03809, 15.27340,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(11148, 3302.17871, -2829.03027, 12.88280,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3327.15527, -2836.35059, 10.20310,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3327.56934, -2836.59277, 12.14840,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3327.63184, -2840.12402, 11.25000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3327.31152, -2840.13965, 10.18750,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3326.12402, -2840.13965, 10.18750,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(11334, 3321.96777, -2837.53027, 10.96090,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(3800, 3318.86621, -2839.67090, 11.25000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3319.04590, -2839.67090, 10.18750,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(955, 3318.74902, -2838.03809, 10.58590,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(956, 3318.74902, -2836.46777, 10.58590,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3800, 3318.88965, -2834.49902, 10.18750,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3320.58496, -2829.20996, 13.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3309.03809, -2829.20996, 13.26560,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3298.12402, -2829.20996, 13.26560,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3302.49121, -2840.26465, 13.21090,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(11374, 3305.09277, -2834.23340, 11.98430,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3287.25684, -2829.61621, 5.26560,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3278.66309, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3798, 3272.24902, -2839.20215, 4.26560,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(3798, 3272.24902, -2841.20215, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3271.78809, -2840.73340, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3271.78809, -2837.80371, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3273.78809, -2835.56934, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3273.78809, -2836.64746, 2.03900,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3800, 3273.78809, -2837.72559, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3271.78809, -2834.87402, 1.92180,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3798, 3272.24902, -2834.41309, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3272.24902, -2832.41309, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3268.85840, -2834.87402, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3268.52393, -2834.04932, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3270.24902, -2834.41309, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3268.85840, -2837.80371, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3265.92871, -2837.80371, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3266.38965, -2837.34277, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3264.38965, -2837.34277, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3262.99902, -2837.80371, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3260.06934, -2837.80371, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3259.60840, -2837.34277, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3261.24121, -2837.04590, 4.26560,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3258.06934, -2839.64746, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3257.61621, -2841.18652, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3256.06934, -2841.64746, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3260.06934, -2840.73340, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3262.99902, -2840.73340, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3265.92871, -2840.73340, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3268.85840, -2840.73340, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3267.20215, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3255.74121, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(11147, 3250.45215, -2829.03027, 5.07810,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(11401, 3219.56934, -2822.52246, 4.71870,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3209.29590, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3220.74902, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3232.20996, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3243.67090, -2842.09277, 5.86710,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3243.67090, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3232.20996, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3220.74902, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3785, 3209.29590, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3800, 3254.34277, -2825.38184, 2.03900,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3798, 3254.80371, -2823.84277, 2.03900,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3785, 3255.74902, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3798, 3260.43652, -2823.84277, 2.03900,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3799, 3268.60840, -2817.49121, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3271.53809, -2817.49121, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3267.20215, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(11406, 3272.60059, -2825.81934, 5.36710,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3278.66309, -2815.97559, 5.86710,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3800, 3280.79590, -2820.99902, 4.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3281.25684, -2820.67090, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3799, 3281.40527, -2823.13965, 1.92180,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3798, 3281.25684, -2825.60840, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3800, 3279.71777, -2825.14746, 2.03900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3785, 3318.75684, -2831.14746, 20.29680,   0.00000, 0.00000, 270.00000);*/
+	//mont drug factory
+	CreateDynamicObject(1460, 1316.33057, 335.00461, 20.57820,   0.00000, 0.00000, 65.00000);
+	CreateDynamicObject(1456, 1331.11304, 262.33276, 21.71249,   0.00000, 0.00000, 65.57999);
+	CreateDynamicObject(11081, 1307.51685, 404.94745, 25.01694,   0.00000, 0.00000, 65.39996);
+	CreateDynamicObject(1438, 1311.44177, 396.49350, 18.53125,   3.14159, 0.00000, -17.29640);
+	CreateDynamicObject(3035, 1322.71753, 391.19656, 19.31250,   0.00000, 0.00000, -204.78000);
+	CreateDynamicObject(10149, 1318.63623, 392.10980, 20.05762,   0.00000, 0.00000, -23.88000);
+	CreateDynamicObject(1418, 1321.84766, 390.68140, 22.91660,   0.00000, 0.00000, 155.82001);
+	CreateDynamicObject(785, 1322.00781, 437.59375, 17.39844,   0.00000, 0.00000, 0.00000);
+	//dillimore materials factory
+	CreateDynamicObject(3577, 630.63171, -493.43753, 16.09024,   0.00000, 0.00000, 181.01996);
+	CreateDynamicObject(1438, 633.48352, -493.68246, 15.30469,   356.85840, 0.00000, 88.59285);
+	CreateDynamicObject(1438, 610.64111, -502.38477, 15.30469,   356.85840, 0.00000, 263.91272);
+	//blueberry junkyard
+	CreateDynamicObject(14826, 121.71442, -313.37253, 1.30801,   0.00000, 0.00000, 93.36015);
+	CreateDynamicObject(13590, 91.99857, -317.73602, 1.60264,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13590, 142.50661, -227.66306, 1.64755,   0.00000, 0.00000, 94.37998);
+	CreateDynamicObject(11295, 154.79079, -314.85004, 6.10295,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13591, 120.88313, -246.37372, 0.84570,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(18451, 109.42739, -239.30969, 1.04671,   0.00000, 0.00000, -117.24002);
+	CreateDynamicObject(13591, 142.78673, -245.99065, 0.84570,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1327, 144.71957, -234.74603, 0.55206,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1327, 144.68636, -234.65506, 1.14995,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1327, 114.73024, -248.71948, 0.49339,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(13591, 131.66992, -246.21898, 0.84570,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(18451, 121.59119, -252.63443, 1.09117,   0.00000, 0.00000, 0.77999);
+	CreateDynamicObject(18862, 113.97775, -234.16034, 2.02703,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18862, 83.78752, -285.02060, 4.99370,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13591, 79.02399, -267.71082, 0.93967,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(18451, 87.50941, -269.11197, 0.99720,   0.00000, 0.00000, 90.00002);
+	CreateDynamicObject(18248, 134.94351, -253.54341, 8.41779,   0.00000, 0.00000, -74.82000);
+	CreateDynamicObject(18862, 160.03024, -240.90678, 5.26769,   0.00000, 0.00000, -15.84000);
+	CreateDynamicObject(18862, 79.18471, -294.66849, 3.49252,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18862, 86.96989, -330.50720, 4.99370,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13591, 72.86577, -307.51871, 0.78000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(13591, 98.23887, -317.39084, 0.77524,   0.00000, 0.00000, 265.86005);
+	CreateDynamicObject(1327, 97.89985, -289.42926, 0.49339,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(18451, 98.53678, -310.01035, 1.11222,   0.00000, 0.00000, 177.60002);
+	CreateDynamicObject(3594, 127.38802, -252.07446, 0.99855,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18255, 63.28960, -312.82571, 4.61601,   0.00000, 0.00000, 181.37999);
+	CreateDynamicObject(18862, 54.08578, -331.37363, 4.99370,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13590, 56.29060, -312.11606, 1.82879,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13591, 70.25915, -276.87927, 0.84570,   0.00000, 0.00000, 85.31998);
+	CreateDynamicObject(18862, 44.44950, -332.06265, 5.89868,   0.00000, 0.00000, 67.86000);
+	CreateDynamicObject(18862, 98.97285, -334.18198, 3.72683,   0.00000, 0.00000, 137.82001);
+	CreateDynamicObject(18862, 38.81325, -319.38007, 4.54817,   0.00000, 0.00000, 137.82001);
+	CreateDynamicObject(13591, 25.32752, -285.72092, 1.58703,   0.00000, 0.00000, 182.39996);
+	CreateDynamicObject(13591, 38.84433, -287.95792, 1.53574,   0.00000, 0.00000, 360.41986);
+	CreateDynamicObject(18451, 56.99697, -279.70966, 1.02609,   0.00000, 0.00000, 179.16003);
+	CreateDynamicObject(1327, 44.50930, -297.07291, 0.94282,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1462, 123.26427, -287.28619, 0.51033,   0.00000, 0.00000, -90.12003);
+	CreateDynamicObject(18862, 62.18981, -333.31409, 3.75834,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13591, 71.20995, -317.82010, 0.84570,   0.00000, 0.00000, 267.11975);
+	CreateDynamicObject(13591, 68.13902, -293.69168, 0.84570,   0.00000, 0.00000, 266.75995);
+	CreateDynamicObject(1450, 59.09229, -278.28983, 1.09079,   0.00000, 0.00000, 183.54001);
+	CreateDynamicObject(3285, 23.38010, -244.46170, 3.01260,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1415, 110.94776, -223.19234, 0.73730,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1327, 144.63219, -234.54077, 1.90443,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1327, 44.08215, -282.32916, 0.92635,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(10984, 63.57236, -303.54114, 0.62611,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3593, 66.86237, -283.51846, 1.02048,   0.00000, 0.00000, 67.85999);
+	CreateDynamicObject(10984, 64.39139, -321.22745, 0.62611,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1412, 49.99691, -220.02695, 1.96576,   0.00000, 0.00000, -2.76000);
+	CreateDynamicObject(1447, 55.27568, -220.34085, 1.93064,   0.00000, 0.00000, 357.12021);
+	CreateDynamicObject(1412, 60.55730, -220.54723, 1.96576,   0.00000, 0.00000, -2.76000);
+	CreateDynamicObject(1447, 65.83027, -220.79614, 1.93064,   0.00000, 0.00000, 358.50015);
+	CreateDynamicObject(1447, 71.13935, -220.99631, 1.93064,   0.00000, 0.00000, 358.44016);
+	CreateDynamicObject(1412, 76.45221, -221.13795, 1.93320,   0.00000, 0.00000, -1.86000);
+	CreateDynamicObject(1412, 81.73866, -221.19334, 1.96576,   0.00000, 0.00000, -0.90000);
+	CreateDynamicObject(1447, 87.04079, -221.33693, 1.93064,   0.00000, 0.00000, 358.74014);
+	CreateDynamicObject(1447, 92.37111, -221.52919, 1.93064,   0.00000, 0.00000, 358.92014);
+	CreateDynamicObject(1412, 97.67082, -221.55774, 1.96576,   0.00000, 0.00000, -0.90000);
+	CreateDynamicObject(1447, 102.94072, -221.70645, 1.93064,   0.00000, 0.00000, 358.74014);
+	CreateDynamicObject(1412, 108.26695, -221.89337, 1.96576,   0.00000, 0.00000, -3.12000);
+	CreateDynamicObject(11011, 42.10962, -229.05014, 4.67768,   0.00000, 0.00000, 87.78003);
+	CreateDynamicObject(12957, 64.03915, -275.61526, 1.25743,   0.00000, 0.00000, 153.36008);
+	CreateDynamicObject(13591, 38.44873, -241.86606, 1.52836,   0.00000, 0.00000, 360.41986);
+	CreateDynamicObject(12957, 149.30051, -239.57829, 1.59458,   -3.90000, 8.51999, 153.36008);
+	CreateDynamicObject(18862, 29.52451, -332.76889, 5.89868,   0.00000, 0.00000, 143.52000);
+	CreateDynamicObject(18862, 158.55325, -255.49666, 3.91292,   0.00000, 0.00000, 55.19999);
+	CreateDynamicObject(18862, 156.02287, -231.21359, 4.23734,   0.00000, 0.00000, -84.00003);
+	CreateDynamicObject(3594, 160.47163, -267.06848, 1.37529,   4.68000, -7.38000, -44.16000);
+	CreateDynamicObject(3594, 150.18367, -247.40047, 1.53555,   4.02000, -23.82000, -2.58000);
+	CreateDynamicObject(3594, 75.16159, -280.95120, 1.53555,   4.02000, -23.82000, -2.58000);
+	CreateDynamicObject(3594, 34.16108, -314.13025, 1.84334,   4.02000, -23.82000, -32.64000);
+	CreateDynamicObject(3594, 53.20551, -322.81998, 2.14443,   4.02000, -23.82000, -99.77997);
+	CreateDynamicObject(18862, 27.95287, -300.59549, 5.23467,   0.00000, 0.00000, 182.16002);
+	CreateDynamicObject(18862, 27.47335, -317.78244, 3.20211,   0.00000, 0.00000, 182.16002);
+	CreateDynamicObject(1327, 39.26133, -305.43304, 1.08354,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(3593, 52.61234, -290.65305, 1.02048,   0.00000, 0.00000, 26.81998);
+	CreateDynamicObject(12957, 92.90897, -330.64340, 3.57480,   22.86000, 28.02000, 93.00010);
+	CreateDynamicObject(1415, 123.26126, -290.23331, 0.73730,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(3594, 162.59509, -227.22523, 2.09255,   3.06000, 24.84001, 33.60001);
+	CreateDynamicObject(1327, 130.82283, -251.00015, 0.57111,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(3594, 153.31842, -259.51453, 1.37531,   -0.06000, 23.40000, -138.42006);
+	CreateDynamicObject(18862, 159.07332, -247.08943, 2.47496,   0.00000, 0.00000, -15.84000);
+	CreateDynamicObject(13591, 144.01517, -327.09286, 0.77524,   0.00000, 0.00000, 358.07999);
+	CreateDynamicObject(1450, 149.63510, -300.67917, 1.16476,   0.00000, 0.00000, 91.49998);
+	CreateDynamicObject(12859, 174.69788, -336.72083, 0.58683,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1327, 89.00789, -299.01801, 0.49339,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(18451, 72.42484, -329.80118, 1.02609,   0.00000, 0.00000, 91.26007);
+	CreateDynamicObject(1447, 130.47607, -332.02985, 1.80164,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1412, 130.50803, -326.81491, 1.78796,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1412, 130.59045, -337.27042, 1.78796,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1412, 130.62067, -342.59045, 1.78796,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1358, 134.67398, -326.05130, 1.75972,   0.00000, 0.00000, 179.03999);
+	CreateDynamicObject(18451, 84.99048, -233.76617, 1.13747,   0.00000, 0.00000, 50.16000);
+	CreateDynamicObject(1327, 26.32944, -245.04230, 1.22382,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(3285, 168.60751, -275.75943, 2.85776,   0.00000, 0.00000, 362.03979);
+	CreateDynamicObject(10984, 168.52364, -269.71210, 0.18948,   0.00000, 0.00000, 16.38000);
+	CreateDynamicObject(10984, 166.72093, -280.40353, 0.04404,   0.00000, 0.00000, 239.81999);
+	CreateDynamicObject(1327, 173.36163, -281.64999, 1.04532,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(10984, 163.37637, -274.21042, 0.04404,   0.00000, 0.00000, 239.81999);
+	CreateDynamicObject(10984, 171.06375, -282.56293, 0.04404,   0.00000, 0.00000, 291.30005);
+	CreateDynamicObject(10984, 78.57516, -229.02408, 1.09163,   0.00000, 0.00000, 262.25992);
+	CreateDynamicObject(10984, 66.43155, -267.19949, 1.04305,   0.00000, 0.00000, 332.27982);
+	CreateDynamicObject(13591, 66.76287, -263.46060, 0.84570,   0.00000, 0.00000, 85.31998);
+	CreateDynamicObject(1327, 86.93980, -227.64188, 0.55889,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(10984, 102.40306, -276.15463, 1.02579,   0.00000, 0.00000, 234.11983);
+	CreateDynamicObject(10984, 114.26314, -277.38651, 0.94540,   0.00000, 0.00000, 300.77982);
+	CreateDynamicObject(10984, 107.72650, -287.15524, 0.61954,   0.00000, 0.00000, 300.77982);
+	CreateDynamicObject(10984, 99.47320, -247.84113, 0.50701,   0.00000, 0.00000, 285.96054);
+	CreateDynamicObject(10984, 92.33707, -247.45688, 0.68611,   0.00000, 0.00000, 234.11983);
+	CreateDynamicObject(13591, 109.58795, -273.63367, 1.71934,   8.94000, -0.84000, 180.00000);
+	CreateDynamicObject(1327, 119.35803, -274.11880, 0.97322,   -13.49999, 99.11996, 0.00000);
+	CreateDynamicObject(1327, 108.13795, -284.42166, 1.19314,   -13.49999, 99.11996, 34.32000);
+	CreateDynamicObject(12957, 113.72353, -284.35263, 1.59737,   4.92000, -21.78000, 142.92012);
+	CreateDynamicObject(10984, 29.95983, -269.50165, 1.59371,   0.00000, 0.00000, 332.27982);
+	CreateDynamicObject(10984, 41.47903, -262.13654, 1.15012,   0.00000, 0.00000, 332.27982);
+	CreateDynamicObject(10984, 32.04888, -261.83987, 1.21131,   0.00000, 0.00000, 604.01965);
+	CreateDynamicObject(10984, 33.96684, -271.02432, 1.21131,   0.00000, 0.00000, 604.01965);
+	CreateDynamicObject(13591, 42.37484, -262.40704, 1.53574,   12.60000, 11.51999, 360.41986);
+	CreateDynamicObject(1327, 44.05844, -256.95056, 0.95841,   -15.78000, 89.99999, 0.00000);
+	CreateDynamicObject(12957, 41.47539, -269.50098, 1.91183,   -1.98000, -22.02000, 153.36008);
+	CreateDynamicObject(3593, 29.43554, -258.68585, 2.17847,   -7.86000, -20.76001, -31.02002);
+	CreateDynamicObject(10984, 97.46203, -241.41855, -0.00576,   0.00000, 0.00000, 504.41937);
+	CreateDynamicObject(18451, 100.23851, -247.24278, 2.05580,   -3.06000, -7.68000, -117.24002);
+	CreateDynamicObject(1327, 105.02185, -247.43800, 0.89226,   -3.84000, 114.30004, 23.34000);
+	CreateDynamicObject(10984, 162.72690, -268.56625, 0.16429,   0.00000, 0.00000, 532.20050);
+	CreateDynamicObject(3594, 108.23575, -279.57233, 1.94380,   5.70000, 16.92000, 0.00000);
+	CreateDynamicObject(13591, 90.77998, -246.64662, 0.84570,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(10984, 72.80901, -258.61087, 0.63848,   0.00000, 0.00000, 332.27982);
+	CreateDynamicObject(10984, 73.80191, -249.98099, 1.20469,   0.00000, 0.00000, 259.61993);
+	CreateDynamicObject(10984, 66.04353, -255.89890, 0.63848,   0.00000, 0.00000, 270.35986);
+	CreateDynamicObject(18451, 78.26743, -249.32695, 2.22898,   15.78002, -3.24000, -269.40009);
+	CreateDynamicObject(12957, 74.94872, -252.63837, 2.73506,   9.96000, 10.98000, 260.34003);
+	CreateDynamicObject(13591, 68.43003, -248.28244, 1.66787,   15.53997, -5.22000, 257.87997);
+	CreateDynamicObject(3593, 76.25503, -260.62491, 1.41440,   1.68000, 26.52000, -45.18002);
+	CreateDynamicObject(1327, 105.60347, -269.02100, 0.49339,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1327, 77.57378, -233.56680, 1.12439,   10.86000, 78.48000, 0.00000);
+	CreateDynamicObject(12957, 74.00652, -225.99815, 1.92676,   22.38000, 24.12000, 153.36008);
+	CreateDynamicObject(18862, 59.95076, -258.64548, 3.54673,   0.00000, 0.00000, 0.00000);
+/*	//prison interior
+	CreateDynamicObject(14408, -2389.97290, 2071.99121, 1000.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3113, -2395.86963, 2060.90894, 996.83472,   90.00000, 16.00000, 178.98000);
+	CreateDynamicObject(3113, -2390.96655, 2086.21631, 994.69836,   0.00000, 17.00000, -90.00000);
+	CreateDynamicObject(3113, -2413.34229, 2086.21729, 994.69781,   0.00000, 17.00000, -90.00000);
+	CreateDynamicObject(7191, -2397.48071, 2070.98218, 996.90997,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(7191, -2414.46484, 2071.68359, 996.90887,   0.00000, -90.00000, 180.00000);
+	CreateDynamicObject(7191, -2402.23755, 2083.66724, 996.91089,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(7191, -2402.08276, 2079.80225, 996.91290,   0.00000, 90.00000, -90.00000);
+	CreateDynamicObject(7191, -2402.11938, 2060.04785, 996.91290,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(7191, -2402.50073, 2063.82031, 996.91492,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(3113, -2395.86182, 2080.09912, 996.83472,   90.00000, 16.00000, 178.98000);
+	CreateDynamicObject(14437, -2414.41138, 2063.78125, 992.62433,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(7191, -2402.08276, 2081.54810, 994.73889,   0.00000, 90.00000, -90.00000);
+	CreateDynamicObject(7191, -2394.22681, 2062.25659, 994.73889,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(7191, -2394.11938, 2060.04785, 994.73688,   0.00000, 90.00000, 90.00000);
+	CreateDynamicObject(7191, -2402.23755, 2083.66724, 994.73492,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(14437, -2410.41138, 2063.78125, 992.62433,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14437, -2406.43115, 2063.77808, 992.62433,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14437, -2402.41138, 2063.78125, 992.62433,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14437, -2398.41138, 2063.78125, 992.62433,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3113, -2391.50903, 2069.61646, 996.83472,   90.00000, 16.00000, 178.98000);
+	CreateDynamicObject(3113, -2392.48560, 2067.73291, 996.83472,   90.00000, 16.00000, 88.00000);
+	CreateDynamicObject(7191, -2393.93237, 2071.12402, 996.91199,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(3113, -2389.02197, 2076.04297, 996.83472,   90.00000, 16.00000, -88.00000);
+	CreateDynamicObject(14437, -2398.41138, 2063.78125, 998.98132,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14437, -2402.41138, 2063.78125, 998.98132,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14437, -2410.41138, 2063.78125, 998.98132,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14437, -2414.41138, 2063.78125, 998.98132,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(12985, -2399.95850, 2070.20508, 994.41852,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(7191, -2402.50073, 2062.22119, 1001.05890,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(7191, -2402.11938, 2060.04785, 1001.05688,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(7191, -2402.23755, 2083.66724, 1001.05487,   0.00000, -90.00000, -90.00000);
+	CreateDynamicObject(7191, -2402.08276, 2081.52417, 1001.05688,   0.00000, 90.00000, -90.00000);
+	CreateDynamicObject(19377, -2412.20996, 2059.25806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2408.20996, 2059.25806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2404.20996, 2059.25806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2400.20996, 2059.25806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2412.20996, 2084.75806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2408.20996, 2084.75806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2404.20996, 2084.75806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2400.20996, 2084.75806, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2412.21924, 2059.24023, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19377, -2390.33472, 2071.68066, 995.76093,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19377, -2395.08374, 2072.43311, 995.76093,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(7191, -2393.44043, 2071.12402, 1001.07098,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(14437, -2416.42773, 2071.55347, 992.54681,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2949, -2395.20874, 2074.08740, 997.01141,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.20874, 2074.08740, 990.59204,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.20874, 2070.58740, 990.59198,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.20874, 2070.58740, 997.01141,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.01465, 2074.08740, 997.01141,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.01465, 2070.58740, 997.01141,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.01465, 2070.58740, 990.59198,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2395.01465, 2074.08740, 990.59198,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2399.36133, 2071.61035, 997.50763,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(970, -2399.36133, 2075.75439, 997.50763,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(970, -2399.36133, 2069.52051, 997.50763,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(970, -2401.44019, 2077.86987, 997.50763,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2405.94019, 2077.86987, 997.50763,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2410.44019, 2077.86987, 997.50763,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2410.44019, 2065.72290, 997.50763,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2405.94019, 2065.72290, 997.50763,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2401.44019, 2065.72290, 997.50763,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, -2412.52124, 2075.75439, 997.50763,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(970, -2412.52124, 2071.75439, 997.50763,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(970, -2412.52124, 2067.75439, 997.50763,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1800, -2397.34961, 2081.88208, 990.60004,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2401.21533, 2081.93555, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2407.49292, 2081.86719, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2409.19141, 2081.85522, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2413.17358, 2081.87109, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2413.19629, 2057.34937, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2411.53516, 2057.39136, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2405.17261, 2057.38477, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2403.53955, 2057.39014, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2399.57422, 2057.38647, 990.59998,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2399.63062, 2057.33716, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2403.57446, 2057.36035, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2405.13403, 2057.38696, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2411.52051, 2057.37183, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2415.58032, 2057.30444, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2415.63428, 2081.86646, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2411.63428, 2081.86646, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2407.63428, 2081.86646, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2401.13428, 2081.86646, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1800, -2397.63428, 2081.86646, 996.97223,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1886, -2393.16675, 2069.00146, 1002.92920,   15.12000, 0.24000, -107.04001);
+	CreateDynamicObject(1886, -2414.94434, 2064.00293, 1002.92920,   15.12000, 0.24000, -227.33989);
+	CreateDynamicObject(1886, -2415.76904, 2080.15503, 1002.92920,   15.12000, 0.24000, -319.67987);
+	CreateDynamicObject(1886, -2415.76904, 2080.15503, 996.88861,   15.12000, 0.24000, -319.67987);
+	CreateDynamicObject(1886, -2415.11353, 2062.91284, 996.88861,   15.12000, 0.24000, -220.49995);
+	CreateDynamicObject(1810, -2413.02881, 2062.35645, 990.65045,   0.00000, 0.00000, -53.28000);
+	CreateDynamicObject(1810, -2399.27954, 2062.40112, 990.65051,   0.00000, 0.00000, 123.12000);
+	CreateDynamicObject(1810, -2405.06616, 2062.05298, 990.65051,   0.00000, 0.00000, -91.56002);
+	CreateDynamicObject(1810, -2413.02881, 2062.35645, 990.65045,   0.00000, 0.00000, -53.28000);
+	CreateDynamicObject(1810, -2401.15088, 2081.53442, 990.65051,   0.00000, 0.00000, -53.28000);
+	CreateDynamicObject(14437, -2406.41138, 2063.78125, 998.98132,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1810, -2404.89282, 2084.93750, 990.65051,   0.00000, 0.00000, -53.28000);
+	CreateDynamicObject(1810, -2413.39185, 2080.77490, 990.65051,   0.00000, 0.00000, -125.39998);
+	CreateDynamicObject(1810, -2409.30103, 2080.61035, 996.96967,   0.00000, 0.00000, -125.39998);
+	CreateDynamicObject(1810, -2404.78198, 2084.31079, 996.96967,   0.00000, 0.00000, -43.49998);
+	CreateDynamicObject(1810, -2400.85742, 2062.62549, 996.96967,   0.00000, 0.00000, -43.49998);
+	CreateDynamicObject(1810, -2407.51099, 2059.51392, 996.96967,   0.00000, 0.00000, 112.38002);
+	CreateDynamicObject(1810, -2415.54321, 2061.67944, 996.96967,   0.00000, 0.00000, 112.38002);
+	CreateDynamicObject(1432, -2410.10474, 2070.31128, 990.74280,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1432, -2406.22095, 2073.52515, 990.74280,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1432, -2403.39819, 2069.77344, 990.74280,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1492, -2420.52393, 2073.93213, 990.65070,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1810, -2417.46118, 2076.57593, 990.65051,   0.00000, 0.00000, -16.31999);
+	CreateDynamicObject(2185, -2418.71289, 2074.76807, 990.65057,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14501, -2417.88623, 2074.47852, 994.10547,   0.00000, -90.00000, 0.00000);
+	CreateDynamicObject(14501, -2417.72290, 2073.30737, 994.10553,   0.00000, -90.00000, 180.00000);
+	CreateDynamicObject(3859, -2418.90112, 2073.88013, 996.20453,   0.00000, 0.00000, -73.08000);
+	CreateDynamicObject(1496, -2422.71606, 2067.01172, 990.65143,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1496, -2422.72095, 2055.01025, 990.65143,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19377, -2407.89600, 2044.89685, 995.30011,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2949, -2408.02051, 2047.94604, 990.64996,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1886, -2409.59326, 2043.91650, 996.75214,   18.84000, 0.90000, -129.00000);
+	CreateDynamicObject(1886, -2420.47705, 2050.21948, 996.75214,   18.84000, 0.90000, -194.81989);
+	CreateDynamicObject(1886, -2420.31592, 2073.05762, 996.75214,   18.84000, 0.90000, 38.46009);
+	CreateDynamicObject(1498, -2420.31885, 2043.25220, 990.65088,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1498, -2417.33667, 2043.27576, 990.65088,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(14437, -2418.76733, 2049.35522, 992.65082,   0.00000, 0.00000, 0.00000);
+	*/
+	//newbie spawn
+	CreateDynamicObject(2949, 1807.98682, -1366.62183, 14.10950,   0.00000, 0.00000, 180.00000, 600);
+	CreateDynamicObject(17564, 1808.16174, -1366.09277, 15.23540,   0.00000, 0.00000, -90.00000, 600);
+	//auto export
+	CreateDynamicObject(3626, 2606.50244, -2241.35889, 13.91160,   0.00000, 0.00000, 180.00000, 600);
+	CreateDynamicObject(19303, 266.29291, 78.45760, 1001.31042,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19303, 266.30090, 82.97160, 1001.31042,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19303, 266.30090, 87.46460, 1001.31042,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2342, 250.65157, 65.63711, 1003.99518,   0.00000, 0.00000, 0.00000); //donuts
+	//dillimore PD
+	CreateDynamicObject(19303, 320.81851, 313.11490, 999.52289,   0.00000, 0.00000, 90.00000);
+	//CreateObject(19302, 320.87250, 311.36371, 999.52100,   0.00000, 0.00000, -90.00000); //jail cell door 1 (in main script)
+	CreateDynamicObject(19304, 320.81851, 312.23581, 1001.39117,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19304, 320.81851, 316.26779, 1001.39117,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19303, 320.81851, 317.06290, 999.52289,   0.00000, 0.00000, 90.00000);
+	//CreateObject(19302, 320.87250, 315.38971, 999.52100,   0.00000, 0.00000, -90.00000); //jail cell door 2 (in main script)
+	CreateDynamicObject(1522, 321.43567, 301.90292, 998.13031,   0.00000, 0.00000, 0.00000);
+	//bed collisions
+	new jailbedcol1 = CreateDynamicObject(1801, 320.06299, 315.20615, 998.05029,   0.00000, 0.00000, 90.00000);
+	new jailbedcol2 = CreateDynamicObject(1801, 320.04630, 311.36929, 998.03583,   0.00000, 0.00000, 90.00000);
+	SetDynamicObjectMaterial(jailbedcol1, 0, -1, "none", "none", 0x00FFFFFF);
+	SetDynamicObjectMaterial(jailbedcol1, 1, -1, "none", "none", 0x00FFFFFF);
+	SetDynamicObjectMaterial(jailbedcol1, 2, -1, "none", "none", 0x00FFFFFF);
+	SetDynamicObjectMaterial(jailbedcol2, 0, -1, "none", "none", 0x00FFFFFF);
+	SetDynamicObjectMaterial(jailbedcol2, 1, -1, "none", "none", 0x00FFFFFF);
+	SetDynamicObjectMaterial(jailbedcol2, 2, -1, "none", "none", 0x00FFFFFF);
+	//prison locker
+	CreateDynamicObject(10148, 2731.16431, -2480.88623, 1089.85437,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2957, 2730.40796, -2473.63452, 1089.47205,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19302, 2734.57617, -2477.31006, 1089.12756,   -7.43999, -1.32001, -91.38004);
+	CreateDynamicObject(1999, 2729.26855, -2486.53320, 1087.79626,   0.00000, 0.00000, 178.86000);
+	CreateDynamicObject(2611, 2727.57129, -2484.35620, 1089.51367,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2607, 2733.06396, -2484.54077, 1088.24133,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2609, 2730.08936, -2486.75562, 1088.56641,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2609, 2733.16650, -2486.37915, 1088.56641,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2356, 2732.61304, -2484.52734, 1087.82288,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2356, 2728.31885, -2485.85498, 1087.82288,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2611, 2731.88818, -2487.06885, 1089.51367,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(18042, 2720.49585, -2478.84863, 1088.31165,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18042, 2740.57690, -2483.48511, 1088.31165,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(358, 2730.36816, -2480.97583, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(358, 2730.36816, -2480.77856, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(358, 2730.36816, -2480.61401, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(3014, 2730.42065, -2478.56519, 1088.05835,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(342, 2730.37646, -2478.73926, 1088.34265,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(342, 2730.59229, -2478.73730, 1088.29675,   -0.96000, -57.72000, 0.00000);
+	CreateDynamicObject(342, 2730.44629, -2478.53784, 1088.31995,   -43.79997, -82.62002, 0.00000);
+	CreateDynamicObject(2043, 2730.41602, -2479.32886, 1088.13525,   0.00000, 0.00000, 181.31989);
+	CreateDynamicObject(356, 2730.36816, -2480.30835, 1088.30139,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(356, 2730.36816, -2480.12720, 1088.30139,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(358, 2730.36816, -2481.33789, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(355, 2730.36816, -2481.51880, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(355, 2730.36816, -2481.69971, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(335, 2730.09448, -2479.77759, 1088.08875,   -74.40002, -51.17999, 0.00000);
+	CreateDynamicObject(360, 2730.39917, -2482.83301, 1088.21790,   -190.00000, 0.00000, 270.24005);
+	CreateDynamicObject(358, 2730.76392, -2481.39966, 1088.36633,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(2043, 2731.11694, -2481.75854, 1088.13525,   0.00000, 0.00000, 181.31989);
+	CreateDynamicObject(335, 2730.99365, -2483.26392, 1088.08875,   -74.40002, -51.17999, 0.00000);
+	CreateDynamicObject(356, 2730.76392, -2481.55762, 1088.29089,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(356, 2730.76392, -2481.71558, 1088.29089,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(351, 2730.76392, -2481.87354, 1088.02380,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(351, 2730.76392, -2482.03149, 1088.02380,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(356, 2730.76392, -2481.00464, 1088.29089,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(356, 2730.76392, -2480.84668, 1088.29089,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(358, 2730.76392, -2480.68872, 1088.36633,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(351, 2730.76392, -2480.53052, 1088.02380,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(342, 2730.94189, -2479.06494, 1088.04517,   -0.96000, -57.72000, 0.00000);
+	CreateDynamicObject(2043, 2730.71387, -2479.30981, 1088.13525,   0.00000, 0.00000, 181.31989);
+	CreateDynamicObject(342, 2730.84790, -2479.17114, 1088.04517,   -0.96000, -57.72000, 0.00000);
+	CreateDynamicObject(355, 2730.76392, -2480.29346, 1088.34338,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(2037, 2730.68188, -2479.88647, 1088.10364,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(356, 2730.36816, -2479.89014, 1088.30139,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(355, 2730.76392, -2480.05640, 1088.34338,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(358, 2730.76392, -2482.18970, 1088.36633,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(356, 2730.76392, -2482.34766, 1088.29089,   -5.70000, -82.92000, 0.00000);
+	CreateDynamicObject(358, 2730.36816, -2481.89087, 1088.36633,   -5.70000, -82.92000, 180.00000);
+	CreateDynamicObject(2043, 2730.11377, -2481.64673, 1088.13525,   0.00000, 0.00000, 181.31989);
+	CreateDynamicObject(342, 2731.03516, -2480.90601, 1088.04517,   -0.96000, -57.72000, 0.00000);
+	//GARAGES
+	CreateDynamicObject(14783, 2569.19, -832.68, 67.70,   0.00, 0.00, 0.00, -1); //type 1
+	CreateDynamicObject(14798, 2569.45, -845.57, 66.87,   0.00, 0.00, 0.00, -1); //type 1 block
+	CreateDynamicObject(7657, 2561.87, -829.55, 67.54,   0.00, 0.00, 90.00, -1); //type 2
+	CreateDynamicObject(7657, 2562.28, -849.07, 67.54,   0.00, 0.00, 90.00, -1); //type 2 block
+	//Bank (Jacob Malcom)
+	CreateDynamicObject(14789, 1424.69, -1004.07, 1643.03,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1886, 1448.76, -1003.49, 1646.92,   19.77, 0.00, 189.61);
+	CreateDynamicObject(1886, 1414.76, -980.55, 1646.91,   19.77, 0.00, 43.36);
+	CreateDynamicObject(626, 1427.55, -997.32, 1640.77,   0.00, 0.00, 135.00);
+	CreateDynamicObject(2773, 1427.76, -995.78, 1639.31,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2773, 1427.69, -992.84, 1639.31,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2773, 1427.72, -989.95, 1639.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2773, 1429.86, -982.95, 1639.31,   0.00, 0.00, 90.00);
+	CreateDynamicObject(626, 1415.42, -984.28, 1640.81,   0.00, 0.00, 11.25);
+	CreateDynamicObject(2773, 1432.33, -982.97, 1639.31,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2773, 1437.39, -982.98, 1639.31,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2773, 1439.99, -983.01, 1639.31,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3462, 1415.30, -981.05, 1640.30,   0.00, 0.00, 135.00);
+	CreateDynamicObject(626, 1441.87, -997.46, 1640.83,   0.00, 0.00, 146.25);
+	CreateDynamicObject(2773, 1432.34, -995.21, 1639.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2773, 1434.73, -995.23, 1639.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2773, 1438.90, -996.64, 1639.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2773, 1432.02, -992.77, 1639.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1723, 1426.28, -994.86, 1638.71,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1723, 1426.24, -991.15, 1638.73,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1723, 1422.28, -996.94, 1638.68,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1723, 1422.28, -993.21, 1638.66,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2637, 1424.23, -992.17, 1638.84,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2637, 1424.23, -995.70, 1638.84,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3657, 1432.63, -987.74, 1639.20,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3657, 1432.63, -986.98, 1639.20,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3657, 1438.11, -986.98, 1639.20,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3657, 1438.09, -987.73, 1639.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2946, 1414.29, -988.35, 1638.76,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2946, 1414.31, -985.22, 1638.76,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1886, 1414.68, -998.72, 1646.98,   17.19, 0.00, 135.00);
+	CreateDynamicObject(2773, 1429.58, -992.76, 1639.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2773, 1437.16, -995.22, 1639.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1216, 1442.94, -984.48, 1639.48,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2824, 1424.30, -992.05, 1639.25,   0.00, 0.00, 78.75);
+	CreateDynamicObject(3499, 1414.18, -988.86, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1414.20, -984.71, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1414.19, -983.81, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1414.18, -989.79, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.73, -987.93, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.72, -987.50, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.73, -987.07, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.72, -986.65, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.73, -986.25, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.74, -985.90, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1413.73, -985.49, 1644.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3462, 1441.39, -981.52, 1640.30,   0.00, 0.00, 45.00);
+	CreateDynamicObject(18092, 1430.82, -999.20, 1639.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18092, 1435.58, -999.20, 1639.28,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1443.79, -998.90, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(2369, 1432.13, -999.16, 1639.78,   0.00, 0.00, 150.00);
+	CreateDynamicObject(1216, 1442.93, -985.67, 1639.48,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1216, 1442.93, -986.80, 1639.48,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2773, 1427.70, -987.08, 1639.30,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3499, 1427.83, -998.69, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(3499, 1433.24, -1003.83, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(3499, 1432.56, -1003.81, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(3499, 1429.20, -1003.92, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(3499, 1428.16, -1003.89, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(2200, 1440.46, -1005.36, 1638.79,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2200, 1437.92, -1005.36, 1638.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2200, 1426.59, -1005.32, 1638.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2200, 1424.15, -1005.32, 1638.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1808, 1419.53, -980.30, 1638.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2773, 1434.84, -982.97, 1639.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(626, 1435.11, -987.55, 1640.83,   0.00, 0.00, 236.25);
+	CreateDynamicObject(2369, 1437.28, -999.16, 1639.78,   0.00, 0.00, 150.00);
+	CreateDynamicObject(3462, 1415.83, -997.08, 1640.30,   0.00, 0.00, 225.00);
+	CreateDynamicObject(8680, 1378.06, -948.68, 1640.21,   0.00, 180.00, 180.00);
+	CreateDynamicObject(8680, 1378.06, -948.68, 1641.18,   0.00, 180.00, 180.00);
+	CreateDynamicObject(8653, 1412.97, -998.50, 1639.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8653, 1443.53, -984.67, 1639.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(8680, 1393.75, -938.23, 1641.21,   0.00, 0.00, 270.00);
+	CreateDynamicObject(626, 1415.31, -989.32, 1640.81,   0.00, 0.00, 11.25);
+	CreateDynamicObject(626, 1427.64, -982.90, 1640.78,   0.00, 0.00, 146.25);
+	CreateDynamicObject(1723, 1421.23, -991.18, 1638.73,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1723, 1421.16, -994.87, 1638.73,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2637, 1419.08, -992.24, 1638.84,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2637, 1419.01, -995.85, 1638.84,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1723, 1417.23, -996.70, 1638.68,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1723, 1417.25, -993.29, 1638.68,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2942, 1425.95, -980.50, 1639.40,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2942, 1424.14, -980.50, 1639.40,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2942, 1422.31, -980.55, 1639.40,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14576, 1434.33, -988.04, 1634.38,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14577, 1453.27, -927.43, 1639.51,   0.00, 0.00, -90.00);
+	CreateDynamicObject(3940, 1435.95, -974.53, 1629.30,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19447, 1443.75, -973.13, 1635.56,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19447, 1443.75, -973.13, 1639.06,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1998, 1449.91, -964.84, 1632.58,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1998, 1446.67, -969.37, 1632.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1998, 1452.96, -965.91, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1998, 1445.70, -960.37, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1998, 1456.40, -971.11, 1632.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2008, 1448.91, -966.87, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2008, 1456.44, -967.25, 1632.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2008, 1451.92, -963.88, 1632.58,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2008, 1455.82, -960.44, 1632.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2008, 1450.91, -959.39, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1450.83, -966.77, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1449.24, -971.18, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1457.58, -971.23, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1456.30, -965.29, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1453.16, -959.32, 1632.58,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1452.98, -963.97, 1632.58,   0.00, 0.00, 18.00);
+	CreateDynamicObject(2001, 1445.57, -961.43, 1632.58,   0.00, 0.00, 18.00);
+	CreateDynamicObject(2002, 1453.42, -971.14, 1632.59,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2163, 1445.19, -967.17, 1632.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2163, 1445.20, -964.81, 1632.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2163, 1446.45, -971.62, 1632.58,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2167, 1447.40, -971.62, 1632.58,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1715, 1446.94, -968.23, 1632.56,   0.00, 0.00, -76.00);
+	CreateDynamicObject(1715, 1446.65, -960.50, 1632.56,   0.00, 0.00, -171.00);
+	CreateDynamicObject(1715, 1451.70, -959.75, 1632.56,   0.00, 0.00, -185.00);
+	CreateDynamicObject(1715, 1454.25, -965.68, 1632.56,   0.00, 0.00, -33.00);
+	CreateDynamicObject(1715, 1456.95, -969.88, 1632.56,   0.00, 0.00, -69.00);
+	CreateDynamicObject(1806, 1449.35, -964.61, 1632.58,   0.00, 0.00, 140.00);
+	CreateDynamicObject(1806, 1451.05, -963.47, 1632.58,   0.00, 0.00, 193.00);
+	CreateDynamicObject(14635, 1440.95, -980.42, 1635.58,   0.00, 0.00, -90.00);
+	CreateDynamicObject(14578, 1440.20, -989.70, 1637.97,   0.00, 0.00, -90.00);
+	CreateDynamicObject(19313, 1447.04, -995.52, 1626.18,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19303, 1446.13, -986.84, 1627.48,   0.00, 0.00, 4.00);
+	CreateDynamicObject(2922, 1447.17, -989.39, 1627.14,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2922, 1426.91, -986.61, 1627.60,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2634, 1426.71, -988.03, 1627.88,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2994, 1411.25, -990.06, 1626.68,   0.00, 0.00, 10.00);
+	CreateDynamicObject(1550, 1411.30, -989.99, 1627.29,   270.00, 0.00, 0.00);
+	CreateDynamicObject(1550, 1410.96, -989.28, 1626.59,   20.00, 0.00, 0.00);
+	CreateDynamicObject(1550, 1410.87, -988.72, 1626.59,   20.00, 0.00, -120.00);
+	CreateDynamicObject(2369, 1433.91, -999.36, 1639.78,   0.00, 0.00, 230.00);
+	CreateDynamicObject(2369, 1428.92, -999.69, 1639.78,   0.00, 0.00, 230.00);
+	CreateDynamicObject(2190, 1436.56, -998.74, 1639.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2190, 1434.81, -998.56, 1639.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2190, 1431.43, -998.68, 1639.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2190, 1429.88, -998.78, 1639.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1806, 1430.11, -1000.60, 1638.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1806, 1431.34, -1000.70, 1638.78,   0.00, 0.00, -18.00);
+	CreateDynamicObject(1806, 1434.67, -1000.47, 1638.78,   0.00, 0.00, 11.00);
+	CreateDynamicObject(1806, 1436.01, -1000.40, 1638.78,   0.00, 0.00, -25.00);
+	CreateDynamicObject(3499, 1438.64, -998.84, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(2202, 1442.84, -1003.60, 1638.78,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3499, 1449.22, -993.18, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(3499, 1448.89, -982.61, 1644.28,   0.00, 0.00, 213.75);
+	CreateDynamicObject(19388, 1440.13, -998.71, 1640.44,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19431, 1442.54, -998.71, 1640.44,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1502, 1439.34, -998.71, 1638.69,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19003, 1439.66, -1009.58, 1638.70,   180.00, 0.00, 0.00);
+	CreateDynamicObject(19003, 1419.88, -1008.77, 1638.70,   180.00, 0.00, 0.00);
+	CreateDynamicObject(19003, 1419.16, -988.59, 1638.70,   180.00, 0.00, 0.00);
+	CreateDynamicObject(6959, 1431.59, -984.34, 1638.79,   0.00, 0.00, 0.00);
+	CreateDynamicObject(10402, 1433.45, -977.37, 1629.97,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19450, 1433.22, -998.76, 1638.00,   0.00, 180.00, 90.00);
+	//FISHING STORE
+	CreateDynamicObject(11497, 371.640442, -2077.564453, 6.906926, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1497, 375.137970, -2077.647217, 7.327770, 0.0000, 0.0000, 90.0000);
+	CreateObject(18045, 364.316498, -2068.405273, 980.796143, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1497, 370.827423, -2072.880127, 978.791992, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(1497, 356.854767, -2067.211670, 978.791992, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2626, 370.035065, -2065.742188, 979.296631, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2593, 357.426392, -2066.781006, 979.655884, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2537, 362.171112, -2063.615479, 978.802673, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2536, 361.188812, -2063.614502, 978.802673, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(902, 362.139801, -2067.224365, 978.311279, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(953, 357.464142, -2063.672119, 979.105225, 0.0000, 0.0000, 56.2500);
+	CreateDynamicObject(1461, 371.360901, -2068.686523, 979.605164, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1461, 361.164856, -2073.281250, 979.605164, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(1599, 362.123932, -2063.474121, 979.379211, 0.0000, 107.4295, 90.0000);
+	CreateDynamicObject(1603, 357.070526, -2070.773438, 980.038696, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1602, 357.185211, -2069.466309, 979.991821, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1609, 367.104858, -2072.719482, 978.657104, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1641, 364.584015, -2063.166016, 981.135071, 90.2408, 0.0000, 0.0000);
+	CreateDynamicObject(1643, 366.041565, -2063.146973, 981.181824, 89.3814, 0.0000, 0.0000);
+	CreateDynamicObject(2404, 371.576508, -2072.586426, 980.054199, 0.0000, 0.0000, 225.0000);
+	CreateDynamicObject(2782, 358.317047, -2063.685791, 979.104553, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(902, 366.969971, -2067.597656, 978.311279, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(902, 360.024658, -2070.883301, 978.311279, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(902, 365.891632, -2065.538818, 978.336304, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(18632, 371.64, -2063.7, 980.30, 0.0000, 180.0000, 90.0000);
+	CreateDynamicObject(18632, 371.64, -2064.7, 980.30, 0.0000, 180.0000, 90.0000);
+	CreateDynamicObject(18632, 371.64, -2065.7, 980.30, 0.0000, 180.0000, 90.0000);
+	CreateDynamicObject(18632, 371.64, -2066.7, 980.30, 0.0000, 180.0000, 90.0000);
+	CreateDynamicObject(18632, 371.64, -2067.7, 980.30, 0.0000, 180.0000, 90.0000);
+	//TIKI STORE
+	CreateDynamicObject(18092, 2368.60669, -1456.83643, 921.30634,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2593, 2361.92310, -1460.85986, 921.65881,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2495, 2368.54639, -1454.84436, 921.93622,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1885, 2365.45459, -1469.05493, 920.80542,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1886, 2359.26929, -1451.85791, 924.89423,   18.04820, 0.00000, 32.26310);
+	CreateDynamicObject(2362, 2368.92822, -1455.92773, 921.80591,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2369, 2363.62012, -1453.68176, 921.90509,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3461, 2368.34937, -1469.09424, 921.40594,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14672, 2359.59814, -1460.34656, 922.80688,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3461, 2366.06494, -1468.98535, 921.38824,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18092, 2368.60034, -1461.81567, 921.30634,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2495, 2368.56958, -1456.45740, 921.93622,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2362, 2368.95410, -1457.56421, 921.80591,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1704, 2360.33911, -1468.68054, 920.80377,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1703, 2363.16650, -1468.63708, 920.80377,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1704, 2364.78125, -1468.65393, 920.80377,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2361.92310, -1459.30981, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2365.56836, -1459.39551, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2365.57104, -1460.85962, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2366.36182, -1460.01489, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2364.75952, -1460.15381, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2362.77319, -1460.10547, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2593, 2361.10864, -1460.09912, 921.65881,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1505, 2352.83740, -1454.31165, 920.80103,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1505, 2352.84912, -1457.57520, 920.80103,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1533, 2367.96729, -1469.58533, 920.80139,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2773, 2362.33862, -1455.67395, 921.33612,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3461, 2362.36865, -1456.64832, 921.00208,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2773, 2364.30981, -1455.66992, 921.33612,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3461, 2364.32080, -1456.64673, 921.00208,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1704, 2363.05151, -1452.29041, 920.80615,   0.00000, 0.00000, 0.00000);
+	//CHURCH
+	CreateDynamicObject(6959, -1269.798096, 61.014786, 990.969116, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2894, -1268.897949, 39.037510, 993.868713, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(9931, -1226.648071, 64.336517, 1007.459229, 0.0000, 0.0000, 0.2803);
+	CreateDynamicObject(11489, -1258.692017, 25.302620, 992.535400, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(8675, -1260.602173, 12.042114, 991.605042, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(5426, -1302.512695, -7.271667, 978.601013, 0.0000, 0.0000, 359.9996);
+	CreateDynamicObject(2631, -1268.816650, 32.994812, 992.584595, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(14629, -1260.814941, 33.690956, 1005.193298, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(14394, -1269.385742, 42.079704, 991.741211, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(3462, -1265.720337, 23.939594, 994.052002, 0.0000, 0.0000, 269.9994);
+	CreateDynamicObject(2491, -1268.624268, 39.266262, 991.981323, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(6959, -1269.766479, 21.047943, 992.569519, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(14394, -1261.447876, 42.070145, 991.741211, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(14394, -1277.157593, 42.077320, 991.741211, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(14394, -1253.466187, 42.077168, 991.741211, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(14394, -1285.114258, 42.068722, 991.741211, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(9931, -1226.510742, 31.304241, 1007.483154, 0.0000, 0.0000, 0.2803);
+	CreateDynamicObject(9931, -1243.049805, 6.948307, 1007.458130, 0.0000, 0.0000, 0.2802);
+	CreateDynamicObject(9931, -1263.211914, 6.842917, 1007.468872, 0.0000, 0.0000, 0.2802);
+	CreateDynamicObject(9931, -1310.725830, 63.999893, 1007.483643, 0.0000, 0.0000, 180.2801);
+	CreateDynamicObject(3462, -1284.395996, 47.595222, 992.451599, 0.0000, 0.0000, 179.9993);
+	CreateDynamicObject(2869, -1267.020630, 24.050537, 992.538269, 0.0000, 0.0000, 141.0155);
+	CreateDynamicObject(9931, -1310.571899, 30.938040, 1007.483887, 0.0000, 0.0000, 180.2801);
+	CreateDynamicObject(6959, -1252.495117, 60.062286, 1000.491760, 146.9638, 0.0000, 270.0000);
+	CreateDynamicObject(6959, -1252.475830, 18.812710, 1000.467407, 146.9638, 0.0000, 270.0000);
+	CreateDynamicObject(6959, -1283.346924, 59.983360, 1001.541199, 146.9638, 0.0000, 90.0000);
+	CreateDynamicObject(6959, -1284.428101, 18.758923, 1000.834839, 146.9638, 0.0000, 90.0000);
+	CreateDynamicObject(6959, -1275.307861, 23.250977, 1000.808716, 90.2408, 0.0000, 180.0000);
+	CreateDynamicObject(3462, -1271.945190, 23.955713, 994.052002, 0.0000, 0.0000, 269.9994);
+	CreateDynamicObject(3462, -1252.848389, 47.714340, 992.451599, 0.0000, 0.0000, 359.9993);
+	CreateDynamicObject(14629, -1260.838135, 56.001854, 1005.323303, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(9310, -1273.187012, 15.477688, 994.223877, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(8675, -1280.886841, 12.025467, 991.629578, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(11489, -1278.911499, 25.316626, 992.535400, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2631, -1268.815796, 25.282019, 992.584595, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1268.811890, 29.137302, 992.584595, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1268.824707, 36.806702, 992.584595, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(3657, -1278.306519, 48.710224, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1278.306030, 51.160862, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1278.325073, 53.448265, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1278.282104, 55.846535, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1278.246582, 58.246803, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1278.231323, 60.671745, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1259.453735, 48.686584, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1259.453125, 51.064392, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1259.474609, 60.644825, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1259.465820, 55.847565, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1259.465332, 58.253082, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1259.465332, 53.453094, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1268.860474, 48.708618, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1268.865723, 58.255974, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1268.835083, 60.603638, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1268.857910, 51.071983, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1268.861694, 55.883762, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(3657, -1268.856445, 53.472572, 991.456055, 0.0000, 0.0000, 359.9938);
+	CreateDynamicObject(2631, -1273.757813, 60.560432, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1273.756714, 45.093994, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1273.757080, 48.929184, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1273.750244, 52.779720, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1273.752319, 56.678581, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1273.755737, 64.432190, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1264.422485, 45.129677, 990.984192, 0.0000, 0.0000, 89.9994);
+	CreateDynamicObject(2631, -1264.440308, 48.982594, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(2631, -1264.448608, 52.881546, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(2631, -1264.452271, 56.818733, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(2631, -1264.449341, 60.700542, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(2631, -1264.456909, 64.401794, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(2631, -1265.598022, 67.038857, 990.934143, 0.0000, 0.0000, 314.9993);
+	CreateDynamicObject(2631, -1268.286133, 69.724098, 990.984192, 0.0000, 0.0000, 314.9993);
+	CreateDynamicObject(2631, -1272.692505, 67.144173, 990.959167, 0.0000, 0.0000, 224.9993);
+	CreateDynamicObject(2631, -1270.009399, 69.826210, 990.934143, 0.0000, 0.0000, 224.9993);
+	CreateDynamicObject(2631, -1269.090576, 72.936592, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(2631, -1269.081177, 76.718849, 990.984192, 0.0000, 0.0000, 269.9993);
+	CreateDynamicObject(640, -1284.843384, 52.080120, 991.634888, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1284.854614, 57.542603, 991.634888, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1284.859375, 63.007648, 991.634888, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1252.367920, 52.167294, 991.634888, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(640, -1252.386108, 57.722496, 991.634888, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(640, -1252.355103, 63.192646, 991.634888, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(640, -1252.281982, 38.280861, 993.235291, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(640, -1252.259766, 32.770782, 993.235291, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(640, -1284.922852, 38.228271, 993.235291, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1284.935791, 32.689613, 993.235291, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1284.888672, 68.504333, 991.634888, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1284.916992, 73.970154, 991.634888, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(640, -1252.345947, 68.646187, 991.634888, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(640, -1252.393311, 74.148811, 991.634888, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(869, -1258.693604, 28.688025, 992.988098, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(869, -1279.180298, 28.854671, 992.988098, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2869, -1270.626831, 24.042725, 992.538269, 0.0000, 0.0000, 141.0155);
+	CreateDynamicObject(6959, -1268.710083, 63.640335, 1009.901855, 146.9638, 0.0000, 0.0000);
+	CreateDynamicObject(9931, -1251.179688, 104.122688, 1007.440796, 0.0000, 0.0000, 90.2803);
+	CreateDynamicObject(9931, -1287.250732, 103.995872, 1007.459229, 0.0000, 0.0000, 90.2803);
+	CreateDynamicObject(6959, -1266.597046, 79.032768, 1013.351868, 91.9597, 0.0000, 0.0000);
+	CreateDynamicObject(1557, -1270.587769, 79.775429, 990.944580, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1557, -1267.594482, 79.782951, 990.944580, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(3802, -1271.537964, 77.702072, 996.464355, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(3802, -1266.522949, 77.702583, 996.429810, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(3802, -1252.222656, 64.667465, 996.471680, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(3802, -1285.139526, 64.632408, 996.480652, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(3802, -1285.136719, 58.411289, 996.481140, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(3802, -1252.186523, 58.394234, 996.459717, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(3802, -1266.970581, 24.023315, 998.756348, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(3802, -1270.654297, 23.975155, 998.773254, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2253, -1268.439575, 39.064476, 992.818665, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2253, -1269.302246, 39.072876, 992.818665, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(1557, 2233.411377, -1334.981323, 22.988770, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1557, 2233.407227, -1331.968750, 22.987949, 0.0000, 0.0000, 269.9999);
+	CreateDynamicObject(16501, 2233.456543, -1334.099365, 23.632397, 0.0000, 0.0000, 0.0000);
+	//CreateDynamicObject(1280, 2228.33594, -1714.88562, 12.98414,   0.00000, 0.00000, 0.00000); //bench
+	CreateDynamicObject(1280, 2241.21948, -1722.68115, 12.98410,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(970, 2228.47290, -1727.08459, 13.04961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, 2232.65845, -1727.07239, 13.04961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, 2236.86011, -1727.06445, 13.04961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, 2224.51660, -1726.20728, 13.04961,   0.00000, 0.00000, -24.89999);
+	CreateDynamicObject(970, 2222.05615, -1723.32678, 13.04961,   0.00000, 0.00000, -73.67999);
+	CreateDynamicObject(970, 2221.71240, -1719.25830, 13.04961,   0.00000, 0.00000, -96.59998);
+	CreateDynamicObject(970, 2222.18677, -1715.13562, 13.04961,   0.00000, 0.00000, -96.59998);
+	CreateDynamicObject(1315, 2219.99536, -1719.55164, 15.77631,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(970, 2222.66089, -1710.99561, 13.04961,   0.00000, 0.00000, -96.59998);
+	//CreateDynamicObject(970, 2227.03076, -1708.89709, 13.04960,   0.00000, 0.00000, -178.92010);
+	//CreateDynamicObject(970, 2239.01123, -1722.40076, 13.04960,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(792, 2251.28149, -1725.74426, 12.5000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(792, 2282.98242, -1725.74426, 12.5000,   0.00000, 0.00000, 0.00000);
+	/*//HOSPITAL
+	CreateDynamicObject(1723, 1213.764771, -1351.247070, 1016.877075, 0.0000, 0.0000, 359.9999);
+	CreateDynamicObject(1533, 1197.403809, -1367.863037, 1016.873169, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1533, 1152.995850, -1342.390991, 25.685171, 0.0000, 0.0000, 360.0000);
+	CreateDynamicObject(1533, 1154.455933, -1342.406006, 25.672131, 0.0000, 0.0000, 360.0000);
+	CreateDynamicObject(640, 1218.441284, -1366.312378, 1017.576050, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(14597, 1200.445923, -1378.412720, 1030.471436, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(14596, 1219.333374, -1381.912598, 1021.760498, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(14594, 1191.541748, -1366.505127, 1016.863403, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(13636, 1205.485596, -1378.639160, 1023.786255, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(16399, 1198.091553, -1381.416626, 1017.520325, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2604, 1225.776123, -1353.122437, 1017.300537, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1533, 1197.370361, -1366.383545, 1016.873169, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1533, 1216.249634, -1380.723389, 1028.465576, 0.0000, 0.0000, 360.0000);
+	CreateDynamicObject(1533, 1214.754883, -1380.714844, 1028.465576, 0.0000, 0.0000, 360.0000);
+	CreateDynamicObject(2418, 1203.366089, -1387.538086, 1028.477417, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2418, 1204.941406, -1388.463135, 1028.477417, 0.0000, 0.0000, 90.0001);
+	CreateDynamicObject(2418, 1204.883301, -1369.032715, 1028.477417, 0.0000, 0.0000, 90.0001);
+	CreateDynamicObject(2418, 1203.221069, -1368.121216, 1028.477417, 0.0000, 0.0000, 270.0001);
+	CreateDynamicObject(2608, 1226.090820, -1350.271729, 1018.010071, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(16378, 1190.211914, -1377.711792, 1029.204590, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(16399, 1196.150146, -1349.886475, 1017.697205, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(14633, 1216.032959, -1365.686035, 1017.099304, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(14633, 1210.402100, -1346.428711, 1017.101501, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2604, 1225.804077, -1347.412231, 1017.275513, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1671, 1224.836792, -1352.376953, 1017.339233, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1671, 1224.805542, -1346.877930, 1017.339233, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2299, 1198.309448, -1368.280151, 1028.473145, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2299, 1200.949951, -1368.269897, 1028.473145, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2299, 1201.915894, -1388.523682, 1028.473145, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2299, 1199.155884, -1388.552246, 1028.473145, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2299, 1209.625732, -1388.479614, 1028.473145, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2299, 1207.073975, -1388.558960, 1028.473145, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2299, 1206.241577, -1368.317993, 1028.473145, 0.0000, 0.0000, 0.0001);
+	CreateDynamicObject(2299, 1209.185059, -1368.293823, 1028.473145, 0.0000, 0.0000, 0.0001);
+	CreateDynamicObject(640, 1213.739502, -1358.307373, 1017.568237, 0.0000, 0.0000, 0.0001);
+	CreateDynamicObject(640, 1222.649536, -1344.556152, 1017.576050, 0.0000, 0.0000, 270.0001);
+	CreateDynamicObject(640, 1202.809570, -1352.726074, 1017.576050, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1723, 1215.786255, -1355.072266, 1016.869263, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2608, 1213.380981, -1352.994019, 1018.208313, 0.0000, 0.0000, 90.0001);
+	CreateDynamicObject(1502, 1215.977295, -1361.354980, 1016.869995, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1502, 1214.027222, -1377.407227, 1016.851318, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1723, 1199.252319, -1341.479370, 1016.877075, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1723, 1202.269409, -1341.430054, 1016.877075, 0.0000, 0.0000, 360.0000);
+	CreateDynamicObject(1723, 1196.604004, -1345.034546, 1016.869263, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(640, 1196.051514, -1348.409424, 1017.568237, 0.0000, 0.0000, 0.0002);
+	CreateDynamicObject(640, 1207.756714, -1341.501343, 1017.576050, 0.0000, 0.0000, 270.0002);
+	CreateDynamicObject(3783, 1230.250000, -1376.914795, 1018.897949, 0.0000, 0.0000, 175.7028);*/
+	//MATPICKUP
+	CreateDynamicObject(944, 2386.495605, -2008.356934, 13.438490, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1271, 2387.261719, -2007.988037, 14.349586, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2358, 2386.569336, -2007.799561, 14.116121, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2359, 2384.486084, -2007.849976, 12.763988, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2358, 2387.232178, -2008.728516, 14.116121, 0.0000, 0.0000, 337.5000);
+	CreateDynamicObject(1635, 2395.528320, -2008.089722, 16.236403, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1522, 2389.684326, -2007.461548, 12.540270, 0.0000, 0.0000, 0.0000);
+	//MATDELIVER
+	CreateDynamicObject(3265, 2268.533447, -1136.080566, 27.139744, 0.0000, 0.0000, 351.4056);
+	CreateDynamicObject(984, 2294.078125, -1114.260376, 37.538239, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(984, 2294.097168, -1101.486816, 37.537029, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(944, 2284.854492, -1103.568726, 37.861351, 0.0000, 0.0000, 67.5000);
+	CreateDynamicObject(944, 2291.843994, -1103.760742, 37.861351, 0.0000, 0.0000, 168.7500);
+	CreateDynamicObject(964, 2283.867676, -1105.427246, 36.976563, 0.0000, 0.0000, 67.5000);
+	CreateDynamicObject(2358, 2284.159668, -1103.942505, 38.538982, 0.0000, 0.0000, 67.5000);
+	//TRIADS
+	CreateDynamicObject(3525, 1193.078979, -1651.859863, 14.268278, 0.0000, 0.0000, 0.0000); //flame 01
+	CreateDynamicObject(3525, 1189.237183, -1651.868774, 14.293088, 0.0000, 0.0000, 0.0000); //flame 02
+	CreateDynamicObject(2025, 774.7000, -49.5000, 999.6000, 0.0000, 0.0000, 180.0000); //triadsblock 01
+	CreateDynamicObject(2025, 774.7000, -50.3600, 999.6000, 0.0000, 0.0000, 180.0000); //triadsblock 02
+	CreateDynamicObject(2025, 774.7000, -49.5000, 1002.1000, 0.0000, 0.0000, 180.0000); //triadsblock 03
+	CreateDynamicObject(2025, 774.7000, -50.3600, 1002.1000, 0.0000, 0.0000, 180.0000); //triadsblock 04
+	//SHOOTING RANGE
+	CreateDynamicObject(2369, 462.267822, -748.740845, 3.652205, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2412, 468.441956, -764.161743, 2.655633, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2412, 466.617737, -764.188416, 2.655634, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(3776, 445.508514, -748.949341, 12.223398, 0.0000, 0.0000, 90.8594);
+	CreateDynamicObject(964, 458.854156, -757.800964, 2.655633, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2358, 458.539520, -756.465210, 3.852432, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(3800, 458.722778, -756.418579, 2.652178, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(986, 464.841064, -760.465637, 4.366301, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(976, 468.987518, -756.3, 0.569101, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(976, 468.987518, -765.1, 0.569101, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(18038, 470.041229, -760.577271, 4.882196, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(18092, 463.026276, -748.728149, 3.155056, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(8411, 470.506012, -759.644653, -62.409958, 0.0000, 0.0000, 272.5010);
+	CreateDynamicObject(2773, 461.368256, -761.518677, 3.172862, 0.0000, 0.0000, 22.5000);
+	CreateDynamicObject(2773, 459.999268, -761.580994, 3.172862, 0.0000, 0.0000, 22.5000);
+	CreateDynamicObject(2773, 462.674622, -763.841370, 3.172862, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2773, 461.025238, -763.173096, 3.172862, 0.0000, 0.0000, 45.0000);
+	CreateDynamicObject(2773, 462.735443, -762.398193, 3.172862, 0.0000, 0.0000, 90.0000);
+	//MARCS ROOM
+	CreateDynamicObject(14419, 1481.929932, -1643.986572, 948.874634, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(16637, 1491.703369, -1639.720825, 946.807190, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(16637, 1497.452881, -1634.079346, 947.132507, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(14638, 1501.357544, -1634.133667, 945.619141, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(14638, 1498.368896, -1634.133667, 945.619141, 0.0000, 0.0000, 269.9999);
+	CreateDynamicObject(14638, 1491.706421, -1636.691650, 945.619141, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1796, 1495.213989, -1639.929565, 945.611267, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2021, 1493.234497, -1638.470459, 945.624634, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2852, 1492.585571, -1638.751953, 945.624756, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2851, 1501.579834, -1634.397583, 945.624695, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2828, 1492.124756, -1645.101196, 948.153442, 0.0000, 0.0000, 262.2651);
+	CreateDynamicObject(2813, 1491.992310, -1638.495361, 946.524841, 0.0000, 0.0000, 292.5000);
+	CreateDynamicObject(2232, 1502.137207, -1637.213989, 945.571899, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2025, 1492.014526, -1645.052368, 945.621460, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1728, 1500.373657, -1645.723755, 945.622620, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(1999, 1501.588501, -1636.448242, 945.624634, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2232, 1501.628784, -1636.388428, 946.609619, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2232, 1501.646362, -1636.463501, 946.584595, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(3472, 1506.404785, -1635.959839, 937.092651, 0.0000, 0.0000, 65.3083);
+	CreateDynamicObject(3472, 1506.470947, -1636.554443, 938.523743, 0.0000, 0.0000, 189.0583);
+	CreateDynamicObject(3472, 1507.113159, -1638.521484, 952.886414, 0.0000, 85.0842, 189.0583);
+	CreateDynamicObject(2819, 1499.761475, -1645.178833, 945.620789, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2819, 1499.639160, -1645.296143, 945.620789, 0.0000, 0.0000, 67.5000);
+	CreateDynamicObject(2819, 1499.587280, -1645.455933, 946.109680, 0.0000, 0.0000, 281.2500);
+	CreateDynamicObject(2386, 1499.566040, -1644.422363, 945.727783, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2845, 1498.275757, -1645.359131, 945.634644, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2844, 1498.738281, -1645.512695, 946.122009, 0.0000, 0.0000, 303.7500);
+	CreateDynamicObject(2846, 1497.000977, -1645.767334, 945.638550, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2843, 1498.008179, -1646.089600, 946.142395, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(18084, 1496.801147, -1645.172729, 947.928589, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(18084, 1494.195190, -1645.152832, 947.919739, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(18084, 1492.681396, -1644.394897, 947.945313, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2045, 1492.439819, -1645.918701, 945.941528, 301.6622, 0.0000, 0.0000);
+	//LSPD
+	CreateDynamicObject(983, 1544.719238, -1620.600000, 13.213117, 0.0000, 0.0000, 0.0000); //front gate fence 01
+	CreateDynamicObject(983, 1544.704590, -1635.950000, 13.213117, 0.0000, 0.0000, 0.0000); //front gate fence 02
+	CreateDynamicObject(1334, 1544.863037, -1616.862305, 13.395647, 0.0000, 0.0000, 0.0000); //blue bin
+	CreateDynamicObject(1343, 1546.723389, -1617.042847, 13.139275, 0.0000, 0.0000, 180.0000); //small blue bin
+	CreateDynamicObject(1496, 1564.150513, -1667.3, 27.389730, 0.0000, 0.0000, 0.0000); //roof door
+	CreateDynamicObject(1496, 1582.600464, -1637.951782, 12.554016, 0.0000, 0.0000, 0.0000); //garage door
+	CreateDynamicObject(1507, 2263.2583, -1209.7000, 1048.0234, 0.0000, 0.0000, -90.0000); //vagosblock
+	CreateDynamicObject(1537, -2169.5890, 639.9550, 1051.4000, 0.0000, 0.0000, 0.0000); //yakuzablock
+	CreateDynamicObject(2567, 2225.1010, 1596.8000, 1000.9500, 0.0000, 0.0000, 0.0000); //drugfacblock 01
+	CreateDynamicObject(2567, 2194.9000, 1618.6484, 1000.9500, 0.0000, 0.0000, 90.0000); //drugfacblock 02
+	CreateDynamicObject(1685, 2205.9358, 1580.4000, 999.6800, 0.0000, 0.0000, 0.0000); //drugfaccbox
+	//LSPD DOOR
+	CreateDynamicObject(13360, 222.201110, 68.510246, 1005.039062, 0.000000, 0.000000, 269.637847); //sideblock 1
+	CreateDynamicObject(13360, 222.197418, 68.508964, 1006.065673, 0.000000, 0.000000, 268.384521); //sideblock 2
+	CreateDynamicObject(13360, 222.148254, 71.100784, 1005.039062, 0.000000, 0.000000, 270.767974); //sideblock 3
+	CreateDynamicObject(13360, 222.163452, 71.105056, 1005.673706, 0.000000, 0.000000, 268.260955); //sideblock 4
+	//LSPD CHIEF DOOR & OBJECTS
+	CreateDynamicObject(2167, 216.87, 66.90, 1004.00,   0.00, 0.00, 87.64);
+	CreateDynamicObject(2167, 216.91, 67.81, 1004.00,   0.00, 0.00, 87.64);
+	CreateDynamicObject(2167, 216.95, 68.73, 1004.00,   0.00, 0.00, 87.64);
+	CreateDynamicObject(1808, 217.13, 69.46, 1004.00,   0.00, 0.00, -268.51);
+	CreateDynamicObject(2164, 217.91, 65.81, 1004.00,   0.00, 0.00, 179.96);
+	CreateDynamicObject(2164, 221.44, 65.82, 1004.00,   0.00, 0.00, -180.75);
+	CreateDynamicObject(2164, 219.68, 65.82, 1004.00,   0.00, 0.00, -180.65);
+	CreateDynamicObject(2008, 219.13, 68.01, 1004.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1714, 219.46, 66.77, 1004.00,   0.00, 0.00, 164.00);
+	CreateDynamicObject(1703, 217.90, 72.23, 1004.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1776, 217.30, 70.39, 1004.99,   0.00, 0.00, -270.94);
+	CreateDynamicObject(2001, 217.31, 71.43, 1004.00,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1714, 219.75, 69.42, 1004.00,   0.00, 0.00, -9.08);
+	CreateDynamicObject(1704, 220.74, 72.19, 1004.00,   0.00, 0.00, 0.00);
+	//FBI OBJECTS & DOORS
+	CreateDynamicObject(8674, 232.90, 125.86, 1013.04,   180.00, 0.00, 90.00); //blockoff
+	CreateDynamicObject(1846, 231.93, 123.19, 1010.65,   90.00, 0.00, 90.00); //glass
+	CreateDynamicObject(1846, 231.93, 125.98, 1010.65,   90.00, 0.00, 90.00); //glass
+	CreateDynamicObject(1846, 238.55, 112.65, 1004.67,   90.00, 90.00, 0.00); //unbreakable glass
+	CreateDynamicObject(1846, 252.23, 117.44, 1004.67,   90.00, 90.00, 0.00); //unbreakable glass
+	CreateDynamicObject(8673, 243.40, 119.36, 1006.19,   180.00, 0.00, 0.00); //lobby blockoff-fence
+	CreateDynamicObject(1886, 241.10254, 126.31700, 1007.44879,   23.00000, 0.00000, 34.50000);
+	CreateDynamicObject(1886, 252.30681, 118.50759, 1007.24481,   23.00000, 0.00000, -42.50000);
+	CreateDynamicObject(2190, 251.33554, 119.45097, 1003.41602,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2190, 245.11832, 119.53684, 1003.41602,   0.00000, 0.00000, 149.97000);
+	CreateDynamicObject(2190, 243.18100, 119.39450, 1003.41602,   0.00000, 0.00000, 176.81500);
+	CreateDynamicObject(2201, 247.41579, 120.02654, 1003.41522,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1806, 242.05820, 121.03630, 1002.21509,   0.00000, 0.00000, 209.12000);
+	CreateDynamicObject(1806, 246.26570, 121.00200, 1002.21509,   0.00000, 0.00000, 177.27000);
+	CreateDynamicObject(1806, 251.29056, 121.21151, 1002.21509,   0.00000, 0.00000, 159.07001);
+	CreateDynamicObject(2894, 246.14835, 119.61678, 1003.41541,   0.00000, 0.00000, -6.37000);
+	CreateDynamicObject(2894, 250.68781, 119.73157, 1003.41541,   0.00000, 0.00000, -2.27500);
+	CreateDynamicObject(2894, 242.68361, 119.70419, 1003.41541,   0.00000, 0.00000, 5.91500);
+	CreateDynamicObject(19462, 241.56670, 114.59550, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 241.56650, 104.95920, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 245.06461, 104.98090, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 248.56081, 104.97950, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 251.22870, 105.00010, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 245.06329, 114.61200, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 248.56059, 114.60950, 1002.14362,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19462, 251.22749, 114.62670, 1002.14160,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(1536, 244.89140, 106.98990, 1002.21960,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1536, 247.91010, 107.02720, 1002.21960,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1808, 240.03329, 114.61440, 1002.23181,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1819, 252.43745, 111.09379, 1002.23102,   0.00000, 0.00000, 45.00000);
+	CreateDynamicObject(2852, 252.34067, 111.83498, 1002.72748,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2247, 252.64230, 111.96216, 1003.14203,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(646, 240.53925, 107.89581, 1003.58752,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2601, 241.66560, 119.81480, 1003.49469,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2196, 250.46770, 120.17328, 1003.41449,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2161, 239.86870, 120.53720, 1002.21399,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2163, 252.96928, 121.31219, 1002.21503,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2164, 241.98737, 127.03932, 1002.21503,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2612, 252.91859, 111.61450, 1004.02252,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2611, 252.91910, 121.34380, 1003.96259,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(2737, 251.44420, 127.03170, 1003.60138,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2615, 251.47279, 127.02430, 1003.87720,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2002, 240.36464, 121.99672, 1002.21478,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2010, 240.40068, 126.40847, 1002.21442,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2609, 247.03740, 126.70410, 1002.94299,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2609, 246.38190, 126.70249, 1002.94299,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2186, 248.02271, 126.54970, 1002.21600,   0.00000, 0.00000, 0.00000);
+	//PRISON
+	CreateDynamicObject(14412, 1789.184448, -1569.734131, 1645.317383, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(18553, 1757.807495, -1577.933228, 1641.404663, 0.000000, 0.000000, -180.859341949);
+	CreateDynamicObject(1800, 1771.276611, -1584.358398, 1635.990845, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1966, 1770.740234, -1583.169922, 1637.284180, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1776.392700, -1583.226563, 1637.359253, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1798.508789, -1583.209229, 1637.310425, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(2514, 1775.742798, -1582.768799, 1635.972778, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(1508, 1806.459961, -1576.635376, 1637.506836, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(14459, 1784.398560, -1569.747925, 1643.005615, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(14414, 1768.359863, -1563.225098, 1636.910400, 0.000000, 0.000000, 179.999962552);
+	CreateDynamicObject(1499, 1766.208862, -1580.001831, 1640.113403, 0.000000, 0.000000, 269.999943828);
+	CreateDynamicObject(1499, 1766.235107, -1583.019409, 1640.106812, 0.000000, 0.000000, 90.0000385718);
+	CreateDynamicObject(8060, 1791.806763, -1535.868530, 1634.645874, -181.340741088, 0.000000, 0.000114591559026);
+	CreateDynamicObject(1966, 1776.405151, -1556.301025, 1637.259155, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1781.872559, -1556.312622, 1637.260132, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1787.494995, -1556.312012, 1637.309204, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1793.112305, -1556.317383, 1637.309204, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1798.479492, -1556.314819, 1637.334961, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(2514, 1801.900879, -1556.299805, 1635.972778, 0.000000, 0.000000, -360.000039696);
+	CreateDynamicObject(2514, 1797.694580, -1556.320923, 1635.972778, 0.000000, 0.000000, -360.000039696);
+	CreateDynamicObject(2514, 1792.343384, -1556.328247, 1635.972778, 0.000000, 0.000000, -360.000039696);
+	CreateDynamicObject(2514, 1786.635132, -1556.303223, 1635.972778, 0.000000, 0.000000, -360.000039696);
+	CreateDynamicObject(2514, 1775.718750, -1556.331665, 1635.972778, 0.000000, 0.000000, -360.000039696);
+	CreateDynamicObject(2514, 1781.187256, -1556.340454, 1635.972778, 0.000000, 0.000000, -360.000039696);
+	CreateDynamicObject(1800, 1771.360718, -1559.318848, 1635.851929, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1800, 1777.049072, -1559.313843, 1635.801880, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1800, 1782.598267, -1559.296021, 1635.826904, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1800, 1788.114868, -1559.312378, 1635.801880, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1800, 1793.790649, -1559.328369, 1635.901978, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1800, 1799.285767, -1559.336670, 1635.901978, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(16378, 1760.124512, -1569.561523, 1640.866821, 0.000000, 0.000000, 180.000019848);
+	CreateDynamicObject(16154, 1761.361694, -1562.671509, 1640.236450, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(2737, 1757.953247, -1566.131714, 1642.168091, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1781.853516, -1583.229004, 1637.334229, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1787.537476, -1583.232300, 1637.343872, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(1966, 1793.307007, -1583.234009, 1637.309937, 0.000000, 0.000000, 89.999981276);
+	CreateDynamicObject(2514, 1781.272949, -1582.731934, 1635.972778, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(2514, 1786.829224, -1582.760132, 1635.972778, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(2514, 1792.491821, -1582.755005, 1635.972778, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(2514, 1797.929688, -1582.738647, 1635.972778, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(2514, 1802.001953, -1582.729614, 1635.972778, 0.000000, 0.000000, -180.000019848);
+	CreateDynamicObject(1800, 1777.064087, -1584.312622, 1635.977051, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1800, 1782.810181, -1579.774170, 1635.977051, 0.000000, 0.000000, -179.999962552);
+	CreateDynamicObject(1800, 1788.411133, -1579.764282, 1635.977051, 0.000000, 0.000000, -179.999962552);
+	CreateDynamicObject(1800, 1794.223511, -1579.755005, 1635.977051, 0.000000, 0.000000, -179.999962552);
+	CreateDynamicObject(1800, 1799.393555, -1579.773682, 1635.977051, 0.000000, 0.000000, -179.999962552);
+	//PRISON OUTSIDE
+	CreateDynamicObject(2961, 1765.9000, -1574.0979, 1641.7, 0.000000, 0.000000, 270.0); // Cell Button
+	CreateDynamicObject(2961, 209.039398, 1813.174683, 22.5, 0.000000, 0.000000, 44.999990638); // Gate Button
+	CreateDynamicObject(18553, 226.373581, 1872.370239, 14.026321, 0.000000, 0.000000, -0.859436692696);
+	CreateDynamicObject(1508, 201.098923, 1869.536499, 13.755270, 0.000000, 0.000000, 0.000000);
+	CreateDynamicObject(1886, 201.656082, 1874.104370, 16.244650, 18.9076072393, 0.000000, 44.999990638); // Camera
+	CreateDynamicObject(1886, 159.715179, 1931.205322, 32.528725, 16.3292971612, 0.000000, 292.500053739); // Camera
+	CreateDynamicObject(1886, 264.598419, 1893.736816, 32.537567, 16.3292971612, 0.000000, 270.000001124); // Camera
+	CreateDynamicObject(1886, 167.735580, 1848.043457, 32.510399, 16.3292971612, 0.000000, 90.0000385718); // Camera
+	CreateDynamicObject(1886, 460.5567, -92.2545, 1002.25, 10.0, 0.0, 235.0); // Camera
+	CreateDynamicObject(1886, 1766.85, -1570.11, 1646.0, 15.0, 0.0, 90.0); // Camera
+	CreateDynamicObject(1886, 265.112061, 1862.907837, 12.618983, 18.9076072393, 0.000000, 44.999990638); // Camera
+	//LS FOUNTAIN
+	CreateDynamicObject(9833, 1479.86, -1640.36, 14.15, 0.00, 0.00, 0.00); //LS FOUNTAIN
+	//PRISON PHONE
+	CreateDynamicObject(1216, 185.3808, 1923.9442, 17.4, 0.000000, 0.0, 0.0); //prison phone
+	CreateDynamicObject(1505, -221.9176, 1404.6, 26.6, 0.000000, 0.000000, -90.00000); // Lil Probe Inn Door For Locker Room
+	//ATMS
+	CreateDynamicObject(2942, 1928.673461, -1783.487304, 13.114453, 0.000000, 0.000000, 90.431625); //atm object
+	//CreateDynamicObject(2942, 2228.281982, -1710.821166, 13.177772, 0.000000, 0.000000, 269.949920); // atm object gym
+	//CreateDynamicObject(2618, 2228.382324, -1710.860961, 12.549647, 0.000000, 0.000000, 269.315551); // atm protection gym
+	CreateDynamicObject(2942, 1548.155884, -1472.062866, 1036.653442, 0.0000, 0.0000, 270.0000); // ATM VIP
+	CreateDynamicObject(2942, 651.20215, -520.47241, 15.95219,   0.00000, 0.00000, 0.00000); //dillimore
+	CreateDynamicObject(2942, 251.26659, -189.68741, 1.16737,   0.00000, 0.00000, 0.00000); //blueberry
+	//VIP CLUB
+	CreateObject(8172, 1528.93689, -1454.49780, 8.50707,   0.00000, 0.00000, 0.00000); //VIP Garage Floor (this stops vehicles from falling through the map)
+	CreateObject(14777, 1532.529297, -1474.430298, 1036.002686, 0.0000, 0.0000, 0.0000); //Floor
+	CreateDynamicObject(1726, 1532.04589844, -1475.37109375, 1036.00292969, 0.00000000, 0.00000000, 90.00000000); //convertffs(1)
+	CreateDynamicObject(1726, 1538.87976100, -1473.34668000, 1036.00293000, 0.00000000, 0.00000000, 270.00000000); //convertffs(2)
+	CreateDynamicObject(1726, 1529.01147500, -1473.39013700, 1036.00293000, 0.00000000, 0.00000000, 270.00000000); //convertffs(3)
+	CreateDynamicObject(1726, 1541.98901400, -1475.36938500, 1036.00293000, 0.00000000, 0.00000000, 90.00000000); //convertffs(4)
+	CreateDynamicObject(1726, 1537.85607900, -1468.95263700, 1036.00293000, 0.00000000, 0.00000000, 0.00000000); //convertffs(5)
+	CreateDynamicObject(1726, 1540.61621100, -1468.95275900, 1036.00293000, 0.00000000, 0.00000000, 0.00000000); //convertffs(6)
+	CreateDynamicObject(1726, 1541.95520000, -1479.81738300, 1036.00293000, 0.00000000, 0.00000000, 180.00000000); //convertffs(7)
+	CreateDynamicObject(1726, 1539.23803700, -1479.84558100, 1036.00293000, 0.00000000, 0.00000000, 180.00000000); //convertffs(8)
+	CreateDynamicObject(2004, 1548.55004883, -1477.00000000, 1037.90002441, 0.00000000, 0.00000000, 270.00000000); //object(cr_safe_door) (1)
+	CreateDynamicObject(2004, 1548.55004883, -1473.80004883, 1037.90002441, 0.00000000, 0.00000000, 270.00000000); //object(cr_safe_door) (2)
+	CreateDynamicObject(2006, 1548.50000000, -1474.40002441, 1037.90002441, 0.00000000, 0.00000000, 90.00000000); //object(cr_safe_dial) (1)
+	CreateDynamicObject(2006, 1548.40002441, -1477.59997559, 1037.90002441, 0.00000000, 0.00000000, 90.00000000); //object(cr_safe_dial) (2)
+	//BALLAS OBJECTS?
+	CreateDynamicObject(1557, 1240.30, -810.765, 1083.02, 0.0, 0.0, 270.0);
+	CreateDynamicObject(1557, 1240.30, -813.80, 1083.02, 0.0, 0.0, 90.0);
+	CreateDynamicObject(1557, 1225.025, -814.2, 1083.02, 0.0, 0.0, 0.0);
+	CreateDynamicObject(1557, 1228.045, -814.2, 1083.02, 0.0, 0.0, 180.0);
+	//Mapped & object edited by Jacob Malcom
+	new roof1 = CreateDynamicObject(19381, 302.8542, 2504.5056, 501.3299, 0.00, 90.00, 0.00);
+	SetDynamicObjectMaterial(roof1, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new roof2 = CreateDynamicObject(19381, 302.8319, 2514.1377, 501.3299, 0.00, 90.00, 0.00);
+	SetDynamicObjectMaterial(roof2, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new floor1 = CreateObject(19381, 302.8319, 2514.1377, 498.8299, 0.00, 90.00, 0.00);
+	SetObjectMaterial(floor1, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall2 = CreateDynamicObject(19381, 302.9942, 2516.3008, 501.3299, 0.00, 0.00, 90.00);
+	SetDynamicObjectMaterial(wall2, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall3 = CreateDynamicObject(19373, 300.4990, 2511.4390, 500.5299, 0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(wall3, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall4 = CreateDynamicObject(19373, 300.4982, 2514.6462, 500.5299, 0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(wall4, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall5 = CreateDynamicObject(19373, 300.4996, 2508.2295, 500.5299, 0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(wall5, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall6 = CreateDynamicObject(19373, 304.7747, 2508.2332, 500.5299, 0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(wall6, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall7 = CreateDynamicObject(19373, 304.8102, 2511.4446, 500.5299, 0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(wall7, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new wall8 = CreateDynamicObject(19373, 304.8042, 2514.6541, 500.5299, 0.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(wall8, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new drframe = CreateDynamicObject(19391, 302.5655, 2516.1812, 500.4299, 0.00, 0.00, 90.00);
+	SetDynamicObjectMaterial(drframe, 0, 964, "cj_crate_will", "CJ_FLIGHT_CASE", 0xFF2B3D05);
+	new exitdoor = CreateDynamicObject(2929, 302.66, 2508.66, 500.02,   50.00, 0.00, 0.00);
+	SetDynamicObjectMaterial(exitdoor, 0, 2929, "a51_imy", "a51_blastdoor", 0xFF2B3D05);
+	new seat1 = CreateDynamicObject(2119, 304.56, 2510.74, 498.62,   0.00, 0.00, 90.00);
+	SetDynamicObjectMaterial(seat1, 0, 2929, "cj_tables", "CJ_WOOD5", 0xFF2B3D05);
+	new seat2 = CreateDynamicObject(2119, 304.56, 2512.72, 498.62,   0.00, 0.00, 90.00);//seat
+	SetDynamicObjectMaterial(seat2, 0, 2929, "cj_tables", "CJ_WOOD5", 0xFF2B3D05);
+	new seat3 = CreateDynamicObject(2119, 304.56, 2514.70, 498.62,   0.00, 0.00, 90.00);//seat
+	SetDynamicObjectMaterial(seat3, 0, 2929, "cj_tables", "CJ_WOOD5", 0xFF2B3D05);
+	new seat4 = CreateDynamicObject(2119, 300.80, 2510.73, 498.62,   0.00, 0.00, 90.00);//seat
+	SetDynamicObjectMaterial(seat4, 0, 2929, "cj_tables", "CJ_WOOD5", 0xFF2B3D05);
+	new seat5 = CreateDynamicObject(2119, 300.80, 2512.71, 498.62,   0.00, 0.00, 90.00);//seat
+	SetDynamicObjectMaterial(seat5, 0, 2929, "cj_tables", "CJ_WOOD5", 0xFF2B3D05);
+	new seat6 = CreateDynamicObject(2119, 300.80, 2514.69, 498.62,   0.00, 0.00, 90.00); //seat
+	SetDynamicObjectMaterial(seat6, 0, 2929, "cj_tables", "CJ_WOOD5", 0xFF2B3D05);
+	new drpilot = CreateDynamicObject(2944, 303.3891, 2516.1833, 499.9000, 0.00, 0.00, 270.00); //door to pilot
+	SetDynamicObjectMaterial(drpilot, 0, 2929, "bigshapx", "freighter1", 0xFF2B3D05);
+	CreateDynamicObject(14550, 302.65, 2498.46, 499.51,   15.00, 0.00, 0.00);//cargone
+	//VIP Club
+	// LS Wheels Arch Angels
+	CreateDynamicObject(8947, 2118.908691, -2144.242432, 15.635593, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(8947, 2118.907, -2144.243, 18.166914, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2048, 2124.459473, -2131.939453, 19.628647, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2048, 2113.323242, -2131.939453, 19.637478, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2587, 2125.718750, -2139.818115, 15.171194, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2588, 2125.743652, -2142.543945, 15.169697, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2714, 2114.124023, -2131.939453, 14.847555, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(10281, 2118.842285, -2131.167480, 18.690567, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(14826, 2114.785400, -2153.783936, 12.991997, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(939, 2113.382813, -2136.948975, 15.076038, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1327, 2113.248291, -2151.069580, 12.589864, 358.2811, 90.2409, 0.0000);
+	CreateDynamicObject(1327, 2114.385498, -2151.370361, 13.189855, 358.2811, 90.2409, 0.0000);
+	CreateDynamicObject(1327, 2115.313232, -2151.051514, 12.550803, 358.2811, 90.2409, 0.0000);
+	CreateDynamicObject(1358, 2127.789551, -2134.615967, 13.828096, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(12957, 2113.870850, -2141.742188, 13.511029, 0.0000, 0.0000, 360.0000);
+	CreateDynamicObject(13591, 2128.792725, -2141.216309, 12.884167, 0.0000, 0.0000, 270.0000);
+	//CreateDynamicObject(8948, 2118.905, -2132.019775, 14.379093, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2911, 2109.93237, -2125.60205, 12.64071,   0.00000, 0.00000, -90.18001); //door
+	// FightClub
+	CreateDynamicObject(14781, 2337.417725, -1242.319458, 22.4, 0.0000, 0.0000, 0.0000); // 14780
+	CreateDynamicObject(10671, 2313.504395, -1217.852539, 24.981819, 0.0000, 0.0000, 359.1406);
+	CreateDynamicObject(10671, 2322.292236, -1218.081665, 23.292707, 0.0000, 0.0000, 179.1405);
+	CreateDynamicObject(10671, 2352.214600, -1265.512939, 23.370344, 0.0000, 0.0000, 357.4217);
+	CreateDynamicObject(10671, 2351.720703, -1279.122314, 23.365671, 0.0000, 0.0000, 357.4216);
+	CreateDynamicObject(10671, 2351.993896, -1271.819336, 25.893682, 0.0000, 0.0000, 357.4217);
+	CreateDynamicObject(2063, 2351.614014, -1270.184326, 22.414352, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2063, 2351.621826, -1267.529297, 22.421108, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1808, 2351.688477, -1265.868042, 21.505781, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2102, 2351.485107, -1266.723511, 23.200289, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(2146, 2351.322510, -1264.128296, 21.995489, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(10671, 2351.856201, -1279.091187, 23.402435, 0.0000, 0.0000, 177.4217);
+	CreateDynamicObject(10671, 2352.236084, -1265.474609, 23.394505, 0.0000, 0.0000, 177.4217);
+	CreateDynamicObject(10671, 2352.129883, -1271.079834, 25.872356, 0.0000, 0.0000, 177.4217);
+	CreateDynamicObject(1491, 2352.026611, -1271.538086, 21.515621, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(14782, 2334.008789, -1214.968628, 22.516048, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(14782, 2340.441162, -1214.977051, 22.516048, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(14782, 2322.85, -1244.48, 22.516048, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(14782, 2322.85, -1237.48, 22.516048, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2590, 2349.090088, -1220.506104, 24.265539, 180.4819, 0.0000, 33.7500);
+	CreateDynamicObject(1985, 2349.121338, -1220.473022, 24.328732, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2590, 2349.097168, -1223.775879, 24.271837, 180.4819, 0.0000, 33.7500);
+	CreateDynamicObject(1985, 2349.122559, -1223.765381, 24.328732, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(3657, 2337.629150, -1236.419800, 22.018211, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(3657, 2332.188232, -1242.168823, 22.018211, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(3657, 2337.508301, -1247.932251, 22.018211, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(3657, 2343.370850, -1242.297852, 22.018211, 0.0000, 0.0000, 269.9999);
+	CreateDynamicObject(16501, 2333.07, -1272.811646, 23.707500, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(16501, 2325.908203, -1267.651001, 23.707500, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(16501, 2329.621094, -1267.655151, 23.707500, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(16501, 2333.087891, -1271.284424, 26.158493, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1828, 2329.534180, -1273.255371, 21.472719, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1723, 2332.262207, -1271.516479, 21.505070, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1723, 2331.052246, -1274.996826, 21.498047, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(638, 2323.984619, -1268.229004, 22.204056, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2007, 2327.791016, -1274.957031, 21.495609, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2332, 2322.794922, -1270.519165, 21.962885, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2631, 2349.15, -1241.99, 21.5, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2915, 2349.35, -1240.73, 21.65, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(3657, 2337.724121, -1235.408813, 22.018211, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(3657, 2343.304199, -1229.980103, 22.018211, 0.0000, 0.0000, 269.9999);
+	CreateDynamicObject(3657, 2331.988037, -1229.879517, 22.018211, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(3657, 2337.634033, -1223.912842, 22.018211, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(14781, 2336.899170, -1230.123413, 22.41, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(986, 2340.959717, -1256.359863, 20.635706, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(986, 2336.961914, -1252.338379, 20.660706, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(986, 2332.965332, -1256.290283, 20.660686, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(986, 2336.965576, -1260.350464, 20.660706, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(14782, 2322.891602, -1260.076416, 22.523071, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2773, 2361.154053, -1269.620728, 23.521690, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2773, 2361.131104, -1274.587158, 23.518616, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2773, 2361.140869, -1272.662109, 23.518137, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(1808, 2322.573730, -1273.993530, 21.494843, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2126, 2329.025146, -1273.649048, 21.494965, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1671, 2324.918457, -1274.390625, 21.960215, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2605, 2324.765381, -1273.118652, 21.898438, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(2913, 2348.81, -1247.2, 22.5, 90.0000, 0.0000, 90.0000);
+	CreateDynamicObject(2629, 2349.28, -1247.68, 21.5, 0.0000, 0.0000, 0.0000);
+
+
+	//GAS STATION PUMPS
+	//LV
+	CreateDynamicObject(3465, 67, 1217.0999755859, 19.5, 0, 0, 344);
+	CreateDynamicObject(3465, 68, 1220.8000488281, 19.5, 0, 0, 343.99841308594);
+	CreateDynamicObject(3465, 73.800003051758, 1219.3000488281, 19.5, 0, 0, 343.99841308594);
+	CreateDynamicObject(3465, 72.800003051758, 1215.5, 19.5, 0, 0, 343.99841308594);
+	//LV 2
+	CreateDynamicObject(3465, 603.5, 1707.3000488281, 7.5, 0, 0, 306);
+	CreateDynamicObject(3465, 606.90002441406, 1702.1999511719, 7.5, 0, 0, 305.99670410156);
+	CreateDynamicObject(3465, 610.29998779297, 1697.1999511719, 7.5, 0, 0, 305.99670410156);
+	CreateDynamicObject(3465, 613.70001220703, 1692.1999511719, 7.5, 0, 0, 305.99670410156);
+	CreateDynamicObject(3465, 617.09997558594, 1687.4000244141, 7.5, 0, 0, 305.99670410156);
+	CreateDynamicObject(3465, 620.5, 1682.4000244141, 7.5, 0, 0, 305.99670410156);
+	CreateDynamicObject(3465, 624.09997558594, 1677.5999755859, 7.5, 0, 0, 305.99670410156);
+	//LV 3
+	CreateDynamicObject(3465, 2196.8000488281, 2470.1999511719, 11.300000190735, 0, 0, 0);
+	CreateDynamicObject(3465, 2196.8000488281, 2474.6999511719, 11.300000190735, 0, 0, 0);
+	CreateDynamicObject(3465, 2196.8000488281, 2480.3000488281, 11.300000190735, 0, 0, 0);
+	CreateDynamicObject(3465, 2207.6000976563, 2480.3000488281, 11.300000190735, 0, 0, 0);
+	CreateDynamicObject(3465, 2207.6000976563, 2474.6999511719, 11.300000190735, 0, 0, 0);
+	CreateDynamicObject(3465, 2207.6000976563, 2470.1999511719, 11.300000190735, 0, 0, 0);
+	//COUNTRY
+	CreateDynamicObject(3465, -2246.6000976563, -2559.8000488281, 32.400001525879, 0, 0, 331.5);
+	CreateDynamicObject(3465, -2241.6999511719, -2562.3000488281, 32.400001525879, 0, 0, 331.49597167969);
+	//SF 1
+	CreateDynamicObject(3465, -1665.5999755859, 416.89999389648, 7.6999998092651, 0, 0, 318);
+	CreateDynamicObject(3465, -1672.1999511719, 423.5, 7.6999998092651, 0, 0, 317.99926757813);
+	CreateDynamicObject(3465, -1676.5999755859, 419.10000610352, 7.6999998092651, 0, 0, 317.99926757813);
+	CreateDynamicObject(3465, -1681.8000488281, 413.79998779297, 7.6999998092651, 0, 0, 317.99926757813);
+	CreateDynamicObject(3465, -1679.4000244141, 403.10000610352, 7.6999998092651, 0, 0, 317.99926757813);
+	CreateDynamicObject(3465, -1675.3000488281, 407.20001220703, 7.6999998092651, 0, 0, 317.99926757813);
+	CreateDynamicObject(3465, -1669.9000244141, 412.5, 7.6999998092651, 0, 0, 317.99926757813);
+	//SF 2
+	CreateDynamicObject(3465, -2410.8999023438, 970.79998779297, 45.799999237061, 0, 0, 0);
+	CreateDynamicObject(3465, -2410.8000488281, 976.20001220703, 45.799999237061, 0, 0, 0);
+	CreateDynamicObject(3465, -2410.8000488281, 981.5, 45.799999237061, 0, 0, 0);
+	CreateDynamicObject(3465, -2026.5, 155.80000305176, 29.39999961853, 0, 0, 0);
+	CreateDynamicObject(3465, -2026.5, 157.69999694824, 29.39999961853, 0, 0, 0);
+	//LS EXIT
+	CreateDynamicObject(3465, -1610.5999755859, -2721, 49.299999237061, 0, 0, 53);
+	CreateDynamicObject(3465, -1607.3000488281, -2716.6999511719, 49.299999237061, 0, 0, 52.998046875);
+	CreateDynamicObject(3465, -1604, -2712.1999511719, 49.299999237061, 0, 0, 52.998046875);
+	CreateDynamicObject(3465, -1600.6999511719, -2707.8000488281, 49.299999237061, 0, 0, 52.998046875);
+	//LV
+	CreateDynamicObject(3465, -1329.2031, 2669.2813, 50.7031, 0, 0, 85);
+	CreateDynamicObject(3465, -1328.5859, 2674.7109, 50.7031, 0, 0, 85);
+	CreateDynamicObject(3465, -1327.7969, 2680.1250, 50.7031, 0, 0, 85);
+	CreateDynamicObject(3465, -1327.0313, 2685.5938, 50.7031, 0, 0, 85);
+	//LS
+	CreateDynamicObject(3465, 998.09997558594, -937.70001220703, 42.599998474121, 0, 0, 277);
+	CreateDynamicObject(3465, 1002.700012207, -937, 42.599998474121, 0, 0, 277);
+	CreateDynamicObject(3465, 1005.200012207, -936.59997558594, 42.599998474121, 0, 0, 277);
+	CreateDynamicObject(3465, 1009.5999755859, -936, 42.599998474121, 0, 0, 277);
+
+	//PD Maps (Joe Slice)
+	CreateDynamicObject(1723, 243.05553, 68.85237, 1002.63922,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1724, 243.71864, 71.82867, 1002.63922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2240, 243.08873, 71.84602, 1003.15015,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2725, 243.15143, 68.06969, 1002.79932,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2855, 243.13240, 68.07620, 1003.21362,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19172, 244.89056, 80.19598, 1004.61951,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19174, 247.90002, 82.92144, 1004.61951,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1723, 222.87094, 75.37246, 1004.02582,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2195, 222.88470, 78.33620, 1004.62653,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2370, 225.18690, 79.70038, 1003.84039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2852, 225.29060, 80.18150, 1004.68488,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2853, 225.36349, 79.55802, 1004.68488,   0.00000, 0.00000, 84.00000);
+	CreateDynamicObject(3077, 215.60867, 81.82822, 1004.00928,   0.00000, 0.00000, 25.00000);
+	CreateDynamicObject(2206, 219.79300, 81.29410, 1003.86200,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2206, 221.76160, 81.30110, 1003.84198,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2747, 221.05865, 77.91767, 1004.38928,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 221.43469, 76.64608, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 220.60721, 76.62796, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2747, 220.95447, 75.76456, 1004.38928,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 221.41257, 74.53083, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 220.57257, 74.54766, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2747, 218.51231, 77.93063, 1004.38928,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 218.90683, 76.57875, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 218.06702, 76.60409, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2747, 218.23959, 75.73772, 1004.38928,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 217.87865, 74.57188, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 218.77808, 74.53516, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2747, 215.62619, 78.36932, 1004.38928,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 216.04938, 76.90595, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 215.10954, 76.95622, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2747, 215.67235, 76.20782, 1004.38928,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 215.04372, 74.91934, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1721, 215.93369, 74.96989, 1004.03973,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1742, 214.91696, 73.71457, 1004.01318,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1742, 216.32846, 73.72356, 1004.01318,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2700, 220.24719, 82.64326, 1006.08270,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2700, 219.64682, 82.64832, 1006.08270,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2700, 219.06700, 82.63393, 1006.08270,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2700, 218.48666, 82.63952, 1006.08270,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2737, 213.96001, 78.32190, 1005.67670,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2612, 221.85153, 77.78873, 1005.66589,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(19171, 218.09952, 73.82301, 1006.13177,   90.00000, 90.00000, 90.00000);
+	//A51
+	CreateDynamicObject(3095, 268.36920, 1884.28467, 15.99752,   0.00000, 0.00000, 0.00000); //area51 block
+	//NEWS OUTSIDE
+	CreateDynamicObject(7488, 762.11, -1384.94, -24.42,   0.00, -90.00, -90.00);
+	CreateDynamicObject(7488, 761.99, -1371.18, -24.41,   0.00, -90.00, -90.00);
+	CreateDynamicObject(16501, 778.37, -1384.92, 14.54,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 771.28, -1384.92, 14.54,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 759.75, -1362.46, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1362.46, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1362.46, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 757.27, -1356.47, 13.60,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 759.74, -1357.44, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 756.30, -1353.97, 22.42,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8661, 739.80, -1363.91, 15.83,   0.00, 180.00, 0.00);
+	CreateDynamicObject(16501, 751.28, -1353.98, 13.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 751.28, -1353.98, 18.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 751.29, -1353.98, 22.42,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 744.19, -1353.98, 13.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 744.19, -1353.98, 18.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 744.19, -1353.98, 22.42,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 737.11, -1353.98, 13.60,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 737.11, -1353.98, 18.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 737.11, -1353.98, 22.42,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 737.07, -1351.74, 13.60,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 737.07, -1351.74, 18.01,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 737.07, 22.42, 18.01,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 737.07, -1351.74, 22.42,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 734.64, -1347.24, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1347.24, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1347.24, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1340.20, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1340.20, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1340.20, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1333.13, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1333.13, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 734.64, -1333.13, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 732.56, -1329.67, 21.07,   90.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 732.52, -1329.68, 14.11,   90.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 759.75, -1369.56, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1369.56, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1369.56, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1376.66, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1376.66, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1369.56, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1376.66, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1381.41, 13.60,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1381.41, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 759.75, -1381.41, 22.42,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 756.31, -1384.88, 22.42,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 756.31, -1384.88, 18.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3660, 735.18, -1339.73, 14.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3660, 740.72, -1354.58, 14.78,   0.00, 0.00, -45.00);
+	CreateDynamicObject(3660, 745.05, -1352.69, 14.78,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1569, 756.29, -1355.27, 12.98,   0.00, 0.00, -45.00);
+	CreateDynamicObject(1569, 758.39, -1357.41, 12.98,   0.00, 0.00, -225.00);
+	CreateDynamicObject(16501, 759.74, -1357.44, 18.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 756.30, -1353.97, 18.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3851, 734.75, -1335.45, 21.96,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 734.75, -1346.73, 21.96,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 737.82, -1352.26, 21.96,   0.00, 0.00, 45.00);
+	CreateDynamicObject(3851, 742.97, -1353.83, 21.96,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3851, 754.23, -1353.83, 21.96,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3851, 759.91, -1359.52, 21.96,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 759.91, -1370.82, 21.96,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 759.88, -1379.29, 21.96,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3660, 760.47, -1375.15, 14.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(736, 751.75, -1352.83, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 740.54, -1352.83, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 735.37, -1345.58, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 735.10, -1334.35, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3660, 785.74, -1374.75, 14.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3660, 785.74, -1355.11, 14.78,   0.00, 0.00, 90.00);
+	CreateDynamicObject(8168, 784.40, -1334.29, 14.38,   0.00, 0.00, -74.00);
+	CreateDynamicObject(3851, 734.75, -1335.45, 16.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 734.75, -1346.73, 16.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 737.82, -1352.26, 16.46,   0.00, 0.00, 45.00);
+	CreateDynamicObject(3851, 742.97, -1353.83, 16.46,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3851, 759.91, -1370.82, 16.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3851, 759.88, -1379.29, 16.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 785.50, -1352.47, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 785.39, -1366.38, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 785.70, -1380.24, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 760.36, -1380.24, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(736, 760.54, -1366.38, 24.49,   0.00, 0.00, 0.00);
+	CreateDynamicObject(970, 784.93, -1382.48, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.93, -1378.27, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.93, -1374.08, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.93, -1369.87, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.93, -1365.69, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.93, -1361.50, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.94, -1357.32, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3657, 784.45, -1376.77, 13.36,   0.00, 0.00, -90.00);
+	CreateDynamicObject(3657, 784.40, -1368.72, 13.36,   0.00, 0.00, -90.00);
+	CreateDynamicObject(3657, 784.32, -1359.71, 13.36,   0.00, 0.00, -90.00);
+	CreateDynamicObject(970, 761.84, -1382.36, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 761.84, -1378.16, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 761.82, -1373.95, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 761.81, -1369.73, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3657, 762.28, -1376.77, 13.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3657, 762.28, -1368.72, 13.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1231, 762.20, -1373.03, 15.67,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1231, 784.46, -1373.03, 15.67,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3522, 774.92, -1370.92, 12.96,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3522, 770.50, -1370.83, 12.96,   0.00, 0.00, 180.00);
+	CreateDynamicObject(3522, 772.75, -1368.76, 12.96,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3522, 772.73, -1372.96, 12.96,   0.00, 0.00, -90.00);
+	CreateDynamicObject(758, 773.90, -1370.57, 12.17,   0.00, 0.00, 0.00);
+	CreateDynamicObject(758, 772.19, -1371.74, 12.17,   0.00, 0.00, -40.00);
+	CreateDynamicObject(9833, 772.14, -1371.98, 16.08,   0.00, 0.00, 25.00);
+	CreateDynamicObject(1215, 770.26, -1368.54, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1215, 774.99, -1368.56, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1215, 774.91, -1373.33, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1215, 770.40, -1373.21, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14387, 773.53, -1350.68, 11.99,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 784.93, -1354.10, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 782.83, -1352.02, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(970, 778.63, -1352.01, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1232, 776.32, -1352.24, 15.55,   0.00, 0.00, 40.00);
+	CreateDynamicObject(14387, 768.90, -1350.68, 11.99,   0.00, 0.00, 90.00);
+	CreateDynamicObject(970, 763.76, -1352.04, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1232, 766.12, -1352.26, 15.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(970, 759.52, -1352.06, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(970, 756.99, -1352.06, 13.51,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8661, 739.76, -1374.89, 24.62,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8661, 739.75, -1364.00, 24.61,   0.00, 0.00, 0.00);
+	CreateDynamicObject(8661, 724.76, -1349.74, 24.62,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 737.07, -1351.74, 26.80,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 732.17, -1356.64, 26.80,   0.00, 0.00, 45.00);
+	CreateDynamicObject(16501, 737.07, -1356.64, 26.80,   0.00, 0.00, 135.00);
+	CreateDynamicObject(16501, 732.20, -1351.75, 26.80,   0.00, 0.00, 135.00);
+	CreateDynamicObject(16501, 733.71, -1353.27, 28.92,   0.00, 90.00, 135.00);
+	CreateDynamicObject(16501, 735.58, -1355.13, 28.92,   0.00, 90.00, 135.00);
+	CreateDynamicObject(1596, 735.79, -1351.99, 31.49,   0.00, 0.00, 135.00);
+	CreateDynamicObject(3934, 741.46, -1371.88, 24.68,   0.00, 0.00, 0.00);
+	CreateDynamicObject(970, 754.92, -1354.19, 13.51,   0.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 734.56, -1362.59, 26.80,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 730.19, -1357.69, 26.80,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 730.19, -1362.59, 26.80,   0.00, 0.00, 0.00);
+	CreateDynamicObject(16501, 732.39, -1366.08, 25.44,   90.00, 0.00, 90.00);
+	CreateDynamicObject(16501, 732.42, -1362.52, 28.90,   0.00, 90.00, 0.00);
+	CreateDynamicObject(16501, 732.43, -1357.94, 28.87,   0.00, 90.00, 0.00);
+	CreateDynamicObject(1569, 734.71, -1363.21, 24.63,   0.00, 0.00, 90.00);
+	//SAN NEWS INTERIOR BY WILLIAM, EDIT BY JAMES
+	CreateDynamicObject(14858, 1223.01, -759.22, 1129.39,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14819, 1206.06, -776.68, 1125.38,   0.00, 0.00, 90.18);
+	CreateDynamicObject(14819, 1206.33, -776.72, 1125.38,   0.00, 0.00, 270.00);
+	CreateDynamicObject(17566, 1206.24, -776.68, 1125.48,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14819, 1209.48, -757.91, 1125.38,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14819, 1209.44, -758.20, 1125.38,   0.00, 0.00, 180.00);
+	CreateDynamicObject(17566, 1209.34, -758.04, 1125.27,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2165, 1199.56, -777.71, 1124.24,   0.00, 0.00, 180.00);
+	CreateDynamicObject(19174, 1199.19, -775.50, 1126.45,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1671, 1198.87, -776.70, 1124.67,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1808, 1196.77, -783.19, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2164, 1196.58, -780.10, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2161, 1201.53, -780.87, 1126.07,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2001, 1197.18, -776.02, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2011, 1201.04, -775.98, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1199.14, -779.18, 1124.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2008, 1194.33, -777.59, 1124.25,   0.00, 0.00, 180.00);
+	CreateDynamicObject(19172, 1193.91, -775.51, 1126.57,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1671, 1193.85, -776.77, 1124.69,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2608, 1191.52, -780.76, 1126.23,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2164, 1196.25, -780.84, 1124.25,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2001, 1191.79, -775.97, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1195.98, -775.89, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1194.44, -779.10, 1124.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1193.18, -779.08, 1124.23,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2009, 1188.39, -778.36, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2007, 1190.51, -782.50, 1124.25,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2007, 1190.51, -781.51, 1124.25,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2167, 1186.04, -781.57, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1808, 1186.24, -780.81, 1124.25,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1671, 1188.57, -777.25, 1124.75,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1187.70, -779.78, 1124.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1722, 1189.04, -779.76, 1124.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2108, 1185.68, -783.76, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2010, 1190.51, -775.95, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2010, 1186.55, -775.84, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1518, 1188.40, -759.41, 1126.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.40, -758.18, 1126.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(18608, 1190.74, -759.26, 1128.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18608, 1198.84, -759.27, 1128.63,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2173, 1192.07, -764.98, 1124.24,   0.00, 0.00, 40.00);
+	CreateDynamicObject(2173, 1194.21, -762.53, 1124.24,   0.00, 0.00, 70.00);
+	CreateDynamicObject(2173, 1195.22, -759.76, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2173, 1195.01, -756.49, 1124.24,   0.00, 0.00, 110.00);
+	CreateDynamicObject(2173, 1193.42, -753.69, 1124.24,   0.00, 0.00, 130.00);
+	CreateDynamicObject(3864, 1189.24, -751.24, 1121.79,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3864, 1189.42, -767.14, 1121.88,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2207, 1189.87, -759.88, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2207, 1191.73, -757.96, 1124.24,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1663, 1190.91, -757.05, 1124.70,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1808, 1194.71, -767.33, 1124.24,   0.00, 0.00, 180.00);
+	CreateDynamicObject(1808, 1194.65, -751.11, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1663, 1189.05, -757.60, 1124.70,   0.00, 0.00, 46.06);
+	CreateDynamicObject(1663, 1189.30, -760.04, 1124.70,   0.00, 0.00, 121.00);
+	CreateDynamicObject(1663, 1191.16, -760.82, 1124.70,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2001, 1188.21, -767.04, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1188.30, -763.66, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1188.27, -751.55, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1188.32, -754.72, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1518, 1188.40, -758.80, 1126.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.38, -758.18, 1126.86,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.40, -758.80, 1126.86,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.40, -759.41, 1126.86,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2190, 1192.00, -764.63, 1125.04,   0.00, 0.00, 45.00);
+	CreateDynamicObject(2190, 1193.95, -762.28, 1125.02,   0.00, 0.00, 70.00);
+	CreateDynamicObject(2190, 1194.91, -759.65, 1125.04,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2190, 1194.66, -756.45, 1125.04,   0.00, 0.00, 110.00);
+	CreateDynamicObject(2190, 1193.09, -753.80, 1125.04,   0.00, 0.00, 130.00);
+	CreateDynamicObject(1663, 1193.68, -752.80, 1124.70,   0.00, 0.00, 321.09);
+	CreateDynamicObject(1663, 1195.54, -755.80, 1124.70,   0.00, 0.00, 287.04);
+	CreateDynamicObject(1663, 1196.03, -759.34, 1124.70,   0.00, 0.00, 266.86);
+	CreateDynamicObject(1663, 1195.14, -762.37, 1124.70,   0.00, 0.00, 246.99);
+	CreateDynamicObject(1663, 1192.77, -765.38, 1124.70,   0.00, 0.00, 205.85);
+	CreateDynamicObject(1518, 1188.39, -757.57, 1126.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.39, -757.57, 1126.86,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.40, -760.01, 1126.36,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1518, 1188.40, -760.01, 1126.86,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14407, 1198.65, -765.65, 1121.59,   0.00, 0.00, 90.00);
+	CreateDynamicObject(14407, 1198.66, -752.77, 1121.58,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1698, 1199.77, -756.25, 1124.44,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1198.40, -759.55, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1198.41, -762.86, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3657, 1198.46, -761.41, 1124.86,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3657, 1198.41, -757.44, 1124.86,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1698, 1198.41, -756.24, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1199.76, -759.55, 1124.44,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1199.75, -762.85, 1124.44,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3657, 1199.68, -761.45, 1125.17,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3657, 1199.67, -757.59, 1125.17,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1698, 1199.77, -756.25, 1124.44,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1201.11, -756.25, 1124.68,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1201.11, -759.56, 1124.68,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1698, 1201.11, -762.84, 1124.68,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3657, 1201.29, -761.52, 1125.17,   0.00, 0.00, 270.00);
+	CreateDynamicObject(3657, 1201.32, -757.65, 1125.17,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2239, 1201.28, -751.39, 1124.76,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2239, 1201.38, -767.27, 1124.77,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19279, 1196.20, -762.25, 1127.84,   0.00, 180.00, 85.68);
+	CreateDynamicObject(19279, 1196.32, -756.90, 1127.84,   0.00, 180.00, 85.96);
+	CreateDynamicObject(2239, 1209.56, -743.35, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1723, 1206.65, -743.29, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1723, 1203.74, -743.29, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1723, 1209.57, -744.30, 1124.24,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1827, 1207.48, -745.61, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1827, 1204.62, -745.60, 1124.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2001, 1203.09, -743.28, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2204, 1210.03, -747.94, 1124.24,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1808, 1206.44, -750.55, 1124.24,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2596, 1207.62, -750.43, 1126.63,   0.00, 0.00, 180.00);
+	CreateDynamicObject(2206, 1188.99, -742.15, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2206, 1189.93, -740.29, 1124.24,   0.00, 0.00, 270.00);
+	CreateDynamicObject(2206, 1188.99, -744.99, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2206, 1189.93, -743.13, 1124.24,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1663, 1191.09, -740.58, 1124.71,   0.00, 0.00, 267.54);
+	CreateDynamicObject(1663, 1191.11, -741.88, 1124.71,   0.00, 0.00, 267.54);
+	CreateDynamicObject(1663, 1191.06, -743.17, 1124.71,   0.00, 0.00, 267.54);
+	CreateDynamicObject(1663, 1191.01, -744.35, 1124.71,   0.00, 0.00, 267.54);
+	CreateDynamicObject(1663, 1187.78, -740.62, 1124.71,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1663, 1187.79, -741.84, 1124.71,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1663, 1187.85, -743.22, 1124.71,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1663, 1187.86, -744.44, 1124.71,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1808, 1191.95, -738.76, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2596, 1187.53, -738.96, 1127.07,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2172, 1199.38, -740.75, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2172, 1199.39, -742.74, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2172, 1199.39, -744.70, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2001, 1199.31, -738.90, 1124.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2161, 1200.86, -738.63, 1125.67,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1663, 1200.33, -740.20, 1124.71,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1663, 1200.24, -742.01, 1124.71,   0.00, 0.00, 270.00);
+	CreateDynamicObject(1663, 1200.18, -744.05, 1124.71,   0.00, 0.00, 270.00);
+	CreateDynamicObject(19173, 1188.46, -775.52, 1126.55,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2010, 1202.03, -746.17, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2010, 1191.74, -746.28, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2245, 1189.53, -742.61, 1125.46,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2252, 1204.63, -745.65, 1124.97,   0.00, 0.00, 0.00);
+	CreateDynamicObject(2252, 1207.50, -745.60, 1124.97,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14782, 1195.46, -739.01, 1125.18,   0.00, 0.00, 0.31);
+	CreateDynamicObject(14782, 1192.81, -743.48, 1125.18,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2108, 1198.07, -746.16, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(17566, 1206.17, -766.31, 1125.48,   0.00, 0.00, 0.00);
+	CreateDynamicObject(14819, 1206.31, -766.71, 1125.38,   0.00, 0.00, 270.00);
+	CreateDynamicObject(14819, 1206.04, -766.68, 1125.38,   0.00, 0.00, 90.18);
+	CreateDynamicObject(18758, 1184.54, -753.17, 1126.10,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18756, 1184.42, -753.17, 1126.25,   0.00, 0.00, 0.00);
+	CreateDynamicObject(18757, 1184.42, -753.18, 1126.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1649, 1186.99, -769.79, 1128.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(19450, 1187.04, -768.87, 1123.60,   0.00, 900.00, 0.00);
+	CreateDynamicObject(19450, 1187.04, -768.87, 1128.67,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, 1186.99, -771.48, 1125.89,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, 1186.99, -767.83, 1125.89,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1649, 1186.99, -769.79, 1128.01,   0.00, 0.00, -90.00);
+	CreateDynamicObject(2173, 1187.58, -770.19, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1671, 1188.24, -769.90, 1124.69,   0.00, 0.00, 236.00);
+	CreateDynamicObject(2196, 1187.79, -768.65, 1125.04,   0.00, 0.00, -25.00);
+	CreateDynamicObject(1723, 1183.19, -770.40, 1124.24,   0.00, 0.00, 90.00);
+	CreateDynamicObject(2001, 1183.23, -771.39, 1124.24,   0.00, 0.00, 0.00);
+	CreateDynamicObject(19450, 1178.22, -772.18, 1126.01,   0.00, 0.00, 0.00);
+	CreateDynamicObject(1569, 1178.26, -771.05, 1124.25,   0.00, 0.00, 90.00);
+	CreateDynamicObject(1569, 1178.27, -768.07, 1124.25,   0.00, 0.00, -90.00);
+	CreateDynamicObject(19450, 1177.49, -763.57, 1126.01,   0.00, 0.00, 90.00);
+	CreateDynamicObject(3440, 1186.44, -759.69, 1125.89,   0.00, 0.00, 0.00);
+	CreateDynamicObject(3440, 1182.90, -759.65, 1125.89,   0.00, 0.00, 0.00);
+	CreateDynamicObject(983, 1183.05, -759.65, 1127.46,   0.00, 0.00, 90.00);
+	//blueberry pier objects
+	CreateDynamicObject(935, 368.45370, -279.91431, 0.03932,   -6.96000, -68.16000, 0.00000);
+	CreateDynamicObject(935, 386.68408, -267.87811, 0.03475,   -14.69999, -62.82007, -86.69997);
+	CreateDynamicObject(935, 396.90479, -257.41257, 0.03475,   -3.30000, -53.46009, -14.15994);
+	CreateDynamicObject(935, 347.33844, -293.87955, 0.08652,   -6.96000, -68.16000, 0.00000);
+	CreateDynamicObject(935, 382.81879, -258.79453, 0.79873,   -2.88000, -70.50008, -11.93994);
+	CreateDynamicObject(12990, 376.90601, -271.96979, 1.28069,   0.00000, 0.00000, 38.52007, 650); //wharf
+	//BOAT OBJECTS
+	CreateObject(10230, 466.389252, -2278.126465, 7.263396, 0.0000, 0.0000, 0.0000, 900);
+	CreateObject(10231, 465.491425, -2279.642090, 8.710502, 0.0000, 0.0000, 0.0001, 500);
+	CreateObject(3565, 514.917969, -2279.834717, 11.456652, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(10229, 466.145935, -2279.552002, 6.095016, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(944, 422.262115, -2288.881592, 8.437245, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(944, 425.626923, -2274.627197, 8.437245, 0.0000, 0.0000, 180.0000);
+	CreateDynamicObject(2669, 410.597229, -2279.471680, 8.859987, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(17055, 425.758057, -2279.559570, 9.886889, 0.0000, 0.0000, 91.7189);
+	//AIRPORT OBJECTS
+	CreateDynamicObject(1683, 1872.291626, -2283.772705, 18.449501, 0.0000, 0.0000, 0.0000);
+	CreateDynamicObject(1681, 1995.646240, -2382.106934, 14.674913, 0.0000, 0.0000, 90.0000);
+	//CreateDynamicObject(1681, 1996.920410, -2315.446533, 14.724913, 0.0000, 0.0000, 90.0000);
+	CreateDynamicObject(1683, 1728.122070, -2420.928711, 18.457298, 0.0000, 0.0000, 270.0000);
+	CreateDynamicObject(1683, 1647.249756, -2420.928711, 18.457314, 0.0000, 0.0000, 270.0000);
+	//Inside Maddogs (door blocks)
+	CreateDynamicObject(1557, 1280.396, -790.758, 1083.016, 0.00, 0.00, 90.00);
+	CreateDynamicObject(1557, 1280.392, -787.728, 1083.017, 0.00, 0.00, 270.00);
+	CreateDynamicObject(1557, 1292.376, -782.771, 1083.007, 0.00, 0.00, 90.00);
+	CreateDynamicObject(1557, 1292.371, -779.741, 1083.007, 0.00, 0.00, 270.00);
+	CreateDynamicObject(1557, 2793.565, -1636.967, 20.366, 1.00, 0.00, 85.00);
+	CreateDynamicObject(1557, 2793.820, -1633.957, 20.366, -1.00, 0.00, 265.00);
+	//vagos
+	CreateDynamicObject(994, 2558.842, -1284.645, 45.212, 0.0, 0.0, 0.0); // Vagos Fence
+	CreateDynamicObject(994, 2558.842, -1280.943, 45.212, 0.0, 0.0, 0.0);	// Vagos Fence
+	CreateDynamicObject(8613, 2541.610, -1271.575, 55.440, 0.0, 0.0, -90.0); // Vagos Stairs
+	CreateDynamicObject(3934, 2556.764, -1270.661, 58.843, 0.0, 0.0, 0.0); // Vagos Helipad
+	CreateDynamicObject(3934, 2556.674, -1285.334, 58.843, 0.0, 0.0, 0.0); // Vagos Helipad
+	//wayfarer farm
+	CreateDynamicObject(994, 2361.136, -1363.397, 23.1, 0.0, 0.0, 90.0);
+	CreateDynamicObject(994, 2361.136, -1357.053, 23.1, 0.0, 0.0, 90.0);
+	CreateDynamicObject(994, 2361.136, -1369.683, 23.1, 0.0, 0.0, 90.0);
+	CreateDynamicObject(994, 2361.136, -1372.756, 23.1, 0.0, 0.0, 90.0);
+	CreateDynamicObject(994, 2361.136, -1374.327, 23.1, 0.0, 0.0, 180.0);
+	CreateDynamicObject(8674, 2341.262, -1372.312, 24.014, 0.0, 0.0, 0.0);
+	CreateDynamicObject(8674, 2330.965, -1372.312, 24.014, 0.0, 0.0, 0.0);
+	CreateDynamicObject(8674, 2339.339, -1313.741, 24.069, 0.0, 0.0, 0.0);
+	//mad dogs door block
+	CreateDynamicObject(1557, 1260.435, -805.8, 1083.006, 0.0, 0.0, 90); //MAD DOG DOOR BLOCK?
+	CreateDynamicObject(1557, 1260.435, -802.775, 1083.007, 0.0, 0.0, 270.0); //MAD DOG DOOR BLOCK?
+	//door blocks
+	CreateDynamicObject(1508, 965.1252, -54.7, 1001.8, 0.0, 0.0, 0.0); // LS Confidential Door Block
+	CreateDynamicObject(1569, 965.0, -53.95, 1000.0, 0.0, 0.0, 90.0); // LS Confidential Door Block
+	//door blocks
+	CreateDynamicObject(1508, 2577.73, -1304.0, 1038.2, 0.0000, 0.0000, 0.0);
+	CreateDynamicObject(1508, 2545.8, -1283.39, 53.4, 0.0000, 0.0000, 0.0);
+	//fishing store
+	CreateDynamicObject(11497, 371.640442, -2077.564453, 6.906926, 0.0000, 0.0000, 0.0000); // Fishing store
+	CreateDynamicObject(18045, 364.316498, -2068.405273, 980.796143, 0.0000, 0.0000, 0.0000); // Fishing store
+	//CreateDynamicObject(14789, 1424.690308, -1004.066162, 1643.018677, 0.0000, 0.0000, 89.9994); // Bank
+	CreateDynamicObject(14672, 2359.598145, -1460.346558, 922.806885, 0.0000, 0.0000, 0.0000); // Tiki store
+	CreateDynamicObject(2631, -1269.081177, 76.718849, 990.984192, 0.0000, 0.0000, 269.9993); // Church
+	CreateDynamicObject(14412, 1789.184448, -1569.734131, 1645.317383, 0.000000, 0.000000, 0.000000);// Prison fix
+	//County General Hospital
+	CreateDynamicObject(19449, -207.3999939, -1739.6999512, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(17038, -205.8994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -204.3994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -202.8999939, -1747.6999512, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -201.3994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(19460, -207.3990021, -1739.6999512, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -202.6000061, -1734.8000488, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -206.1999969, -1734.8010254, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1569, -206.0000000, -1734.9000244, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1569, -203.0000000, -1734.9000244, 674.7999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(19387, -196.6992188, -1744.5000000, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19357, -201.3994141, -1736.5000000, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4003906, -1736.5000000, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -211.7998047, -1734.7998047, 678.4000244, 270.0000000, 180.0000000, 180.0000000);
+	CreateDynamicObject(17038, -199.8994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -198.3999939, -1747.6999512, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -196.8994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(19449, -196.6000061, -1738.0159912, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -196.6719971, -1738.0169678, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19449, -195.3994141, -1742.8994141, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(17038, -195.3994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(19460, -195.4010010, -1742.9000244, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -201.1000061, -1739.6999512, 674.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -201.1005859, -1739.6992188, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19357, -199.8837891, -1744.5000000, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -191.1503906, -1744.4990234, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -191.1503906, -1744.5009766, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -199.0749969, -1744.4990234, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -199.0749969, -1744.5009766, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -199.8849945, -1744.4980469, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -201.0989990, -1739.5999756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19357, -201.3994141, -1746.0996094, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19387, -201.3994141, -1749.2998047, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19357, -201.3999939, -1752.5000000, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19387, -201.3999939, -1755.6999512, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19357, -201.3999939, -1758.9000244, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(17038, -205.8994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -204.3999939, -1768.4000244, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -202.8999939, -1768.4000244, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -201.3999939, -1768.4000244, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -199.8994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -198.3994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -196.8999939, -1768.4000244, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -195.3994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4019928, -1746.0999756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4010010, -1746.9250488, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19387, -201.3994141, -1762.0996094, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -206.1999969, -1763.6999512, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -201.4010010, -1751.6369629, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4019928, -1753.3249512, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4010010, -1758.0369873, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4019928, -1759.7249756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.4010010, -1764.4370117, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -206.3000031, -1763.6989746, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19387, -207.3994141, -1746.0996094, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19387, -207.3994141, -1758.8994141, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19357, -207.3999939, -1762.0999756, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -195.3994141, -1752.5000000, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -195.3994141, -1762.0996094, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -196.5996094, -1758.7998047, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -206.0000000, -1733.2998047, 672.5999756, 270.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -203.0000000, -1733.3000488, 672.5999756, 270.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19441, -203.7140045, -1733.3010254, 677.3980244, 0.0000000, 270.0000000, 90.0000000);
+	CreateDynamicObject(19441, -205.2870026, -1733.3010254, 677.3970244, 0.0000000, 270.0000000, 90.0000000);
+	CreateDynamicObject(2885, -200.8994141, -1734.7998047, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -200.8994141, -1741.5000000, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -211.7998047, -1741.5000000, 678.4000244, 270.0000000, 179.9945068, 179.9945068);
+	CreateDynamicObject(2885, -211.7998047, -1748.1992188, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -200.8999939, -1748.1999512, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -200.8994141, -1754.8994141, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -200.8994141, -1761.5996094, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -211.7998047, -1761.5996094, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(17038, -207.3994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -208.8994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -210.3999939, -1747.6999512, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -211.8999939, -1747.6999512, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -213.3994141, -1747.6992188, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -213.3994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -211.8999939, -1768.4000244, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -210.3994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -208.8994141, -1768.3994141, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(17038, -207.3999939, -1768.4000244, 668.2999878, 0.0000000, 270.0000000, 0.0000000);
+	CreateDynamicObject(19449, -214.6000061, -1758.9000244, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -214.5996094, -1749.2998047, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -214.6000061, -1739.6999512, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -212.1992188, -1734.7998047, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -199.8000031, -1744.5010986, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -201.3979950, -1746.0999756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.3990021, -1746.9250488, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.3990021, -1751.6369629, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.3970032, -1753.3242188, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.3990021, -1758.0369873, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -201.3979950, -1759.7249756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -195.4010010, -1752.5000000, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -195.4003906, -1762.0996094, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -196.6494141, -1758.7988281, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -196.6494141, -1758.8007812, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -207.3979950, -1740.5140381, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -207.3990021, -1761.2370605, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -207.3979950, -1764.4000244, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -214.5989990, -1758.8000488, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -214.5980072, -1749.1999512, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -214.5989990, -1739.5999756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -215.8000031, -1734.8011475, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -207.4010010, -1739.6999512, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -207.4013672, -1740.5136719, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -207.4011993, -1761.2370605, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19368, -207.4010010, -1764.3994141, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3034, -204.3994141, -1763.5996094, 676.7000122, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(1523, -201.3699951, -1756.4499512, 674.7399902, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1523, -201.3691406, -1750.0498047, 674.7399902, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1523, -201.3699951, -1762.8499756, 674.7399902, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2686, -201.5130005, -1744.9000244, 676.4000244, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2685, -201.5130005, -1745.4000244, 676.4000244, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2688, -207.2998047, -1747.5996094, 676.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(16101, -201.5000000, -1748.5000000, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.5000000, -1750.0000000, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.5000000, -1754.9000244, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.5000000, -1756.4000244, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.5000000, -1761.3000488, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.5000000, -1762.8000488, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.3291016, -1748.5000000, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.3300018, -1750.0000000, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.3300018, -1754.9000244, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.3300018, -1756.4000244, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.3300018, -1761.3000488, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -201.3300018, -1762.8000488, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -211.8000031, -1751.5000000, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -211.7998047, -1729.5996094, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -218.5996094, -1729.5996094, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -218.6000061, -1754.3000488, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -190.8994141, -1753.5996094, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -190.8999939, -1735.1999512, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -190.8994141, -1731.6992188, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1523, -207.3691406, -1746.8496094, 674.7399902, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1523, -207.3699951, -1759.6500244, 674.7399902, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(16101, -207.3291016, -1745.2998047, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.3300018, -1746.8199463, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.3300018, -1758.0999756, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.3300018, -1759.6199951, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.5000000, -1759.5999756, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.5000000, -1758.0999756, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.5000000, -1746.8000488, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.5000000, -1745.2998047, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1999, -200.5000000, -1740.3994141, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2009, -199.5000000, -1743.7998047, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1671, -199.5000000, -1739.3000488, 675.2000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1671, -199.2998047, -1743.0000000, 675.2000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(19387, -213.0000000, -1742.6992188, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19357, -209.7998047, -1742.6992188, 673.9010010, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19357, -209.0000000, -1742.7001953, 673.9000244, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19449, -212.1999969, -1742.6989746, 679.0000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19466, -208.5000000, -1742.6999512, 676.4000244, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19466, -210.7402344, -1742.6992188, 676.4000244, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -209.0000000, -1742.6989746, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -210.6640015, -1742.6979980, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -215.3739929, -1742.6989746, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -215.3750000, -1742.7001953, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -209.0000000, -1742.7011719, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -210.6640015, -1742.7021484, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1523, -213.7890625, -1742.7294922, 674.7399902, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -212.2998047, -1742.7998047, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -213.8000031, -1742.8000488, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -213.8000031, -1742.5999756, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -212.3000031, -1742.5999756, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -207.5000000, -1742.6992188, 666.9000244, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3657, -213.8999939, -1745.6999512, 675.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(3394, -213.7998047, -1739.0000000, 674.7999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(3396, -208.1992188, -1737.0000000, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3397, -208.1992188, -1740.8994141, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14487, -218.6000061, -1731.8000488, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2007, -213.6992188, -1735.3994141, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2007, -212.6992188, -1735.3994141, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2132, -211.0996094, -1735.3994141, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14532, -211.3994141, -1737.0996094, 675.7800293, 0.0000000, 0.0000000, 194.7491455);
+	CreateDynamicObject(2146, -211.0996094, -1738.7998047, 675.2700195, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3657, -206.8999939, -1754.5999756, 675.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2811, -201.8994141, -1735.3994141, 674.7999878, 0.0000000, 0.0000000, 139.9932861);
+	CreateDynamicObject(2811, -201.8999939, -1763.1999512, 674.7999878, 0.0000000, 0.0000000, 219.9957275);
+	CreateDynamicObject(2811, -206.8999939, -1763.1999512, 674.7999878, 0.0000000, 0.0000000, 149.9957275);
+	CreateDynamicObject(3657, -206.8999939, -1739.5999756, 675.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2811, -206.8994141, -1735.3994141, 674.7999878, 0.0000000, 0.0000000, 221.9897461);
+	CreateDynamicObject(2688, -201.5000000, -1760.5000000, 676.4000244, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(19460, -201.5000000, -1739.6999512, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -207.3000031, -1739.6999512, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -207.3000031, -1749.3000488, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -207.3000031, -1758.9000244, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -201.5000000, -1749.3000488, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -201.5000000, -1758.9000244, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -204.8000031, -1734.9000244, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -206.3999939, -1763.5999756, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -214.5000000, -1758.9000244, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -214.5000000, -1749.3000488, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -214.5000000, -1739.6999512, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -207.5000000, -1758.9000244, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -207.5000000, -1749.3000488, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -207.5000000, -1739.6999512, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -214.3999939, -1734.9000244, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -212.1999969, -1742.8000488, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -212.1999969, -1742.5999756, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1744.4000244, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1738.0999756, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1744.5999756, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1758.6999512, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1758.9000244, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -195.5000000, -1758.9000244, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -195.5000000, -1749.3000488, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -195.5000000, -1739.6999512, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19357, -209.0000000, -1748.8010254, 673.9010010, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19449, -207.3999939, -1752.5000000, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -207.4010010, -1751.5999756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -207.3990021, -1751.5999756, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -207.4019928, -1753.3000488, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -207.3979950, -1753.3000488, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3657, -206.8999939, -1750.4000244, 675.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19387, -213.0000000, -1748.8000488, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19449, -212.1999969, -1748.8010254, 679.0000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19357, -209.8000031, -1748.8000488, 673.9000244, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19466, -208.6000061, -1748.8000488, 676.4000244, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19466, -210.8404999, -1748.8000488, 676.4000244, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19449, -212.1999969, -1756.1999512, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1523, -213.7890015, -1748.8299561, 674.7399902, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -212.1999969, -1748.6999512, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -212.1999969, -1748.9000244, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -212.1999969, -1756.0999756, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(19460, -212.3000031, -1756.1989746, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -209.0000000, -1748.7990000, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -210.6629944, -1748.7980000, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -210.6621094, -1748.8027344, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -209.0000000, -1748.8017578, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -215.3750000, -1748.7989502, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19368, -215.3750000, -1748.8007812, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(3397, -208.1999969, -1750.8000488, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3396, -208.1999969, -1754.4000244, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -212.1999969, -1756.3000488, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(2132, -209.8999939, -1755.5999756, 674.7999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(2007, -212.3000031, -1755.5999756, 674.7999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(2007, -213.3000031, -1755.5999756, 674.7999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(3394, -213.8000031, -1752.1999512, 674.7999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2146, -211.1000061, -1751.9000244, 675.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14532, -210.6999969, -1753.5000000, 675.7999878, 0.0000000, 0.0000000, 14.0000000);
+	CreateDynamicObject(19460, -212.2998047, -1756.2001953, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(3657, -201.8994141, -1746.5000000, 675.2999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2811, -214.0000000, -1743.4000244, 674.7999878, 0.0000000, 0.0000000, 251.9897461);
+	CreateDynamicObject(2811, -214.0000000, -1748.0999756, 674.7999878, 0.0000000, 0.0000000, 295.9879761);
+	CreateDynamicObject(16101, -207.5000000, -1748.8000488, 666.9000244, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3394, -213.8000031, -1761.5000000, 674.7999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2007, -214.0000000, -1758.5999756, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2007, -214.0000000, -1757.5999756, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2132, -210.1000061, -1763.0999756, 674.7999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(3396, -208.1999969, -1761.6999512, 674.7999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3397, -210.8000031, -1756.6999512, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2146, -211.1999969, -1759.9000244, 675.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(11237, -230.0000000, -1760.4000244, 698.9000244, 0.0000000, 180.0000000, 180.0000000);
+	CreateDynamicObject(3053, -211.1999969, -1760.4000244, 678.4000244, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -211.1999969, -1760.4000244, 688.0999756, 0.0000000, 180.0000000, 0.0000000);
+	CreateDynamicObject(2596, -214.3000031, -1760.0999756, 676.7000122, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2885, -211.8000031, -1754.9000244, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2596, -214.3000031, -1760.8000488, 676.7000122, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2596, -214.3000031, -1760.8000488, 677.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2596, -214.3000031, -1760.0999756, 677.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(16101, -222.6000061, -1760.4000244, 677.9000244, 0.0000000, 90.0000000, 0.0000000);
+	CreateDynamicObject(16101, -214.5000000, -1760.4000244, 666.19387220, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3808, -207.2500000, -1757.8000488, 676.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3808, -212.0000000, -1742.8499756, 676.2999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(3808, -212.0000000, -1748.6600342, 676.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -201.3000031, -1749.5000000, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -201.3000031, -1759.0999756, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(2009, -199.5000000, -1747.8000488, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1999, -200.5000000, -1746.0999756, 674.8010254, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1671, -199.3999939, -1746.9000244, 675.2000122, 0.0000000, 0.0000000, 264.0000000);
+	CreateDynamicObject(1671, -199.3999939, -1745.0999756, 675.2000122, 0.0000000, 0.0000000, 278.0000000);
+	CreateDynamicObject(2009, -196.8000031, -1753.8000488, 674.8010254, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1999, -197.8000031, -1752.0999756, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1999, -198.6999969, -1752.8000488, 674.7999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2009, -199.6999969, -1751.0999756, 674.8010254, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1671, -197.6000061, -1753.0000000, 675.2000122, 0.0000000, 0.0000000, 282.0000000);
+	CreateDynamicObject(1671, -196.8000031, -1751.3000488, 675.2000122, 0.0000000, 0.0000000, 260.0000000);
+	CreateDynamicObject(1671, -199.8000031, -1752.0999756, 675.2000122, 0.0000000, 0.0000000, 84.0000000);
+	CreateDynamicObject(1671, -199.8000031, -1753.8000488, 675.2000122, 0.0000000, 0.0000000, 104.0000000);
+	CreateDynamicObject(2009, -196.0000000, -1757.1999512, 674.7999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(1999, -197.6999969, -1758.1999512, 674.8010254, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(1671, -196.8999939, -1757.3000488, 675.2000122, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1671, -198.6999969, -1758.0000000, 675.2000122, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2202, -196.0000000, -1746.1999512, 674.7800293, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2811, -195.8999939, -1745.0999756, 674.7999878, 0.0000000, 0.0000000, 115.9932861);
+	CreateDynamicObject(2007, -196.0000000, -1748.3000488, 674.7999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2007, -196.0000000, -1749.3000488, 674.7999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2811, -200.8999939, -1758.3000488, 674.7999878, 0.0000000, 0.0000000, 141.9881592);
+	CreateDynamicObject(2611, -198.1999969, -1758.6700439, 676.7999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(2611, -201.2700043, -1746.4000244, 676.5999756, 0.0000000, 0.0000000, 89.9945068);
+	CreateDynamicObject(19449, -215.8000031, -1763.6999512, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19449, -201.3999939, -1768.5000000, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19449, -195.3999939, -1771.6999512, 676.5000000, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2885, -200.8999939, -1768.3000488, 678.4000244, 270.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -201.3990021, -1767.5799561, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -195.4010010, -1771.6999512, 673.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(19460, -195.5000000, -1768.5000000, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19460, -201.3000031, -1768.6999512, 679.9000244, 0.0000000, 179.9945068, 0.0000000);
+	CreateDynamicObject(19449, -196.6000061, -1772.4000244, 676.5000000, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1772.3990479, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(19460, -196.6000061, -1772.3000488, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(14487, -190.8999939, -1778.1999512, 678.0999756, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1789, -211.8000031, -1753.0999756, 675.2999878, 0.0000000, 0.0000000, 290.0000000);
+	CreateDynamicObject(1789, -211.8994141, -1759.1992188, 675.2999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1789, -210.1999969, -1737.6999512, 675.2999878, 0.0000000, 0.0000000, 99.9951172);
+	CreateDynamicObject(1800, -199.0000000, -1759.5000000, 674.7000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1800, -199.0000000, -1771.5000000, 674.7000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1800, -199.0000000, -1767.5999756, 674.7000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1800, -199.0000000, -1763.6999512, 674.7000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1800, -200.6999969, -1766.9000244, 674.7000122, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1800, -200.6999969, -1773.3000488, 674.7000122, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1789, -196.1999969, -1770.6999512, 675.2999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(1789, -196.1999969, -1766.6999512, 675.2999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(1789, -196.1999969, -1762.9000244, 675.2999878, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(1789, -196.3000031, -1760.6999512, 675.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1789, -200.5000000, -1766.1999512, 675.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1789, -200.5000000, -1769.4000244, 675.2999878, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(19460, -216.0000000, -1763.5999756, 679.9000244, 0.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(1999, -197.5000000, -1740.4000244, 674.7999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1671, -196.5000000, -1739.3000488, 675.2000122, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(19460, -215.8999939, -1763.6989746, 673.2999878, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(16101, -212.3000031, -1748.6999512, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -213.8000031, -1748.6999512, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -213.8000031, -1748.9000244, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(16101, -212.3000031, -1748.9000244, 666.2999878, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2852, -206.8000031, -1742.8000488, 675.2800293, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2315, -206.8000031, -1742.4000244, 674.7999878, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2855, -206.6999969, -1743.6999512, 675.2999878, 0.0000000, 0.0000000, 0.0000000);
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -204.3999939, -1745.0999756, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -204.3999939, -1752.0000000, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -204.3999939, -1758.8000488, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -198.6000061, -1764.0000000, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -198.6000061, -1769.1999512, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -198.6000061, -1756.3000488, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterial(CreateDynamicObject(11435, -198.6000061, -1749.9000244, 679.4000244, 0.0000000, 0.0000000, 270.0000000), 1, 14532, "drivingbit", "blak_1");
+	SetDynamicObjectMaterialText(CreateDynamicObject(19353, -195.4142, -1741.4693, 676.4188, 0.0000, 0.0000, 180.0), 0, "HOSPITAL", 140, "Cambria", 105, 1, -1, 0, 1);
+	SetDynamicObjectMaterialText(CreateDynamicObject(19353, -195.4142, -1741.4362, 676.8190, 0.0000, 0.0000, 180), 0, "COUNTY GENERAL", 140, "Cambria", 55, 1, -584707328, 0, 1);
+}
+stock LoadTheSyndicate()
+{
+	/* Exterior */
+	CreateDynamicObject(16151, 1299.27856, -785.63684, 87.64860,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1825, 1300.73730, -795.23309, 87.28413,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1825, 1297.08984, -790.45142, 87.28413,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1825, 1302.42493, -790.31329, 87.28413,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1670, 1300.68311, -795.24292, 88.17500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1670, 1296.97083, -790.38019, 88.17500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1670, 1302.31763, -790.27576, 88.17500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(3462, 1240.08459, -767.44110, 95.60000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3462, 1251.00281, -767.26819, 95.60000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(3462, 1270.34802, -831.03271, 83.52552,   0.00000, 0.00000, 90.10000);
+	CreateDynamicObject(3462, 1293.60327, -831.91309, 83.52552,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3935, 1281.18115, -832.22260, 82.95962,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(987, 1239.47314, -786.47418, 89.88809,   0.00000, 0.00000, 268.06174);
+	CreateDynamicObject(987, 1274.95679, -767.74249, 93.76490,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(987, 1285.12903, -767.72278, 93.76490,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(987, 1295.93665, -767.63403, 95.02023,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(987, 1263.03601, -767.72278, 93.76490,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(987, 1239.36963, -767.14935, 91.09351,   0.00000, 0.00000, 270.58139);
+	CreateDynamicObject(987, 1239.36877, -779.03198, 89.88809,   0.00000, 0.00000, 270.02322);
+	CreateDynamicObject(987, 1295.48865, -774.19019, 100.40585,   0.00000, 90.00000, 87.30762);
+	CreateDynamicObject(987, 1303.91077, -774.62805, 89.92685,   0.00000, 0.00000, 174.82312);
+	CreateDynamicObject(987, 1299.43384, -779.47302, 88.98995,   0.00000, 0.00000, 324.79294);
+	CreateDynamicObject(987, 1285.12903, -767.72278, 88.75000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(987, 1274.95679, -767.74249, 88.75000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(987, 1263.03601, -767.72278, 88.75000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(983, 1292.76672, -789.26233, 91.70000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1255.25879, -792.33649, 91.70000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1261.66370, -792.34094, 91.70000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1270.40698, -792.37970, 91.70000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1276.79956, -792.38507, 91.70000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1283.19983, -792.42212, 91.70000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1289.58228, -792.43158, 91.70000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1254.24268, -799.98859, 88.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(982, 1282.22510, -833.31561, 82.82000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(984, 1277.00598, -838.68073, 76.90000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1295.81189, -803.36407, 88.00000,   0.00000, 0.00000, 359.79901);
+	CreateDynamicObject(983, 1257.45203, -809.62628, 88.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1257.43237, -803.20770, 88.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(982, 1270.23120, -812.78156, 88.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1290.33838, -835.46381, 76.90000,   0.00000, 0.00000, 350.23904);
+	CreateDynamicObject(983, 1270.61682, -835.48651, 76.90000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1286.58923, -838.64313, 76.90000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(984, 1269.40002, -826.92407, 82.82000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(984, 1294.98975, -826.94403, 82.82000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(984, 1303.67603, -807.55701, 85.10000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(984, 1307.96997, -807.37659, 80.01924,   34.85990, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1296.23230, -819.48413, 83.84440,   0.00000, 0.00000, 285.78168);
+	CreateDynamicObject(984, 1303.67603, -807.55701, 83.84436,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1301.49182, -816.29272, 85.10000,   0.00000, 0.00000, 316.83231);
+	CreateDynamicObject(983, 1301.49182, -816.29272, 86.35000,   0.00000, 0.00000, 316.83231);
+	CreateDynamicObject(983, 1301.49182, -816.29266, 83.84440,   0.00000, 0.00000, 316.83231);
+	CreateDynamicObject(983, 1296.23230, -819.48407, 85.10000,   0.00000, 0.00000, 285.78171);
+	CreateDynamicObject(983, 1296.23755, -819.50342, 86.35000,   0.00000, 0.00000, 285.78171);
+	CreateDynamicObject(984, 1303.66785, -807.53003, 87.60000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1301.49182, -816.29272, 87.60000,   0.00000, 0.00000, 316.83231);
+	CreateDynamicObject(983, 1296.23230, -819.48413, 86.35000,   0.00000, 0.00000, 285.78171);
+	CreateDynamicObject(983, 1296.23230, -819.48407, 87.60000,   0.00000, 0.00000, 285.78171);
+	CreateDynamicObject(984, 1258.87122, -817.62042, 83.81901,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1266.83142, -817.63812, 83.81900,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1269.39575, -820.81671, 83.81900,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(13749, 1283.26404, -819.32678, 80.58000,   0.00000, 0.00000, 328.50821);
+	CreateDynamicObject(13749, 1254.48962, -797.89056, 84.30000,   0.00000, 0.00000, 322.02560);
+	CreateDynamicObject(983, 1287.83264, -812.76630, 88.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1295.82458, -809.58936, 88.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1286.22742, -812.76666, 88.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1293.79822, -833.73932, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1269.60645, -833.69727, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1273.02698, -833.69733, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1276.75989, -833.69733, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1280.76904, -833.69733, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1284.80847, -833.69733, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3811, 1289.34998, -833.76990, 82.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(984, 1303.67236, -807.51056, 86.35000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(984, 1306.34363, -796.40381, 85.10000,   0.00000, 0.00000, 14.67860);
+	CreateDynamicObject(984, 1306.34363, -796.40381, 86.35000,   0.00000, 0.00000, 14.67860);
+	CreateDynamicObject(984, 1306.34363, -796.40381, 87.60000,   0.00000, 0.00000, 14.67860);
+	CreateDynamicObject(984, 1306.33484, -796.40417, 83.78000,   0.00000, 0.00000, 14.67860);
+	CreateDynamicObject(984, 1307.96997, -807.37659, 81.50000,   34.85990, 0.00000, 0.00000);
+	CreateDynamicObject(987, 1308.29419, -785.90155, 89.92680,   0.00000, 0.00000, 113.08130);
+	CreateDynamicObject(987, 1319.91125, -814.30096, 75.87393,   0.00000, 0.00000, 173.12866);
+	CreateDynamicObject(984, 1307.96997, -807.37659, 83.00000,   34.85990, 0.00000, 0.00000);
+	CreateDynamicObject(970, 1277.82788, -790.60626, 96.00000,   0.00000, 0.00000, 100.88248);
+	CreateDynamicObject(970, 1296.00549, -775.17914, 96.00000,   0.00000, 0.00000, 160.17400);
+	CreateDynamicObject(970, 1279.15649, -794.45142, 96.00000,   0.00000, 0.00000, 298.20001);
+	CreateDynamicObject(970, 1281.61499, -797.70892, 96.00000,   0.00000, 0.00000, 315.25406);
+	CreateDynamicObject(970, 1284.89307, -800.08215, 96.00000,   0.00000, 0.00000, 332.75903);
+	CreateDynamicObject(970, 1288.71167, -801.45935, 96.00000,   0.00000, 0.00000, 346.88647);
+	CreateDynamicObject(970, 1292.77039, -801.70679, 96.00000,   0.00000, 0.00000, 6.16453);
+	CreateDynamicObject(970, 1296.72876, -800.70032, 96.00000,   0.00000, 0.00000, 22.17318);
+	CreateDynamicObject(970, 1300.17017, -798.53979, 96.00000,   0.00000, 0.00000, 42.34993);
+	CreateDynamicObject(970, 1302.82605, -795.44141, 96.00000,   0.00000, 0.00000, 57.20996);
+	CreateDynamicObject(970, 1304.45935, -791.69208, 96.00000,   0.00000, 0.00000, 75.09539);
+	CreateDynamicObject(970, 1304.93604, -787.66498, 96.00000,   0.00000, 0.00000, 92.55709);
+	CreateDynamicObject(970, 1304.22803, -783.65924, 96.00000,   0.00000, 0.00000, 108.00975);
+	CreateDynamicObject(970, 1302.43018, -780.00873, 96.00000,   0.00000, 0.00000, 124.76120);
+	CreateDynamicObject(970, 1299.59241, -777.10425, 96.00000,   0.00000, 0.00000, 143.88878);
+	CreateDynamicObject(987, 1301.00171, -817.02454, 73.70560,   0.00000, 0.00000, 328.07645);
+	CreateDynamicObject(987, 1301.00171, -817.02448, 77.70560,   0.00000, 0.00000, 328.07639);
+	CreateDynamicObject(3934, 1298.80627, -787.11987, 95.45000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(3934, 1282.80615, -787.22662, 95.45000,   0.00000, 0.00000, 90.00000);
+	/* Garage */
+	CreateDynamicObject(7245, 2962.97876, -1023.49231, 1036.48218,   0.00000, 0.00000, 0.00000);
+	SetObjectMaterial(CreateDynamicObject(18981, 2950.63892, -1010.00238, 1052.00000,   0.00000, 0.00000, 0.00000), 0, 9515, "bigboxtemp1", "garagedoor4_law", 0xFFFFFFFF);
+	CreateDynamicObject(18981, 2937.66675, -1002.38226, 1036.43726,   0.00000, 79.00000, 0.00000);
+	CreateDynamicObject(18981, 2924.02661, -1012.50385, 1036.22998,   0.00000, 90.00000, 0.00000);
+	/* Interior */
+	CreateDynamicObject(14412, 1364.60400, -3064.32251, 4989.48047,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(18553, 1340.81213, -3052.62524, 4996.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19454, 1347.60779, -3036.10669, 4997.52148,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19454, 1344.13538, -3036.11768, 4999.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19454, 1342.40527, -3036.10669, 4997.52148,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2008, 1345.32605, -3040.02148, 4994.70508,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1714, 1344.35120, -3038.86011, 4994.84375,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14459, 1369.31604, -3064.33423, 4987.09961,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2649, 1341.35205, -3045.20923, 4998.96680,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(2649, 1341.34888, -3046.85205, 4998.96680,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(934, 1382.77222, -3045.06128, 4992.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(934, 1359.75415, -3045.04126, 4992.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(934, 1370.79236, -3045.06128, 4992.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(964, 1348.40747, -3033.03394, 4994.75000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(964, 1348.41492, -3031.71436, 4994.75000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(964, 1348.40747, -3033.03394, 4995.65039,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(964, 1348.41492, -3031.71436, 4995.65039,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1829, 1341.53662, -3035.08276, 4995.30078,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1829, 1341.64819, -3031.26904, 4995.30078,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.52405, -3034.25000, 4994.80859,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.42969, -3035.80615, 4994.80859,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.47290, -3035.27588, 4994.80859,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.48083, -3034.74976, 4994.80859,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.42969, -3035.80615, 4995.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.49268, -3035.27930, 4995.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.48083, -3034.74976, 4995.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.52405, -3034.25000, 4995.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.52405, -3034.25000, 4995.19922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.48083, -3034.74976, 4995.19922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.49268, -3035.27930, 4995.19922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.42969, -3035.80615, 4995.19922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.42969, -3035.80615, 4995.40039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.49268, -3035.27930, 4995.40039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.48083, -3034.74976, 4995.40039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1348.52405, -3034.25000, 4995.40039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2482, 1344.00684, -3030.67896, 4994.75000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(335, 1344.71326, -3030.96191, 4995.80078,   90.00000, 90.00000, 180.00000);
+	CreateDynamicObject(348, 1344.83838, -3030.59961, 4995.84766,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(348, 1343.59509, -3030.62988, 4995.84766,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(335, 1343.70850, -3031.12231, 4995.80078,   90.00000, 90.00000, 0.00000);
+	CreateDynamicObject(356, 1343.84631, -3030.65796, 4996.20508,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(351, 1343.73596, -3030.65186, 4996.49023,   0.00000, 10.00000, 0.00000);
+	CreateDynamicObject(358, 1344.72009, -3030.63623, 4997.02930,   0.00000, 280.00000, 180.00000);
+	CreateDynamicObject(358, 1343.77869, -3030.61694, 4997.02930,   0.00000, 280.00000, 180.00000);
+	CreateDynamicObject(2969, 1346.10132, -3030.78882, 4994.90039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2969, 1345.42017, -3030.78394, 4994.90039,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(2922, 1344.00366, -3036.18433, 4996.25000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2922, 1346.17688, -3036.03760, 4996.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1370.86267, -3043.06519, 4991.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1359.55530, -3043.08521, 4991.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1382.65601, -3043.06519, 4991.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1359.55444, -3047.00708, 4991.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1370.90894, -3047.10034, 4991.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1382.63733, -3047.15918, 4991.09961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(937, 1364.53491, -3054.42358, 4991.25000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(937, 1364.58337, -3035.59912, 4991.25000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(937, 1378.03186, -3035.36987, 4991.25000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(937, 1378.22437, -3054.40088, 4991.25000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1364.51111, -3035.47632, 4991.71484,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1378.29443, -3054.49243, 4991.71484,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1364.56250, -3054.50610, 4991.71484,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1279, 1378.08923, -3035.27368, 4991.71484,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14416, 1351.43579, -3037.24854, 4991.55078,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1499, 1349.23499, -3054.78223, 4994.80078,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1499, 1349.25488, -3057.78052, 4994.80078,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(14412, 1372.17102, -3044.49902, 4999.99023,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14459, 1367.43860, -3044.56592, 4997.66602,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(14416, 1385.35242, -3071.39673, 4981.00000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19372, 1352.68018, -3073.54248, 4980.12891,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19372, 1349.18127, -3073.54810, 4980.12891,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19372, 1349.18787, -3076.74316, 4980.12891,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19372, 1352.67773, -3076.74219, 4980.12891,   0.00000, 90.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.73499, -3077.71875, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.48303, -3075.20996, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.19421, -3076.90063, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.82837, -3076.90063, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.47681, -3076.90063, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.08826, -3076.90063, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.54590, -3076.90063, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.41064, -3074.51245, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.21533, -3074.42676, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.82886, -3074.29297, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.35876, -3074.16309, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.19519, -3073.57715, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.55664, -3076.03857, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.65271, -3076.04346, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.58655, -3075.11426, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.50513, -3075.97095, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.15173, -3075.87988, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.52161, -3075.07788, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.33484, -3074.33960, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.78906, -3075.99487, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.41675, -3075.20776, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.55505, -3076.23950, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.29419, -3075.31543, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.08838, -3074.33960, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.67163, -3072.75464, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.43005, -3073.10156, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.78552, -3073.33691, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.04004, -3073.50781, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.80261, -3076.90063, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.65198, -3076.93652, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.73083, -3077.64233, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.87402, -3077.73267, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.39685, -3077.68799, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.16589, -3077.77759, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1348.39771, -3077.78638, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1350.52271, -3077.68506, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.39429, -3077.73999, 4979.38281,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1408, 1349.96973, -3071.98730, 4980.59961,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1408, 1354.38611, -3075.66943, 4980.59961,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(19473, 1351.09961, -3073.49878, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1349.71033, -3072.70996, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1347.95422, -3072.75000, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.31348, -3072.72852, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1351.86597, -3073.40479, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19473, 1352.03308, -3072.69067, 4979.48242,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(18553, 1347.29651, -3056.36304, 4981.50000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(934, 1360.91675, -3063.47583, 4981.50000,   0.00000, 0.00000, 358.73172);
+	CreateDynamicObject(934, 1372.74548, -3063.55469, 4981.50000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(941, 1374.43799, -3063.77539, 4980.50000,   -0.06000, 0.00000, 90.00000);
+	CreateDynamicObject(941, 1359.18958, -3063.28442, 4980.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(941, 1362.65930, -3063.39600, 4980.50000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(941, 1371.09692, -3063.63062, 4980.50000,   -0.06000, 0.00000, 90.00000);
+	CreateDynamicObject(356, 1359.34302, -3062.99023, 4981.00000,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(348, 1359.43042, -3063.96143, 4980.99023,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(348, 1374.77063, -3063.06079, 4980.99023,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(351, 1358.76172, -3063.56323, 4980.97070,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(351, 1371.29590, -3064.28223, 4980.97070,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(351, 1371.02087, -3063.62695, 4980.97070,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(356, 1374.71448, -3064.31934, 4980.98047,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(351, 1370.68591, -3063.14331, 4980.97070,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(356, 1374.00940, -3064.25366, 4980.98047,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(348, 1373.99048, -3063.16528, 4980.99023,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(348, 1362.89160, -3062.80396, 4980.99023,   90.00000, 0.00000, 90.00000);
+	CreateDynamicObject(351, 1362.62622, -3064.10449, 4980.97070,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(356, 1362.32471, -3063.30298, 4981.00000,   80.00000, 0.00000, 90.00000);
+	CreateDynamicObject(14410, 1398.33179, -3045.57422, 4987.44922,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1499, 1387.70154, -3051.08789, 4984.28906,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1499, 1387.72180, -3054.08813, 4984.28906,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2294, 1353.75757, -3057.48242, 4990.52344,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2294, 1349.88660, -3057.56836, 4990.52344,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2294, 1350.87073, -3057.54858, 4990.52344,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2294, 1351.84546, -3057.55298, 4990.52344,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2294, 1352.80823, -3057.53564, 4990.52344,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(2294, 1388.90137, -3035.04053, 4990.52344,   0.00000, 0.00000, 269.18683);
+	CreateDynamicObject(2294, 1388.87964, -3031.04688, 4990.52344,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2294, 1388.89441, -3032.04053, 4990.52344,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(2294, 1388.91003, -3033.04272, 4990.52344,   0.00000, 0.00000, 269.69696);
+	CreateDynamicObject(2294, 1388.91602, -3034.04468, 4990.52344,   0.00000, 0.00000, 269.69696);
+	CreateDynamicObject(2228, 1353.86353, -3078.19751, 4980.75000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1703, 1370.15015, -3076.54761, 4980.00000,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(1703, 1371.31775, -3073.29272, 4980.00000,   0.00000, 0.00000, 270.00000);
+	CreateDynamicObject(1703, 1368.14893, -3071.86499, 4980.00000,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1703, 1366.97729, -3075.40259, 4980.00000,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(2315, 1369.22241, -3075.02808, 4980.09961,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(1670, 1369.22095, -3075.14258, 4980.59375,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1670, 1369.28259, -3074.22095, 4980.59375,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1670, 1369.29260, -3073.43335, 4980.59375,   0.00000, 0.00000, 0.00000);
+	/* " i " */
+	CreatePickup(1239, 1, 1258.3075, -785.4031, 92.0302, -1); //entrance top
+	CreatePickup(1239, 1, 1298.6323, -800.2110, 84.1406, -1); //entrance bottom
+	CreatePickup(1239, 1, 1341.1936, -3052.3301, 4995.8105, -1); // top floor exit
+	CreatePickup(1239, 1, 1349.8260, -3056.1846, 4981.2367, -1); // bottom floor exit
+	CreatePickup(1239, 1, 1249.0446, -800.8873, 84.1406, -1); // garage entry
+	CreatePickup(1239, 1, 2948.1450, -1008.5245, 1039.9834, -1); // garage exit
+	CreatePickup(1239, 1, 2942.1077, -999.9381, 1033.9900, -1); // garage entrance bottom
+	CreatePickup(1239, 1, 1344.7222, -3032.0408, 4995.8105, -1); //armory
+	return 1;
+}
+
+// ---------------------- NON-DONATION ----------------------
+stock LoadLSPDGarageMap()
+{
+	CreateDynamicObject(966, 1540.23022, -1665.57373, 4.83205, 0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1544.52808, -1665.50488, 5.54580, 0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1546.12952, -1665.51599, 5.54580, 0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(19425, 1538.43457, -1665.57251, 4.88216, 0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19425, 1535.18640, -1665.57410, 4.88216, 0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(983, 1529.62744, -1665.53931, 5.88815, 0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(983, 1526.44116, -1665.52954, 5.88815, 0.00000, 0.00000, 90.00000);
+	return 1;
+}
+
+
+stock LoadCourt()
+{
+	CreateDynamicObject(14602, 1445.1230469, -1466.2246094, 1619.7288818, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(13007, 1424.1153564, -1469.6701660, 1613.1350098, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(14602, 1436.9414062, -1446.6044922, 1619.7038574, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(13007, 1442.6728516, -1467.3056641, 1613.1350098, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(13007, 1425.7871094, -1454.3955078, 1613.1600342, 0.0000000, 0.0000000, 359.9890137);
+	CreateDynamicObject(13007, 1415.7307129, -1469.8259277, 1613.3847656, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(13007, 1415.7011719, -1471.9492188, 1613.6099854, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(13007, 1415.6757812, -1471.9511719, 1613.7851562, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(13007, 1426.9150391, -1451.6982422, 1613.1850586, 0.0000000, 0.0000000, 269.9890137);
+	CreateDynamicObject(7191, 1426.1708984, -1460.9160156, 1614.9812012, 90.0000000, 180.0054932, 269.9890137);
+	CreateDynamicObject(7191, 1420.7182617, -1460.9030762, 1617.3320312, 90.0000000, 180.0054932, 269.9835205);
+	CreateDynamicObject(1491, 1422.6826172, -1460.9404297, 1615.3189697, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(7191, 1426.1943359, -1460.8955078, 1617.3320312, 90.0000000, 179.9945068, 89.9945068);
+	CreateDynamicObject(7191, 1423.9179688, -1460.9130859, 1639.9559326, 270.0000000, 180.0014954, 269.9905090);
+	CreateDynamicObject(7191, 1422.2421875, -1460.8945312, 1639.9559326, 270.0000000, 180.0004120, 89.9894104);
+	CreateDynamicObject(7191, 1420.7714844, -1460.8876953, 1617.3320312, 90.0000000, 179.9945068, 89.9890442);
+	CreateDynamicObject(7191, 1425.1721191, -1459.4197998, 1614.4053955, 90.0000000, 180.0054932, 269.9780273);
+	CreateDynamicObject(7191, 1425.2216797, -1459.3935547, 1614.4053955, 90.0000000, 180.0054932, 89.9780579);
+	CreateDynamicObject(7191, 1426.2177734, -1457.3769531, 1614.4053955, 90.0000000, 179.9945068, 359.9890137);
+	CreateDynamicObject(7191, 1426.1927490, -1457.3767090, 1614.4053955, 90.0000000, 180.0054932, 179.9780273);
+	CreateDynamicObject(7191, 1428.0070801, -1460.9328613, 1594.1313477, 90.0000000, 180.0054932, 269.9890442);
+	CreateDynamicObject(7191, 1428.0412598, -1460.8847656, 1594.1318359, 90.0000000, 179.9945068, 89.9945068);
+	CreateDynamicObject(7191, 1431.6250000, -1460.9365234, 1614.9812012, 90.0000000, 179.9945068, 270.0000000);
+	CreateDynamicObject(7191, 1431.6505127, -1460.9017334, 1614.9812012, 90.0000000, 179.9945068, 90.0000000);
+	CreateDynamicObject(7191, 1427.7677002, -1460.9324951, 1639.9559326, 270.0000000, 179.9995728, 269.9885254);
+	CreateDynamicObject(7191, 1425.0917969, -1460.9228516, 1639.9559326, 270.0000000, 180.0054932, 269.9890137);
+	CreateDynamicObject(7191, 1427.7093506, -1460.9039307, 1639.9809570, 270.0000000, 180.0014648, 89.9904785);
+	CreateDynamicObject(7191, 1421.3723145, -1459.4096680, 1640.0810547, 270.0000000, 180.0000000, 89.9890442);
+	CreateDynamicObject(7191, 1421.2452393, -1459.4218750, 1640.0810547, 270.0000000, 180.0000000, 269.9890137);
+	CreateDynamicObject(2395, 1427.5772705, -1461.0162354, 1615.4383545, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1649, 1428.7719727, -1460.9821777, 1616.9980469, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1649, 1428.7729492, -1460.9567871, 1616.9980469, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(1491, 1433.5537109, -1460.8779297, 1615.3189697, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(7191, 1433.5488281, -1457.4218750, 1614.4053955, 90.0000000, 180.0054932, 359.9670410);
+	CreateDynamicObject(7191, 1433.5260010, -1457.4116211, 1614.4053955, 90.0000000, 179.9945068, 179.9780273);
+	CreateDynamicObject(7191, 1433.5546875, -1459.0332031, 1639.9559326, 270.0000000, 179.9985352, 359.9874878);
+	CreateDynamicObject(7191, 1433.5048828, -1459.0286865, 1639.9559326, 270.0000000, 179.9985352, 179.9874878);
+	CreateDynamicObject(13007, 1430.8962402, -1451.1616211, 1613.1350098, 0.0000000, 0.0000000, 359.9945068);
+	CreateDynamicObject(13007, 1442.7113037, -1451.1556396, 1613.1099854, 0.0000000, 0.0000000, 359.9890137);
+	CreateDynamicObject(1536, 1434.9121094, -1457.1562500, 1615.2620850, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1567, 1439.9428711, -1460.5157471, 1615.0570068, 0.0000000, 0.0000000, 241.2500000);
+	CreateDynamicObject(1567, 1437.4666748, -1460.5045166, 1615.0570068, 0.0000000, 0.0000000, 359.9963379);
+	CreateDynamicObject(7191, 1437.5939941, -1458.5607910, 1595.6303711, 90.0000000, 180.0054932, 359.9670410);
+	CreateDynamicObject(7191, 1437.5689697, -1458.5572510, 1595.6303711, 90.0000000, 180.0054932, 179.9670410);
+	CreateDynamicObject(7191, 1428.0070801, -1460.9328613, 1594.1313477, 90.0000000, 180.0054932, 269.9890442);
+	CreateDynamicObject(7191, 1440.0966797, -1462.1289062, 1614.4053955, 90.0000000, 179.9945068, 359.9780273);
+	CreateDynamicObject(7191, 1440.0544434, -1462.1169434, 1614.4053955, 90.0000000, 179.9945068, 179.9780273);
+	CreateDynamicObject(1502, 1440.0722656, -1464.0230713, 1615.3072510, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1502, 1440.1240234, -1467.0253906, 1615.3072510, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(7191, 1440.0805664, -1465.2288818, 1639.9559326, 270.0000000, 179.9985352, 359.9874878);
+	CreateDynamicObject(7191, 1440.0541992, -1465.2526855, 1639.9559326, 270.0000000, 179.9996338, 179.9885254);
+	CreateDynamicObject(7191, 1440.0797119, -1468.9716797, 1614.4053955, 90.0000000, 180.0054932, 359.9670410);
+	CreateDynamicObject(7191, 1440.0478516, -1468.9677734, 1614.4053955, 90.0000000, 180.0054932, 179.9615479);
+	CreateDynamicObject(7191, 1446.0732422, -1462.0136719, 1617.2097168, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(7191, 1446.0732422, -1462.0136719, 1621.1601562, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1569, 1446.0191650, -1467.0644531, 1615.3072510, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1569, 1446.0124512, -1464.0634766, 1615.3072510, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2773, 1442.2539062, -1465.4960938, 1615.7994385, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2773, 1441.3217773, -1467.8122559, 1615.7994385, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2773, 1441.3377686, -1463.3662109, 1615.7994385, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(7191, 1462.2470703, -1460.4736328, 1619.6086426, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2368, 1445.3759766, -1460.2324219, 1615.2528076, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2368, 1442.5487061, -1460.2370605, 1615.2528076, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(18070, 1448.5996094, -1458.0546875, 1615.8320312, 0.0000000, 0.0000000, 180.7470703);
+	CreateDynamicObject(1722, 1444.6982422, -1469.5671387, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1722, 1443.9117432, -1469.5560303, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1722, 1443.1766357, -1469.5391846, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1722, 1442.4182129, -1469.5500488, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(949, 1440.5456543, -1469.2239990, 1615.9434814, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2596, 1425.7331543, -1469.5227051, 1617.9492188, 0.0000000, 0.0000000, 140.0000000);
+	CreateDynamicObject(2818, 1445.7460938, -1466.0697021, 1615.3072510, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2257, 1443.2313232, -1469.5782471, 1618.0195312, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(1722, 1441.6676025, -1469.5275879, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(949, 1445.5146484, -1469.0583496, 1615.9434814, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1744, 1446.1517334, -1461.8934326, 1616.0469971, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2199, 1443.1087646, -1457.2410889, 1615.3072510, 0.0000000, 0.0000000, 359.0000000);
+	CreateDynamicObject(2606, 1437.9735107, -1458.8436279, 1617.1849365, 0.0000000, 0.0000000, 89.7500000);
+	CreateDynamicObject(1808, 1445.7926025, -1467.5563965, 1615.2822266, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(949, 1440.4360352, -1462.1645508, 1615.9434814, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2186, 1440.8079834, -1457.6450195, 1615.3692627, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2165, 1445.5589600, -1458.1275635, 1615.5324707, 0.0000000, 0.0000000, 268.7500000);
+	CreateDynamicObject(1806, 1443.8811035, -1458.5136719, 1615.2822266, 0.0000000, 0.0000000, 240.0000000);
+	CreateDynamicObject(2185, 1439.7868652, -1457.6590576, 1615.3072510, 0.0000000, 0.0000000, 181.7500000);
+	CreateDynamicObject(1806, 1439.0220947, -1459.0007324, 1615.2822266, 0.0000000, 0.0000000, 359.9963379);
+	CreateDynamicObject(2614, 1440.2258301, -1465.5292969, 1618.8081055, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2368, 1448.1687012, -1460.2210693, 1615.2528076, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2196, 1445.6363525, -1458.8933105, 1616.3447266, 0.0000000, 0.0000000, 232.7500000);
+	CreateDynamicObject(16780, 1443.3220215, -1465.1861572, 1619.9155273, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1723, 1426.7081299, -1458.9458008, 1615.3572998, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1723, 1429.3132324, -1457.6577148, 1615.3572998, 0.0000000, 0.0000000, 0.2500000);
+	CreateDynamicObject(949, 1432.5627441, -1457.5974121, 1615.9184570, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1808, 1430.9270020, -1460.6057129, 1615.2822266, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(2231, 1428.6539307, -1461.0516357, 1617.8575439, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(2738, 1424.1912842, -1457.5739746, 1615.9602051, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2828, 1445.6424561, -1459.4842529, 1616.3719482, 0.0000000, 0.0000000, 92.0000000);
+	CreateDynamicObject(2855, 1441.0212402, -1469.2564697, 1615.3072510, 0.0000000, 0.0000000, 160.0000000);
+	CreateDynamicObject(2853, 1439.3603516, -1457.6507568, 1616.1143799, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(1800, 1425.3652344, -1460.5433350, 1615.3572998, 0.0000000, 0.0000000, 359.0000000);
+	CreateDynamicObject(2518, 1422.4659424, -1457.6859131, 1615.3572998, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2911, 1422.0992432, -1460.6550293, 1615.3322754, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2204, 1424.9895020, -1465.0786133, 1615.1157227, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2204, 1424.9759521, -1462.9609375, 1614.5151367, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2204, 1424.9774170, -1467.2524414, 1614.5401611, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2204, 1426.9980469, -1462.9410400, 1614.3649902, 0.0000000, 0.0000000, 180.0000000);
+	CreateDynamicObject(2204, 1429.9478760, -1462.9298096, 1614.3649902, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2204, 1424.5594482, -1464.9271240, 1614.4901123, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2204, 1424.5557861, -1467.0566406, 1615.0906982, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2204, 1424.5660400, -1469.2221680, 1614.5151367, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2204, 1430.8729248, -1462.7087402, 1614.3649902, 0.0000000, 0.0000000, 269.9945068);
+	CreateDynamicObject(2204, 1430.8322754, -1467.3721924, 1614.3649902, 0.0000000, 0.0000000, 269.9890137);
+	CreateDynamicObject(2204, 1430.4104004, -1469.3361816, 1614.3399658, 0.0000000, 0.0000000, 89.9890137);
+	CreateDynamicObject(2204, 1430.4569092, -1464.6726074, 1614.3399658, 0.0000000, 0.0000000, 89.9890137);
+	CreateDynamicObject(1491, 1430.6772461, -1462.5290527, 1613.6428223, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2205, 1428.2191162, -1464.9471436, 1615.3072510, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2205, 1428.1341553, -1468.9221191, 1615.3072510, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1714, 1423.2902832, -1466.2514648, 1615.9573975, 0.0000000, 0.0000000, 91.7500000);
+	CreateDynamicObject(1663, 1423.4685059, -1463.6612549, 1616.0172119, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(1715, 1429.8437500, -1463.8223877, 1615.3072510, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1715, 1429.8929443, -1465.0079346, 1615.3072510, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1715, 1429.7202148, -1467.6260986, 1615.3072510, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1715, 1429.7415771, -1468.6763916, 1615.3072510, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(1715, 1427.7830811, -1461.3129883, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1715, 1426.8801270, -1461.2830811, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1715, 1425.9743652, -1461.2800293, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1715, 1424.9727783, -1461.2083740, 1615.3072510, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(7191, 1437.2891846, -1457.0878906, 1617.0595703, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(7191, 1437.2890625, -1457.0878906, 1621.0119629, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(2748, 1432.5021973, -1467.5581055, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1432.5148926, -1469.1064453, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1432.4923096, -1464.3041992, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1432.4868164, -1463.7509766, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1434.9233398, -1463.7482910, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1434.9169922, -1464.3952637, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1434.8991699, -1467.5417480, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1434.9039307, -1469.0920410, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1437.1959229, -1463.7338867, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1437.1929932, -1464.3585205, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1437.2941895, -1467.4959717, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2748, 1437.3001709, -1469.0249023, 1615.8800049, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(949, 1439.6000977, -1469.1203613, 1615.9434814, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(949, 1439.6320801, -1462.3918457, 1615.9434814, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(1808, 1439.7879639, -1467.3641357, 1615.2822266, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(955, 1437.0357666, -1457.8698730, 1615.6826172, 0.0000000, 0.0000000, 267.0000000);
+	CreateDynamicObject(956, 1437.0462646, -1459.6529541, 1615.7326660, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(949, 1434.1186523, -1457.7692871, 1615.9434814, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2204, 1433.3977051, -1462.9284668, 1614.3649902, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2204, 1436.3273926, -1462.9224854, 1614.3649902, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2204, 1437.3845215, -1462.9106445, 1614.3399658, 0.0000000, 0.0000000, 179.9945068);
+	CreateDynamicObject(2204, 1435.4145508, -1462.4875488, 1614.3149414, 0.0000000, 0.0000000, 359.9945068);
+	CreateDynamicObject(2204, 1432.5063477, -1462.5025635, 1614.3149414, 0.0000000, 0.0000000, 359.9890137);
+	CreateDynamicObject(2204, 1431.3596191, -1462.5272217, 1614.3149414, 0.0000000, 0.0000000, 359.9890137);
+	CreateDynamicObject(2614, 1425.1400146, -1466.2191162, 1616.0954590, 0.0000000, 0.0000000, 90.0000000);
+	CreateDynamicObject(3027, 1446.8895264, -1462.6232910, 1612.5847168, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(2352, 1424.7546387, -1465.6657715, 1616.9150391, 358.0010071, 89.9369507, 269.9988403);
+	CreateDynamicObject(2894, 1424.7946777, -1466.4781494, 1616.9056396, 0.0000000, 0.0000000, 270.0000000);
+	CreateDynamicObject(2254, 1429.8028564, -1457.2020264, 1617.9412842, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(976, 1414.4863281, -1459.4875488, 1612.1719971, 0.0000000, 0.0000000, 0.0000000);
+	CreateDynamicObject(3850, 1443.9306641, -1460.5810547, 1617.5115967, 0.0000000, 0.0000000, 0.0000000);
+	CreatePickup(1239, 1, 1423.1179, -1458.7749, 1616.3573, 0);
+	CreateDynamic3DTextLabel("SCOTUS Arrest Point\n{FFFFFF}Use /arrest", 0x43527DFF, 1423.1179, -1458.7749, 1616.3573 + 0.60, 20.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100);
+	return 1;
+}
+stock LoadSANGExterior()
+{
+	CreateDynamicObject(7981, 343.23999, 1798.23999, 21.67890,   0.00000, 0.00000, -50.00000);
+	CreateDynamicObject(1682, 346.40485, 1796.10852, 33.41790,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(10401, 141.01460, 1959.37292, 20.56560,   0.00000, 0.00000, -45.00000);
+	CreateDynamicObject(9245, 280.03369, 1929.39282, 28.44370,   0.00000, 0.05000, 144.50000);
+	CreateDynamicObject(19313, 143.26810, 1948.28015, 18.58170,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(8168, 125.15070, 1945.43018, 20.17570,   0.00000, 0.00000, 106.00000);
+	CreateDynamicObject(19313, 143.26810, 1962.29102, 18.58170,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(7657, 127.38960, 1959.21252, 19.93800,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(973, 128.58971, 1953.75513, 19.03500,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(973, 128.58971, 1963.13989, 19.03500,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(1250, 128.79500, 1968.32776, 18.52660,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1250, 142.14600, 1968.32800, 18.52660,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(973, 142.03970, 1963.13989, 19.03500,   0.00000, 0.00000, 90.00000);
+	CreateDynamicObject(973, 141.97301, 1953.75525, 19.03500,   0.00000, 0.00000, 89.20000);
+	CreateDynamicObject(966, 142.19769, 1948.71436, 18.38840,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(966, 128.29770, 1948.71436, 18.38840,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(19425, 133.72060, 1963.40906, 18.51590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19425, 130.42059, 1963.40906, 18.51590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19425, 137.02060, 1963.40906, 18.51590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19425, 140.27060, 1963.40906, 18.51590,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19280, 127.57190, 1949.51904, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1953.86914, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1954.51904, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1958.81909, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1959.51904, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1963.81897, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1968.81897, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 127.57190, 1964.51904, 21.73850,   -30.00000, 180.00000, -90.00000);
+	CreateDynamicObject(19280, 143.12190, 1969.01904, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1964.71899, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1964.01904, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1959.71899, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1959.01904, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1954.71899, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1954.01904, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(19280, 143.12190, 1949.76904, 21.63850,   -30.00000, 180.00000, 90.00000);
+	CreateDynamicObject(1622, 128.11760, 1943.14355, 22.41970,   9.85000, -14.85000, 202.30000);
+	CreateDynamicObject(8169, 125.15070, 1945.43018, 18.42570,   0.00000, 0.00000, 106.00000);
+	CreateDynamicObject(11488, 113.61050, 1945.19666, 18.15100,   -2.50000, 0.00000, 75.10000);
+	CreateDynamicObject(11488, 113.62300, 1945.16199, 17.68000,   -2.50000, 0.00000, 75.10000);
+	//Signs
+	CreateDynamicObject(3264, 127.34450, 1976.34558, 18.47180,   0.00000, 0.00000, 180.00000);
+	CreateDynamicObject(3264, -92.04690, 2072.03125, 16.67190,   356.85840, 0.00000, -90.08730);
+	//Car park
+	CreateDynamicObject(8658, 125.94800, 1832.84180, 16.36340,   0.02500, 0.00000, 90.00000);
+	CreateDynamicObject(8658, 137.29800, 1832.84180, 16.36340,   0.00000, 0.00000, -90.00000);
+	CreateDynamicObject(8658, 111.10500, 1835.74182, 16.36340,   -0.05000, 0.00000, 0.00000);
+	CreateDynamicObject(8658, 131.61160, 1883.02893, 16.90000,   2.35000, -1.10000, 0.00000);
+	CreateDynamicObject(8658, 111.10500, 1853.59180, 16.40000,   1.10000, -1.10000, 0.00000);
+	CreateDynamicObject(1214, 111.14462, 1868.83142, 16.83452,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1214, 138.50420, 1861.69482, 16.65500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1214, 138.50420, 1863.64478, 16.65500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1214, 138.50420, 1865.59485, 16.65500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(1214, 138.50420, 1867.34485, 16.65500,   0.00000, 0.00000, 0.00000);
+	CreateDynamicObject(19353, 113.20010, 1865.65552, 15.06700,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1865.65552, 15.06700,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1862.05554, 15.02900,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1862.05554, 15.02900,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1858.45544, 14.99600,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1858.45544, 14.99600,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1854.85547, 14.96200,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1851.25549, 14.93050,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1847.65552, 14.90000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1840.45544, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1844.05554, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1836.85547, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 116.40010, 1833.25549, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1833.25549, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1836.85547, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.25010, 1840.45544, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1844.05554, 14.89000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1847.65552, 14.90000,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1851.25549, 14.93050,   0.00000, -0.40000, 90.00000);
+	CreateDynamicObject(19353, 113.20010, 1854.85547, 14.96200,   0.00000, -0.40000, 90.00000);
+	//Radar Dish
+	CreateDynamicObject(1682, 346.40485, 1796.10852, 33.41790,   0.00000, 0.00000, 0.00000);
+	//Control tower
+	CreateDynamicObject(9245, 280.03369, 1929.39282, 28.44370,   0.00000, 0.05000, 144.50000);
+	SANGBarriers[1] = CreateDynamicObject(968, 128.14999, 1948.71436, 19.13840,   0.00000, 90.00000, 0.00000);
+	SANGBarriers[2] = CreateDynamicObject(968, 142.35001, 1948.71436, 19.13840,   0.00000, 90.00000, 180.00000);
+	return 1;
+}

BIN
gamemodes/lvdm.amx


BIN
gamemodes/rivershell.amx


BIN
gamemodes/sqltest.amx


BIN
gamemodes/timertest.amx


BIN
gamemodes/urp.amx


+ 241 - 0
include/gl_common.inc

@@ -0,0 +1,241 @@
+//----------------------------------------------------------
+//
+// GRAND LARCENY common functions include.
+//
+//----------------------------------------------------------
+
+stock LoadStaticVehiclesFromFile(const filename[])
+{
+	new File:file_ptr;
+	new line[256];
+	new var_from_line[64];
+	new vehicletype;
+	new Float:SpawnX;
+	new Float:SpawnY;
+	new Float:SpawnZ;
+	new Float:SpawnRot;
+    new Color1, Color2;
+	new index;
+	new vehicles_loaded;
+
+	file_ptr = fopen(filename,filemode:io_read);
+	if(!file_ptr) return 0;
+
+	vehicles_loaded = 0;
+
+	while(fread(file_ptr,line,256) > 0)
+	{
+	    index = 0;
+
+	    // Read type
+  		index = token_by_delim(line,var_from_line,',',index);
+  		if(index == (-1)) continue;
+  		vehicletype = strval(var_from_line);
+   		if(vehicletype < 400 || vehicletype > 611) continue;
+
+  		// Read X, Y, Z, Rotation
+  		index = token_by_delim(line,var_from_line,',',index+1);
+  		if(index == (-1)) continue;
+  		SpawnX = floatstr(var_from_line);
+
+  		index = token_by_delim(line,var_from_line,',',index+1);
+  		if(index == (-1)) continue;
+  		SpawnY = floatstr(var_from_line);
+
+  		index = token_by_delim(line,var_from_line,',',index+1);
+  		if(index == (-1)) continue;
+  		SpawnZ = floatstr(var_from_line);
+
+  		index = token_by_delim(line,var_from_line,',',index+1);
+  		if(index == (-1)) continue;
+  		SpawnRot = floatstr(var_from_line);
+
+  		// Read Color1, Color2
+  		index = token_by_delim(line,var_from_line,',',index+1);
+  		if(index == (-1)) continue;
+  		Color1 = strval(var_from_line);
+
+  		index = token_by_delim(line,var_from_line,';',index+1);
+  		Color2 = strval(var_from_line);
+  		
+  		//printf("%d,%.2f,%.2f,%.2f,%.4f,%d,%d",vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2);
+  		
+  		AddStaticVehicleEx(vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2,(30*60)); // respawn 30 minutes
+		
+		/*new numplate_test[32+1];
+		format(numplate_test,32,"GRLC{44AA33}%d",vid);
+		SetVehicleNumberPlate(vid, numplate_test);*/
+		
+		vehicles_loaded++;
+	}
+
+	fclose(file_ptr);
+	printf("Loaded %d vehicles from: %s",vehicles_loaded,filename);
+	return vehicles_loaded;
+}
+
+//----------------------------------------------------------
+
+stock strtok(const string[], &index)
+{
+	new length = strlen(string);
+	while ((index < length) && (string[index] <= ' '))
+	{
+		index++;
+	}
+
+	new offset = index;
+	new result[20];
+	while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
+	{
+		result[index - offset] = string[index];
+		index++;
+	}
+	result[index - offset] = EOS;
+	return result;
+}
+
+//------------------------------------------------
+
+stock strrest(const string[], &index)
+{
+	new length = strlen(string);
+	while ((index < length) && (string[index] <= ' '))
+	{
+		index++;
+	}
+	new offset = index;
+	new result[128];
+	while ((index < length) && ((index - offset) < (sizeof(result) - 1)))
+	{
+		result[index - offset] = string[index];
+		index++;
+	}
+	result[index - offset] = EOS;
+	return result;
+}
+
+//----------------------------------------------------------
+// Tokenise by a delimiter
+// Return string and index of the end determined by the
+// provided delimiter in delim
+
+stock token_by_delim(const string[], return_str[], delim, start_index)
+{
+	new x=0;
+	while(string[start_index] != EOS && string[start_index] != delim) {
+	    return_str[x] = string[start_index];
+	    x++;
+	    start_index++;
+	}
+	return_str[x] = EOS;
+	if(string[start_index] == EOS) start_index = (-1);
+	return start_index;
+}
+
+//----------------------------------------------------------
+
+stock isNumeric(const string[])
+{
+  new length=strlen(string);
+  if (length==0) return false;
+  for (new i = 0; i < length; i++)
+    {
+      if (
+            (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
+             || (string[i]=='-' && i!=0)                                             // A '-' but not at first.
+             || (string[i]=='+' && i!=0)                                             // A '+' but not at first.
+         ) return false;
+    }
+  if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
+  return true;
+}
+
+//----------------------------------------------------------
+
+stock IsKeyJustDown(key, newkeys, oldkeys)
+{
+	if((newkeys & key) && !(oldkeys & key)) return 1;
+	return 0;
+}
+
+//----------------------------------------------------------
+
+stock PlaySoundForAll(soundid, Float:x, Float:y, Float:z)
+{
+	for(new i=0; i<MAX_PLAYERS; i++)
+	{
+	    if(IsPlayerConnected(i))
+	    {
+		    PlayerPlaySound(i, soundid, x, y, z);
+	    }
+	}
+}
+
+//----------------------------------------------------------
+
+stock PlaySoundForPlayersInRange(soundid, Float:range, Float:x, Float:y, Float:z)
+{
+	for(new i=0; i<MAX_PLAYERS; i++)
+	{
+	    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,range,x,y,z))
+	    {
+		    PlayerPlaySound(i, soundid, x, y, z);
+	    }
+	}
+}
+
+//----------------------------------------------------------
+
+#define RETURN_USER_FAILURE -1
+#define RETURN_USER_MULTIPLE -2
+
+stock ReturnUser(text[])
+{
+	new pos = 0;
+	new userid = RETURN_USER_FAILURE;
+		
+	while(text[pos] < 0x21) { // Strip out leading spaces
+		if(text[pos] == 0) return RETURN_USER_FAILURE; // No passed text
+		pos++;
+	}
+		
+	if(isNumeric(text[pos])) { // Check whole passed string
+		userid = strval(text[pos]);
+		if(userid >=0 && userid < MAX_PLAYERS)
+		{
+			if(IsPlayerConnected(userid)) return userid;
+			return RETURN_USER_FAILURE;
+		}
+	}
+	
+	// They entered [part of] a name or the id search failed (check names just incase)
+	new len = strlen(text[pos]);
+	new count = 0;
+	new name[MAX_PLAYER_NAME+1];
+	
+	for(new i = 0; i < MAX_PLAYERS; i++)
+	{
+		if(IsPlayerConnected(i))
+		{
+			GetPlayerName(i, name, sizeof(name));
+			if(strcmp(name, text[pos], true, len) == 0) // Check segment of name
+			{
+				if(len == strlen(name)) { // Exact match
+					return i;
+				}
+				else { // Partial match
+					count++;
+					userid = i;
+				}
+			}
+		}
+	}
+	
+	if(!count) return RETURN_USER_FAILURE;
+	if(count > 1) return RETURN_USER_MULTIPLE;
+	
+	return userid;
+}
+
+//----------------------------------------------------------

+ 166 - 0
include/gl_messages.inc

@@ -0,0 +1,166 @@
+//
+//
+//  SA-MP Roleplay style chat module for SA-MP 0.3
+//  (c) 2012 SA-MP Team
+//   All rights reserved
+//
+
+#define GENERAL_COLOR      	0xEEEEEEFF
+#define LOCAL_TALK_COLOR    0xD0D0D0FF
+#define SPEECH_BUBBLE_COLOR	0xEEEEEEFF
+#define ACTION_COLOR     	0xC2A2DAAA
+#define CMD_USAGE_COLOR     0xBFC0C2FF
+#define MEGAPHONE_COLOR		0xFFFF00AA
+#define WHISPER_COLOR		0xFFFF00AA
+#define OOC_COLOR			0xE0FFFFAA
+#define ADMIN_ACTION_COLOR  0xDAA2ACAA
+
+#define TALK_DISTANCE   	30.0
+#define SHOUT_DISTANCE  	60.0
+#define LOW_DISTANCE    	5.0
+#define ACTION_DISTANCE 	30.0
+#define MEGAPHONE_DISTANCE  70.0
+
+#define CHAT_BUBBLE_TIME 	6000
+
+#define ACTION_ME           1
+#define ACTION_DO           2
+
+//---------------------------------------------
+// Send a chat message to this player
+
+stock PlayerMessage(playerid, color, message[])
+{
+     SendClientMessage(playerid, color, message);
+}
+
+//---------------------------------------------
+// Send a chat message to all players
+
+stock GlobalMessage(color, message[])
+{
+     SendClientMessageToAll(color, message);
+}
+
+//---------------------------------------------
+
+stock CmdUsageMessage(playerid, message[])
+{
+ 	new msg[256+1];
+	format(msg,256,"[{BFC0C2}usage{EEEEEE}] %s", message);
+	SendClientMessage(playerid, GENERAL_COLOR, msg);
+}
+
+//---------------------------------------------
+
+stock CmdErrorMessage(playerid, message[])
+{
+    new msg[256+1];
+	format(msg,256,"[{E0C0C0}error{EEEEEE}] %s", message);
+	SendClientMessage(playerid, GENERAL_COLOR, msg);
+}
+
+//---------------------------------------------
+
+stock CmdAdminMessage(playerid, message[])
+{
+	new msg[256+1];
+	format(msg,256,"[{5050EE}admin{EEEEEE}] %s", message);
+	SendClientMessage(playerid, GENERAL_COLOR, msg);
+}
+
+//---------------------------------------------
+
+stock AdminActionMessage(playerid, message[])
+{
+	PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
+	SendClientMessage(playerid, ADMIN_ACTION_COLOR, message);		
+}
+
+//---------------------------------------------
+// Send a chat message to players in distance of playerid
+// This includes the origin player.
+
+stock LocalMessage(Float:dist, playerid, color, message[], chatbubble=0)
+{
+	if(!strlen(message)) return;
+
+	if(IsPlayerConnected(playerid))
+	{
+		new Float:fPlayerX, Float:fPlayerY, Float:fPlayerZ;
+		new Float:fPlayerToPlayerDist;
+		
+		// send to the origin player
+		PlayerMessage(playerid, color, message);
+		
+		// if it requires a chat bubble, show it.
+		if(chatbubble) {
+			SetPlayerChatBubble(playerid, message, color, dist, CHAT_BUBBLE_TIME);
+		}
+
+		GetPlayerPos(playerid, fPlayerX, fPlayerY, fPlayerZ);
+		
+		for(new i = 0; i < MAX_PLAYERS; i++) { // for every player
+		    if(IsPlayerConnected(i) && (i != playerid) && IsPlayerStreamedIn(playerid,i)) {
+		        fPlayerToPlayerDist = GetPlayerDistanceFromPoint(i, fPlayerX, fPlayerY, fPlayerZ);
+				if(fPlayerToPlayerDist < dist) { // receiving player is within the specified distance
+					PlayerMessage(i, color, message);
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------
+// This will send a local talk message and automatically grey-fade it.
+// This includes the origin player.
+
+stock TalkMessage(Float:dist, playerid, prefix[], message[])
+{
+    new PlayerName[MAX_PLAYER_NAME+1];
+	new Msg[256+1];
+	new MsgWithName[256+1];
+	
+	if(!strlen(message)) return;
+
+	if(IsPlayerConnected(playerid))
+	{
+		new Float:fPlayerX, Float:fPlayerY, Float:fPlayerZ;
+		new Float:fPlayerToPlayerDist;
+		new Float:fNormDistance;
+		new ColorScale;
+		new ColorValue;
+
+		GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
+		if(strlen(prefix)) {
+			format(Msg, sizeof(Msg), "%s %s", prefix, message);
+		} else {
+		    format(Msg, sizeof(Msg), "%s", message);
+		}
+		
+		format(MsgWithName, sizeof(MsgWithName), "%s: %s", PlayerName, Msg);
+
+        SetPlayerChatBubble(playerid, Msg, SPEECH_BUBBLE_COLOR, dist, CHAT_BUBBLE_TIME);
+		
+		// Send to originating player
+		PlayerMessage(playerid, LOCAL_TALK_COLOR, MsgWithName);
+
+		GetPlayerPos(playerid, fPlayerX, fPlayerY, fPlayerZ);
+
+		for(new i = 0; i < MAX_PLAYERS; i++) { // for every player
+		    if(IsPlayerConnected(i) && (i != playerid) && IsPlayerStreamedIn(playerid,i)) {
+		        fPlayerToPlayerDist = GetPlayerDistanceFromPoint(i, fPlayerX, fPlayerY, fPlayerZ);
+				if(fPlayerToPlayerDist < dist) { // receiving player is within the specified distance
+					// get normalized distance to create a fade.
+					fNormDistance = 1.0 - (fPlayerToPlayerDist / dist);
+  					if(fNormDistance > 0.75) ColorScale = 220;
+					else ColorScale = floatround(96.0 + (128.0 * fNormDistance));
+					ColorValue = 0x000000FF | ColorScale << 24 | ColorScale << 16 | ColorScale << 8;
+					PlayerMessage(i, ColorValue, MsgWithName);
+				}
+			}
+		}
+	}
+}
+
+//---------------------------------------------

+ 138 - 0
include/gl_spawns.inc

@@ -0,0 +1,138 @@
+// Some player spawn points around the 3 main cities of San Andreas.
+// Thanks to krisk, Popz and Woet.
+
+// Police dept spawns LS/SF/LV.
+new Float:gPoliceSpawns[3][4] = {
+{1568.2250,-1693.5483,5.8906,177.0983},
+{-1604.8442,732.9442,-5.2344,37.6041},
+{2343.4553,2455.5994,14.9688,96.5022}
+};
+
+// Medical dept spawns LS/SF/LV.
+new Float:gMedicalSpawns[3][4] = {
+{1568.2250,-1693.5483,5.8906,177.0983},
+{-1604.8442,732.9442,-5.2344,37.6041},
+{1609.5922,1820.9641,10.8280,348.1614}
+};
+
+// Army spawns LS/SF/LV.
+new Float:gArmySpawns[3][4] = {
+{2786.2183,-2436.7859,13.6340,82.3043},
+{-1308.4493,504.9661,11.1953,132.5},
+{272.6040,1989.7307,17.6406,268.3605}
+};
+
+new Float:gRandomSpawns_LosSantos[][4] = {
+{1751.1097,-2106.4529,13.5469,183.1979}, // El-Corona - Outside random house
+{2652.6418,-1989.9175,13.9988,182.7107}, // Random house in willowfield - near playa de seville and stadium
+{2489.5225,-1957.9258,13.5881,2.3440}, // Hotel in willowfield - near cluckin bell
+{2689.5203,-1695.9354,10.0517,39.5312}, // Outside stadium - lots of cars
+{2770.5393,-1628.3069,12.1775,4.9637}, // South in east beach - north of stadium - carparks nearby
+{2807.9282,-1176.8883,25.3805,173.6018}, // North in east beach - near apartments
+{2552.5417,-958.0850,82.6345,280.2542}, // Random house north of Las Colinas
+{2232.1309,-1159.5679,25.8906,103.2939}, // Jefferson motel
+{2388.1003,-1279.8933,25.1291,94.3321}, // House south of pig pen
+{2481.1885,-1536.7186,24.1467,273.4944}, // East LS - near clucking bell and car wash
+{2495.0720,-1687.5278,13.5150,359.6696}, // Outside CJ's house - lots of cars nearby
+{2306.8252,-1675.4340,13.9221,2.6271}, // House in ganton - lots of cars nearby
+{2191.8403,-1455.8251,25.5391,267.9925}, // House in south jefferson - lots of cars nearby
+{1830.1359,-1092.1849,23.8656,94.0113}, // Mulholland intersection carpark
+{2015.3630,-1717.2535,13.5547,93.3655}, // Idlewood house
+{1654.7091,-1656.8516,22.5156,177.9729}, // Right next to PD
+{1219.0851,-1812.8058,16.5938,190.0045}, // Conference Center
+{1508.6849,-1059.0846,25.0625,1.8058}, // Across the street of BANK - lots of cars in intersection carpark
+{1421.0819,-885.3383,50.6531,3.6516}, // Outside house in vinewood
+{1133.8237,-1272.1558,13.5469,192.4113}, // Near hospital
+{1235.2196,-1608.6111,13.5469,181.2655}, // Backalley west of mainstreet
+{590.4648,-1252.2269,18.2116,25.0473}, // Outside "BAnk of San Andreas"
+{842.5260,-1007.7679,28.4185,213.9953}, // North of Graveyard
+{911.9332,-1232.6490,16.9766,5.2999}, // LS Film Studio
+{477.6021,-1496.6207,20.4345,266.9252}, // Rodeo Place
+{255.4621,-1366.3256,53.1094,312.0852}, // Outside propery in richman
+{281.5446,-1261.4562,73.9319,305.0017}, // Another richman property
+{790.1918,-839.8533,60.6328,191.9514}, // Mulholland house
+{1299.1859,-801.4249,84.1406,269.5274}, // Maddoggs
+{1240.3170,-2036.6886,59.9575,276.4659}, // Verdant Bluffs
+{2215.5181,-2627.8174,13.5469,273.7786}, // Ocean docks 1
+{2509.4346,-2637.6543,13.6453,358.3565} // Ocean Docks spawn 2
+};
+
+new Float:gRandomSpawns_LasVenturas[][4] = {
+{1435.8024,2662.3647,11.3926,1.1650}, //  Northern train station
+{1457.4762,2773.4868,10.8203,272.2754}, //  Northern golf club
+{1739.6390,2803.0569,14.2735,285.3929}, //  Northern housing estate 1
+{1870.3096,2785.2471,14.2734,42.3102}, //  Northern housing estate 2
+{1959.7142,2754.6863,10.8203,181.4731}, //  Northern house 1
+{2314.2556,2759.4504,10.8203,93.2711}, //  Northern industrial estate 1
+{2216.5674,2715.0334,10.8130,267.6540}, //  Northern industrial estate 2
+{2101.4192,2678.7874,10.8130,92.0607}, //  Northern near railway line
+{1951.1090,2660.3877,10.8203,180.8461}, //  Northern house 2
+{1666.6949,2604.9861,10.8203,179.8495}, //  Northern house 3
+{2808.3367,2421.5107,11.0625,136.2060}, //  Northern shopping centre
+{2633.3203,2349.7061,10.6719,178.7175}, //  V-Rock
+{2606.6348,2161.7490,10.8203,88.7508}, //  South V-Rock
+{2616.5286,2100.6226,10.8158,177.7834}, //  North Ammunation 1
+{2491.8816,2397.9370,10.8203,266.6003}, //  North carpark 1
+{2531.7891,2530.3223,21.8750,91.6686}, //  North carpark 2
+{2340.6677,2530.4324,10.8203,177.8630}, //  North Pizza Stack
+{2097.6855,2491.3313,14.8390,181.8117}, //  Emerald Isle
+{1893.1000,2423.2412,11.1782,269.4385}, //  Souvenir shop
+{1698.9330,2241.8320,10.8203,357.8584}, //  Northern casino
+{1479.4559,2249.0769,11.0234,306.3790}, //  Baseball stadium 1
+{1298.1548,2083.4016,10.8127,256.7034}, //  Baseball stadium 2
+{1117.8785,2304.1514,10.8203,81.5490}, //  North carparks
+{1108.9878,1705.8639,10.8203,0.6785}, //  Dirtring racing 1
+{1423.9780,1034.4188,10.8203,90.9590}, //  Sumo
+{1537.4377,752.0641,11.0234,271.6893}, //  Church
+{1917.9590,702.6984,11.1328,359.2682}, //  Southern housing estate
+{2089.4785,658.0414,11.2707,357.3572}, //  Southern house 1
+{2489.8286,928.3251,10.8280,67.2245}, //  Wedding chapel
+{2697.4717,856.4916,9.8360,267.0983}, //  Southern construction site
+{2845.6104,1288.1444,11.3906,3.6506}, //  Southern train station
+{2437.9370,1293.1442,10.8203,86.3830}, //  Wedding chapel (near Pyramid)
+{2299.5430,1451.4177,10.8203,269.1287}, //  Carpark (near Pyramid)
+{2214.3008,2041.9165,10.8203,268.7626}, //  Central parking lot
+{2005.9174,2152.0835,10.8203,270.1372}, //  Central motel
+{2222.1042,1837.4220,10.8203,88.6461}, //  Clowns Pocket
+{2025.6753,1916.4363,12.3382,272.5852}, //  The Visage
+{2087.9902,1516.5336,10.8203,48.9300}, //  Royal Casino
+{2172.1624,1398.7496,11.0625,91.3783}, //  Auto Bahn
+{2139.1841,987.7975,10.8203,0.2315}, //  Come-a-lot
+{1860.9672,1030.2910,10.8203,271.6988}, //  Behind 4 Dragons
+{1673.2345,1316.1067,10.8203,177.7294}, //  Airport carpark
+{1412.6187,2000.0596,14.7396,271.3568} //  South baseball stadium houses
+};
+
+new Float:gRandomSpawns_SanFierro[][4] = {
+{-2723.4639,-314.8138,7.1839,43.5562},  // golf course spawn
+{-2694.5344,64.5550,4.3359,95.0190},  // in front of a house
+{-2458.2000,134.5419,35.1719,303.9446},  // hotel
+{-2796.6589,219.5733,7.1875,88.8288},  // house
+{-2706.5261,397.7129,4.3672,179.8611},  // park
+{-2866.7683,691.9363,23.4989,286.3060},  // house
+{-2764.9543,785.6434,52.7813,357.6817},  // donut shop
+{-2660.9402,883.2115,79.7738,357.4440},  // house
+{-2861.0796,1047.7109,33.6068,188.2750}, //  parking lot
+{-2629.2009,1383.1367,7.1833,179.7006},  // parking lot at the bridge
+{-2079.6802,1430.0189,7.1016,177.6486},  // pier
+{-1660.2294,1382.6698,9.8047,136.2952}, //  pier 69
+{-1674.1964,430.3246,7.1797,226.1357},  // gas station]
+{-1954.9982,141.8080,27.1747,277.7342},  // train station
+{-1956.1447,287.1091,35.4688,90.4465},  // car shop
+{-1888.1117,615.7245,35.1719,128.4498},  // random
+{-1922.5566,886.8939,35.3359,272.1293},  // random
+{-1983.3458,1117.0645,53.1243,271.2390},  // church
+{-2417.6458,970.1491,45.2969,269.3676},  // gas station
+{-2108.0171,902.8030,76.5792,5.7139},  // house
+{-2097.5664,658.0771,52.3672,270.4487},  // random
+{-2263.6650,393.7423,34.7708,136.4152},  // random
+{-2287.5027,149.1875,35.3125,266.3989},  // baseball parking lot
+{-2039.3571,-97.7205,35.1641,7.4744},  // driving school
+{-1867.5022,-141.9203,11.8984,22.4499},  // factory
+{-1537.8992,116.0441,17.3226,120.8537},  // docks ship
+{-1708.4763,7.0187,3.5489,319.3260},  // docks hangar
+{-1427.0858,-288.9430,14.1484,137.0812},  // airport
+{-2173.0654,-392.7444,35.3359,237.0159},  // stadium
+{-2320.5286,-180.3870,35.3135,179.6980},  // burger shot
+{-2930.0049,487.2518,4.9141,3.8258}  // harbor
+};

+ 76 - 0
include/vehicleutil.inc

@@ -0,0 +1,76 @@
+// SA-MP Vehicle States Helper Functions
+// (c) 2012 SA-MP Team
+// All rights reserved.
+
+// VehicleParamsEx toggle helpers
+stock ToggleVehicleEngine(vid)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(engine == VEHICLE_PARAMS_UNSET || engine == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
+	 else SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
+}
+stock ToggleVehicleLights(vid)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(lights == VEHICLE_PARAMS_UNSET || lights == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective);
+	 else SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
+}
+stock ToggleVehicleDoorsLocked(vid)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(doors == VEHICLE_PARAMS_UNSET || doors == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
+	 else SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
+}
+stock ToggleVehicleHood(vid)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(bonnet == VEHICLE_PARAMS_UNSET || bonnet == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_ON,boot,objective);
+	 else SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_OFF,boot,objective);
+}
+stock ToggleVehicleTrunk(vid)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(boot == VEHICLE_PARAMS_UNSET || boot == VEHICLE_PARAMS_OFF) SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
+	 else SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_OFF,objective);
+}
+// VehicleParamsEx state setter helpers
+stock SetVehicleEngineState(vid, setstate)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(setstate) SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
+	 else SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
+}
+stock SetVehicleLightsState(vid, setstate)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(setstate) SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective);
+	 else SetVehicleParamsEx(vid,engine,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
+}
+stock SetVehicleDoorsLockedState(vid, setstate)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(setstate) SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
+	 else SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
+}
+stock SetVehicleHoodState(vid, setstate)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(setstate) SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_ON,boot,objective);
+	 else SetVehicleParamsEx(vid,engine,lights,alarm,doors,VEHICLE_PARAMS_OFF,boot,objective);
+}
+stock SetVehicleTrunkState(vid, setstate)
+{
+     new engine,lights,alarm,doors,bonnet,boot,objective;
+     GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
+	 if(setstate) SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_ON,objective);
+	 else SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,VEHICLE_PARAMS_OFF,objective);
+}

BIN
log-core2.so


BIN
pawno/include.rar


+ 1595 - 0
pawno/include/BUD.inc

@@ -0,0 +1,1595 @@
+// BUD v0.1.5 RC1 by Slice
+
+#include <a_samp>
+#include <a_http>
+
+ // :D
+
+#define BUD::      BUD_
+#define opt.       opt_
+#define private    stock static
+#define global     stock
+
+ // :D!
+
+#define BUD_Notice(%0)       (printf("BUD - Notice: " %0))
+#define BUD_Warning(%0)      (printf("BUD - Warning: " %0))
+#define BUD_Error(%0)        (printf("BUD - Error: " %0))
+
+ // This is so the constants can be defined before inclusion.
+
+#if !defined BUD_USE_WHIRLPOOL
+	#define BUD_USE_WHIRLPOOL  (false)
+#endif
+
+#if !defined BUD_MAX_DATABASE_NAME
+	#define BUD_MAX_DATABASE_NAME  (16)
+#endif
+
+#if !defined BUD_MAX_COLUMNS
+	#define BUD_MAX_COLUMNS  (12)
+#endif
+
+#if !defined BUD_MAX_COLUMN_NAME
+	#define BUD_MAX_COLUMN_NAME  (16)
+#endif
+
+#if !defined BUD_CHECK_STRING_LENGTH
+	#define BUD_CHECK_STRING_LENGTH  (false)
+#endif
+
+#if !defined BUD_MAX_ENTRY_STRING
+	#define BUD_MAX_ENTRY_STRING  (64)
+#endif
+
+#if !defined BUD_MULTIGET_MAX_ENTRIES
+	#define BUD_MULTIGET_MAX_ENTRIES  (16)
+#endif
+
+#if !defined BUD_MULTISET_MAX_ENTRIES
+	#define BUD_MULTISET_MAX_ENTRIES  (16)
+#endif
+
+#if !defined BUD_MULTISET_MAX_STRING_SIZE
+	#define BUD_MULTISET_MAX_STRING_SIZE (BUD::MAX_ENTRY_STRING)
+#endif
+
+#if !defined BUD_MULTISET_BUFFER_SIZE
+	#define BUD_MULTISET_BUFFER_SIZE  (2048)
+#endif
+
+#if !defined BUD_BUFFER_SIZE
+	#define BUD_BUFFER_SIZE  (3072)
+#endif
+
+#define DEFAULT_DATABASE_NAME  "bud.db" // No need to change this; do it via the settings instead.
+
+#define BUD_VERSION_MINOR  0
+#define BUD_VERSION_MAJOR  1
+#define BUD_VERSION_BUILD  5
+
+#define INVALID_DB           (DB:0)
+#define BUD_NO_RESULT        (DBResult:0)
+#define BUD_INVALID_UID      (-1)
+
+#define BUD_Results:%0<%1> %0[%1][2]
+
+#if !defined cellbytes
+	#define __undef_celbytes
+	
+	#define cellbytes (cellbits / 8)
+#endif
+
+enum BUD::e_COLUMN_TYPES {
+	BUD::TYPE_NUMBER,
+	BUD::TYPE_FLOAT,
+	BUD::TYPE_STRING
+};
+
+enum BUD::e_OPTIONS {
+	opt.Database,
+	opt.Asynchronous,
+	opt.KeepAliveTime,
+	opt.IntEntryDefault,
+	opt.FloatEntryDefault,
+	opt.DatabaseOpenTimeOut,
+	opt.CheckForUpdates
+};
+
+enum BUD::e_SORT_ORDER {
+	BUD::SORT_ASC,
+	BUD::SORT_DESC,
+	BUD::SORT_ASCENDING = 0,
+	BUD::SORT_DESCENDING
+};
+
+// No need to change this either; use BUD::VerifyColumn(column[], type) instead.
+#define DEFAULT_COLUMNS  "uid INTEGER PRIMARY KEY, name TEXT, passhash BLOB"
+
+private
+	 bool:g_bIsInitialized = false,
+	      g_szDatabaseName[BUD::MAX_DATABASE_NAME] = "bud.db",
+	      g_iColumnCount,
+	      g_szColumnName[BUD::MAX_COLUMNS][BUD::MAX_COLUMN_NAME],
+	   DB:g_dbKeptAlive = INVALID_DB,
+	      g_iKeepAlive = 2000,
+	      g_iKeepAliveTimer = -1,
+	 bool:g_bAsynchronous = true,
+	      g_iIntEntryDefault = 0,
+	Float:g_fFloatEntryDefault = 0.0,
+	      g_iDatabaseOpenTimeOut = 3000,
+	 bool:g_bCheckForUpdates = true,
+	      g_szBuffer[BUD::BUFFER_SIZE]
+;
+
+// Prevent it from causing issues if WP_Hash is defined before or after this.
+
+#if (BUD::USE_WHIRLPOOL)
+	#if defined WP_Hash
+		#define BUD_WhirlpoolHash WP_Hash
+	#else
+		native BUD::WhirlpoolHash(buffer[], len = sizeof(buffer), const str[]) = WP_Hash;
+	#endif
+#endif
+
+// Close the database connection when it has been unused for g_iKeepAlive ms
+
+private bool:BUD::GetDB() {
+	if (g_iKeepAliveTimer == -1) {
+		new
+			iStartTick = GetTickCount()
+		;
+		
+		do
+			g_dbKeptAlive = db_open(g_szDatabaseName);
+		while (g_dbKeptAlive == INVALID_DB && GetTickCount() - iStartTick < g_iDatabaseOpenTimeOut);
+		
+		if (g_dbKeptAlive == INVALID_DB) {
+			BUD::Error("Unable to open the database \"%s\".", g_szDatabaseName);
+			
+			return false;
+		} else {
+			if (g_bAsynchronous)
+				db_query(g_dbKeptAlive, "PRAGMA synchronous = 0");
+			else
+				db_query(g_dbKeptAlive, "PRAGMA synchronous = 3");
+		}
+	} else {
+		KillTimer(g_iKeepAliveTimer);
+	}
+	
+	g_iKeepAliveTimer = SetTimer("BUD_CloseDB", g_iKeepAlive, false);
+	
+	return true;
+}
+
+forward BUD::CloseDB();
+public  BUD::CloseDB() {
+	g_iKeepAliveTimer = -1;
+	
+	db_close(g_dbKeptAlive);
+	
+	g_dbKeptAlive = INVALID_DB;
+}
+
+global BUD::Setting(BUD::e_OPTIONS:iSetting, _:...) {
+	switch (iSetting) {
+		case opt.Database: {
+			if (g_bIsInitialized) {
+				BUD::Warning("opt.Database has to be set before BUD::Initialize() is called.");
+				
+				return;
+			}
+			
+			__getstringarg(g_szDatabaseName, 1);
+		}
+		
+		case opt.Asynchronous: {
+			new
+				bool:bNewSetting = getarg(1) ? true : false
+			;
+			
+			if (g_bAsynchronous != bNewSetting) {
+				g_bAsynchronous = bNewSetting;
+				
+				if (g_dbKeptAlive != INVALID_DB) {
+					if (g_bAsynchronous)
+						db_query(g_dbKeptAlive, "PRAGMA synchronous = 0");
+					else
+						db_query(g_dbKeptAlive, "PRAGMA synchronous = 3");
+				}
+			}
+		}
+		
+		case opt.KeepAliveTime: {
+			g_iKeepAlive = max(0, getarg(1));
+		}
+		
+		case opt.IntEntryDefault: {
+			g_iIntEntryDefault = getarg(1);
+		}
+		
+		case opt.FloatEntryDefault: {
+			g_fFloatEntryDefault = getarg(1);
+		}
+		
+		case opt.DatabaseOpenTimeOut: {
+			g_iDatabaseOpenTimeOut = getarg(1);
+		}
+		
+		case opt.CheckForUpdates: {
+			if (g_bIsInitialized) {
+				BUD::Warning("opt.CheckForUpdates has to be set before BUD::Initialize() is called.");
+				
+				return;
+			}
+			
+			g_bCheckForUpdates = getarg(1) ? true : false;
+		}
+		
+		default: {
+			BUD::Warning("Unknown setting ID passed in BUD::Setting (%d).", _:iSetting);
+		}
+	}
+}
+
+#if !(BUD::USE_WHIRLPOOL)
+	#if !defined MAX_PASSWORD_LENGTH
+		#define MAX_PASSWORD_LENGTH  (64)
+		#define UNDEFINE_MAX_PASSWORD_LENGTH (true)
+	#else
+		#define UNDEFINE_MAX_PASSWORD_LENGTH (false)
+	#endif
+	
+	stock BUD::chrfind(needle, haystack[], start = 0) { // Y_Less
+		while (haystack[start]) if (haystack[start++] == needle) return start - 1;
+		return -1;
+	}
+	
+	stock BUD::JSCHash(const __pass[],__passhash[MAX_PASSWORD_LENGTH + 1]) { // By JSC (Y_Less's dad); ported by Y_Less
+			static
+					__charset[] = \"4YLi6pOX)Mudvbc_IFVB/8HZ\2r(fGjaN0oU9C1Wywnq*smKQRxJDhkAS|53EzglT7tPe",
+					__css = 69;
+			new
+					__j = strlen(__pass);
+			new
+					__sum = __j,
+					__tmp = 0,
+					__i,
+					__mod;
+			for (__i = 0; __i < MAX_PASSWORD_LENGTH || __i < __j; __i++) {
+					__mod = __i % MAX_PASSWORD_LENGTH;
+					__tmp = (__i >= __j) ? __charset[(7 * __i) % __css] : __pass[__i];
+					__sum = (__sum + BUD::chrfind(__tmp, __charset) + 1) % __css;
+					__passhash[__mod] = __charset[(__sum + __passhash[__mod]) % __css];
+			}
+			__passhash[MAX_PASSWORD_LENGTH] = '\0';
+	}
+#else
+	#define UNDEFINE_MAX_PASSWORD_LENGTH (false)
+#endif
+
+global bool:BUD::Initialize() {
+	if (g_bIsInitialized) {
+		BUD::Notice("Initialization aborted; BUD is already initialized.");
+		
+		return true;
+	}
+	
+	#if (BUD::USE_WHIRLPOOL)
+		new szBuffer[129];
+		
+		BUD::WhirlpoolHash(szBuffer, _, "I like cookies.");
+		
+		if (strcmp(szBuffer, "516A210D9C04CFE36568BEDA5287977572CCC618126B188B02F0BCFB92EE5B7EBA9F3D6DE2DE8FC0BB4C9E6111B93CF6482CCCD5639A94F125CFF7B829275933"))
+			BUD::Warning("Whirlpool isn't behaving as expected; this might cause problems with the authentication.");
+	#endif
+	
+	if (!g_szDatabaseName[0]) {
+		BUD::Warning("The database name was not specified; default will be applied (\"" DEFAULT_DATABASE_NAME "\").");
+		
+		g_szDatabaseName = DEFAULT_DATABASE_NAME;
+	}
+	
+	if (!fexist(g_szDatabaseName)) {
+		BUD::Notice("The database \"%s\" doesn't exist; it will be created.", g_szDatabaseName);
+		
+		if (!BUD::CreateDatabase())
+			return false;
+	}
+	
+	BUD::ReloadTableInfo();
+	BUD::IntegrityCheck();
+	
+	if (g_bCheckForUpdates)
+		BUD::CheckForUpdates();
+	
+	g_bIsInitialized = true;
+	
+	printf("BUD v" #BUD::VERSION_MAJOR "." #BUD::VERSION_MINOR "." #BUD::VERSION_BUILD " BETA loaded.");
+	
+	return true;
+}
+
+global bool:BUD::Exit() {
+	if (g_iKeepAliveTimer != -1) {
+		KillTimer(g_iKeepAliveTimer);
+		
+		BUD::CloseDB();
+	}
+	
+	g_bIsInitialized = false;
+}
+
+private BUD::IntegrityCheck() {
+	if (!BUD::GetDB())
+		return;
+	
+	new
+		DBResult:dbrResult
+	;
+	
+	dbrResult = db_query(g_dbKeptAlive, "PRAGMA integrity_check");
+	
+	if (dbrResult) {
+		new
+			iRow,
+			szField[64]
+		;
+		
+		do {
+			db_get_field(dbrResult, 0, szField, sizeof(szField) - 1);
+			
+			if (iRow == 0 && !strcmp("ok", szField))
+				break;
+			else
+				BUD::Warning("Database integrity check says: %s", szField);
+			
+			iRow++;
+		}
+		while (db_next_row(dbrResult));
+		
+		db_free_result(dbrResult);
+	}
+}
+
+private BUD::CreateDatabase() {
+	if (!BUD::GetDB())
+		return false;
+	
+	db_query(g_dbKeptAlive, "CREATE TABLE users (" DEFAULT_COLUMNS ")");
+	
+	return true;
+}
+
+private BUD::ReloadTableInfo() {
+	new
+		DBResult:dbrResult
+	;
+	
+	if (!BUD::GetDB())
+		return;
+	
+	dbrResult = db_query(g_dbKeptAlive, "PRAGMA table_info('users')");
+	
+	g_iColumnCount = 0;
+	
+	if (dbrResult) {
+		new
+			szColumnName[BUD::MAX_COLUMN_NAME]
+		;
+		
+		do {
+			if (g_iColumnCount + 1 >= BUD::MAX_COLUMNS) {
+				BUD::Warning("There are more columns in the \"users\" table than BUD::MAX_COLUMNS. Increase the limit!");
+				
+				break;
+			}
+			
+			db_get_field(dbrResult, 1, szColumnName, BUD::MAX_COLUMN_NAME - 1);
+			
+			memcpy(g_szColumnName[g_iColumnCount++], szColumnName, .numbytes = (BUD::MAX_COLUMN_NAME * (cellbits / 8)));
+		}
+		while (db_next_row(dbrResult));
+		
+		db_free_result(dbrResult);
+	} else
+		BUD::Warning("Failed to get the table info from \"%s\"; some columns could be missing.", g_szDatabaseName);
+}
+
+global BUD::VerifyColumn(const szColumnName[], BUD::e_COLUMN_TYPES:iType, { _,Float }:...) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumnName) >= BUD::MAX_COLUMN_NAME)
+			return false;
+	#endif
+	
+	if (!(BUD::e_COLUMN_TYPES:0 <= iType <= BUD::e_COLUMN_TYPES)) {
+		BUD::Error("Invalid type given to BUD::VerifyColumn.");
+		
+		return;
+	}
+	
+	if (!g_iColumnCount) {
+		BUD::Notice("Because the table info wasn't retrieved, columns cannot be verified.");
+		
+		return;
+	}
+	
+	new
+		bool:bColumnCreated = false
+	;
+	
+recheck:
+	
+	for (new i = 0; i < g_iColumnCount; i++) {
+		if (!strcmp(g_szColumnName[i], szColumnName, true))
+			return;
+	}
+	
+	if (!bColumnCreated) {
+		BUD::Notice("The column \"%s\" doesn't exist; attempting to create it.", szColumnName);
+		
+		if (!BUD::GetDB())
+			return;
+		
+		switch (iType) {
+			case BUD::TYPE_NUMBER: {
+				new
+					iDefaultValue
+				;
+				
+				if (numargs() != 3)
+					iDefaultValue = 0;
+				else
+					iDefaultValue = getarg(2);
+				
+				format(g_szBuffer, sizeof(g_szBuffer), "ALTER TABLE `users` ADD COLUMN `%s` INTEGER DEFAULT(%d)", szColumnName, iDefaultValue);
+			}
+			
+			case BUD::TYPE_FLOAT: {
+				new
+					Float:fDefaultValue
+				;
+				
+				if (numargs() != 3)
+					fDefaultValue = 0.0;
+				else
+					fDefaultValue = Float:getarg(2);
+				
+				format(g_szBuffer, sizeof(g_szBuffer), "ALTER TABLE `users` ADD COLUMN `%s` REAL DEFAULT(%f)", szColumnName, fDefaultValue);
+			}
+			
+			case BUD::TYPE_STRING: {
+				new
+					szDefaultValue[BUD::MAX_ENTRY_STRING * 2]
+				;
+				
+				if (numargs() == 3) {
+					__getstringarg(szDefaultValue, 2);
+				
+					szDefaultValue[BUD::MAX_ENTRY_STRING - 1] = EOS;
+					
+					BUD::EscapeSqlString(szDefaultValue);
+				}
+				
+				format(g_szBuffer, sizeof(g_szBuffer), "ALTER TABLE `users` ADD COLUMN `%s` TEXT DEFAULT('%s')", szColumnName, szDefaultValue);
+			}
+			
+			default: {
+				return;
+			}
+		}
+		
+		db_free_result(
+			db_query(g_dbKeptAlive, g_szBuffer)
+		);
+		
+		bColumnCreated = true;
+		
+		BUD::ReloadTableInfo();
+		
+		goto recheck;
+	}
+	
+	BUD::Error("Failed to create the column \"%s\"; this could be because of an invalid column name.", szColumnName);
+}
+
+global bool:BUD::IsNameRegistered(const szName[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szName) >= MAX_PLAYER_NAME)
+			return false;
+	#endif
+	
+	if (!BUD::GetDB())
+		return true; // Better return true here to prevent any very circumstantial hijacking.
+	
+	new
+		DBResult:dbrResult,
+		    bool:bIsRegistered = false
+	;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "SELECT `uid` FROM `users` WHERE `name` = '%s' COLLATE NOCASE", szName);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) >= 1)
+			bIsRegistered = true;
+		
+		db_free_result(dbrResult);
+	}
+	
+	return bIsRegistered;
+}
+
+global bool:BUD::RegisterName(const szName[], const szPassword[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szName) >= MAX_PLAYER_NAME)
+			return false;
+	#endif
+	
+	if (BUD::IsNameRegistered(szName))
+		return false;
+	
+	new
+		#if (BUD::USE_WHIRLPOOL)
+			szPasshash[129],
+		#else
+			szPasshash[MAX_PASSWORD_LENGTH + 1],
+		#endif
+		DBResult:dbrResult
+	;
+	
+	#if (BUD::USE_WHIRLPOOL)
+		g_szBuffer = "INSERT INTO users(`name`, `passhash`) VALUES('";
+	#else
+		g_szBuffer = "INSERT INTO users(`name`, `passhash`) VALUES('";
+	#endif
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	#if (BUD::USE_WHIRLPOOL)
+		BUD::WhirlpoolHash(szPasshash, _, szPassword);
+	#else
+		BUD::JSCHash(szPassword, szPasshash);
+	#endif
+	
+	
+	strcat(g_szBuffer, szName);
+	
+	#if (BUD::USE_WHIRLPOOL)
+		strcat(g_szBuffer, "', x'");
+	#else
+		strcat(g_szBuffer, "', '");
+	#endif
+	
+	strcat(g_szBuffer, szPasshash);
+	strcat(g_szBuffer, "')");
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult)
+		db_free_result(dbrResult);
+	
+	if (BUD::IsNameRegistered(szName))
+		return true;
+	
+	return false;
+}
+
+global BUD::UnregisterName(const szName[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szName) >= MAX_PLAYER_NAME)
+			return false;
+	#endif
+	
+	if (!BUD::IsNameRegistered(szName))
+		return false;
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	g_szBuffer = "DELETE FROM `users` WHERE `name`='";
+	
+	strcat(g_szBuffer, szName);
+	strcat(g_szBuffer, "' COLLATE NOCASE");
+	
+	db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (BUD::IsNameRegistered(szName))
+		return false;
+	
+	return true;
+}
+
+global bool:BUD::CheckAuth(const szName[], const szPassword[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szName) >= MAX_PLAYER_NAME)
+			return false;
+	#endif
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	new
+		#if (BUD::USE_WHIRLPOOL)
+		         szPasshash[129],
+		#else
+		         szPasshash[MAX_PASSWORD_LENGTH + 1],
+		#endif
+		DBResult:dbrResult,
+		    bool:bAuthenticated = false
+	;
+	
+	#if (BUD::USE_WHIRLPOOL)
+		g_szBuffer = "SELECT `uid` FROM `users` WHERE `name`='";
+	#else
+		g_szBuffer = "SELECT `uid` FROM `users` WHERE `name`='";
+	#endif
+	
+	#if (BUD::USE_WHIRLPOOL)
+		BUD::WhirlpoolHash(szPasshash, _, szPassword);
+	#else
+		BUD::JSCHash(szPassword, szPasshash);
+	#endif
+	
+	strcat(g_szBuffer, szName);
+	
+	#if (BUD::USE_WHIRLPOOL)
+		strcat(g_szBuffer, "' AND `passhash`=x'");
+	#else
+		strcat(g_szBuffer, "' AND `passhash`='");
+	#endif
+	
+	strcat(g_szBuffer, szPasshash);
+	strcat(g_szBuffer, "' COLLATE NOCASE");
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) == 1)
+			bAuthenticated = true;
+		
+		db_free_result(dbrResult);
+	}
+	
+	return bAuthenticated;
+}
+
+global BUD::GetNameUID(const szName[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szName) >= BUD::MAX_PLAYER_NAME)
+			return BUD::INVALID_UID;
+	#endif
+	
+	if (!BUD::GetDB())
+		return BUD::INVALID_UID;
+	
+	new
+		DBResult:dbrResult
+	;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "SELECT `uid` FROM `users` WHERE `name`='%s' COLLATE NOCASE", szName);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		new
+			iUID = BUD::INVALID_UID
+		;
+		
+		if (db_num_rows(dbrResult) == 1) {
+			db_get_field(dbrResult, 0, g_szBuffer, sizeof(g_szBuffer) - 1);
+			
+			iUID = strval(g_szBuffer);
+		}
+		
+		db_free_result(dbrResult);
+		
+		return iUID;
+	}
+	
+	return BUD::INVALID_UID;
+}
+
+global Float:BUD::GetFloatEntry(iUID, const szColumn[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME)
+			return g_fFloatEntryDefault;
+	#endif
+	
+	if (!BUD::GetDB())
+		return g_fFloatEntryDefault;
+	
+	new
+		DBResult:dbrResult
+	;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "SELECT `%s` FROM `users` WHERE `uid`='%d'", szColumn, iUID);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) == 1)
+			db_get_field(dbrResult, 0, g_szBuffer, sizeof(g_szBuffer) - 1);
+		else
+			g_szBuffer[0] = EOS;
+		
+		db_free_result(dbrResult);
+		
+		if (g_szBuffer[0])
+			return floatstr(g_szBuffer);
+	}
+	
+	return g_fFloatEntryDefault;
+}
+
+global BUD::GetIntEntry(iUID, const szColumn[]) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME)
+			return g_iIntEntryDefault;
+	#endif
+	
+	if (!BUD::GetDB())
+		return g_iIntEntryDefault;
+	
+	new
+		DBResult:dbrResult
+	;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "SELECT `%s` FROM `users` WHERE `uid`='%d'", szColumn, iUID);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) == 1)
+			db_get_field(dbrResult, 0, g_szBuffer, sizeof(g_szBuffer) - 1);
+		else
+			g_szBuffer[0] = EOS;
+		
+		db_free_result(dbrResult);
+		
+		if (g_szBuffer[0])
+			return strval(g_szBuffer);
+	}
+	
+	return g_iIntEntryDefault;
+}
+
+global BUD::GetStringEntry(iUID, const szColumn[], szOutput[], iSize = sizeof(szOutput)) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME) {
+			szOutput[0] = EOS;
+			
+			return;
+		}
+	#endif
+	
+	if (!BUD::GetDB()) {
+		szOutput[0] = EOS;
+		
+		return;
+	}
+	
+	new
+		DBResult:dbrResult
+	;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "SELECT `%s` FROM `users` WHERE `uid`='%d'", szColumn, iUID);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) == 1)
+			db_get_field(dbrResult, 0, szOutput, iSize - 1);
+		else
+			szOutput[0] = EOS;
+		
+		db_free_result(dbrResult);
+	}
+}
+
+global bool:BUD::MultiGet(iUID, const szTypeDefinitions[], { _, Float }:...) {
+	new
+		iEntries = numargs() - 2
+	;
+	
+	if (iEntries & 0b1) {
+		BUD::Error("A parameter is missing in BUD::MultiGet; expecting a variable in the end.", numargs() - 2);
+		
+		return false;
+	}
+	
+	iEntries /= 2;
+	
+	if (iEntries > BUD::MULTIGET_MAX_ENTRIES) {
+		BUD::Error("Too many entires passed to BUD::MultiGet; entires: %d, limit: %d.", iEntries, BUD::MULTIGET_MAX_ENTRIES);
+		
+		return false;
+	}
+	
+	new
+		iNumTypeDefinitions,
+		iTypeDefinitions[BUD::MULTIGET_MAX_ENTRIES char],
+		iTypeLengths[BUD::MULTIGET_MAX_ENTRIES]
+	;
+	
+	for (new i = 0, l = strlen(szTypeDefinitions); i < l; i++) {
+		switch (szTypeDefinitions[i]) {
+			case 'i', 'd', 'f': {
+				iTypeDefinitions{ iNumTypeDefinitions++ } = szTypeDefinitions[i];
+			}
+			
+			case 's': {
+				if (szTypeDefinitions[i + 1] == '[' && szTypeDefinitions[i + 2]) {
+					++i;
+					
+					new
+						szLength[11],
+						iEndingBracket = strfind(szTypeDefinitions, "]", .pos = i + 2)
+					;
+					
+					if (iEndingBracket != -1) {
+						strmid(szLength, szTypeDefinitions, i + 1, iEndingBracket);
+						
+						iTypeLengths[iNumTypeDefinitions] = strval(szLength);
+						
+						if (iTypeLengths[iNumTypeDefinitions] <= 0) {
+							BUD::Error("Invalid string length given in the type definitions for BUD::MultiGet: %d.", iTypeLengths[iNumTypeDefinitions]);
+							
+							return false;
+						}
+						
+						iTypeDefinitions{ iNumTypeDefinitions++ } = 's';
+						
+						i = iEndingBracket;
+						
+						continue;
+					}
+				}
+				
+				BUD::Error("String size has to be passed in the type definitions for BUD::MultiGet; example: \"iffs[32]ii\".", iNumTypeDefinitions, iEntries);
+				
+				return false;
+			}
+			
+			default: {
+				BUD::Error("Unknown type definition passed to BUD::MultiGet; expected: i/s/f, given: %c.", szTypeDefinitions[i]);
+				
+				return false;
+			}
+		}
+	}
+	
+	if (iEntries != iNumTypeDefinitions) {
+		BUD::Error("The number of type definitions doesn't match the number of entries passed to BUD::MultiGet; typedefs: %d, entries: %d.", iNumTypeDefinitions, iEntries);
+		
+		return false;
+	}
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	new
+		szColumn[BUD::MAX_COLUMN_NAME],
+		iColumnArg
+	;
+	
+	g_szBuffer = "SELECT `";
+	
+	for (new iEntry = 0; iEntry < iEntries; iEntry++) {
+		iColumnArg = 2 + iEntry * 2;
+		
+		__getstringarg(szColumn, iColumnArg);
+		
+		#if (BUD::CHECK_STRING_LENGTH)
+			if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME)
+				return false;
+		#endif
+		
+		strcat(g_szBuffer, szColumn);
+		
+		if (iEntry < iEntries - 1)
+			strcat(g_szBuffer, "`,`");
+	}
+	
+	strcat(g_szBuffer, "` FROM `users` WHERE `uid`=");
+	
+	new
+		         szUID[11],
+		DBResult:dbrResult
+	;
+	
+	valstr(szUID, iUID);
+	
+	strcat(g_szBuffer, szUID);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		new
+			iRows = db_num_rows(dbrResult)
+		;
+		
+		if (iRows == 1) {
+			new
+				iFields = db_num_fields(dbrResult)
+			;
+			
+			if (iEntries != iFields)
+				BUD::Warning("The number of entries requested doesn't match the given number; requested: %d, given: %d", iEntries, iFields);
+			
+			for (new iField = 0; iField < iFields; iField++) {
+				if (iTypeDefinitions{ iField } == 's')
+					db_get_field(dbrResult, iField, g_szBuffer, iTypeLengths[iField] - 1);
+				else
+					db_get_field(dbrResult, iField, g_szBuffer, sizeof(g_szBuffer) - 1);
+				
+				switch (iTypeDefinitions{ iField }) {
+					case 'i', 'd': {
+						setarg(2 + iField * 2 + 1, .value = strval(g_szBuffer));
+					}
+					
+					case 'f': {
+						setarg(2 + iField * 2 + 1, .value = _:floatstr(g_szBuffer));
+					}
+					
+					case 's': {
+						__setstringarg(2 + iField * 2 + 1, g_szBuffer);
+					}
+				}
+			}
+		} else if (iRows > 1) {
+			BUD::Error("Multiple rows fetched from one UID; UID: %d, rows: %d", iUID, iRows);
+			
+			db_free_result(dbrResult);
+			
+			return false;
+		}
+		
+		db_free_result(dbrResult);
+		
+		return true;
+	}
+	
+	return false;
+}
+
+global bool:BUD::MultiSet(iUID, const szTypeDefinitions[], { _, Float }:...) {
+	new
+		iEntries = numargs() - 2
+	;
+	
+	if (iEntries & 0b1) {
+		BUD::Error("A parameter is missing in BUD::MultiSet; expecting a variable/value in the end.", numargs() - 2);
+		
+		return false;
+	}
+	
+	iEntries /= 2;
+	
+	if (iEntries > BUD::MULTISET_MAX_ENTRIES) {
+		BUD::Error("Too many entires passed to BUD::MultiSet; entires: %d, limit: %d.", iEntries, BUD::MULTISET_MAX_ENTRIES);
+		
+		return false;
+	}
+	
+	new
+		iNumTypeDefinitions = strlen(szTypeDefinitions)
+	;
+	
+	if (iEntries != iNumTypeDefinitions) {
+		BUD::Error("The number of type definitions doesn't match the number of entries passed to BUD::MultiSet; typedefs: %d, entries: %d.", iNumTypeDefinitions, iEntries);
+		
+		return false;
+	}
+	
+	for (new i = 0; i < iNumTypeDefinitions; i++) {
+		switch (szTypeDefinitions[i]) {
+			case 'i', 'd', 'f', 's': { }
+			default: {
+				BUD::Error("Unknown type definition passed to BUD::MultiSet; expected: i/s/f, given: %c.", szTypeDefinitions[i]);
+				
+				return false;
+			}
+		}
+	}
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	new
+		szColumn[BUD::MAX_COLUMN_NAME],
+		iColumnArg,
+		szValue[BUD::MULTISET_MAX_STRING_SIZE * 2]
+	;
+	
+	g_szBuffer = "UPDATE `users` SET ";
+	
+	for (new iEntry = 0; iEntry < iEntries; iEntry++) {
+		iColumnArg = 2 + iEntry * 2;
+		
+		__getstringarg(szColumn, iColumnArg);
+		
+		++iColumnArg;
+		
+		#if (BUD::CHECK_STRING_LENGTH)
+			if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME)
+				return false;
+		#endif
+		
+		strcat(g_szBuffer, "`");
+		strcat(g_szBuffer, szColumn);
+		strcat(g_szBuffer, "`=");
+		
+		switch (szTypeDefinitions[iEntry]) {
+			case 'i', 'd': {
+				valstr(szValue, getarg(iColumnArg));
+			}
+			
+			case 'f': {
+				format(szValue, sizeof(szValue), "%f", Float:getarg(iColumnArg));
+			}
+			
+			case 's': {
+				__getstringarg(szValue, iColumnArg, BUD::MULTISET_MAX_STRING_SIZE);
+				
+				szValue[BUD::MULTISET_MAX_STRING_SIZE - 1] = EOS;
+				
+				BUD::EscapeSqlString(szValue);
+				
+				strcat(g_szBuffer, "'");
+			}
+		}
+		
+		strcat(g_szBuffer, szValue);
+		
+		if (szTypeDefinitions[iEntry] == 's')
+			strcat(g_szBuffer, "'");
+		
+		if (iEntry < iEntries - 1)
+			strcat(g_szBuffer, ", ");
+	}
+	
+	valstr(szValue, iUID);
+	
+	strcat(g_szBuffer, " WHERE `uid`=");
+	strcat(g_szBuffer, szValue);
+	
+	db_query(g_dbKeptAlive, g_szBuffer);
+	
+	return true;
+}
+
+global bool:BUD::SetIntEntry(iUID, const szColumn[], iInput) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME)
+			return false;
+	#endif
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "UPDATE `users` SET `%s`=%d WHERE `uid`=%d", szColumn, iInput, iUID);
+	
+	db_query(g_dbKeptAlive, g_szBuffer);
+	
+	return true;
+}
+
+global bool:BUD::SetFloatEntry(iUID, const szColumn[], Float:fInput) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME)
+			return false;
+	#endif
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "UPDATE `users` SET `%s`=%f WHERE `uid`=%d", szColumn, fInput, iUID);
+	
+	db_query(g_dbKeptAlive, g_szBuffer);
+	
+	return true;
+}
+
+global bool:BUD::SetStringEntry(iUID, const szColumn[], const szInput[], iSize = sizeof(szInput)) {
+	#if (BUD::CHECK_STRING_LENGTH)
+		if (strlen(szColumn) >= BUD::MAX_COLUMN_NAME || strlen(szInput) >= BUD::MAX_ENTRY_STRING)
+			return false;
+	#endif
+	
+	if (!BUD::GetDB())
+		return false;
+	
+	new
+		szUID[11]
+	;
+	
+	memcpy(g_szBuffer, szInput, .numbytes = (iSize * (cellbits / 8))+4);
+	
+	BUD::EscapeSqlString(g_szBuffer);
+	
+	valstr(szUID, iUID);
+	
+	strins(g_szBuffer, "UPDATE `users` SET `", 0);
+	strins(g_szBuffer, szColumn, 20);
+	strins(g_szBuffer, "`='", 20 + strlen(szColumn));
+	strcat(g_szBuffer, "' WHERE `uid`=");
+	strcat(g_szBuffer, szUID);
+	
+	db_query(g_dbKeptAlive, g_szBuffer);
+	
+	return true;
+}
+
+global BUD::EscapeSqlString(szString[], iEnclosingChar = '\'', iSize = sizeof(szString)) {
+	new
+		iLength = strlen(szString),
+		szInsert[2]
+	;
+	
+	szInsert[0] = iEnclosingChar;
+	
+	for (new i = 0; i <= iLength; i++) {
+		if (szString[i] == iEnclosingChar) {
+			
+			if (i > iLength - 1) {
+				szString[i] = EOS;
+				
+				break;
+			} else {
+				if (iLength >= iSize - 1) {
+					szString[iLength - 1] = EOS;
+					
+					--iLength;
+				}
+				
+				strins(szString, szInsert, i, iSize);
+				
+				++iLength;
+				++i;
+			}
+		}
+	}
+}
+
+global DBResult:BUD::RunQuery(szQuery[], bool:bStoreResult) {
+	if (!BUD::GetDB()) {
+		BUD::Error("No DB in BUD::RunQuery.");
+		
+		return BUD::NO_RESULT;
+	}
+	
+	new
+		DBResult:dbrResult = db_query(g_dbKeptAlive, szQuery)
+	;
+	
+	if (dbrResult) {
+		if (bStoreResult) {
+			SetTimerEx("BUD_FreeResult", 0, false, "i", _:dbrResult);
+			
+			return dbrResult;
+		} else
+			db_free_result(dbrResult);
+	}
+	
+	return BUD::NO_RESULT;
+}
+
+forward BUD::FreeResult(DBResult:dbrResult);
+public  BUD::FreeResult(DBResult:dbrResult) {
+	db_free_result(dbrResult);
+}
+
+global BUD::GetSortedData(brResults[][], const szColumnName[], BUD::e_SORT_ORDER:iSortOrder = BUD::SORT_DESC, const szConditions[] = "", iResults = sizeof(brResults)) {
+	if (!BUD::GetDB())
+		return -1;
+	
+	new
+		DBResult:dbrResult,
+		         iReturn = -1
+	;
+	
+	format(g_szBuffer, sizeof(g_szBuffer), "SELECT `uid`, `%s` FROM `users` %s ORDER BY `%s` %s LIMIT %d", szColumnName, szConditions, szColumnName, (BUD::SORT_ASC == iSortOrder) ? ("ASC") : ("DESC"), iResults);
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) > 0) {
+			new
+				iIndex
+			;
+			
+			do {
+				db_get_field(dbrResult, 0, g_szBuffer, sizeof(g_szBuffer) - 1);
+				
+				brResults[iIndex][0] = strval(g_szBuffer);
+				
+				db_get_field(dbrResult, 1, g_szBuffer, sizeof(g_szBuffer) - 1);
+				
+				brResults[iIndex][1] = strval(g_szBuffer);
+				
+				++iIndex;
+			}
+			while (db_next_row(dbrResult) && iIndex < iResults);
+			
+			iReturn = iIndex;
+		}
+		
+		db_free_result(dbrResult);
+	}
+	
+	return iReturn;
+}
+
+global bool:BUD::GetNamesForSortedData(brResults[][], iResults, szaNames[][], iMaxName = sizeof(szaNames[])) {
+	if (!BUD::GetDB())
+		return false;
+	
+	new
+		         szUID[11],
+		         iUID,
+		         i,
+		DBResult:dbrResult
+	;
+	
+	g_szBuffer = "SELECT `uid`, `name` FROM `users` WHERE `uid` IN (";
+	
+	for (i = 0; i < iResults; i++) {
+		valstr(szUID, brResults[i][0]);
+		
+		strcat(g_szBuffer, szUID);
+		
+		if (i + 1 < iResults)
+			strcat(g_szBuffer, ",");
+	}
+	
+	strcat(g_szBuffer, ")");
+	
+	dbrResult = db_query(g_dbKeptAlive, g_szBuffer);
+	
+	if (dbrResult) {
+		if (db_num_rows(dbrResult) > 0) {
+			new
+				     iIndex,
+				bool:bFound
+			;
+			
+			do {
+				db_get_field(dbrResult, 0, szUID, sizeof(szUID) - 1);
+				
+				iUID = strval(szUID);
+				
+				bFound = false;
+				
+				for (i = 0; i < iResults; i++) {
+					if (brResults[i][0] == iUID) {
+						db_get_field(dbrResult, 1, szaNames[i], iMaxName - 1);
+						
+						bFound = true;
+					
+						break;
+					}
+				}
+				
+				if (!bFound) {
+					new
+						szName[MAX_PLAYER_NAME + 1]
+					;
+					
+					db_get_field(dbrResult, 1, szName, sizeof(szName) - 1);
+					
+					BUD::Warning("Unable to find the place for %s (%d) in BUD::GetNamesForSortedData.", szName, iUID);
+					
+					szaNames[i][0] = 0;
+					
+					strcat(szaNames[i], "UNKNOWN", iMaxName);
+				}
+				
+				++iIndex;
+			}
+			while (db_next_row(dbrResult) && iIndex < iResults);
+		}
+		
+		db_free_result(dbrResult);
+		
+		return true;
+	}
+	
+	return false;
+}
+
+forward BUD::funcinc();
+public BUD::funcinc() {
+	new szNothing[1];
+	
+	strcat(szNothing, "");
+	format(szNothing, 0, "");
+	printf("");
+}
+
+global DBResult:BUD::RunQueryEx(const szQuery[], bool:bStoreResult = false, {Float, _}:...) {
+	if (!BUD::GetDB()) {
+		BUD::Error("No DB in BUD::RunQuery.");
+		
+		return BUD::NO_RESULT;
+	}
+	
+	const
+		STATIC_ARGS = 2
+	;
+	
+	new
+		iPos = -1,
+		iArg = STATIC_ARGS,
+		iIndex = 0,
+		iArgumentAddress,
+		
+		iArguments,         // Number of arguments
+		aiArguments[128]    // Argument addresses
+	;
+	
+	static
+		axArguments[128],           // "x" as in any tag. Contains single cell arguments.
+		s_szStringBuffer[10240 + 1] // The last cell is used to see if the buffer ran out of space; hence the + 1.
+	;
+	
+	s_szStringBuffer[0] = 0;
+	
+	while (-1 != (iPos = strfind(szQuery, "%", _, iPos))) {
+		if (szQuery[++iPos] == '%')
+			continue;
+		
+		while (szQuery[iPos]) {
+			switch (szQuery[iPos]) {
+				case 'a' .. 'z', 'A' .. 'Z':
+					break;
+				
+				case ' ', '*', '.', '!', '-', '?', '0' .. '9': {
+					iPos++;
+					
+					continue;
+				}
+			}
+		}
+		
+		switch (szQuery[iPos]) {
+			case '\0': {
+				break;
+			}
+			
+			case 's': {
+				iIndex += strlen(s_szStringBuffer[iIndex]);
+				
+				if (iIndex)
+					iIndex++;
+				
+				if (iIndex >= sizeof(s_szStringBuffer) - 1) {
+					BUD::Error("The string buffer in BUD::RunQueryEx is out of space. You must increase the size of it.");
+					
+					return BUD::NO_RESULT;
+				}
+				
+				__getstringarg(s_szStringBuffer[iIndex], iArg, sizeof(s_szStringBuffer) - iIndex);
+				
+				if (s_szStringBuffer[sizeof(s_szStringBuffer) - 2]) {
+					BUD::Error("The string buffer in BUD::RunQueryEx ran out of space. You must increase the size of it.");
+					
+					return BUD::NO_RESULT;
+				}
+				
+				BUD::EscapeSqlString(s_szStringBuffer[iIndex], _, sizeof(s_szStringBuffer) - iIndex);
+				
+				#emit CONST.pri   s_szStringBuffer
+				#emit STOR.S.pri  iArgumentAddress
+				
+				iArgumentAddress += iIndex * 4;
+				
+				aiArguments[iArguments++] = iArgumentAddress;
+			}
+			
+			default: {
+				axArguments[iArg] = getarg(iArg);
+				
+				#emit CONST.pri   axArguments
+				#emit STOR.S.pri  iArgumentAddress
+				
+				iArgumentAddress += iArg * 4;
+				
+				aiArguments[iArguments++] = iArgumentAddress;
+			}
+		}	
+		
+		iArg++;
+		
+		if (iArg >= sizeof(axArguments) - 1) {
+			BUD::Error("Argument limit exceeded in BUD::RunQueryEx.");
+			
+			return BUD::NO_RESULT;
+		}
+	}
+	
+	new
+		iArgCount = (3 + iArguments) * 4,
+		i = iArguments,
+		iSize = sizeof(s_szStringBuffer)
+	;
+	
+	while (--i >= 0) {
+		iArg = aiArguments[i];
+		
+		#emit PUSH.S iArg
+	}
+	
+	#emit PUSH.S    szQuery
+	#emit PUSH.S    iSize
+	#emit CONST.pri s_szStringBuffer
+	#emit PUSH.pri
+	#emit PUSH.S    iArgCount
+	#emit SYSREQ.C  format
+
+	iArgCount += 4;
+
+	#emit LCTRL         4
+	#emit LOAD.S.alt    iArgCount
+	#emit ADD
+	#emit SCTRL         4
+	
+	new
+		DBResult:dbrResult = db_query(g_dbKeptAlive, s_szStringBuffer)
+	;
+	
+	if (dbrResult) {
+		if (bStoreResult) {
+			SetTimerEx("BUD_FreeResult", 0, false, "i", _:dbrResult);
+			
+			return dbrResult;
+		} else
+			db_free_result(dbrResult);
+	}
+	
+	return BUD::NO_RESULT;
+}
+
+// Inspired by Y_Less!
+
+private BUD::CheckForUpdates() {
+	HTTP(0xFA7E, HTTP_GET, "spelsajten.net/bud_version.php?version=0x" #BUD_VERSION_MINOR #BUD_VERSION_MAJOR #BUD_VERSION_BUILD, "", "BUD_HTTPResponse");
+}
+
+forward BUD::HTTPResponse(iIndex, iResponseCode, szData[]);
+public  BUD::HTTPResponse(iIndex, iResponseCode, szData[]) {
+	if (iResponseCode == 200) {
+		switch (szData[0]) {
+			case '0': return; // Up-to-date
+			case '1': BUD::Notice("There is a new update available.");
+			case '2': BUD::Warning("There is a new version out; upgrading is strongly recommended.");
+			case '3': { // New version available; upgrading has to be done.
+				new
+					iTick = GetTickCount()
+				;
+				
+				BUD::Error("This version is outdated; you have to upgrade your script because of security reasons.");
+				
+				SetGameModeText("LOOK AT THE SERVER LOG");
+				
+				while (GetTickCount() - iTick < 3000) {}
+				
+				SendRconCommand("exit");
+			}
+		}
+	} else {
+		if (iResponseCode < 100)
+			BUD::Notice("Unable to check for updates; internal error code %d.", iResponseCode);
+		else
+			BUD::Notice("Unable to check for updates; HTTP error code %d.", iResponseCode);
+	}
+}
+
+// Y_Less
+
+private __getstringarg(dest[], arg, len = sizeof (dest))
+{
+    // Get the address of the previous function's stack.  First get the index of
+    // the argument required.
+    #emit LOAD.S.pri arg
+    // Then convert that number to bytes from cells.
+    #emit SMUL.C     4
+    // Get the previous function's frame.  Stored in variable 0 (in the current
+    // frame).  Parameters are FRM+n+12, locals are FRM-n, previous frame is
+    // FRM+0, return address is FRM+4, parameter count is FRM+8.  We could add
+    // checks that "arg * 4 < *(*(FRM + 0) + 8)", for the previous frame parameter
+    // count (in C pointer speak).
+    #emit LOAD.S.alt 0
+    // Add the frame pointer to the argument offset in bytes.
+    #emit ADD
+    // Add 12 to skip over the function header.
+    #emit ADD.C      12
+    // Load the address stored in the specified address.
+    #emit LOAD.I
+    // Push the length for "strcat".
+    #emit PUSH.S     len
+    // Push the address we just determined was the source.
+    #emit PUSH.pri
+    // Load the address of the destination.
+    #emit LOAD.S.alt dest
+    // Blank the first cell so "strcat" behaves like "strcpy".
+    #emit CONST.pri  0
+    // Store the loaded number 0 to the loaded address.
+    #emit STOR.I
+    // Push the loaded address.
+    #emit PUSH.alt
+    // Push the number of parameters passed (in bytes) to the function.
+    #emit PUSH.C     12
+    // Call the function.
+    #emit SYSREQ.C   strcat
+    // Restore the stack to its level before we called this native.
+    #emit STACK      16
+}
+
+// Modification of above
+
+stock __setstringarg(iArg, const szValue[], iLength = sizeof(szValue)) {
+	new
+		iAddress
+	;
+
+	// Get the address of the previous function's stack.  First get the index of
+    // the argument required.
+    #emit LOAD.S.pri iArg
+    // Then convert that number to bytes from cells.
+    #emit SMUL.C     4
+    // Get the previous function's frame.
+	#emit LOAD.S.alt 0
+	// Add the frame pointer to the argument offset in bytes.
+    #emit ADD
+    // Add 12 to skip over the function header.
+    #emit ADD.C      12
+    // Load the address stored in the specified address.
+    #emit LOAD.I
+	#emit STOR.S.PRI iAddress
+
+	// Push the length (last argument first)
+	#emit PUSH.S     iLength
+
+	// Push the new value (source) szValue
+	#emit PUSH.S     szValue
+
+	// Blank out the first cell of the argument
+	#emit CONST.pri  0
+	#emit SREF.S.pri iAddress
+	
+	// Push the destination
+	#emit PUSH.S     iAddress
+
+	// Push the number of parameters passed (in bytes) to the function.
+	#emit PUSH.C     12
+	
+	// Call the function.
+	#emit SYSREQ.C   strcat
+	
+	// Restore the stack to its level before we called this native.
+	#emit STACK      16
+}
+
+
+#if (BUD::USE_WHIRLPOOL && UNDEFINE_MAX_PASSWORD_LENGTH)
+	#undef MAX_PASSWORD_LENGTH
+#endif
+
+#undef UNDEFINE_MAX_PASSWORD_LENGTH
+#undef INVALID_DB
+#undef DEFAULT_COLUMNS
+#undef DEFAULT_DATABASE_NAME
+#undef BUD_Notice
+#undef BUD_Warning
+#undef BUD_Error
+#undef private
+#undef global
+
+#if defined __undef_celbytes
+	#undef __undef_celbytes
+	#undef cellbytes
+#endif

+ 695 - 0
pawno/include/BustAim.inc

@@ -0,0 +1,695 @@
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//BUST AIM
+//
+//BustAim is a feature rich anti-aimbot include which tries to detect players who are using aimbots. BustAim is designed to
+//trigger warnings and provide administrators with vital information about the suspected player. It by itself cannot do much
+//and requires human intelligence to confirm if the player is using an aimbot.
+//License:Public Domain
+//
+//Credits:
+//Yashas
+//RedShirt & niCe & JernejL for camera/aiming functions
+//ipsLeon & Kyance for their aimbot detectors
+//Pottus for constructive criticism
+//Slice for the information regarding Maximum Weapon Firing Range
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//Callbacks:
+//	OnPlayerSuspectedForAimbot(playerid,hitid,weaponid,warnings)
+//
+//Stocks:
+//	native BustAim::GetPlayerWeaponProfile(playerid,weaponid,&allshots,&hitshots,&max_cont_shots,&out_of_range_warns,&random_aim_warns,&proaim_tele_warns);
+//	native BustAim::ResetPlayerWeaponProfile(playerid,weaponid);
+//  native BustAim::GetPlayerProfile(playerid,&shotsfired,&shotshit,&max_cont_shots,&out_of_range_warns,&random_aim_warns,&proaim_tele_warns);
+//  native BustAim::ResetPlayerProfile(playerid);
+//  native BustAim::SetPlayerFlags(playerid,flags);
+//  native BustAim::GetPlayerFlags(playerid,&flags);
+//  native BustAim::ResetPlayerFlags(playerid);
+//  native BustAim::GetTeleportStats(playerid,Float:arr[],sz = sizeof(arr));
+//  native BustAim::GetAimStats(playerid,Float:arr[],sz = sizeof(arr))
+//  native BustAim::GetRangeStats(playerid,Float:arr[],sz = sizeof(arr))
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+#if defined _INCLUDE_BUSTAIM_
+	#endinput
+#endif
+#define _INCLUDE_BUSTAIM_
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+#define BustAim:: BS_
+
+#if !defined BUSTAIM_MAX_PL_PERCENTAGE
+	#define BUSTAIM_MAX_PL_PERCENTAGE 5
+#endif
+#if !defined BUSTAIM_MAX_PING
+	#define BUSTAIM_MAX_PING 600
+#endif
+#if !defined BUSTAIM_SKIP_WEAPON_IDS
+	#define BUSTAIM_SKIP_WEAPON_IDS 38
+#endif
+#if !defined BUSTAIM_MAX_CONTINOUS_SHOTS
+	#define BUSTAIM_MAX_CONTINOUS_SHOTS 10
+#endif
+#if !defined BUSTAIM_PROAIM_TELEPORT_PROBES
+	#define BUSTAIM_PROAIM_TELEPORT_PROBES 3
+#endif
+#if !defined BUSTAIM_OUT_OF_RANGE_PROBES
+	#define BUSTAIM_OUT_OF_RANGE_PROBES 2
+#endif
+#if !defined BUSTAIM_RANDOM_AIM_PROBES
+	#define BUSTAIM_RANDOM_AIM_PROBES 5
+#endif
+#if !defined MIN_DIST_FOR_AIM_CHECKS
+	#define MIN_DIST_FOR_AIM_CHECKS 10
+#endif
+#if !defined MAX_B2V_DEVIATION
+	#define MAX_B2V_DEVIATION 15
+#endif
+#if !defined BUSTAIM_PLAYER_SPHERE_RADIUS
+	#define BUSTAIM_PLAYER_SPHERE_RADIUS 3
+#endif
+#if !defined BUSTAIM_DEFAULT_PLAYER_FLAGS
+	#define BUSTAIM_DEFAULT_PLAYER_FLAGS (CHECK_FOR_OUT_OF_RANGE_SHOTS	|	CHECK_FOR_PROAIM_TELEPORT   |	CHECK_FOR_RANDOM_AIM_SHOTS	| 	CHECK_FOR_CONTINOUS_SHOTS)
+#endif
+#if !defined BUSTAIM_WSTATS_SHOTS
+	#define BUSTAIM_WSTATS_SHOTS 3
+#endif
+
+//DO NOT CHANGE THIS
+#define BS_TOTAL_SHOOTING_WEAPONS 17 //includes RPG,HS,FT
+#if BS_TOTAL_SHOOTING_WEAPONS != 17
+	#error BS_TOTAL_SHOOTING_WEAPONS should always be set to 17
+#endif
+
+#define BS_GetNormalWeaponRange(weaponid) BustAim_g_WeaponRangeOriginal[weaponid-22]
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+forward OnPlayerSuspectedForAimbot(playerid,hitid,weaponid,warnings);
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+enum (<<=1)
+{
+	WARNING_OUT_OF_RANGE_SHOT=1,
+	WARNING_PROAIM_TELEPORT,
+	WARNING_RANDOM_AIM,
+	WARNING_CONTINOUS_SHOTS
+}
+enum (<<=1)
+{
+	PREVIOUS_SHOT_DID_DAMAGE=1,
+}
+enum (<<=1)
+{
+	CHECK_FOR_OUT_OF_RANGE_SHOTS=1,
+	CHECK_FOR_PROAIM_TELEPORT,
+	CHECK_FOR_RANDOM_AIM_SHOTS,
+	CHECK_FOR_CONTINOUS_SHOTS,
+	IGNORE_PLAYER
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//Modified Slice's Max Weapon Ranges from Weapon Config Include (Added 10 units extra for every weapon to make allowance for lagging players)
+static const Float:BustAim_g_WeaponRange[] =
+{
+	45.0, // 22 - Colt 45
+	45.0, // 23 - Silenced
+	45.0, // 24 - Deagle
+	50.0, // 25 - Shotgun
+	45.0, // 26 - Sawed-off
+	50.0, // 27 - Spas
+	45.0, // 28 - UZI
+	55.0, // 29 - MP5
+	100.0, // 30 - AK47
+	120.0, // 31 - M4
+	45.0, // 32 - Tec9
+	110.0, // 33 - Cuntgun
+	320.0, // 34 - Sniper
+	0.0, // 35 - Rocket launcher
+	0.0, // 36 - Heatseeker
+	0.0, // 37 - Flamethrower
+	85.0  // 38 - Minigun
+};
+//Original Slice's Max Weapon Ranges'
+stock const Float:BustAim_g_WeaponRangeOriginal[] =
+{
+	35.0, // 22 - Colt 45
+	35.0, // 23 - Silenced
+	35.0, // 24 - Deagle
+	40.0, // 25 - Shotgun
+	35.0, // 26 - Sawed-off
+	40.0, // 27 - Spas
+	35.0, // 28 - UZI
+	45.0, // 29 - MP5
+	70.0, // 30 - AK47
+	90.0, // 31 - M4
+	35.0, // 32 - Tec9
+	100.0, // 33 - Cuntgun
+	320.0, // 34 - Sniper
+	0.0, // 35 - Rocket launcher
+	0.0, // 36 - Heatseeker
+	0.0, // 37 - Flamethrower
+	75.0  // 38 - Minigun
+};
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static BustAim_g_PlayerSettings[MAX_PLAYERS char];
+static BustAim_g_PlayerPrevWeapon[MAX_PLAYERS char];
+
+static BustAim_g_IntrnlPlayerSettings[MAX_PLAYERS char];
+
+static BustAim_g_ContinousShots[MAX_PLAYERS char];
+static BustAim_g_RandomAimShots[MAX_PLAYERS char];
+static BustAim_g_TeleportShots[MAX_PLAYERS char];
+static BustAim_g_OutOfRangeShots[MAX_PLAYERS char];
+
+#if !defined BUSTAIM_DISABLE_PROFILING
+static BustAim_g_TotalRandomAimWarns[MAX_PLAYERS][BS_TOTAL_SHOOTING_WEAPONS];
+static BustAim_g_TotalTeleportWarns[MAX_PLAYERS][BS_TOTAL_SHOOTING_WEAPONS];
+static BustAim_g_TotalOutOfRangeWarns[MAX_PLAYERS][BS_TOTAL_SHOOTING_WEAPONS];
+static BustAim_g_MaxContinousShots[MAX_PLAYERS][BS_TOTAL_SHOOTING_WEAPONS];
+static BustAim_g_ShotsFired[MAX_PLAYERS][BS_TOTAL_SHOOTING_WEAPONS];
+static BustAim_g_ShotsHit[MAX_PLAYERS][BS_TOTAL_SHOOTING_WEAPONS];
+#endif
+
+#if !defined BUSTAIM_DISABLE_WSTATS
+static Float:BustAim_g_TeleportWarningStats[MAX_PLAYERS][BUSTAIM_WSTATS_SHOTS];
+static Float:BustAim_g_AimWarningStats[MAX_PLAYERS][BUSTAIM_WSTATS_SHOTS];
+static Float:BustAim_g_RangeWarningStats[MAX_PLAYERS][BUSTAIM_WSTATS_SHOTS];
+static Float:BustAim_g_DCTTL_temp;
+#endif
+
+#if !defined BUSTAIM_IS_PAUSED_FUNCTION
+static BustAim_g_LastUpdateTick[MAX_PLAYERS];
+#endif
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static Float:internal_BS_DCTTL(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ)
+{
+   	static Float:TGTDistance,Float:tmpX, Float:tmpY, Float:tmpZ;
+    TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
+
+    tmpX = FrX * TGTDistance + CamX;
+    tmpY = FrY * TGTDistance + CamY;
+    tmpZ = FrZ * TGTDistance + CamZ;
+
+    return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
+}
+static Float:internal_BS_GPATP(Float:x2, Float:y2, Float:X, Float:Y)
+{
+	static Float:DX, Float:DY,Float:angle;
+
+	DX = floatabs(floatsub(x2,X));
+	DY = floatabs(floatsub(y2,Y));
+
+  	if (DY == 0.0 || DX == 0.0)
+  	{
+		if(DY == 0 && DX > 0) angle = 0.0;
+    	else if(DY == 0 && DX < 0) angle = 180.0;
+    	else if(DY > 0 && DX == 0) angle = 90.0;
+    	else if(DY < 0 && DX == 0) angle = 270.0;
+    	else if(DY == 0 && DX == 0) angle = 0.0;
+  	}
+  	else
+	{
+    	angle = atan(DX/DY);
+
+    	if(X > x2 && Y <= y2) angle += 90.0;
+    	else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
+    	else if(X < x2 && Y >= y2) angle -= 90.0;
+    	else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
+  	}
+  	return floatadd(angle, 90.0);
+}
+static internal_BS_GXYIFOP(&Float:x, &Float:y, Float:angle, Float:distance)
+{
+	x += (distance * floatsin(-angle, degrees));
+	y += (distance * floatcos(-angle, degrees));
+}
+static internal_BS_IsCameraAimingAt(weaponid,Float:x, Float:y, Float:z,Float:vector_x,Float:vector_y,Float:vector_z,Float:camera_x,Float:camera_y,Float:camera_z,Float:radius)
+{
+   	static Float:vertical, Float:horizontal;
+    switch (weaponid)
+    {
+		case 34,35,36:
+		{
+			if (internal_BS_DCTTL(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
+			return false;
+        }
+        case 30,31: {vertical = 4.0; horizontal = -1.6;}
+        case 33: {vertical = 2.7; horizontal = -1.0;}
+        default: {vertical = 6.0; horizontal = -2.2;}
+	}
+	new Float:angle = internal_BS_GPATP(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
+	new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
+
+	internal_BS_GXYIFOP(resize_x, resize_y, internal_BS_GPATP(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));
+    #if !defined BUSTAIM_DISABLE_WSTATS
+    	if ((BustAim_g_DCTTL_temp = internal_BS_DCTTL(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z)) < radius) return true;
+    #else
+		if (internal_BS_DCTTL(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
+	#endif
+	return false;
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
+{
+    static Float:pX,Float:pY,Float:pZ,Float:hX,Float:hY,Float:hZ,Float:cX,Float:cY,Float:cZ;
+    if(!(21 < weaponid < 39)
+       || !(-1 < hittype < 5))
+        #if defined BustAim_OnPlayerWeaponShot
+            return BustAim_OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, fX, fY, fZ );
+        #else
+            return 0;
+        #endif
+        
+    if(hittype == BULLET_HIT_TYPE_NONE)
+    {
+    	if(floatabs(fX) > 20000.0 || floatabs(fY) > 20000.0 || floatabs(fZ) > 20000.0)
+    	{
+            #if defined BustAim_OnPlayerWeaponShot
+            	return BustAim_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
+            #else
+            	return 0;
+            #endif
+    	}
+    } 
+    else
+    {
+        if(floatabs(fX) > 1500.0 || floatabs(fY) > 1500.0 || floatabs(fZ) > 1500.0)
+    	{
+            #if defined BustAim_OnPlayerWeaponShot
+            	return BustAim_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
+            #else
+                return 0;
+            #endif
+        }
+    }
+    
+    #if !defined BUSTAIM_DISABLE_PROFILING
+	BustAim_g_ShotsFired[playerid][weaponid-22]++;
+    #endif
+    
+    if(hittype == BULLET_HIT_TYPE_PLAYER)
+    {
+    	#if !defined BUSTAIM_DISABLE_PROFILING
+        	BustAim_g_ShotsHit[playerid][weaponid-22]++;
+		#endif
+
+		if(BustAim_g_PlayerSettings{playerid} & IGNORE_PLAYER)
+            #if defined BustAim_OnPlayerWeaponShot
+	        	return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+
+		if(BustAim_g_PlayerPrevWeapon{playerid} != weaponid)
+		{
+		    BustAim_g_ContinousShots{playerid} =
+			BustAim_g_RandomAimShots{playerid} =
+			BustAim_g_TeleportShots{playerid} =
+			BustAim_g_OutOfRangeShots{playerid} = 0;
+
+		    BustAim_g_PlayerPrevWeapon{playerid} = weaponid;
+		}
+
+        if(IsPlayerNPC(hitid))
+	       	#if defined BustAim_OnPlayerWeaponShot
+	       		return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+
+    	#if defined BUSTAIM_IS_PAUSED_FUNCTION
+		    if(BUSTAIM_IS_PAUSED_FUNCTION(hitid))
+			#if defined BustAim_OnPlayerWeaponShot
+ 				return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+		#else
+		    if((GetTickCount() - BustAim_g_LastUpdateTick[hitid]) > 1000)
+			#if defined BustAim_OnPlayerWeaponShot
+		    	return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+		#endif
+
+        if(NetStats_PacketLossPercent(playerid) > BUSTAIM_MAX_PL_PERCENTAGE ||  NetStats_PacketLossPercent(hitid) > BUSTAIM_MAX_PL_PERCENTAGE)
+			#if defined BustAim_OnPlayerWeaponShot
+	       		return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+
+        if(GetPlayerPing(playerid) > BUSTAIM_MAX_PING ||  GetPlayerPing(hitid) > BUSTAIM_MAX_PING)
+			#if defined BustAim_OnPlayerWeaponShot
+	        	return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+
+   		if(IsPlayerInAnyVehicle(playerid) || IsPlayerInAnyVehicle(hitid))
+        	#if defined BustAim_OnPlayerWeaponShot
+	       		return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+
+        if(GetPlayerSurfingVehicleID(playerid) != INVALID_VEHICLE_ID || GetPlayerSurfingVehicleID(hitid) != INVALID_VEHICLE_ID)
+      		#if defined BustAim_OnPlayerWeaponShot
+	      		return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+			#else
+				return 1;
+			#endif
+
+		switch(weaponid)
+		{
+		    case BUSTAIM_SKIP_WEAPON_IDS:
+		    {
+		        #if defined BustAim_OnPlayerWeaponShot
+	           		return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+				#else
+					return 1;
+				#endif
+		    }
+		}
+		
+        new warning = 0;
+
+	    GetPlayerVelocity(hitid,pX,pY,pZ);
+
+	    if(BustAim_g_PlayerSettings{playerid} & CHECK_FOR_CONTINOUS_SHOTS)
+		    if((pX*pX + pY*pY + pZ*pZ) > 0.01)
+		        if(!(++BustAim_g_ContinousShots{playerid} % BUSTAIM_MAX_CONTINOUS_SHOTS))
+					warning |= WARNING_CONTINOUS_SHOTS;
+
+		GetPlayerPos(hitid,hX,hY,hZ);
+		GetPlayerLastShotVectors(playerid,pX,pY,pZ,cX,cY,cZ);
+
+		new Float:S2V_dist = VectorSize(pX-hX,pY-hY,pZ-hZ); //Approximate Shooter to Victim Distance
+
+		if(BustAim_g_PlayerSettings{playerid} & CHECK_FOR_OUT_OF_RANGE_SHOTS)
+		{
+			if(S2V_dist > BustAim_g_WeaponRange[weaponid-22])
+			{
+				#if !defined BUSTAIM_DISABLE_WSTATS
+	     			BustAim_g_RangeWarningStats[playerid][BustAim_g_OutOfRangeShots{playerid}%BUSTAIM_WSTATS_SHOTS] = S2V_dist;
+				#endif
+				if(BustAim_g_IntrnlPlayerSettings{playerid} & PREVIOUS_SHOT_DID_DAMAGE)
+				{
+					if(++BustAim_g_OutOfRangeShots{playerid} > BUSTAIM_OUT_OF_RANGE_PROBES)
+					{
+						BustAim_g_OutOfRangeShots{playerid} = 0;
+						#if !defined BUSTAIM_DISABLE_PROFILING
+							BustAim_g_TotalOutOfRangeWarns[playerid][weaponid-22]++;
+						#endif
+						warning |= WARNING_OUT_OF_RANGE_SHOT;
+					}
+					BustAim_g_IntrnlPlayerSettings{playerid} &= ~PREVIOUS_SHOT_DID_DAMAGE;
+				}
+			}
+		}
+
+        if(BustAim_g_PlayerSettings{playerid} & CHECK_FOR_PROAIM_TELEPORT)
+			if(VectorSize(cX-hX,cY-hY,cZ-hZ) > MAX_B2V_DEVIATION)
+			{
+				#if !defined BUSTAIM_DISABLE_WSTATS
+                  	BustAim_g_TeleportWarningStats[playerid][BustAim_g_TeleportShots{playerid}%BUSTAIM_WSTATS_SHOTS] = VectorSize(cX-hX,cY-hY,cZ-hZ);
+				#endif
+			    if(++BustAim_g_TeleportShots{playerid} > BUSTAIM_PROAIM_TELEPORT_PROBES)
+				{
+				    BustAim_g_TeleportShots{playerid} = 0;
+				    #if !defined BUSTAIM_DISABLE_PROFILING
+				    	BustAim_g_TotalTeleportWarns[playerid][weaponid-22]++;
+					#endif
+					warning |= WARNING_PROAIM_TELEPORT;
+				}
+			}
+
+		
+
+        if(BustAim_g_PlayerSettings{playerid} & CHECK_FOR_RANDOM_AIM_SHOTS)
+			if(S2V_dist > MIN_DIST_FOR_AIM_CHECKS)
+			{
+			    GetPlayerCameraFrontVector(playerid,pX,pY,pZ);
+				GetPlayerCameraPos(playerid,cX,cY,cZ);
+				if(!internal_BS_IsCameraAimingAt(weaponid,hX,hY,hZ,pX,pY,pZ,cX,cY,cZ,BUSTAIM_PLAYER_SPHERE_RADIUS))
+				{
+				    #if !defined BUSTAIM_DISABLE_WSTATS
+       	            	BustAim_g_AimWarningStats[playerid][BustAim_g_RandomAimShots{playerid}%BUSTAIM_WSTATS_SHOTS] = BustAim_g_DCTTL_temp;
+					#endif
+	                if(++BustAim_g_RandomAimShots{playerid} > BUSTAIM_RANDOM_AIM_PROBES)
+	                {
+	                    BustAim_g_RandomAimShots{playerid} = 0;
+	                    #if !defined BUSTAIM_DISABLE_PROFILING
+					    	BustAim_g_TotalRandomAimWarns[playerid][weaponid-22]++;
+						#endif
+						warning |= WARNING_RANDOM_AIM;
+	                }
+				}
+			}
+		if(warning)
+	        #if defined OnPlayerSuspectedForAimbot
+	           if(OnPlayerSuspectedForAimbot(playerid,hitid,weaponid,warning)) BustAim_g_PlayerSettings{playerid} |= IGNORE_PLAYER;
+	        #endif
+	}
+	else
+	{
+	    #if !defined BUSTAIM_DISABLE_PROFILING
+	    	if(BustAim_g_ContinousShots{playerid} > BustAim_g_MaxContinousShots[playerid][weaponid-22])
+            	BustAim_g_MaxContinousShots[playerid][weaponid-22] = BustAim_g_ContinousShots{playerid};
+	 	#endif
+	    BustAim_g_ContinousShots{playerid} =
+		BustAim_g_RandomAimShots{playerid} =
+		BustAim_g_TeleportShots{playerid} =
+		BustAim_g_OutOfRangeShots{playerid} = 0;
+	}
+    #if defined BustAim_OnPlayerWeaponShot
+		return BustAim_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
+	#else
+		return 1;
+	#endif
+}
+public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
+{
+    if((0 <= damagedid < MAX_PLAYERS) && (0 <= weaponid < 50)) BustAim_g_IntrnlPlayerSettings{playerid} |= PREVIOUS_SHOT_DID_DAMAGE;
+	#if defined BustAim_OnPlayerGiveDamage
+		return BustAim_OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart);
+	#else
+		return 1;
+	#endif
+}
+#if defined _ALS_OnPlayerWeaponShot
+#undef OnPlayerWeaponShot
+#else
+#define _ALS_OnPlayerWeaponShot
+#endif
+
+#define OnPlayerWeaponShot BustAim_OnPlayerWeaponShot
+
+#if defined BustAim_OnPlayerWeaponShot
+	forward BustAim_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
+#endif
+
+#if defined _ALS_OnPlayerGiveDamage
+#undef OnPlayerGiveDamage
+#else
+#define _ALS_OnPlayerGiveDamage
+#endif
+
+#define OnPlayerGiveDamage BustAim_OnPlayerGiveDamage
+
+#if defined BustAim_OnPlayerGiveDamage
+	forward BustAim_OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart);
+#endif
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+#if defined BUSTAIM_DISABLE_WSTATS
+stock BustAim::GetTeleportStats(playerid,Float:arr[],sz = sizeof(arr))
+{
+	#pragma unused playerid
+	#pragma unused arr
+	#pragma unused sz
+    print("[BUST-AIM] GetTeleportStats must not be used when WSTATS is disabled.");
+}
+stock BustAim::GetRandomAimStats(playerid,Float:arr[],sz = sizeof(arr))
+{
+    #pragma unused playerid
+	#pragma unused arr
+	#pragma unused sz
+    print("[BUST-AIM] GetAimStats must not be used when WSTATS is disabled.");
+}
+stock BustAim::GetRangeStats(playerid,Float:arr[],sz = sizeof(arr))
+{
+    #pragma unused playerid
+	#pragma unused arr
+	#pragma unused sz
+    print("[BUST-AIM] GetRangeStats must not be used when WSTATS is disabled.");
+}
+#else
+stock BustAim::GetTeleportStats(playerid,Float:arr[],sz = sizeof(arr))
+{
+	memcpy(_:arr,_:BustAim_g_TeleportWarningStats[playerid],0,sz*4,sz);
+}
+stock BustAim::GetRandomAimStats(playerid,Float:arr[],sz = sizeof(arr))
+{
+    memcpy(_:arr,_:BustAim_g_AimWarningStats[playerid],0,sz*4,sz);
+}
+stock BustAim::GetRangeStats(playerid,Float:arr[],sz = sizeof(arr))
+{
+    memcpy(_:arr,_:BustAim_g_RangeWarningStats[playerid],0,sz*4,sz);
+}
+#endif
+
+#if defined BUSTAIM_DISABLE_PROFILING
+stock BustAim::GetPlayerWeaponProfile(playerid,weaponid,&allshots,&hitshots,&max_cont_shots,&out_of_range_warns,&random_aim_warns,&proaim_tele_warns)
+{
+    #pragma unused playerid
+	#pragma unused weaponid
+	print("[BUST-AIM] GetPlayerWeaponProfile must not be used when profiling is disabled.");
+}
+stock BustAim::ResetPlayerWeaponProfile(playerid,weaponid)
+{
+    #pragma unused playerid
+	#pragma unused weaponid
+    print("[BUST-AIM] ResetWeaponProfile must not be used when profiling is disabled");
+}
+stock BustAim::GetPlayerProfile(playerid,&shotsfired,&shotshit,&max_cont_shots,&out_of_range_warns,&random_aim_warns,&proaim_tele_warns)
+{
+    #pragma unused playerid
+    print("[BUST-AIM] GetPlayerProfile must not be used when profiling is disabled.");
+}
+stock BustAim::ResetPlayerProfile(playerid)
+{
+    #pragma unused playerid
+    print("[BUST-AIM] ResetPlayerProfile must not be used when profiling is disabled.");
+}
+#else
+stock BustAim::GetPlayerWeaponProfile(playerid,weaponid,&allshots,&hitshots,&max_cont_shots,&out_of_range_warns,&random_aim_warns,&proaim_tele_warns)
+{
+	if(22 <= weaponid <= 39)
+	{
+		weaponid -= 22;
+		allshots = BustAim_g_ShotsFired[playerid][weaponid];
+		hitshots = BustAim_g_ShotsHit[playerid][weaponid];
+		max_cont_shots = BustAim_g_MaxContinousShots[playerid][weaponid];
+		out_of_range_warns = BustAim_g_TotalOutOfRangeWarns[playerid][weaponid];
+	  	random_aim_warns = BustAim_g_TotalRandomAimWarns[playerid][weaponid];
+		proaim_tele_warns = BustAim_g_TotalTeleportWarns[playerid][weaponid];
+		return 0;
+	}
+	return 1;
+}
+stock BustAim::ResetPlayerWeaponProfile(playerid,weaponid)
+{
+	if(22 <= weaponid <= 39)
+	{
+		weaponid -= 22;
+		BustAim_g_ShotsFired[playerid][weaponid] =
+		BustAim_g_ShotsHit[playerid][weaponid] =
+		BustAim_g_MaxContinousShots[playerid][weaponid] =
+		BustAim_g_TotalOutOfRangeWarns[playerid][weaponid] =
+		BustAim_g_TotalRandomAimWarns[playerid][weaponid] =
+		BustAim_g_TotalTeleportWarns[playerid][weaponid] = 0;
+		return 0;
+	}
+	return 1;
+}
+stock BustAim::GetPlayerProfile(playerid,&shotsfired,&shotshit,&max_cont_shots,&out_of_range_warns,&random_aim_warns,&proaim_tele_warns)
+{
+	for(new i = 0;i < BS_TOTAL_SHOOTING_WEAPONS;i++)
+	{
+	    shotsfired += BustAim_g_ShotsFired[playerid][i];
+	    shotshit += BustAim_g_ShotsHit[playerid][i];
+	    out_of_range_warns += BustAim_g_TotalOutOfRangeWarns[playerid][i];
+	    random_aim_warns += BustAim_g_TotalRandomAimWarns[playerid][i];
+	    proaim_tele_warns+= BustAim_g_TotalTeleportWarns[playerid][i];
+	    if(BustAim_g_MaxContinousShots[playerid][i] > max_cont_shots)
+	    	max_cont_shots = BustAim_g_MaxContinousShots[playerid][i];
+	}
+	return 1;
+}
+stock BustAim::ResetPlayerProfile(playerid)
+{
+   	Fill68(BustAim_g_TotalRandomAimWarns[playerid]);
+	Fill68(BustAim_g_TotalTeleportWarns[playerid]);
+	Fill68(BustAim_g_TotalOutOfRangeWarns[playerid]);
+	Fill68(BustAim_g_ShotsFired[playerid]);
+	Fill68(BustAim_g_ShotsHit[playerid]);
+	Fill68(BustAim_g_MaxContinousShots[playerid]);
+	return 0;
+}
+#endif
+stock BustAim::SetPlayerFlags(playerid,flags)
+{
+    BustAim_g_PlayerSettings{playerid} = flags;
+}
+stock BustAim::GetPlayerFlags(playerid,&flags)
+{
+    flags = BustAim_g_PlayerSettings{playerid};
+}
+stock BustAim::ResetPlayerFlags(playerid)
+{
+    BustAim_g_PlayerSettings{playerid} = BUSTAIM_DEFAULT_PLAYER_FLAGS;
+}
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static stock Fill68(loc[])
+{
+	new val = 0;
+  	#emit LOAD.S.alt loc
+	#emit LOAD.S.pri val
+	#emit FILL 68
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+public OnPlayerConnect(playerid)
+{
+    BustAim_g_PlayerSettings{playerid} = BUSTAIM_DEFAULT_PLAYER_FLAGS;
+	BustAim_g_IntrnlPlayerSettings{playerid} =
+    BustAim_g_ContinousShots{playerid} =
+	BustAim_g_RandomAimShots{playerid} =
+	BustAim_g_TeleportShots{playerid} =
+	BustAim_g_OutOfRangeShots{playerid} = 0;
+	#if !defined BUSTAIM_DISABLE_PROFILING
+		Fill68(BustAim_g_TotalRandomAimWarns[playerid]);
+		Fill68(BustAim_g_TotalTeleportWarns[playerid]);
+		Fill68(BustAim_g_TotalOutOfRangeWarns[playerid]);
+		Fill68(BustAim_g_ShotsFired[playerid]);
+		Fill68(BustAim_g_ShotsHit[playerid]);
+		Fill68(BustAim_g_MaxContinousShots[playerid]);
+	#endif
+
+	#if defined BustAim_OnPlayerConnect
+		return BustAim_OnPlayerConnect(playerid);
+	#else
+		return 1;
+	#endif
+}
+#if defined _ALS_OnPlayerConnect
+#undef OnPlayerConnect
+#else
+#define _ALS_OnPlayerConnect
+#endif
+
+#define OnPlayerConnect BustAim_OnPlayerConnect
+
+#if defined BustAim_OnPlayerConnect
+	forward BustAim_OnPlayerConnect(playerid);
+#endif
+
+#if !defined BUSTAIM_IS_PAUSED_FUNCTION
+	public OnPlayerUpdate(playerid)
+	{
+	    BustAim_g_LastUpdateTick[playerid] = GetTickCount();
+
+	    #if defined BustAim_OnPlayerUpdate
+			return BustAim_OnPlayerUpdate(playerid);
+		#else
+			return 1;
+		#endif
+	}
+	#if defined _ALS_OnPlayerUpdate
+	#undef OnPlayerUpdate
+	#else
+	#define _ALS_OnPlayerUpdate
+	#endif
+
+	#define OnPlayerUpdate BustAim_OnPlayerUpdate
+
+	#if defined BustAim_OnPlayerUpdate
+		forward BustAim_OnPlayerUpdate(playerid);
+	#endif
+#endif
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+

+ 435 - 0
pawno/include/DialogCenter.inc

@@ -0,0 +1,435 @@
+/*
+	---------------------------------------
+
+		Dialog Center Text
+		@author: Ino
+		@version: 1.0.2
+		@release: 27/12/2016
+		@build: 3	
+		@download: github.com/Ino42O/Dialog-Center-Text
+
+	---------------------------------------
+
+	 	Changelog:
+
+	 		27-12-2016:
+	 			* Initial release
+
+	 		28-12-2016:
+	 			* Fixed space char
+	 			* Added new characters
+
+	 		10-01-2017:
+	 			* Added support for caption (title) [beta]
+
+
+
+	 	Thanks to:
+	 		[uL]Kanada42O - Consultations
+
+	---------------------------------------
+*/
+
+#include <a_samp>
+
+
+#define _INC_CENTER_DIALOG // For other includes
+
+
+static const stock letters[ ] [ ] = 
+{
+	// Uppercase
+	{ 'A' , 12},
+	{ 'B' , 11}, 
+	{ 'C' , 11},  
+	{ 'D' , 11},  
+	{ 'E' , 10},  
+	{ 'F' ,  9},  
+	{ 'G' , 12},  
+	{ 'H' , 11},  
+	{ 'I' ,  4},  
+	{ 'J' ,  9},  
+	{ 'K' , 12}, 
+	{ 'L' ,  9}, 
+	{ 'M' , 13},  
+	{ 'N' , 11},  
+	{ 'O' , 12},  
+	{ 'P' , 10},  
+	{ 'Q' , 12},  
+	{ 'R' , 12},  
+	{ 'S' , 10},  
+	{ 'T' , 10},  
+	{ 'U' , 11},  
+	{ 'V' , 11},  
+	{ 'W' , 15},  
+ 	{ 'X' , 12},  
+	{ 'Y' , 12},  
+	{ 'Z' , 10}, 
+
+	// Lowercase
+	{ 'a' ,  9}, 
+	{ 'b' ,  9}, 
+	{ 'c' ,  8}, 
+	{ 'd' ,  9}, 
+	{ 'e' ,  9}, 
+	{ 'f' ,  8}, 
+	{ 'g' ,  9}, 
+	{ 'h' ,  9}, 
+	{ 'i' ,  4}, 
+	{ 'j' ,  5}, 
+	{ 'k' ,  9}, 
+	{ 'l' ,  4}, 
+	{ 'm' , 12}, 
+	{ 'n' ,  9}, 
+	{ 'o' ,  9}, 
+	{ 'p' ,  9}, 
+	{ 'q' ,  9}, 
+	{ 'r' ,  7}, 
+	{ 's' ,  8}, 
+	{ 't' ,  7}, 
+	{ 'u' ,  9}, 
+	{ 'v' , 11}, 
+	{ 'w' , 13}, 
+	{ 'x' , 11}, 
+	{ 'y' ,  9}, 
+	{ 'z' ,  8},
+
+	// Numbers
+	{ '1' ,  7},
+	{ '2' ,  9},
+	{ '3' ,  9},
+	{ '4' ,  9},
+	{ '5' ,  9},
+	{ '6' ,  9},
+	{ '7' ,  9},
+	{ '8' ,  9},
+	{ '9' ,  9},
+	{ '0' ,  9},
+
+	// Special characters
+	{ '!' ,  4},
+	{ '"' ,  8}, 
+	{ '$' ,  9}, 
+	{ '%' , 14}, 
+	{ '&' , 12}, 
+	{ '/' ,  6}, 
+	{ '(' ,  6}, 
+	{ ')' ,  6}, 
+	{ '=' , 10}, 
+	{ '?' , 10}, 
+	{ '+' , 10}, 
+	{ '\'',  4}, 
+	{ '[' ,  6}, 
+	{ ']' ,  6}, 
+	{ '-' ,  6}, 
+	{ '.' ,  4}, 
+	{ ',' ,  4},
+	{ '|' ,  4},
+	{ '_' , 10},
+	{ '#' ,  9},
+	{ '^' , 10},
+	{ '~' , 10},
+	{ ' ' ,  3}
+};
+
+#define MAX_LINES 	(100)
+
+static 
+	centerBuffer[0xF06],
+	centerTitle [0xFA],
+	bool:use = false
+;
+
+stock dcenter_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
+{
+	new defaultSize;
+
+	switch (style)
+	{
+		case DIALOG_STYLE_MSGBOX: 			{ defaultSize = 0xC8; }
+		case DIALOG_STYLE_INPUT: 			{ defaultSize = 0xC8; }
+		case DIALOG_STYLE_LIST: 			{ return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2); } // Still in progress
+		case DIALOG_STYLE_PASSWORD: 		{ defaultSize = 0xC8; }
+		case DIALOG_STYLE_TABLIST: 			{ return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2); } // Still in progress
+		case DIALOG_STYLE_TABLIST_HEADERS: 	{ return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2); } // Still in progress
+		default: 							{ return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2); }
+	}
+
+
+	if (use) return dcenter_ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
+
+	use = true;
+
+	centerBuffer[0] = '\0';
+	centerTitle [0] = '\0';
+
+	new 
+			 lineInfo 	 [MAX_LINES],
+			 lineSize 	 [MAX_LINES],
+			 lineSpace	 [MAX_LINES],
+		bool:lineCenter  [MAX_LINES],
+		bool:titleCenter,
+			 centered,
+			 biggest,
+			 biggestID,
+			 line = 0,
+
+			 // Find centers
+			 cpos = -2,
+			 tpos = -2,
+
+			 // Count lines
+			 pos = -2,
+			 lines = 0
+	;	
+
+
+	while (-1 != ( pos = strfind(info, "\n", false, pos + 2) ) ) lines++;
+
+	if (lines != 0) 
+		lines++;
+
+	if (lines > 0)
+	{
+		// Find positions for new line
+		for (new i = 0, c = 0; i < strlen(info); i++)
+		{
+			if (info[i] == '\n')
+				lineInfo[c++] = i;
+
+			if (i == strlen(info) - 1) lineInfo[c] = strlen(info);
+		}
+
+		for (new i = 0; i < lines; i++)
+		{
+			if (i == 0)	lineSize[i] = lineInfo[i];
+			else if (0 < i < lines) lineSize[i] = (lineInfo[i] - lineInfo[i - 1] - 1);
+		}
+	}
+
+
+	new tmp[3];
+
+	// Center title
+	strmid(tmp, caption, 0, 3);
+	if (strfind(tmp, "\\c", false) != -1)
+		titleCenter = true;
+
+
+	if (lines > 0)
+	{
+		for (new i = 0; i < lines; i++)
+		{
+			
+			if (i == 0)
+			{
+				strmid(tmp, info, 0, 3);
+
+				if (strfind(tmp, "\\c", false) != -1)
+				{
+					lineCenter[i] = true;
+					centered++;
+				}
+			}
+			else 
+			{
+				strmid(tmp, info, (lineInfo[i - 1] + 1), (lineInfo[i - 1] + 4));
+
+				if (strfind(tmp, "\\c", false) != -1)
+				{
+					lineCenter[i] = true;
+					centered++;
+				}
+			}
+		}
+	}
+	else
+	{
+		strmid(tmp, info, 0, 3);
+
+		if (strfind(tmp, "\\c", false) != -1)
+		{
+			lineCenter[0] = true;
+			centered++;
+		}
+	}
+
+
+	format (centerBuffer, sizeof(centerBuffer), "%s", info);
+	format (centerTitle,  sizeof(centerTitle),  "%s", caption);
+
+
+	// Find biggest line
+	if (lines > 0)
+	{
+		for (new i = 0; i < lines; i++)
+		{
+			new t1 = ( (lines > 0) ? ( (i == 0) ? (0) : (lineInfo[i - 1] + 1) ) : (0) );
+			new t2 = ( (lines > 0) ? (lineInfo[i]) : (strlen(info)) );
+			for (new u = t1; u < t2; u++)
+			{
+				if (centerBuffer[u] == '{')
+				{
+					u += 7;
+					continue;
+				}
+
+				for (new j = 0; j < sizeof(letters); j++)
+				{
+					if (centerBuffer[u] == letters[j][0])
+					{
+						lineSpace[i] += letters[j][1];
+						break;
+					}
+				}
+			}
+		}
+
+		biggest = 0;
+		for (new i = 0; i < lines; i++)
+		{
+			if (lineSpace[i] > biggest)
+			{
+				biggest = lineSpace[i];
+				biggestID = i;
+			}
+		}
+	}
+
+
+	// Title
+	if (!titleCenter) goto skip_title;
+
+	new titleSpace;
+
+	for (new i = 0; i < strlen(caption); i++)
+	{
+		if (centerTitle[i] == '{')
+		{
+			i += 7;
+			continue;
+		}
+
+		for (new j = 0; j < sizeof(letters); j++)
+		{
+			if (centerTitle[i] == letters[j][0])
+			{
+				if (centerTitle[i] == ' ') titleSpace += letters[j][1] + 3;
+				else titleSpace += letters[j][1] - 2;
+				break;
+			}
+		}
+	}
+
+	if (titleSpace < defaultSize)
+	{
+		new loop;
+		if (biggest < defaultSize)            loop = ( ( ( (defaultSize - titleSpace) / 4) / 2) + 4) - ( (centered == 0) ? (1) : (0));
+		else 
+		{
+			if 	    (0xC8  < biggest < 0x15E) loop = ( ( ( (biggest - titleSpace) / 4) - 2) / 2) + 3 + ( (centered == 0) ? (1) : (0));
+			else if (0x15E < biggest < 0x17C) loop = ( ( ( (biggest - titleSpace) / 4) - 2) / 2) + 4 + ( (centered == 0) ? (2) : (0));
+			else if (0x17C < biggest < 0x258) loop = ( ( ( (biggest - titleSpace) / 4) - 4) / 2) + 3 + ( (centered == 0) ? (1) : (0));
+			else if (0x258 < biggest < 0x384) loop = ( ( ( (biggest - titleSpace) / 4) - 5) / 2) + 3 + ( (centered == 0) ? (2) : (0));
+			else 	                          loop = ( ( ( (biggest - titleSpace) / 4) - 7) / 2) + 1 + ( (centered == 0) ? (1) : (0));
+		}
+
+		for (new i = 0; i < loop; i++)
+		{
+			strins(centerTitle, " ", i);
+		}
+	}
+
+	skip_title:
+
+	generate_line:
+
+	if (!lineCenter[line])
+		goto generate_fail;
+
+	new space = 0;
+
+
+	for (new i = ( (lines > 0) ? ( (line == 0) ? (0) : (lineInfo[line - 1] + 1) ) : (0) ); i < ( (lines > 0) ? (lineInfo[line]) : (strlen(info)) ); i++)
+	{
+		if (centerBuffer[i] == '{')
+		{
+			i += 7;
+			continue;
+		}
+
+		for (new j = 0; j < sizeof(letters); j++)
+		{
+			if (centerBuffer[i] == letters[j][0])
+			{
+				space += letters[j][1];
+				break;
+			}
+		}
+	}
+
+	if (lines == 0)
+	{ 
+		if (space < defaultSize)
+		{
+			new loop = ( ( (defaultSize - space) / 4) / 2) + 1;
+			new start = ( (lines > 0) ? ( (line == 0) ? (0) : (lineInfo[line - 1] + 1) ) : (0) );
+
+			for (new i = start; i < loop + start; i++)
+			{
+				strins(centerBuffer, " ", i);
+				space += 3;
+
+				for (new j = 0; j < lines; j++)
+					lineInfo[j]++;
+			}
+		}
+		else
+		{
+			strins(centerBuffer, "  ", ( (lines > 0) ? ( (line == 0) ? (0) : (lineInfo[line - 1] + 1) ) : (0) ));
+
+			for (new j = 0; j < lines; j++)
+				lineInfo[j] += 2;
+		}
+	}
+	else if (lines > 0)
+	{
+		new loop = ( ( ( ( (biggest < defaultSize) ? (defaultSize) : (biggest) ) - space) / 4) / 2) - ( ( (biggest < defaultSize) ? (-1) : ( (space < defaultSize) ? ( (lineCenter[biggestID]) ? (4) : (2) ) : (1) ) ) );
+		new start = ( (lines > 0) ? ( (line == 0) ? (0) : (lineInfo[line - 1] + 1) ) : (0) );
+
+		for (new i = start; i < loop + start; i++)
+		{
+			strins(centerBuffer, " ", i);
+			space += 3;
+
+			for (new j = 0; j < lines; j++)
+				lineInfo[j]++;
+		}
+	}
+
+
+	generate_fail:
+	if (lines > 0)
+	{
+		if (line++ < lines - 1)	
+			goto generate_line;
+	}
+
+
+	while (-1 != ( cpos = strfind(centerBuffer, "\\c", false, cpos + 2) ) )
+		strdel(centerBuffer, cpos, cpos + 2);
+
+	while (-1 != ( tpos = strfind(centerTitle, "\\c", false, tpos + 2) ) )
+		strdel(centerTitle, tpos, tpos + 2);
+
+	use = false;
+	return ShowPlayerDialog(playerid, dialogid, style, centerTitle, centerBuffer, button1, button2);
+}
+
+#if defined _ALS_ShowPlayerDialog
+	#undef ShowPlayerDialog
+#else
+	#define _ALS_ShowPlayerDialog
+#endif
+
+#define ShowPlayerDialog dcenter_ShowPlayerDialog

+ 154 - 85
pawno/include/Dini.inc

@@ -1,14 +1,15 @@
 /*
- *            Dini 1.5.1
- *       (c) Copyright 2006 by DracoBlue
+ *            Dini 1.6
+ *       (c) Copyright 2006-2008 by DracoBlue
  *
  * @author    : DracoBlue (http://dracoblue.com)
  * @date      : 13th May 2006
- * @update    : 3rd June 2007
- * @require   : DUtils 1.8
+ * @update    : 16th Sep 2008
  *
  * This file is provided as is (no warranties).
  *
+ * It's released under the terms of MIT.
+ *
  * Feel free to use it, a little message in
  * about box is honouring thing, isn't it?
  *
@@ -19,64 +20,70 @@
 #endif
 
 #define _dini_included
-#pragma library dutils
+#pragma library dini
 
-#include <dutils>
+#if defined MAX_STRING
+#define DINI_MAX_STRING MAX_STRING
+#else
+#define DINI_MAX_STRING 255
+#endif
 
-stock  dini_Exists(filename[]) {
-	if (fexist(filename)) return true;
-	return false;
+stock dini_Exists(filename[]) {
+	return fexist(filename);
 }
 
-stock  dini_Remove(filename[]) {
-	if (!fexist(filename)) return false;
-	fremove(filename);
-	return true;
+stock dini_Remove(filename[]) {
+	return fremove(filename);
 }
 
-stock  dini_Create(filename[]) {
-	new File:fhnd;
+stock dini_Create(filename[]) {
 	if (fexist(filename)) return false;
+	new File:fhnd;
 	fhnd=fopen(filename,io_write);
-	fclose(fhnd);
-	return true;
-}
-
-stock  dini_PRIVATE_ExtractKey(line[]) {
-	new tmp[MAX_STRING];
-	tmp[0]=0;
-	if (strfind(line,"=",true)==-1) return tmp;
-	set(tmp,strlower(ret_memcpy(line,0,strfind(line,"=",true))));
-	return tmp;
-}
-
-stock  dini_PRIVATE_ExtractValue(line[]) {
-    new tmp[MAX_STRING];
-    tmp[0]=0;
-    if (strfind(line,"=",true)==-1) {
-        return tmp;
-    }
-    set(tmp,ret_memcpy(line,strfind(line,"=",true)+1,strlen(line)));
-    return tmp;
+	if (fhnd) {
+		fclose(fhnd);
+		return true;
+	}
+	return false;
 }
 
-stock  dini_Set(filename[],key[],value[]) {
+stock dini_Set(filename[],key[],value[]) {
+	// If we have no key, it can't be set
+	// we also have no chance to set the value, if all together is bigger then the max string
+	new key_length = strlen(key);
+	new value_length = strlen(value);
+	if (key_length==0 || key_length+value_length+2>DINI_MAX_STRING) return false;
+	
 	new File:fohnd, File:fwhnd;
+	new tmpres[DINI_MAX_STRING];
 	new bool:wasset=false;
-	new tmpres[MAX_STRING];
-	if (key[0]==0) return false; /* If we have no sign in key, it can't be set*/
+	
+	// Let's remove the old *.part file if there was one.
 	format(tmpres,sizeof(tmpres),"%s.part",filename);
+	fremove(tmpres);
+	
+	// We'll open the source file.
 	fohnd=fopen(filename,io_read);
 	if (!fohnd) return false;
-	fremove(tmpres);
+	
 	fwhnd=fopen(tmpres,io_write);
-	//  if (!fwhnd) return false;
+	if (!fwhnd) {
+		// we can't open the second file for writing, so .. let's close the open one and exit.
+		fclose(fohnd);
+		return false;
+	}
+	
 	while (fread(fohnd,tmpres)) {
-		StripNewLine(tmpres);
-		if ((!wasset)&&(equal(dini_PRIVATE_ExtractKey(tmpres),key,true))) {
-			/* We've got what needs to be replaced! */
-			format(tmpres,sizeof(tmpres),"%s=%s",key,value);
-			wasset=true;
+		if (
+			!wasset
+			&& tmpres[key_length]=='='
+			&& !strcmp(tmpres, key, true, key_length)	
+		) {
+				// We've got what needs to be replaced!
+				format(tmpres,sizeof(tmpres),"%s=%s",key,value);
+				wasset=true;
+		} else {
+			DINI_StripNewLine(tmpres);
 		}
 		fwrite(fwhnd,tmpres);
 		fwrite(fwhnd,"\r\n");
@@ -92,88 +99,111 @@ stock  dini_Set(filename[],key[],value[]) {
 	fclose(fwhnd);
 
 	format(tmpres,sizeof(tmpres),"%s.part",filename);
-	if (fcopytextfile(tmpres,filename)) {
+	if (DINI_fcopytextfile(tmpres,filename)) {
 		return fremove(tmpres);
 	}
 	return false;
 }
 
 
-stock  dini_IntSet(filename[],key[],value) {
-   new valuestring[MAX_STRING];
-   format(valuestring,sizeof(valuestring),"%d",value);
+stock dini_IntSet(filename[],key[],value) {
+   new valuestring[DINI_MAX_STRING];
+   format(valuestring,DINI_MAX_STRING,"%d",value);
    return dini_Set(filename,key,valuestring);
 }
 
-stock  dini_Int(filename[],key[]) {
+stock dini_Int(filename[],key[]) {
    return strval(dini_Get(filename,key));
 }
 
-stock  dini_FloatSet(filename[],key[],Float:value) {
-   new valuestring[MAX_STRING];
-   format(valuestring,sizeof(valuestring),"%f",value);
+stock dini_FloatSet(filename[],key[],Float:value) {
+   new valuestring[DINI_MAX_STRING];
+   format(valuestring,DINI_MAX_STRING,"%f",value);
    return dini_Set(filename,key,valuestring);
 }
 
-stock  Float:dini_Float(filename[],key[]) {
+stock Float:dini_Float(filename[],key[]) {
    return floatstr(dini_Get(filename,key));
 }
 
-stock  dini_Bool(filename[],key[]) {
+stock dini_Bool(filename[],key[]) {
    return strval(dini_Get(filename,key));
 }
 
-stock  dini_BoolSet(filename[],key[],value) {
-   new valuestring[MAX_STRING];
-   format(valuestring,sizeof(valuestring),"%d",value);
-   return dini_Set(filename,key,valuestring);
+stock dini_BoolSet(filename[],key[],value) {
+	if (value) {
+		return dini_Set(filename,key,"1");
+	}
+	return dini_Set(filename,key,"0");
 }
 
-stock  dini_Unset(filename[],key[]) {
+stock dini_Unset(filename[],key[]) {
+	// If we have no key, it can't be set
+	// we also have no chance to unset the key, if all together is bigger then the max string
+	new key_length = strlen(key);
+	if (key_length==0 || key_length+2>DINI_MAX_STRING) return false;
+	
 	new File:fohnd, File:fwhnd;
-	new tmpres[MAX_STRING];
-	format(tmpres,sizeof(tmpres),"%s.part",filename);
+	new tmpres[DINI_MAX_STRING];
+	
+	// Let's remove the old *.part file if there was one.
+	format(tmpres,DINI_MAX_STRING,"%s.part",filename);
+	fremove(tmpres);
+	
+	// We'll open the source file.
 	fohnd=fopen(filename,io_read);
 	if (!fohnd) return false;
-	fremove(tmpres);
+	
 	fwhnd=fopen(tmpres,io_write);
-	//  if (!fwhnd) return false;
+	if (!fwhnd) {
+		// we can't open the second file for writing, so .. let's close the open one and exit.
+		fclose(fohnd);
+		return false;
+	}
+	
 	while (fread(fohnd,tmpres)) {
-		StripNewLine(tmpres);
-		if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
-			/* We've got what needs to be removed! */
+		if (
+			tmpres[key_length]=='='
+			&& !strcmp(tmpres, key, true, key_length)	
+		) {
+				// We've got what needs to be removed!
 		} else {
-			format(tmpres,sizeof(tmpres),"%s",tmpres);
+			DINI_StripNewLine(tmpres);
 			fwrite(fwhnd,tmpres);
 			fwrite(fwhnd,"\r\n");
 		}
 	}
-
+	
 	fclose(fohnd);
 	fclose(fwhnd);
 
-	format(tmpres,sizeof(tmpres),"%s.part",filename);
-	if (fcopytextfile(tmpres,filename)) {
+	format(tmpres,DINI_MAX_STRING,"%s.part",filename);
+	if (DINI_fcopytextfile(tmpres,filename)) {
 		return fremove(tmpres);
 	}
 	return false;
 }
 
-stock  dini_Get(filename[],key[]) {
+stock dini_Get(filename[],key[]) {
+	new tmpres[DINI_MAX_STRING];
+	
+	new key_length = strlen(key);
+	if (key_length==0 || key_length+2>DINI_MAX_STRING) return tmpres;
+	
 	new File:fohnd;
-	new tmpres[MAX_STRING];
-	new tmpres2[MAX_STRING];
-	tmpres[0]=0;
 	fohnd=fopen(filename,io_read);
 	if (!fohnd) return tmpres;
+	
 	while (fread(fohnd,tmpres)) {
-		StripNewLine(tmpres);
-		if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
+		if (
+			tmpres[key_length]=='='
+			&& !strcmp(tmpres, key, true, key_length)	
+		) {
 			/* We've got what we need */
-			tmpres2[0]=0;
-			strcat(tmpres2,dini_PRIVATE_ExtractValue(tmpres));
+			DINI_StripNewLine(tmpres);
+			strmid(tmpres, tmpres, key_length + 1, strlen(tmpres), DINI_MAX_STRING);
 			fclose(fohnd);
-			return tmpres2;
+			return tmpres;
 		}
 	}
 	fclose(fohnd);
@@ -181,15 +211,21 @@ stock  dini_Get(filename[],key[]) {
 }
 
 
-stock  dini_Isset(filename[],key[]) {
+stock dini_Isset(filename[],key[]) {
+	new key_length = strlen(key);
+	if (key_length==0 || key_length+2>DINI_MAX_STRING) return false;
+	
 	new File:fohnd;
-	new tmpres[MAX_STRING];
 	fohnd=fopen(filename,io_read);
 	if (!fohnd) return false;
+	
+	new tmpres[DINI_MAX_STRING];
 	while (fread(fohnd,tmpres)) {
-		StripNewLine(tmpres);
-		if (equal(dini_PRIVATE_ExtractKey(tmpres),key,true)) {
-			/* We've got what we need */
+		if (
+				tmpres[key_length]=='='
+			&&  !strcmp(tmpres, key, true, key_length)	
+		) {
+			// We've got what we need
 			fclose(fohnd);
 			return true;
 		}
@@ -197,3 +233,36 @@ stock  dini_Isset(filename[],key[]) {
 	fclose(fohnd);
 	return false;
 }
+
+
+
+stock DINI_StripNewLine(string[]) {
+	new len = strlen(string);
+	if (string[0]==0) return ;
+	if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
+		string[len - 1] = 0;
+		if (string[0]==0) return ;
+		if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
+	}
+}
+
+stock DINI_fcopytextfile(oldname[],newname[]) {
+	new File:ohnd,File:nhnd;
+	if (!fexist(oldname)) return false;
+	ohnd=fopen(oldname,io_read);
+	if (!ohnd) return false;
+	nhnd=fopen(newname,io_write);
+	if (!nhnd) {
+		fclose(ohnd);
+		return false;
+	}
+	new tmpres[DINI_MAX_STRING];
+	while (fread(ohnd,tmpres)) {
+		DINI_StripNewLine(tmpres);
+		format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
+		fwrite(nhnd,tmpres);
+	}
+	fclose(ohnd);
+	fclose(nhnd);
+	return true;
+}

+ 3 - 0
pawno/include/DynamicEnums.inc

@@ -0,0 +1,3 @@
+#include <a_samp>
+
+

+ 62 - 0
pawno/include/GPD.inc

@@ -0,0 +1,62 @@
+// GPD.inc
+
+/*
+	native GetPlayerDialog(playerid);
+*/
+
+#if !defined INVALID_DIALOG_ID
+	#define INVALID_DIALOG_ID       (-1)
+#endif
+
+static
+	s_iOpenedDialogID[MAX_PLAYERS];
+	
+stock GetPlayerDialog(playerid)
+{
+	return s_iOpenedDialogID[playerid];
+}
+	
+stock DL_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
+{
+	new
+		ret = ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
+
+	if((dialogid != -1 && style >= 0) && strcmp(caption, " ") != 0 && strcmp(info, " ") != 0)
+	{
+		s_iOpenedDialogID[playerid] = dialogid;
+	}
+
+	return ret;
+}
+
+public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
+{
+	s_iOpenedDialogID[playerid] = -1;
+
+	#if defined DL_OnDialogResponse
+	    return DL_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
+	#else
+	    return 1;
+	#endif
+}
+
+#if defined _ALS_ShowPlayerDialog
+	#undef ShowPlayerDialog
+#else
+	#define _ALS_ShowPlayerDialog
+#endif
+
+#define ShowPlayerDialog DL_ShowPlayerDialog
+
+#if defined _ALS_OnDialogResponse
+	#undef OnDialogResponse
+#else
+	#define _ALS_OnDialogResponse
+#endif
+
+#define OnDialogResponse DL_OnDialogResponse
+
+#if defined DL_OnDialogResponse
+	forward DL_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
+#endif
+

+ 0 - 0
pawno/include/New Text Document.txt


+ 374 - 0
pawno/include/OPA.inc

@@ -0,0 +1,374 @@
+/*
+	OnPlayerAirbreak(playerid);
+
+	This include is one of the only accurate airbreak detecting
+	methods developed in SA-MP.
+
+	I do not guarantee positive results with this include.
+	There could be many false flags.
+
+	Created by Emmet on Wednesday, November 6, 2013.
+	Updated by Kar (bug fixes). Last update: February 12th, 2016.
+*/
+
+#if defined ac_OnPlayerAirbreak
+	#endinput
+#else
+	#define ac_OnPlayerAirbreak
+#endif
+
+// How many times should airbreak be detected before OnPlayerAirbreak is finally called?
+#if !defined MAX_FLAGGED_DETECTIONS
+	#define MAX_FLAGGED_DETECTIONS 	3
+#endif
+
+// Maximum distance a player must travel in less than a second before being flagged for airbreak (onfoot).
+#if !defined ONFOOT_DISTANCE
+	#define ONFOOT_DISTANCE 75.0
+#endif
+
+// Maximum distance a player must travel in less than a second before being flagged for airbreak (driver).
+#if !defined VEHICLE_DISTANCE
+	#define VEHICLE_DISTANCE 50.0
+#endif
+
+static
+	// Last known coordinates of the player.
+	Float:s_AirbreakLastCoords[MAX_PLAYERS][3],
+
+	// Timestamp used to store the next second in a timestamp.
+	s_AirbreakUpdateTick[MAX_PLAYERS],
+
+	// Timestamp containing the next time to check for airbreak.
+	s_AirbreakDetectImmunity[MAX_PLAYERS],
+
+	// Timestamp containing the last detection.
+	s_AirbreakLastDetection[MAX_PLAYERS],
+
+	// Number of detections in the last 60 seconds.
+	s_AirbreakDetections[MAX_PLAYERS]
+;
+
+forward OnPlayerAirbreak(playerid);
+
+static AB_IsVehicleMoving(vehicleid)
+{
+	new
+	    Float:x,
+	    Float:y,
+	    Float:z;
+	    
+	GetVehicleVelocity(vehicleid, x, y, z);
+
+	return (!(floatabs(x) <= 0.001 && floatabs(y) <= 0.001 && floatabs(z) <= 0.005));
+}
+
+static AB_OnAirbreakDetected(playerid)
+{
+	// Called when the player is presumably airbreaking.
+	// If the amount of detections exceeds MAX_FLAGGED_DETECTIONS, they are most likely airbreaking.
+
+	new
+	    timestamp = gettime();
+
+    if((++ s_AirbreakDetections[playerid]) >= MAX_FLAGGED_DETECTIONS && (timestamp - s_AirbreakLastDetection[playerid]) < 60)
+    {
+		CallLocalFunction("OnPlayerAirbreak", "i", playerid);
+	}
+	s_AirbreakLastDetection[playerid] = timestamp;
+}
+
+public OnFilterScriptInit()
+{
+	for(new i = 0; i < MAX_PLAYERS; i ++)
+	{
+		if(IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_ONFOOT)
+		{
+			s_AirbreakDetectImmunity[i] = gettime() + 3;
+			s_AirbreakUpdateTick[i] = gettime();
+		}
+	}
+
+	#if defined AB_OnFilterScriptInit
+	    return AB_OnFilterScriptInit();
+	#else
+	    return 1;
+	#endif
+}
+
+public OnPlayerConnect(playerid)
+{
+    s_AirbreakDetections[playerid] = 0;
+    s_AirbreakLastDetection[playerid] = 0;
+    s_AirbreakDetectImmunity[playerid] = 0;
+    s_AirbreakUpdateTick[playerid] = gettime();
+
+	#if defined AB_OnPlayerConnect
+	    return AB_OnPlayerConnect(playerid);
+	#else
+	    return 1;
+	#endif
+}
+
+public OnPlayerSpawn(playerid)
+{
+    s_AirbreakDetectImmunity[playerid] = gettime() + 3;
+    
+    GetPlayerPos(playerid, s_AirbreakLastCoords[playerid][0], s_AirbreakLastCoords[playerid][1], s_AirbreakLastCoords[playerid][2]);
+
+	#if defined AB_OnPlayerSpawn
+	    return AB_OnPlayerSpawn(playerid);
+	#else
+	    return 1;
+	#endif
+}
+
+public OnPlayerDeath(playerid, killerid, reason)
+{
+    s_AirbreakDetectImmunity[playerid] = gettime() + 3;
+
+	#if defined AB_OnPlayerDeath
+	    return AB_OnPlayerDeath(playerid, killerid, reason);
+	#else
+	    return 1;
+	#endif
+}
+
+public OnPlayerUpdate(playerid)
+{
+	if(!IsPlayerNPC(playerid))
+	{
+		new
+		    vehicleid = GetPlayerVehicleID(playerid),
+			timestamp = gettime(),
+			Float:x,
+			Float:y,
+			Float:z,
+			Float:distance;
+
+		if(timestamp > s_AirbreakUpdateTick[playerid])
+		{
+			if(timestamp > s_AirbreakDetectImmunity[playerid] && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID && GetPlayerSurfingObjectID(playerid) == INVALID_OBJECT_ID && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_ENTER_VEHICLE && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_EXIT_VEHICLE)
+		    {
+				if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
+				{
+			        distance = GetPlayerDistanceFromPoint(playerid, s_AirbreakLastCoords[playerid][0], s_AirbreakLastCoords[playerid][1], s_AirbreakLastCoords[playerid][2]);
+
+				    GetPlayerPos(playerid, x, y, z);
+
+    				if((floatabs(s_AirbreakLastCoords[playerid][2] - z) < 1.0 && floatabs(distance) >= ONFOOT_DISTANCE) && (floatabs(s_AirbreakLastCoords[playerid][1] - y) >= 50.0 || floatabs(s_AirbreakLastCoords[playerid][0] - x) >= 50.0))
+					{
+					    AB_OnAirbreakDetected(playerid);
+					}
+				}
+				else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
+				{
+			        distance = GetVehicleDistanceFromPoint(vehicleid, s_AirbreakLastCoords[playerid][0], s_AirbreakLastCoords[playerid][1], s_AirbreakLastCoords[playerid][2]);
+
+			        GetVehiclePos(vehicleid, x, y, z);
+
+			    	if((!AB_IsVehicleMoving(vehicleid) && floatabs(distance) >= VEHICLE_DISTANCE) && (floatabs(s_AirbreakLastCoords[playerid][1] - y) >= 40.0 || floatabs(s_AirbreakLastCoords[playerid][0] - x) >= 40.0))
+					{
+					    AB_OnAirbreakDetected(playerid);
+				    }
+				}
+			}
+
+			if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
+			{
+			    GetVehiclePos(vehicleid, s_AirbreakLastCoords[playerid][0], s_AirbreakLastCoords[playerid][1], s_AirbreakLastCoords[playerid][2]);
+			}
+			else
+			{
+		        GetPlayerPos(playerid, s_AirbreakLastCoords[playerid][0], s_AirbreakLastCoords[playerid][1], s_AirbreakLastCoords[playerid][2]);
+			}
+
+			s_AirbreakUpdateTick[playerid] = timestamp;
+		}
+	}
+	#if defined AB_OnPlayerUpdate
+	    return AB_OnPlayerUpdate(playerid);
+	#else
+	    return 1;
+	#endif
+}
+
+stock AB_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
+{
+	new
+	    ret = SetSpawnInfo(playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
+
+	if(ret)
+	{
+	    switch(GetPlayerState(playerid))
+		{
+			case PLAYER_STATE_NONE, PLAYER_STATE_WASTED:
+			{
+			    s_AirbreakDetectImmunity[playerid] = gettime() + 3;
+			
+				s_AirbreakLastCoords[playerid][0] = x;
+				s_AirbreakLastCoords[playerid][1] = y;
+				s_AirbreakLastCoords[playerid][2] = z;
+			}
+		}
+	}
+
+	return ret;
+}
+
+stock AB_SetPlayerPos(playerid, Float:x, Float:y, Float:z)
+{
+	new
+	    ret = SetPlayerPos(playerid, x, y, z);
+
+	if(ret)
+	{
+		s_AirbreakDetectImmunity[playerid] = gettime() + 3;
+
+		s_AirbreakLastCoords[playerid][0] = x;
+		s_AirbreakLastCoords[playerid][1] = y;
+		s_AirbreakLastCoords[playerid][2] = z;
+	}
+
+	return ret;
+}
+
+stock AB_SetPlayerPosFindZ(playerid, Float:x, Float:y, Float:z)
+{
+	new
+	    ret = SetPlayerPosFindZ(playerid, x, y, z);
+
+	if(ret)
+	{
+	    s_AirbreakDetectImmunity[playerid] = gettime() + 3;
+
+		s_AirbreakLastCoords[playerid][0] = x;
+		s_AirbreakLastCoords[playerid][1] = y;
+		s_AirbreakLastCoords[playerid][2] = z;
+	}
+
+	return ret;
+}
+
+stock AB_PutPlayerInVehicle(playerid, vehicleid, seatid)
+{
+    new
+		ret = PutPlayerInVehicle(playerid, vehicleid, seatid);
+
+	if(ret)
+	{
+		s_AirbreakDetectImmunity[playerid] = gettime() + 3;
+	}
+
+	return ret;
+}
+
+stock AB_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z)
+{
+	for(new i = 0; i < MAX_PLAYERS; i ++)
+	{
+	    if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i, vehicleid))
+	    {
+			s_AirbreakDetectImmunity[i] = gettime() + 3;
+
+			s_AirbreakLastCoords[i][0] = x;
+			s_AirbreakLastCoords[i][1] = y;
+			s_AirbreakLastCoords[i][2] = z;
+
+			break;
+		}
+	}
+	return SetVehiclePos(vehicleid, x, y, z);
+}
+
+#if defined _ALS_OnPlayerConnect
+	#undef OnPlayerConnect
+#else
+	#define _ALS_OnPlayerConnect
+#endif
+
+#if defined _ALS_OnPlayerSpawn
+	#undef OnPlayerSpawn
+ #else
+	#define _ALS_OnPlayerSpawn
+#endif
+
+#if defined _ALS_OnPlayerDeath
+	#undef OnPlayerDeath
+#else
+	#define _ALS_OnPlayerDeath
+#endif
+
+#if defined _ALS_OnPlayerUpdate
+	#undef OnPlayerUpdate
+#else
+	#define _ALS_OnPlayerUpdate
+#endif
+
+#if defined _ALS_OnFilterScriptInit
+	#undef OnFilterScriptInit
+#else
+	#define _ALS_OnFilterScriptInit
+#endif
+
+#if defined _ALS_SetSpawnInfo
+	#undef SetSpawnInfo
+#else
+	#define _ALS_SetSpawnInfo
+#endif
+
+#if defined _ALS_SetPlayerPos
+	#undef SetPlayerPos
+#else
+	#define _ALS_SetPlayerPos
+#endif
+
+#if defined _ALS_SetVehiclePos
+	#undef SetVehiclePos
+#else
+	#define _ALS_SetVehiclePos
+#endif
+
+#if defined _ALS_SetPlayerPosFindZ
+	#undef SetPlayerPosFindZ
+#else
+	#define _ALS_SetPlayerPosFindZ
+#endif
+
+#if defined _ALS_PutPlayerInVehicle
+	#undef PutPlayerInVehicle
+#else
+	#define _ALS_PutPlayerInVehicle
+#endif
+
+#define OnPlayerConnect 	AB_OnPlayerConnect
+#define OnPlayerSpawn 		AB_OnPlayerSpawn
+#define OnPlayerDeath 		AB_OnPlayerDeath
+#define OnPlayerUpdate 		AB_OnPlayerUpdate
+#define OnFilterScriptInit  AB_OnFilterScriptInit
+
+#define SetSpawnInfo        AB_SetSpawnInfo
+#define SetPlayerPos        AB_SetPlayerPos
+#define SetPlayerPosFindZ   AB_SetPlayerPosFindZ
+#define PutPlayerInVehicle  AB_PutPlayerInVehicle
+#define SetVehiclePos       AB_SetVehiclePos
+
+#if defined AB_OnFilterScriptInit
+	forward AB_OnFilterScriptInit();
+#endif
+
+#if defined AB_OnPlayerConnect
+	forward AB_OnPlayerConnect(playerid);
+#endif
+
+#if defined AB_OnPlayerSpawn
+	forward AB_OnPlayerSpawn(playerid);
+#endif
+
+#if defined AB_OnPlayerUpdate
+	forward AB_OnPlayerUpdate(playerid);
+#endif
+
+#if defined AB_OnPlayerDeath
+	forward AB_OnPlayerDeath(playerid, killerid, reason);
+#endif

+ 121 - 0
pawno/include/OPJV.inc

@@ -0,0 +1,121 @@
+/*
+	OPJV - OnPlayerJackVehicle by Gamer931215
+	Inspired by OnPlayerShootPlayer and OnPlayerDamageVehicle by Wups
+
+	Free to use/distribute as long you keep these credits on top!
+*/
+
+#include <a_samp>
+
+#if defined OPJV_INC
+	#endinput
+#endif
+#define OPJV_INC
+#define HOLDING(%0) \
+    ((newkeys & (%0)) == (%0))
+#define RELEASED(%0) \
+    (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
+#define PRESSED(%0) \
+    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
+#tryinclude <foreach>
+
+#if !defined foreach
+    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
+    #define __SSCANF_FOREACH__
+#endif
+
+enum _pInfo
+{
+	bool:IsPlayerHoldingNinjaKeys,
+	PlayerJackingPlayerid
+}
+new JackDetails[MAX_PLAYERS][_pInfo];
+forward OnPlayerJackVehicle(playerid,victimid,vehicleid,bool:ninjajack);
+forward OnPlayerGotJacked(playerid,jackerid,vehicleid);
+
+public OnPlayerConnect(playerid)
+{
+	JackDetails[playerid][PlayerJackingPlayerid] = -1;
+	JackDetails[playerid][IsPlayerHoldingNinjaKeys] = false;
+	return CallLocalFunction("OPJV_OnPlayerConnect","i",playerid);
+}
+#if defined _ALS_OnPlayerConnect
+	#undef OnPlayerConnect
+#else
+	#define _ALS_OnPlayerConnect
+#endif
+#define OnPlayerConnect OPJV_OnPlayerConnect
+forward OPJV_OnPlayerConnect(playerid);
+
+public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
+{
+	if(!ispassenger)
+	{
+	    foreach(Player,i)
+		{
+		    if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i)) continue;
+			if(playerid != i && GetPlayerVehicleID(i) == vehicleid && GetPlayerState(i) == PLAYER_STATE_DRIVER)
+			{
+			    JackDetails[i][PlayerJackingPlayerid] = playerid;
+				CallLocalFunction("OnPlayerJackVehicle","iiib",playerid,i,vehicleid,JackDetails[playerid][IsPlayerHoldingNinjaKeys]);
+				SetTimerEx("OPJV_ResetPlayerJack",15000,false,"i",i);
+			}
+		}
+	}
+	return CallLocalFunction("OPJV_OnPlayerEnterVehicle","iii",playerid,vehicleid,ispassenger);
+}
+#if defined _ALS_OnPlayerEnterVehicle
+	#undef OnPlayerEnterVehicle
+#else
+	#define _ALS_OnPlayerEnterVehicle
+#endif
+#define OnPlayerEnterVehicle OPJV_OnPlayerEnterVehicle
+forward OPJV_OnPlayerEnterVehicle(playerid,vehicleid,ispassenger);
+
+public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
+{
+    if (HOLDING(KEY_SPRINT) || PRESSED(KEY_SPRINT) || RELEASED(KEY_SPRINT))
+    {
+        if(JackDetails[playerid][IsPlayerHoldingNinjaKeys] == false)
+        {
+            JackDetails[playerid][IsPlayerHoldingNinjaKeys] = true;
+            SetTimerEx("OPJV_ResetPlayerKeys",2000,false,"i",playerid);
+        }
+    }
+    return CallLocalFunction("OPJV_OnPlayerKeyStateChange","iii",playerid,newkeys,oldkeys);
+}
+#if defined _ALS_OnPlayerKeyStateChange
+	#undef OnPlayerKeyStateChange
+#else
+	#define _ALS_OnPlayerKeyStateChange
+#endif
+#define OnPlayerKeyStateChange OPJV_OnPlayerKeyStateChange
+forward OPJV_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
+
+public OnPlayerStateChange(playerid,newstate,oldstate)
+{
+	if(oldstate == PLAYER_STATE_DRIVER && JackDetails[playerid][PlayerJackingPlayerid] > -1 && GetPlayerVehicleID(JackDetails[playerid][PlayerJackingPlayerid]) == GetPlayerVehicleID(playerid))
+	{
+	    CallLocalFunction("OnPlayerGotJacked","iii",playerid,JackDetails[playerid][PlayerJackingPlayerid],GetPlayerVehicleID(playerid));
+	}
+	return CallLocalFunction("OPJV_OnPlayerStateChange","iii",playerid,newstate,oldstate);
+}
+#if defined _ALS_OnPlayerStateChange
+	#undef OnPlayerStateChange
+#else
+	#define _ALS_OnPlayerStateChange
+#endif
+#define OnPlayerStateChange OPJV_OnPlayerStateChange
+forward OPJV_OnPlayerStateChange(playerid,newstate,oldstate);
+
+forward OPJV_ResetPlayerJack(playerid);
+public OPJV_ResetPlayerJack(playerid)
+{
+    JackDetails[playerid][PlayerJackingPlayerid] = -1;
+}
+
+forward OPJV_ResetPlayerKeys(playerid);
+public OPJV_ResetPlayerKeys(playerid)
+{
+    JackDetails[playerid][IsPlayerHoldingNinjaKeys] = false;
+}

+ 169 - 49
pawno/include/OPSP.inc

@@ -1,7 +1,8 @@
 /********************************************
- * OnPlayerShootPlayer! V5.0	            *
- * Credits: wups,			    *
- * Double-O-Seven for his HS functions      *
+ * OnPlayerShootPlayer! V8.3	            *
+ * Credits: wups			  				*
+ * Double-O-Seven for CrossProduct system   *
+ * Nero3D for GetPlayerCameraWeaponVector   *
  ********************************************/
 
 // include
@@ -18,9 +19,6 @@
 	#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
 	#define __SSCANF_FOREACH__
 #endif
-#if defined FILTERSCRIPT
-	#error "OnPlayerShootPlayer ERROR: You must include it in your game mode, not in your filterscript!"
-#endif
 #if !defined PRESSED
 	#define PRESSED(%0) \
 		(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
@@ -30,7 +28,7 @@
 		(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
 #endif
 // variables
-static
+static 		
 		Float:RL_phealth[MAX_PLAYERS],
 		Float:RL_parmour[MAX_PLAYERS],
 		bool:RL_Shooting[MAX_PLAYERS],
@@ -43,19 +41,134 @@ static
 // forwards
 forward OnPlayerShootPlayer(Shooter,Target,Float:HealthLost,Float:ArmourLost);
 
+
+/*--------------------------------------------------------------------------------------------------
+	Function:
+		AdjustVector
+	Params:
+		& Float: vX - x Vector to adjust
+		& Float: vY - y Vector to adjust
+		& Float: vZ - z Vector to adjust
+		Float: oX - x Offset Vector
+		Float: oY - y Offset Vector
+		const Float: oZ - z Offset Vector
+	Return:
+		-
+	Notes:
+		Adjust the vector with the offset
+--------------------------------------------------------------------------------------------------*/
+
+stock AdjustVector(& Float: vX, & Float: vY, & Float: vZ, Float: oX, Float: oY, const Float: oZ) { // Credits Nero_3D
+	static
+		Float: Angle;
+	Angle = -atan2(vX, vY);
+	if(45.0 < Angle) {
+		oX ^= oY;
+		oY ^= oX;
+		oX ^= oY;
+		if(90.0 < Angle) {
+			oX *= -1;
+			if(135.0 < Angle) {
+				oX *= -1;
+				oX ^= oY;
+				oY ^= oX;
+				oX ^= oY;
+				oX *= -1;
+			}
+		}
+	} else if(Angle < 0.0) {
+		oY *= -1;
+		if(Angle < -45.0) {
+			oX *= -1;
+			oX ^= oY;
+			oY ^= oX;
+			oX ^= oY;
+			oX *= -1;
+			if(Angle < -90.0) {
+				oX *= -1;
+				if(Angle < -135.0) {
+					oX ^= oY;
+					oY ^= oX;
+					oX ^= oY;
+				}
+			}
+		}
+	}
+	vX += oX,
+	vY += oY;
+	vZ += oZ;
+	return false;
+}
+/*--------------------------------------------------------------------------------------------------
+	Function:
+		GetPlayerCameraWeaponVector
+	Params:
+		playerid - Player to get the weapon vector of
+		& Float: vX - x Vector variable
+		& Float: vY - y Vector variable
+		& Float: vZ - z Vector variable
+	Return:
+		If the player is connected
+	Notes:
+		Gets the weapon vector of the player
+
+native GetPlayerCameraWeaponVector(playerid, & Float: vX, & Float: vY, & Float: vZ);
+--------------------------------------------------------------------------------------------------*/
+stock GetPlayerCameraWeaponVector(playerid, & Float: vX, & Float: vY, & Float: vZ) { // Credits Nero_3D
+	static
+		weapon;
+	if(21 < (weapon = GetPlayerWeapon(playerid)) < 39) {
+		GetPlayerCameraFrontVector(playerid, vX, vY, vZ);
+		switch(weapon) {
+			case WEAPON_SNIPER, WEAPON_ROCKETLAUNCHER, WEAPON_HEATSEEKER: {}
+			case WEAPON_RIFLE: {
+				AdjustVector(vX, vY, vZ, 0.016204, 0.009899, 0.047177);
+			}
+			case WEAPON_AK47, WEAPON_M4: {
+				AdjustVector(vX, vY, vZ, 0.026461, 0.013070, 0.069079);
+			}
+			default: {
+				AdjustVector(vX, vY, vZ, 0.043949, 0.015922, 0.103412);
+			}
+		}
+		return true;
+	}
+	else
+		GetPlayerCameraFrontVector(playerid, vX, vY, vZ);
+	return false;
+}
+stock crossp(Float:v1x, Float:v1y, Float:v1z, Float:v2x, Float:v2y, Float:v2z, &Float:output)
+{
+	new
+		Float:c1 = (v1y * v2z) - (v1z * v2y),
+		Float:c2 = (v1z * v2x) - (v1x * v2z),
+		Float:c3 = (v1x * v2y) - (v1y * v2x);
+	output = floatsqroot ((c1 * c1) + (c2 * c2) + (c3 * c3));
+	return 0;
+}
+stock GetDistanceFromPointToLine(&Float:distance, Float:line_vector_x, Float:line_vector_y, Float:line_vector_z, Float:line_x, Float:line_y, Float:line_z, Float:point_x, Float:point_y, Float:point_z)
+{
+	//A line is defined by a point (which is on the line (line_x/y/z)) and a vector which defines the direction (line_vector_x/y/z).
+	static Float:output;
+	crossp(line_vector_x, line_vector_y, line_vector_z, point_x - line_x, point_y - line_y, point_z - line_z, output);//Cross product of 2 vectors.
+	distance = output / floatsqroot ((line_vector_x * line_vector_x) + (line_vector_y * line_vector_y) + (line_vector_z * line_vector_z));
+	return 0;
+}
+
+
 public OnPlayerUpdate(playerid)
 {
 	static  Float:RL_HP,
 			Float:RL_Armour;
 	GetPlayerHealth(playerid,RL_HP);
 	GetPlayerArmour(playerid,RL_Armour);
-	if(RL_HP < RL_phealth[playerid] || RL_Armour < RL_parmour[playerid])
+	if(RL_HP != RL_phealth[playerid] || RL_Armour != RL_parmour[playerid])
 	{
 		if(RL_UpdatedHealth[playerid])
 			RL_UpdatedHealth[playerid]=false;
 		else
 		{
-			static
+			new 
 					Float:RL_PlayerPos[3],
 					Float:RL_Distance,
 					Float:RL_CameraPos[3],
@@ -70,10 +183,11 @@ public OnPlayerUpdate(playerid)
 				{
 					if(i != playerid)
 					{
-						GetPlayerCameraFrontVector(i, RL_CameraVectors[0], RL_CameraVectors[1], RL_CameraVectors[2]);
-						GetPlayerCameraPos(i, RL_CameraPos[0], RL_CameraPos[1], RL_CameraPos[2]);
 						if(IsPlayerInRangeOfPoint(i,200.0,RL_PlayerPos[0], RL_PlayerPos[1], RL_PlayerPos[2]))
 						{
+							GetPlayerCameraWeaponVector(i, RL_CameraVectors[0], RL_CameraVectors[1], RL_CameraVectors[2]);
+							
+							GetPlayerCameraPos(i, RL_CameraPos[0], RL_CameraPos[1], RL_CameraPos[2]);
 							GetDistanceFromPointToLine(RL_Distance, RL_CameraVectors[0], RL_CameraVectors[1], RL_CameraVectors[2], RL_CameraPos[0], RL_CameraPos[1], RL_CameraPos[2], RL_PlayerPos[0], RL_PlayerPos[1], RL_PlayerPos[2]);
 							if(RL_Distance < 2.5)
 							{
@@ -91,28 +205,11 @@ public OnPlayerUpdate(playerid)
 	return (RL_OPUP)?CallLocalFunction("RL_OnPlayerUpdate","i",playerid):1;
 }
 // Functions
-stock crossp(Float:v1x, Float:v1y, Float:v1z, Float:v2x, Float:v2y, Float:v2z, &Float:output)
-{
-	new
-		Float:c1 = (v1y * v2z) - (v1z * v2y),
-		Float:c2 = (v1z * v2x) - (v1x * v2z),
-		Float:c3 = (v1x * v2y) - (v1y * v2x);
-	output = floatsqroot ((c1 * c1) + (c2 * c2) + (c3 * c3));
-	return 0;
-}
 
-stock GetDistanceFromPointToLine(&Float:distance, Float:line_vector_x, Float:line_vector_y, Float:line_vector_z, Float:line_x, Float:line_y, Float:line_z, Float:point_x, Float:point_y, Float:point_z)
-{
-	//A line is defined by a point (which is on the line (line_x/y/z)) and a vector which defines the direction (line_vector_x/y/z).
-	static Float:output;
-	crossp(line_vector_x, line_vector_y, line_vector_z, point_x - line_x, point_y - line_y, point_z - line_z, output);//Cross product of 2 vectors.
-	distance = output / floatsqroot ((line_vector_x * line_vector_x) + (line_vector_y * line_vector_y) + (line_vector_z * line_vector_z));
-	return 0;
-}
 // SetPlayerHealth
 stock SetPlayerHealthEx(playerid, Float:health)
 {
-	RL_phealth[playerid]=health;
+//	RL_phealth[playerid]=health;
 	RL_UpdatedHealth[playerid]=true;
 	return SetPlayerHealth(playerid, health);
 }
@@ -122,7 +219,7 @@ stock SetPlayerHealthEx(playerid, Float:health)
 // SetPlayerArmour
 stock SetPlayerArmourEx(playerid, Float:armour)
 {
-	RL_parmour[playerid]=armour;
+//	RL_parmour[playerid]=armour;
 	RL_UpdatedHealth[playerid]=true;
 	return SetPlayerArmour(playerid, armour);
 }
@@ -166,7 +263,7 @@ public OnPlayerStateChange(playerid, newstate, oldstate)
 			RL_UpdatedHealth[playerid]=false;
 		else
 		{
-			static
+			new
 					Float:RL_PlayerPos[3],
 					Float:RL_Distance,
 					Float:RL_CameraPos[3],
@@ -175,6 +272,8 @@ public OnPlayerStateChange(playerid, newstate, oldstate)
 					Float:RL_HP,
 					Float:RL_Armour
 					;
+			GetPlayerHealth(playerid,RL_HP);
+			GetPlayerArmour(playerid,RL_Armour);
 			RL_Tick = (GetTickCount()-1000);
 			GetPlayerPos(playerid, RL_PlayerPos[0], RL_PlayerPos[1], RL_PlayerPos[2]);
 			foreach(Player,i)
@@ -183,7 +282,7 @@ public OnPlayerStateChange(playerid, newstate, oldstate)
 				{
 					if(i != playerid)
 					{
-						GetPlayerCameraFrontVector(i, RL_CameraVectors[0], RL_CameraVectors[1], RL_CameraVectors[2]);
+						GetPlayerCameraWeaponVector(i, RL_CameraVectors[0], RL_CameraVectors[1], RL_CameraVectors[2]);
 						GetPlayerCameraPos(i, RL_CameraPos[0], RL_CameraPos[1], RL_CameraPos[2]);
 						if(IsPlayerInRangeOfPoint(i,200.0,RL_PlayerPos[0], RL_PlayerPos[1], RL_PlayerPos[2]))
 						{
@@ -198,7 +297,7 @@ public OnPlayerStateChange(playerid, newstate, oldstate)
 				}
 			}
 		}
-
+		
 	}
 	RL_Shooting[playerid]=false;
 	RL_Released[playerid]=GetTickCount();
@@ -213,6 +312,7 @@ public OnPlayerStateChange(playerid, newstate, oldstate)
 
 forward RL_OnPlayerStateChange(playerid,newstate, oldstate);
 
+
 // OnPlayerConnect
 public OnPlayerConnect(playerid)
 {
@@ -229,21 +329,41 @@ public OnPlayerConnect(playerid)
 #define OnPlayerConnect RL_OnPlayerConnect
 
 forward RL_OnPlayerConnect(playerid);
-
-// OnGameModeInit
-public OnGameModeInit()
-{
-	RL_OPUP = (funcidx("RL_OnPlayerUpdate") != -1);
-	RL_OPSC = (funcidx("RL_OnPlayerStateChange") != -1);
-	RL_OPKSC = (funcidx("RL_OnPlayerKeyStateChange") != -1);
-	RL_OPC = (funcidx("RL_OnPlayerConnect") != -1);
-	return (funcidx("RL_OnGameModeInit") != -1)?CallLocalFunction("RL_OnGameModeInit",""):1;
-}
-#if defined _ALS_OnGameModeInit
-	#undef OnGameModeInit
+#if !defined FILTERSCRIPT
+	// OnGameModeInit
+	public OnGameModeInit()
+	{
+		RL_OPUP = (funcidx("RL_OnPlayerUpdate") != -1);
+		RL_OPSC = (funcidx("RL_OnPlayerStateChange") != -1);
+		RL_OPKSC = (funcidx("RL_OnPlayerKeyStateChange") != -1);
+		RL_OPC = (funcidx("RL_OnPlayerConnect") != -1);
+		return (funcidx("RL_OnGameModeInit") != -1)?CallLocalFunction("RL_OnGameModeInit",""):1;
+	}
+	#if defined _ALS_OnGameModeInit
+		#undef OnGameModeInit
+	#else
+		#define _ALS_OnGameModeInit
+	#endif
+	#define OnGameModeInit RL_OnGameModeInit
+	forward RL_OnGameModeInit();
 #else
-	#define _ALS_OnGameModeInit
+	// OnFilterScriptInit
+	public OnFilterScriptInit()
+	{
+		RL_OPUP = (funcidx("RL_OnPlayerUpdate") != -1);
+		RL_OPSC = (funcidx("RL_OnPlayerStateChange") != -1);
+		RL_OPKSC = (funcidx("RL_OnPlayerKeyStateChange") != -1);
+		RL_OPC = (funcidx("RL_OnPlayerConnect") != -1);
+		return (funcidx("RL_OnFilterScriptInit") != -1)?CallLocalFunction("RL_OnFilterScriptInit",""):1;
+	}
+	#if defined _ALS_OnFilterScriptInit
+		#undef OnFilterScriptInit
+	#else
+		#define _ALS_OnFilterScriptInit
+	#endif
+	#define OnFilterScriptInit RL_OnFilterScriptInit. 
+	forward RL_OnFilterScriptInit();
 #endif
-#define OnGameModeInit RL_OnGameModeInit
-forward RL_OnGameModeInit();
-// The end.
+
+
+// The end.

+ 143 - 0
pawno/include/Pawn.CMD.inc

@@ -0,0 +1,143 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016-2020 urShadow
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#if !defined PAWNCMD_INC_
+    #define PAWNCMD_INC_
+
+    #define PAWNCMD_VERSION 333
+    #define PAWNCMD_INCLUDE_VERSION PAWNCMD_VERSION // backward compatibility
+
+    #if !defined __cplusplus
+        public _pawncmd_version = PAWNCMD_VERSION;
+        #pragma unused _pawncmd_version
+
+        public bool:_pawncmd_is_gamemode = !defined FILTERSCRIPT;
+        #pragma unused _pawncmd_is_gamemode
+
+        native PC_Init(); // internal
+
+        native PC_RegAlias(const cmd[], const alias[], ...);
+        native PC_SetFlags(const cmd[], flags);
+        native PC_GetFlags(const cmd[]);
+        native PC_RenameCommand(const cmd[], const newname[]);
+        native PC_CommandExists(const cmd[]);
+        native PC_DeleteCommand(const cmd[]);
+
+        native CmdArray:PC_GetCommandArray();
+        native CmdArray:PC_GetAliasArray(const cmd[]);
+        native PC_GetArraySize(CmdArray:arr);
+        native PC_GetCommandName(CmdArray:arr, index, dest[], size = sizeof dest);
+        native PC_FreeArray(&CmdArray:arr);
+
+        native PC_EmulateCommand(playerid, const cmdtext[]);
+
+        #if defined PC_OnInit
+            forward PC_OnInit();
+        #endif
+
+        #if defined OnPlayerCommandReceived
+            forward OnPlayerCommandReceived(playerid, cmd[], params[], flags);
+        #endif
+
+        #if defined OnPlayerCommandPerformed
+            forward OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags);
+        #endif
+
+        #define cmd:%0(%1) \
+            forward pc_cmd_%0(%1); \
+            public pc_cmd_%0(%1)
+
+        #define alias:%0(%1) \
+            forward pc_alias_%0(); \
+            public pc_alias_%0() \
+                PC_RegAlias(#%0, %1);
+
+        #define flags:%0(%1) \
+            forward pc_flags_%0(); \
+            public pc_flags_%0() \
+                PC_SetFlags(#%0, %1);
+
+        #define CMD cmd
+        #define COMMAND cmd
+
+        #define callcmd::%0(%1) \
+            pc_cmd_%0(%1)
+
+        #define PC_HasFlag(%0,%1) \
+            (PC_GetFlags(%0) & %1)
+
+        #if !defined isnull
+            #define isnull(%0) \
+                ((!(%0[0])) || (((%0[0]) == '\1') && (!(%0[1]))))
+        #endif
+
+        #if defined FILTERSCRIPT
+            public OnFilterScriptInit()
+            {
+                PC_Init();
+
+                #if defined PawnCmd_OnFilterScriptInit
+                    PawnCmd_OnFilterScriptInit();
+                #endif
+
+                return 1;
+            }
+
+            #if defined _ALS_OnFilterScriptInit
+                #undef OnFilterScriptInit
+            #else
+                #define _ALS_OnFilterScriptInit
+            #endif
+
+            #define OnFilterScriptInit PawnCmd_OnFilterScriptInit
+
+            #if defined PawnCmd_OnFilterScriptInit
+                forward PawnCmd_OnFilterScriptInit();
+            #endif
+        #else
+            public OnGameModeInit()
+            {
+                PC_Init();
+
+                #if defined PawnCmd_OnGameModeInit
+                    PawnCmd_OnGameModeInit();
+                #endif
+
+                return 1;
+            }
+
+            #if defined _ALS_OnGameModeInit
+                #undef OnGameModeInit
+            #else
+                #define _ALS_OnGameModeInit
+            #endif
+
+            #define OnGameModeInit PawnCmd_OnGameModeInit
+
+            #if defined PawnCmd_OnGameModeInit
+                forward PawnCmd_OnGameModeInit();
+            #endif
+        #endif
+    #endif // !__cplusplus
+#endif // !PAWNCMD_INC_

+ 65 - 0
pawno/include/PlayerToPlayer.inc

@@ -0,0 +1,65 @@
+#include <a_samp>
+#include <a_players>
+
+
+stock SetPlayerFacePlayer(playerid, faceplayerid)
+{
+    new Float:Px, Float:Py, Float: Pa;
+    GetPlayerPos(playerid, Px, Py, Pa);
+    new Float:fpX, Float:fpY, Float: fpZ;
+    GetPlayerPos(faceplayerid, fpX, fpY, fpZ);
+    Pa = floatabs(atan((fpY-Py)/(fpX-Px)));
+    if(fpX <= Px && fpY >= Py) Pa = floatsub(180, Pa);
+    else if(fpX < Px && fpY < Py) Pa = floatadd(Pa, 180);
+    else if(fpX >= Px && fpY <= Py) Pa = floatsub(360.0, Pa);
+    Pa = floatsub(Pa, 90.0);
+    if(Pa >= 360.0) Pa = floatsub(Pa, 360.0);
+    if(!IsPlayerInAnyVehicle(playerid)) SetPlayerFacingAngle(playerid, Pa);
+    else SetVehicleZAngle(GetPlayerVehicleID(playerid), Pa);
+}
+
+new Float:_IPLAP[13];
+stock IsPlayerLookingAtPlayer(playerid,playerid2)
+{
+	GetPlayerPos(playerid,_IPLAP[0],_IPLAP[1],_IPLAP[2]);
+
+	GetPlayerCameraUpVector(playerid,_IPLAP[3],_IPLAP[4],_IPLAP[5]);
+	_IPLAP[0]+=_IPLAP[3];
+	_IPLAP[1]+=_IPLAP[4];
+	_IPLAP[2]+=_IPLAP[5];
+
+	GetPlayerCameraFrontVector(playerid,_IPLAP[6],_IPLAP[7],_IPLAP[8]);
+
+	GetPlayerPos(playerid2,_IPLAP[9],_IPLAP[10],_IPLAP[11]);
+
+	_IPLAP[12]=floatsqroot( ((_IPLAP[9]-_IPLAP[0])*(_IPLAP[9]-_IPLAP[0])) + ((_IPLAP[10]-_IPLAP[1])*(_IPLAP[10]-_IPLAP[1])) + ((_IPLAP[11]-_IPLAP[2])*(_IPLAP[11]-_IPLAP[2])) );
+
+	_IPLAP[0]=_IPLAP[6]*_IPLAP[12]+_IPLAP[0];
+	_IPLAP[1]=_IPLAP[7]*_IPLAP[12]+_IPLAP[1];
+	_IPLAP[2]=_IPLAP[8]*_IPLAP[12]+_IPLAP[2];
+
+	if( (_IPLAP[0]>(_IPLAP[9]-0.25)) && (_IPLAP[0]<(_IPLAP[9]+0.25)) && (_IPLAP[1]>(_IPLAP[10]-0.25)) && (_IPLAP[1]<(_IPLAP[10]+0.25)) && (_IPLAP[2]>(_IPLAP[11])) && (_IPLAP[2]<(_IPLAP[11]+2.0)) ) return 1;
+	return 0;
+}
+stock IsPlayerLookingAtPoint(playerid,Float:X,Float:Y,Float:Z)
+{
+	GetPlayerPos(playerid,_IPLAP[0],_IPLAP[1],_IPLAP[2]);
+
+	GetPlayerCameraUpVector(playerid,_IPLAP[3],_IPLAP[4],_IPLAP[5]);
+	_IPLAP[0]+=_IPLAP[3];
+	_IPLAP[1]+=_IPLAP[4];
+	_IPLAP[2]+=_IPLAP[5];
+
+	GetPlayerCameraFrontVector(playerid,_IPLAP[6],_IPLAP[7],_IPLAP[8]);
+
+	GetPlayerPos(playerid2,_IPLAP[9],_IPLAP[10],_IPLAP[11]);
+
+	_IPLAP[12]=floatsqroot( ((X-_IPLAP[0])*(X-_IPLAP[0])) + ((Y-_IPLAP[1])*(Y-_IPLAP[1])) + ((Z-_IPLAP[2])*(Z-_IPLAP[2])) );
+
+	_IPLAP[0]=_IPLAP[6]*_IPLAP[12]+_IPLAP[0];
+	_IPLAP[1]=_IPLAP[7]*_IPLAP[12]+_IPLAP[1];
+	_IPLAP[2]=_IPLAP[8]*_IPLAP[12]+_IPLAP[2];
+
+	if( (_IPLAP[0]>(X-0.25)) && (_IPLAP[0]<(X+0.25)) && (_IPLAP[1]>(Y-0.25)) && (_IPLAP[1]<(Y+0.25)) && (_IPLAP[2]>(Z)) && (_IPLAP[2]<(Z+2.0)) ) return 1;
+	return 0;
+}

+ 975 - 0
pawno/include/S32_Business.inc

@@ -0,0 +1,975 @@
+/*
+ * S32_Business - Create business with just one line (MySQL)!
+ * Copyright(c)System32
+ * This file is provided as is (no warranties)
+ 
+ 
+ * How I made a house system I need business to!
+ * Functions: 21
+ * Commands: 5
+ * Callbacks: 2
+ * Credits:
+     * System32 - Almost everything!
+     * The Guy - Helped me a lot, thank you!
+     * Y_Less - y_hooks, y_commands, sscanf & foreach!
+     * G-Stylezz (BlueG) - MySQL plugin!
+ * That is basically it, have fun with this include and easy scripting!
+ */
+ 
+#if !defined _inc_a_samp
+	#include <a_samp>
+#endif
+#if !defined _inc_a_mysql
+	#include <a_mysql>
+#endif
+#if !defined _inc_foreach
+	#include <foreach>
+#endif
+#include <YSI\y_hooks>
+#include <YSI\y_commands>
+
+#define MAX_BUSINESS 150
+#define business_version "v1.0.0"
+#define BUSINES_PAYMENT 1000
+#if !defined MAX_BUSINESS
+	#error Please define the max business (#define MAX_BUSINESS)
+#endif
+
+
+#define COLOR_LIME                                              0x10F441AA
+#define COLOR_KRED                                              0xFF0000FF
+#define COLOR_YELLOW                                            0xFFFF00AA
+
+enum bInfo
+{
+	bOwner[24],
+	Float: bEnterX,
+	Float: bEnterY,
+	Float: bEnterZ,
+	Float: bExitX,
+	Float: bExitY,
+	Float: bExitZ,
+	bInterior,
+	bPrice,
+	bVirtualWorld,
+	bOwned,
+	bLocked,
+	bMoney,
+	Text3D: bLabel,
+	bPickup
+};
+new BusinessInfo[MAX_BUSINESS][bInfo];
+
+new Iterator:Business<MAX_BUSINESS>, bstring[128], BQuery[1000], BusinessID, bsavingstring[500], PaymentTimer;
+new bool: PlayerEnteredHisBusiness[MAX_PLAYERS] = false;
+
+forward OnPlayerEnterBusiness(playerid, businessid);
+forward OnPlayerExitBusiness(playerid, businessid);
+forward PaymentUp();
+
+
+//*****************************           *****************************
+//***************************** FUNCTIONS *****************************
+//*****************************           *****************************
+
+
+
+
+/*
+
+ • Function: CreateBusiness(Float: EnterX, Float: EnterY, Float: EnterZ, Interior, Float: InteriorX, Float: InteriorY, Float: InteriorZ, Price, VirtualWorld, RentPrice)
+ • Data storage: MySQL (G-Stylezzz's plugin)
+ • Usage: Creating business, use this in OnGameModeInit or OnFilterScriptInit!
+ • Parameters:
+        EnterX, EnterY, EnterZ: Coordinates where you can enter business, also on that coordiantes will create pickup and 3D text!
+        ExitX, ExitY, ExitZ: Coordinates where you can exit business, this coordinates are coordiantes of interior, you can find interiors on http://weedarr.wikidot.com/interior or http://wiki.sa-mp.com/wiki/InteriorIDs
+		Interior: ID of interior you want, see the web page on the parameter above
+		Price: Price for buying business
+		VirtulWorld: Always increase this because if you have 2 same interior and player are in the (Example one is in his house, second is in his too) they will see themself, It will look that they have same house! (Bad explained :/)
+ • Example: CreateBusiness(-2395.9585,-601.2695,132.6484, 3, 384.808624,173.804992,1008.382812, 7000, 0);
+
+*/
+
+stock CreateBusiness(Float: EnterX, Float: EnterY, Float: EnterZ, Interior, Float: ExitX, Float: ExitY, Float: ExitZ, Price, VirtualWorld)
+{
+    format(BQuery, sizeof(BQuery), "SELECT * FROM `business` WHERE `BusinessID` = %d", BusinessID);
+    mysql_query(BQuery);
+    mysql_store_result();
+ 	if(mysql_num_rows() == 0)
+    {
+        format(BusinessInfo[BusinessID][bOwner], 24, "None");
+		BusinessInfo[BusinessID][bEnterX] = EnterX;
+		BusinessInfo[BusinessID][bEnterY] = EnterY;
+		BusinessInfo[BusinessID][bEnterZ] = EnterZ;
+		BusinessInfo[BusinessID][bExitX] = ExitX;
+		BusinessInfo[BusinessID][bExitY] = ExitY;
+		BusinessInfo[BusinessID][bExitZ] = ExitZ;
+		BusinessInfo[BusinessID][bInterior] = Interior;
+		BusinessInfo[BusinessID][bVirtualWorld] = VirtualWorld;
+		BusinessInfo[BusinessID][bPrice] = Price;
+        format(bstring, sizeof(bstring), "For sale!\nPrice: %d\nBusiness ID: %d\nType /buybusiness to buy business!", Price, BusinessID);
+        format(BQuery, sizeof(BQuery), "INSERT INTO `business` (`User`, `EnterX`, `EnterY`, `EnterZ`, `ExitX`, `ExitY`, `ExitZ`, `Interior`, `Price`, `VirtualWorld`, `Owned`, `Locked`, `Money`, `BusinessID`) VALUES");
+		format(BQuery, sizeof(BQuery), "%s ('None', %f, %f, %f, %f, %f, %f, %d, %d, %d, 0, 0, 0, %d)", BQuery, BusinessInfo[BusinessID][bEnterX], BusinessInfo[BusinessID][bEnterY], BusinessInfo[BusinessID][bEnterZ], BusinessInfo[BusinessID][bExitX], BusinessInfo[BusinessID][bExitY], BusinessInfo[BusinessID][bExitZ], BusinessInfo[BusinessID][bInterior], BusinessInfo[BusinessID][bPrice], BusinessInfo[BusinessID][bVirtualWorld], BusinessID);
+	    mysql_query(BQuery);
+        BusinessInfo[BusinessID][bLabel] = Create3DTextLabel(bstring, 0x21DD00FF, EnterX, EnterY, EnterZ, 40.0, 0);
+        BusinessInfo[BusinessID][bPickup] = CreatePickup(1272, 23, EnterX, EnterY, EnterZ, 0);
+	}
+	else
+	{
+        if(mysql_fetch_row_format(BQuery, "|"))
+        {
+   			mysql_fetch_field_row(bsavingstring, "User"); format(BusinessInfo[BusinessID][bOwner], 24, "%s", bsavingstring);
+            mysql_fetch_field_row(bsavingstring, "EnterX"); BusinessInfo[BusinessID][bEnterX] = floatstr(bsavingstring);
+            mysql_fetch_field_row(bsavingstring, "EnterY"); BusinessInfo[BusinessID][bEnterY] = floatstr(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "EnterZ"); BusinessInfo[BusinessID][bEnterZ] = floatstr(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "ExitX"); BusinessInfo[BusinessID][bExitX] = floatstr(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "ExitY"); BusinessInfo[BusinessID][bExitY] = floatstr(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "ExitZ"); BusinessInfo[BusinessID][bExitZ] = floatstr(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "Interior"); BusinessInfo[BusinessID][bInterior] = strval(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "Price"); BusinessInfo[BusinessID][bPrice] = strval(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "VirtualWorld"); BusinessInfo[BusinessID][bVirtualWorld] = strval(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "Owned"); BusinessInfo[BusinessID][bOwned] = strval(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "Locked"); BusinessInfo[BusinessID][bLocked] = strval(bsavingstring);
+			mysql_fetch_field_row(bsavingstring, "Money"); BusinessInfo[BusinessID][bMoney] = strval(bsavingstring);
+			if(BusinessInfo[BusinessID][bOwned] == 1)
+			{
+ 				format(bstring, sizeof(bstring), "Owner: %s\nBusiness ID: %d", BusinessInfo[BusinessID][bOwner], BusinessID);
+			    BusinessInfo[BusinessID][bLabel] = Create3DTextLabel(bstring, 0x21DD00FF, BusinessInfo[BusinessID][bEnterX], BusinessInfo[BusinessID][bEnterY], BusinessInfo[BusinessID][bEnterZ], 40.0, 0);
+                BusinessInfo[BusinessID][bPickup] = CreatePickup(1239, 23, BusinessInfo[BusinessID][bEnterX], BusinessInfo[BusinessID][bEnterY], BusinessInfo[BusinessID][bEnterZ], 0);
+			}
+			else
+			{
+			    format(bstring, sizeof(bstring), "For sale!\nPrice: %d\nBusiness ID: %d\nType /buybusiness to buy business!", Price, BusinessID);
+			    BusinessInfo[BusinessID][bLabel] = Create3DTextLabel(bstring, 0x21DD00FF, BusinessInfo[BusinessID][bEnterX], BusinessInfo[BusinessID][bEnterY], BusinessInfo[BusinessID][bEnterZ], 40.0, 0);
+                BusinessInfo[BusinessID][bPickup] = CreatePickup(1272, 23, BusinessInfo[BusinessID][bEnterX], BusinessInfo[BusinessID][bEnterY], BusinessInfo[BusinessID][bEnterZ], 0);
+			}
+  		}
+	}
+    mysql_free_result();
+	Iter_Add(Business, BusinessID);
+	BusinessID++;
+	if(BusinessID > MAX_BUSINESS)
+	{
+		print("You reached maximum number of houses! Please enlarge the #define MAX_HOUSES\nPlease Contact Management!");
+	}
+	return 1;
+}
+
+/*
+
+ • Function: GetBusinessUser(businessid)
+ • Usage: Getting name of user of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get user (owner)
+ • Example: format(string, sizeof(string), "Business user of business id %d is %s", businessid, GetHouseUser(businessid));
+
+*/
+
+stock GetBusinessUser(businessid)
+{
+	new bowner1[24];
+	format(bowner1, sizeof(bowner1), "%s", BusinessInfo[businessid][bOwner]);
+	return bowner1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessEnterPos(houseid)
+ • Usage: Getting the enter position (XYZ) of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get enter position
+ • Example: format(string, sizeof(string), "Business enter XYZ of business id %d is %s", businessid, GetBusinessEnterPos(businessid));
+
+*/
+
+stock GetBusinessEnterPos(businessid)
+{
+    new getxyz1[128];
+    format(getxyz1, sizeof(getxyz1), "%f, %f, %f", BusinessInfo[businessid][bEnterX], BusinessInfo[businessid][bEnterY], BusinessInfo[businessid][bEnterZ]);
+    return getxyz1;
+}
+
+
+
+/*
+
+  • Function: GetBusinessExitPos(houseid)
+ • Usage: Getting the exit position (XYZ) of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get exit position
+ • Example: format(string, sizeof(string), "Business exit XYZ of business id %d is %s", businessid, GetBusinessExitPos(businessid));
+
+*/
+
+stock GetBusinessExitPos(businessid)
+{
+    new getxyz[128];
+    format(getxyz, sizeof(getxyz), "%f, %f, %f", BusinessInfo[businessid][bExitX], BusinessInfo[businessid][bExitY], BusinessInfo[businessid][bExitZ]);
+    return getxyz;
+}
+
+
+
+/*
+
+ • Function: GetBusinessEnterX(businessid)
+ • Usage: Getting the enter X position of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get enter X position
+ • Example: format(string, sizeof(string), "Business enter X of business id %d is %s", businessid, GetBusinessEnterX(businessid));
+
+*/
+
+stock GetBusinessEnterX(businessid)
+{
+    new getx1[128];
+    format(getx1, sizeof(getx1), "%f", BusinessInfo[businessid][bEnterX]);
+    return getx1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessEnterY(businessid)
+ • Usage: Getting the enter Y position of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get enter Y position
+ • Example: format(string, sizeof(string), "Business enter Y of business id %d is %s", businessid, GetBusinessEnterY(businessid));
+
+*/
+
+stock GetBusinessEnterY(businessid)
+{
+    new gety1[128];
+    format(gety1, sizeof(gety1), "%f", BusinessInfo[businessid][bEnterY]);
+    return gety1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessEnterZ(businessid)
+ • Usage: Getting the enter Z position of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get enter Z position
+ • Example: format(string, sizeof(string), "Business enter Z of business id %d is %s", businessid, GetBusinessEnterZ(businessid));
+
+*/
+
+stock GetBusinessEnterZ(businessid)
+{
+    new getz1[128];
+    format(getz1, sizeof(getz1), "%f", BusinessInfo[businessid][bEnterZ]);
+    return getz1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessExitX(businessid)
+ • Usage: Getting the exit X position of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get exit X position
+ • Example: format(string, sizeof(string), "Business exit X of business id %d is %s", businessid, GetBusinessExitX(businessid));
+
+*/
+
+stock GetBusinessExitX(businessid)
+{
+    new getx1[128];
+    format(getx1, sizeof(getx1), "%f", BusinessInfo[businessid][bExitX]);
+    return getx1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessExitY(businessid)
+ • Usage: Getting the exit Y position of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get exit Y position
+ • Example: format(string, sizeof(string), "Business exit Y of business id %d is %s", businessid, GetBusinessExitY(businessid));
+
+*/
+
+stock GetBusinessExitY(businessid)
+{
+    new gety1[128];
+    format(gety1, sizeof(gety1), "%f", BusinessInfo[businessid][bExitY]);
+    return gety1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessExitZ(businessid)
+ • Usage: Getting the exit Z position of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get exit Z position
+ • Example: format(string, sizeof(string), "Business exit Z of business id %d is %s", businessid, GetBusinessExitZ(businessid));
+
+*/
+
+stock GetBusinessExitZ(businessid)
+{
+    new getz1[128];
+    format(getz1, sizeof(getz1), "%f", BusinessInfo[businessid][bExitZ]);
+    return getz1;
+}
+
+
+
+/*
+
+ • Function: GetBusinessPrice(businessid)
+ • Usage: Getting the price of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get price
+ • Example: format(string, sizeof(string), "Business price of business id %d is %s", businessid, GetBusinessPrice(businessid));
+
+*/
+
+stock GetBusinessPrice(businessid) return BusinessInfo[businessid][bPrice];
+
+
+
+/*
+
+ • Function: GetBusinessInterior(businessid)
+ • Usage: Getting the interior of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get interior
+ • Example: format(string, sizeof(string), "Business interior of business id %d is %s", businessid, GetBusinessInterior(businessid));
+
+*/
+
+stock GetBusinessInterior(businessid) return BusinessInfo[businessid][bInterior];
+
+
+
+/*
+
+ • Function: GetBusinessVirtualWorld(businessid)
+ • Usage: Getting the virtualworld of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get virtualworld
+ • Example: format(string, sizeof(string), "Business virtualworld of business id %d is %s", businessid, GetBusinessVirtualWorld(businessid));
+
+*/
+
+stock GetBusinessVirtualWorld(businessid) return BusinessInfo[businessid][bVirtualWorld];
+
+
+
+/*
+
+ • Function: GetBusinessMoney(businessid)
+ • Usage: Getting the money of specific business!
+ • Parameters:
+        businessid: ID of business that you want to get money
+ • Example: format(string, sizeof(string), "Business money of business id %d is %s", businessid, GetBusinessMoney(businessid));
+
+*/
+
+stock GetBusinessMoney(businessid) return BusinessInfo[businessid][bMoney];
+
+
+
+/*
+
+ • Function: GetTotalBusiness(businessid)
+ • Usage: Getting the total business, use this in OnGameModeInit after all business!
+ • Example: printf("Total business: %d", GetTotalBusiness());
+
+*/
+
+stock GetTotalBusiness() return Iter_Count(Business);
+
+
+
+/*
+
+ • Function: IsBusinessOwned(businessid)
+ • Usage: Checking if is bussines owned of specific business!
+ • Parameters:
+        businessid: ID of business that you want to check if is owned
+ • Example: if(IsBusinessOwned(businessid)) SendClientMessage(playerid, -1, "Business is owned!");
+            else SendClientMessage(palyerid, -1, "Business is not owned!");
+
+*/
+
+stock IsBusinessOwned(businessid)
+{
+	if(BusinessInfo[businessid][bOwned] == 1) return 1;
+	else return 0;
+}
+
+
+
+/*
+
+ • Function: IsBusinessLocked(businessid)
+ • Usage: Checking if is business locked of specific business!
+ • Parameters:
+        businessid: ID of business that you want to check if is locked
+ • Example: if(IsBusinessOwned(businessid)) SendClientMessage(playerid, -1, "Business is locked!");
+            else SendClientMessage(palyerid, -1, "Business is not locked!");
+
+*/
+
+stock IsBusinessLocked(businessid)
+{
+	if(BusinessInfo[businessid][bLocked] == 1) return 1;
+	else return 0;
+}
+
+
+
+/*
+
+ • Function: IsBusinessExist(businessid)
+ • Usage: Checking if is exist of specific business!
+ • Parameters:
+        businessid: ID of business that you want to check if is exist
+ • Example: if(IsBusinessExist(businessid)) SendClientMessage(playerid, -1, "Business exist!");
+            else SendClientMessage(palyerid, -1, "Business doesn't exist!");
+
+*/
+
+stock IsBusinessExist(businessid)
+{
+	format(BQuery, sizeof(BQuery), "SELECT BusinessID FROM `business` WHERE `BusinessID` = %d", businessid);
+	mysql_query(BQuery);
+	mysql_store_result();
+	if(mysql_num_rows() == 1)
+	{
+	    mysql_free_result();
+	    return 1;
+	}
+	else
+	{
+ 		mysql_free_result();
+		return 0;
+	}
+}
+
+/*
+
+ • Function: IsPlayerBuyBusiness(playerid, businessid)
+ • Usage: Checking if is player buyed business (used when you try to buy business but you already have house)!
+ • Parameters:
+        playerid: ID of player that you want preform check
+        businessid: ID of business that you want to check if is player buy business
+ • Example: if(IsPlayerBuyBusiness(playerid, businessid)) return SendClientMessage(playerid, -1, "You buy this business already!");
+	        else SendClientMessage(playerid, -1, "You didn't buy this business!");
+
+*/
+
+stock IsPlayerBuyBusiness(playerid, businessid)
+{
+	format(BQuery, sizeof(BQuery), "SELECT User FROM `business` WHERE `User` = '%s' AND `BusinessID` = %d", GetName(playerid), businessid);
+	mysql_query(BQuery);
+	mysql_store_result();
+	if(mysql_num_rows() == 1)
+	{
+		mysql_free_result();
+		return 1;
+	}
+	else
+	{
+		mysql_free_result();
+		return 0;
+	}
+}
+
+/*
+
+ • Function: IsPlayerBuyBusiness(playerid, businessid)
+ • Usage: Checking if is player buyed any business!
+ • Parameters:
+        playerid: ID of player that you want preform check
+ • Example: if(IsPlayerBuyAnyBusiness(playerid)) return SendClientMessage(playerid, -1, "You buy any business already!");
+	        else SendClientMessage(playerid, -1, "You didn't buy any business!");
+
+*/
+
+stock IsPlayerBuyAnyBusiness(playerid)
+{
+	format(BQuery, sizeof(BQuery), "SELECT User FROM `business` WHERE `User` = '%s'", GetName(playerid));
+	mysql_query(BQuery);
+	mysql_store_result();
+	if(mysql_num_rows() == 1)
+	{
+		mysql_free_result();
+		return 1;
+	}
+	else
+	{
+		mysql_free_result();
+		return 0;
+	}
+}
+
+/*
+
+ • Function: IsPlayerBusinessOwner(playerid, businessid)
+ • Usage: Checking if is player owner of specific business!
+ • Parameters:
+        playerid: ID of player that you want preform check
+        businessid: ID of vusiness that you want to check if is player owner
+ • Example: if(IsPlayerBusinessOwner(playerid, businessid)) return SendClientMessage(playerid, -1, "You are owner of the business!");
+	        else SendClientMessage(playerid, -1, "You are not owner of the business!");
+
+*/
+
+stock IsPlayerBusinessOwner(playerid, businessid)
+{
+	if(!strcmp(BusinessInfo[businessid][bOwner], GetName(playerid), false)) return 1;
+	else return 0;
+}
+
+//----Stocks for easier scripting!----
+/*stock GetName(playerid)
+{
+	new pName[MAX_PLAYER_NAME];
+	GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
+	return pName;
+}*/
+//----End of stocks!----
+
+
+//*****************************          *****************************
+//***************************** COMMANDS *****************************
+//*****************************          *****************************
+
+
+
+/*
+
+ • Command: /buyhouse
+ • Processor: y_commands (YCMD)
+ • Usage: Buying business (Player must be in range of business he want to buy!)
+
+*/
+
+YCMD:buybusiness(playerid, params[], help)
+{
+	#pragma unused help
+	#pragma unused params
+    foreach(business, i)
+    {
+        if(IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ]))
+        {
+            if(BusinessInfo[i][bOwned] == 1) return SendClientMessage(playerid, COLOR_KRED, "Business is already owned!");
+            if(GetPlayerMoney(playerid) < BusinessInfo[i][bPrice]) return SendClientMessage(playerid, COLOR_KRED, "You don't have enough money!");
+
+			new BQuery2[200];
+			format(BQuery2, sizeof(BQuery2), "SELECT User FROM `business` WHERE `User` = '%s'", GetName(playerid));
+			mysql_query(BQuery2);
+			mysql_store_result();
+			if(mysql_num_rows() == 1) return SendClientMessage(playerid, COLOR_KRED, "You have business already!");
+			mysql_free_result();
+
+			format(BusinessInfo[i][bOwner], 24, "%s", GetName(playerid));
+			BusinessInfo[i][bOwned] = 1;
+			DestroyPickup(BusinessInfo[i][bPickup]);
+			BusinessInfo[i][bPickup] = CreatePickup(1239, 23, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ], 0);
+			format(bstring, sizeof(bstring), "Owner: %s\nBusiness ID: %d", BusinessInfo[i][bOwner], i);
+			Update3DTextLabelText(BusinessInfo[i][bLabel], 0x21DD00FF, bstring);
+			GivePlayerMoney(playerid, -BusinessInfo[i][bPrice]);
+			SendClientMessage(playerid, COLOR_LIME, "Business bought!");
+
+ 			format(BQuery, sizeof(BQuery), "UPDATE `business` SET `User` = '%s', `Owned` = 1 WHERE `BusinessID` = %d", GetName(playerid), i);
+			mysql_query(BQuery);
+		}
+	}
+	return 1;
+}
+
+/*
+
+ • Command: /sellbusiness
+ • Processor: y_commands (YCMD)
+ • Usage: Selling business (Player must be in range of business he want to sell!)
+
+*/
+
+YCMD:sellbusiness(playerid, params[], help)
+{
+	#pragma unused help
+	#pragma unused params
+	foreach(Business, i)
+	{
+	    if(IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ]))
+        {
+         	if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+	        {
+                format(BusinessInfo[i][bOwner], 24, "None");
+				BusinessInfo[i][bOwned] = 0;
+				BusinessInfo[i][bLocked] = 0;
+		 		DestroyPickup(BusinessInfo[i][bPickup]);
+				BusinessInfo[i][bPickup] = CreatePickup(1272, 23, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ], 0);
+				format(bstring, sizeof(bstring), "For sale!\nPrice: %d\nBusiness ID: %d\nType /buybusiness to buy business!", BusinessInfo[i][bPrice], i);
+				Update3DTextLabelText(BusinessInfo[i][bLabel], 0x21DD00FF, bstring);
+				GivePlayerMoney(playerid, BusinessInfo[i][bPrice]);
+				SendClientMessage(playerid, COLOR_LIME, "Business sold!");
+
+				format(BQuery, sizeof(BQuery), "UPDATE `business` SET `User` = 'None', `Owned` = 0, `Locked` = 0 WHERE `BusinessID` = %d", i);
+				mysql_query(BQuery);
+			}
+		}
+	}
+	return 1;
+}
+
+/*
+
+ • Command: /lockbusiness
+ • Processor: y_commands (YCMD)
+ • Usage: Locking business (Player must be in range of his business to lock it!)
+
+*/
+
+YCMD:lockbusiness(playerid, params[], help)
+{
+	#pragma unused help
+	#pragma unused params
+	foreach(Business, i)
+	{
+	    if(IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ]) || IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+        {
+		    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+		    {
+				BusinessInfo[i][bLocked] = 1;
+			 	GameTextForPlayer(playerid, "Business ~r~locked!", 2000, 5);
+
+				format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Locked` = 1 WHERE `BusinessID` = %d", i);
+				mysql_query(BQuery);
+			}
+		}
+	}
+	return 1;
+}
+
+/*
+
+ • Command: /unlockbusiness
+ • Processor: y_commands (YCMD)
+ • Usage: Unlocking business (Player must be in range of his business to unlock it!)
+
+*/
+
+YCMD:unlockbusiness(playerid, params[], help)
+{
+	#pragma unused help
+	#pragma unused params
+	foreach(Business, i)
+	{
+	    if(IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ]) || IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+        {
+		    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+		    {
+				BusinessInfo[i][bLocked] = 0;
+			 	GameTextForPlayer(playerid, "Business ~g~unlocked!", 2000, 5);
+
+				format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Locked` = 0 WHERE `BusinessID` = %d", i);
+				mysql_query(BQuery);
+			}
+		}
+	}
+	return 1;
+}
+
+/*
+
+ • Command: /businesscontrol
+ • Processor: y_commands (YCMD)
+ • Usage: Controling your business: lock business, unlock business, storing money in business, taking money from business (Player must be in his house to control it!)
+
+*/
+
+YCMD:businesscontrol(playerid, params[], help)
+{
+	#pragma unused help
+	#pragma unused params
+    foreach(Business, i)
+	{
+        if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+        {
+			if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+			{
+				if(PlayerEnteredHisBusiness[playerid] == true)
+				{
+					ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+				}
+				else SendClientMessage(playerid, COLOR_KRED, "You must enter your business!");
+			}
+		}
+	}
+	return 1;
+}
+
+
+public PaymentUp()
+{
+	foreach(Business, i)
+	{
+		new BQuery2[200];
+		format(BQuery2, sizeof(BQuery2), "SELECT BusinessID FROM `business` WHERE `BusinessID` = '%d'", i);
+		mysql_query(BQuery2);
+		mysql_store_result();
+		if(mysql_num_rows() == 1)
+		{
+		    if(BusinessInfo[i][bOwned] == 1)
+		    {
+			    BusinessInfo[i][bMoney] += BUSINES_PAYMENT;
+			    format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Money` = %d WHERE `BusinessID` = %d", BusinessInfo[i][bMoney], i);
+			    mysql_query(BQuery);
+		    }
+		}
+		mysql_free_result();
+	}
+	return 1;
+}
+
+
+//*****************************           *****************************
+//***************************** CALLBACKS *****************************
+//*****************************           *****************************
+
+
+
+/*
+
+ • Callback: OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])  (Hooked using y_hook)
+ • Action: Dialogs for house controling, later will be more for dynamic creating house!
+
+*/
+
+Hook:B1_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
+{
+	switch(dialogid)
+	{
+		case 6560:
+		{
+		    if(!response) return 0;
+		    switch(listitem)
+		    {
+		        case 0:
+		        {
+			     	foreach(Business, i)
+					{
+					    if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+				        {
+						    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+						    {
+								BusinessInfo[i][bLocked] = 1;
+							 	GameTextForPlayer(playerid, "Business ~r~locked!", 2000, 5);
+							 	ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+
+								format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Locked` = 1 WHERE `BusinessID` = %d", i);
+								mysql_query(BQuery);
+							}
+						}
+					}
+		        }
+	    	    case 1:
+		        {
+			     	foreach(Business, i)
+					{
+					    if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+				        {
+						    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+						    {
+								BusinessInfo[i][bLocked] = 0;
+							 	GameTextForPlayer(playerid, "Business ~g~unlocked!", 2000, 5);
+							 	ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+
+								format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Locked` = 0 WHERE `BusinessID` = %d", i);
+								mysql_query(BQuery);
+							}
+						}
+					}
+		        }
+		        case 2:
+		        {
+			     	foreach(Business, i)
+					{
+					    if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+				        {
+						    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+						    {
+						        format(bstring, sizeof(bstring), "Current stored money: %d\n\nType ammount of money that you want to store", BusinessInfo[i][bMoney]);
+						        ShowPlayerDialog(playerid, 6561, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+						    }
+						}
+					}
+		        }
+     		    case 3:
+		        {
+			     	foreach(Business, i)
+					{
+					    if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+				        {
+						    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+						    {
+						        format(bstring, sizeof(bstring), "Current stored money: %d\n\nType ammount of money that you want to take", BusinessInfo[i][bMoney]);
+						        ShowPlayerDialog(playerid, 6562, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+						    }
+						}
+					}
+		        }
+		    }
+	    }
+	    case 6561:
+	    {
+		    if(!response) return ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+       		foreach(Business, i)
+			{
+	            if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+	            {
+	            	if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+					{
+						new moneystring1[128];
+						format(moneystring1, sizeof(moneystring1), "Current stored money: %d\n\nType ammount of money that you want to store", BusinessInfo[i][bMoney]);
+						if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 6561, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+						if(GetPlayerMoney(playerid) < strval(inputtext))
+						{
+							SendClientMessage(playerid, COLOR_KRED, "You don't have enoguh money to store!");
+							ShowPlayerDialog(playerid, 6561, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+							return 1;
+						}
+						if(strval(inputtext) > 10000000)
+						{
+							SendClientMessage(playerid, COLOR_KRED, "You can store maximum 10000000!");
+							ShowPlayerDialog(playerid, 6561, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+							return 1;
+						}
+						BusinessInfo[i][bMoney] += strval(inputtext);
+						GivePlayerMoney(playerid, -strval(inputtext));
+						format(bstring, sizeof(bstring), "You store %d$! Current stored money: %d", strval(inputtext), BusinessInfo[i][bMoney]);
+						SendClientMessage(playerid, COLOR_YELLOW, bstring);
+						ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+
+			           	format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Money` = %d WHERE `BusinessID` = %d", BusinessInfo[i][bMoney], i);
+						mysql_query(BQuery);
+					}
+				}
+			}
+	    }
+	    case 6562:
+	    {
+		    if(!response) return ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+       		foreach(Business, i)
+			{
+	            if(IsPlayerInRangeOfPoint(playerid, 20.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]))
+	            {
+	            	if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+					{
+						new moneystring1[128];
+						format(moneystring1, sizeof(moneystring1), "Current stored money: %d\n\nType ammount of money that you want to store", BusinessInfo[i][bMoney]);
+						if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 6561, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+						if(strval(inputtext) > BusinessInfo[i][bMoney])
+						{
+						    SendClientMessage(playerid, COLOR_KRED, "Business doesn't have so much money!");
+						    ShowPlayerDialog(playerid, 6562, DIALOG_STYLE_INPUT, "   Store money", bstring, "Ok", "Exit");
+						    return 1;
+						}
+						BusinessInfo[i][bMoney] -= strval(inputtext);
+						GivePlayerMoney(playerid, strval(inputtext));
+						format(bstring, sizeof(bstring), "You take %d$! Current stored money: %d", strval(inputtext), BusinessInfo[i][bMoney]);
+						SendClientMessage(playerid, COLOR_YELLOW, bstring);
+						ShowPlayerDialog(playerid, 6560, DIALOG_STYLE_LIST, "   Control your business!", "Lock business\nUnlock business\nStore money\nTake money", "Ok", "Exit");
+
+			           	format(BQuery, sizeof(BQuery), "UPDATE `business` SET `Money` = %d WHERE `BusinessID` = %d", BusinessInfo[i][bMoney], i);
+						mysql_query(BQuery);
+					}
+				}
+			}
+	    }
+	}
+	return 1;
+}
+
+/*
+
+ • Callback: OnPlayerKeyStateChange(playerid, newkeys, oldkeys)  (Hooked using y_hook)
+ • Action: Player can enter house (If is not locked!) using F or Enter (by default in GTA:SA)
+
+*/
+
+Hook:B2_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
+{
+	if(newkeys & KEY_SECONDARY_ATTACK && !IsPlayerInAnyVehicle(playerid))
+    {
+        foreach(Business, i)
+        {
+            if(IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ]))
+            {
+                if(BusinessInfo[i][bLocked] == 0)
+                {
+                    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+		    		{
+		    		    PlayerEnteredHisBusiness[playerid] = true;
+		    		}
+	            	SetPlayerInterior(playerid, BusinessInfo[i][bInterior]);
+	                SetPlayerVirtualWorld(playerid, BusinessInfo[i][bVirtualWorld]);
+	                SetPlayerPos(playerid, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]);
+					return CallLocalFunction("OnPlayerEnterBusiness", "dd", playerid, i);
+				}
+				else SendClientMessage(playerid, COLOR_KRED, "Business is locked!");
+            }
+            else if(IsPlayerInRangeOfPoint(playerid, 3.0, BusinessInfo[i][bExitX], BusinessInfo[i][bExitY], BusinessInfo[i][bExitZ]) && GetPlayerInterior(playerid) == BusinessInfo[i][bInterior] && GetPlayerVirtualWorld(playerid) == BusinessInfo[i][bVirtualWorld])
+            {
+                if(BusinessInfo[i][bLocked] == 0)
+                {
+                    if(!strcmp(BusinessInfo[i][bOwner], GetName(playerid), false))
+		    		{
+		    		    PlayerEnteredHisBusiness[playerid] = false;
+		    		}
+	            	SetPlayerInterior(playerid, 0);
+	                SetPlayerVirtualWorld(playerid, 0);
+	                SetPlayerPos(playerid, BusinessInfo[i][bEnterX], BusinessInfo[i][bEnterY], BusinessInfo[i][bEnterZ]);
+	                return CallLocalFunction("OnPlayerExitBusiness", "dd", playerid, i);
+    			}
+				else SendClientMessage(playerid, COLOR_KRED, "Business is locked!");
+            }
+        }
+    }
+    return 1;
+}
+
+Hook:B3_OnGameModeInit()
+{
+	PaymentTimer = SetTimer("PaymentUp", 3600000, 1);
+	return 1;
+}
+
+Hook:B4_OnGameModeExit()
+{
+	KillTimer(PaymentTimer);
+	return 1;
+}
+
+Hook:B5_OnPlayerConnect(playerid)
+{
+	new credits1[128];
+	format(credits1, sizeof(credits1), "This server use S32_Business %s by System32!", business_version);
+	SendClientMessage(playerid, COLOR_LIME, credits1);
+	
+	PlayerEnteredHisBusiness[playerid] = false;
+	return 1;
+}
+
+Hook:B6_OnPlayerDisconnect(playerid)
+{
+	PlayerEnteredHisBusiness[playerid] = false;
+	return 1;
+}

+ 255 - 0
pawno/include/SII.inc

@@ -0,0 +1,255 @@
+//======================================================
+// Slick's INI Include 2.0.7
+//
+// (c) Copyright 2008-2010, [DRuG]Slick
+// This file is provided as is (no warranties).
+//======================================================
+
+
+#pragma dynamic 45000 // Change accordingly!!
+
+#if defined MAX_STRING
+	#define INI_MAX_VALUE MAX_STRING
+#else
+	#define INI_MAX_VALUE 256
+#endif
+#define INI_MAX_KEY 24
+#define INI_MAX_LINE (INI_MAX_KEY + INI_MAX_VALUE + 3)
+#define INI_MAX_FILENAME 256
+#define INI_MAX_LINES 768
+
+
+enum E_CACHE
+{
+	E_KEY[INI_MAX_KEY],
+	E_VALUE[INI_MAX_VALUE]
+}
+
+enum E_FILE
+{
+	E_FILENAME[INI_MAX_FILENAME],
+	bool: E_OPEN
+}
+
+static gCache[INI_MAX_LINES][E_CACHE];
+static gEmptyCache[E_CACHE];
+static gFile[E_FILE];
+static gNoFile[E_FILE];
+
+
+#define INI_Exist fexist
+
+
+stock INI_Open(const filename[])
+{
+	if (!filename[0]) return false;
+	if (gFile[E_OPEN])
+	{
+		if (!strcmp(gFile[E_FILENAME], filename, true)) return true;
+		//return false;
+		INI_Close();
+	}
+	new File: h;
+	h = fopen(filename, io_readwrite);
+	if (h)
+	{
+		INI_strcpy(gFile[E_FILENAME], filename, INI_MAX_FILENAME, INI_MAX_FILENAME);
+		new line[INI_MAX_LINE];
+		new ln = -1;
+		new separator;
+		while (((ln + 1) < INI_MAX_LINES) && (fread(h, line)))
+		{
+			ln ++;
+			INI_StripLine(line);
+			separator = strfind(line, "=", false);
+			if ((line[0] == ';') || (line[0] == '=') || (separator == -1) || (separator > INI_MAX_KEY))
+			{
+				if (line[0] == ';')
+				{
+					INI_strcpy(gCache[ln][E_VALUE], line, INI_MAX_VALUE, INI_MAX_VALUE);
+				}
+				else
+				{
+					INI_strcpy(gCache[ln][E_VALUE][1], line, INI_MAX_VALUE - 1, INI_MAX_VALUE - 1);
+					gCache[ln][E_VALUE][0] = ';';
+				}
+				continue;
+			}
+			INI_strcpy(gCache[ln][E_KEY], line, separator, INI_MAX_KEY);
+			INI_strcpy(gCache[ln][E_VALUE], line[separator + 1], INI_MAX_VALUE, INI_MAX_VALUE);
+			if (!gCache[ln][E_VALUE][0]) gCache[ln][E_VALUE][0] = ' ';
+		}
+		fclose(h);
+		gFile[E_OPEN] = true;
+		return 1;
+	}
+	return 0;
+}
+
+
+stock INI_Save()
+{
+	if (!gFile[E_OPEN]) return false;
+	new File: h;
+	h = fopen(gFile[E_FILENAME], io_write);
+	if (h)
+	{
+		new line[INI_MAX_LINE];
+		new ln = -1;
+		while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
+		{
+			ln ++;
+			if (gCache[ln][E_VALUE][0] == ';')
+			{
+				if (gCache[ln][E_VALUE][1])
+				{
+					format(line, sizeof(line), "%s\r\n", gCache[ln][E_VALUE]);
+					fwrite(h, line);
+					continue;
+				}
+				fwrite(h, "\r\n");
+				continue;
+			}
+			format(line, sizeof(line), "%s=%s\r\n", gCache[ln][E_KEY], gCache[ln][E_VALUE]);
+			fwrite(h, line);
+		}
+		fclose(h);
+		return true;
+	}
+	return false;
+}
+
+
+stock INI_Close()
+{
+	if (!gFile[E_OPEN]) return false;
+	for (new ln; ln < INI_MAX_LINES; ln++) gCache[ln] = gEmptyCache;
+	gFile = gNoFile;
+	return true;
+}
+
+
+stock INI_ReadString(dest[], const key[], maxlength = sizeof(dest))
+{
+	if ((!gFile[E_OPEN]) || (!key[0])) return false;
+	new ln = -1;
+	while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
+	{
+		ln ++;
+		if (gCache[ln][E_VALUE][0] == ';') continue;
+		if (!strcmp(gCache[ln][E_KEY], key, false))
+		{
+			INI_strcpy(dest, gCache[ln][E_VALUE], INI_MAX_VALUE, maxlength);
+			return true;
+		}
+	}
+	return false;
+}
+
+
+stock INI_ReadInt(const key[])
+{
+	new dest[12];
+	if (INI_ReadString(dest, key)) return strval(dest);
+	return false;
+}
+
+
+stock Float: INI_ReadFloat(const key[])
+{
+	new dest[12];
+	if (INI_ReadString(dest, key)) return floatstr(dest);
+	return 0.0;
+}
+
+
+stock INI_WriteString(const key[], const value[])
+{
+	if ((!gFile[E_OPEN]) || (!key[0]) || (key[0] == ';') || (strfind(key, "=", false) != -1)) return false;
+	new ln = -1;
+	while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
+	{
+		ln ++;
+		if (gCache[ln][E_VALUE][0] == ';') continue;
+		if (!strcmp(gCache[ln][E_KEY], key, false))
+		{
+			INI_strcpy(gCache[ln][E_VALUE], value, INI_MAX_VALUE, INI_MAX_VALUE);
+			return true;
+		}
+	}
+	ln ++;
+	if (ln < INI_MAX_LINES)
+	{
+		INI_strcpy(gCache[ln][E_KEY], key, INI_MAX_KEY, INI_MAX_KEY);
+		INI_strcpy(gCache[ln][E_VALUE], value, INI_MAX_VALUE, INI_MAX_VALUE);
+		return true;
+	}
+	return false;
+}
+
+
+stock INI_WriteInt(const key[], value)
+{
+	new dest[12];
+	format(dest, sizeof(dest), "%i", value);
+	return INI_WriteString(key, dest);
+}
+
+
+stock INI_WriteFloat(const key[], Float: value)
+{
+	new dest[12];
+	format(dest, sizeof(dest), "%0.4f", value);
+	return INI_WriteString(key, dest);
+}
+
+
+stock INI_RemoveEntry(const key[])
+{
+	if ((!gFile[E_OPEN]) || (!key[0]) || (strfind(key, "=", false) != -1)) return false;
+	new ln = -1;
+	while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
+	{
+		ln ++;
+		if (gCache[ln][E_VALUE][0] == ';') continue;
+		if (!strcmp(gCache[ln][E_KEY], key, false))
+		{
+			for (; ln < (INI_MAX_LINES - 1); ln ++)
+			{
+				INI_strcpy(gCache[ln][E_KEY], gCache[ln + 1][E_KEY], INI_MAX_KEY, INI_MAX_KEY);
+				INI_strcpy(gCache[ln][E_VALUE], gCache[ln + 1][E_VALUE], INI_MAX_VALUE, INI_MAX_VALUE);
+			}
+			return true;
+		}
+	}
+	return false;
+}
+
+
+stock INI_Remove(const filename[])
+{
+	if (!filename[0]) return false;
+	if ((gFile[E_OPEN]) && (!strcmp(gFile[E_FILENAME], filename, true))) gFile = gNoFile;
+	return fremove(filename);
+}
+
+
+stock INI_strcpy(dest[], const source[], numcells = sizeof(source), maxlength = sizeof(dest))
+{
+	new i;
+	while ((source[i]) && (i < numcells) && (i < maxlength))
+	{
+		dest[i] = source[i];
+		i ++;
+	}
+	dest[(i == maxlength) ? (i - 1) : (i)] = '\0';
+}
+
+
+stock INI_StripLine(string[])
+{
+	new l;
+	l = strlen(string);
+	if (string[l - 2] == '\r') string[l - 2] = '\0';
+	if (string[l - 1] == '\n') string[l - 1] = '\0';
+}

+ 38 - 38
pawno/include/SKY.inc

@@ -1,38 +1,38 @@
-#if defined _INC_SKY
-    #endinput
-#endif
-#define _INC_SKY
-
-// Make a player appear to spawn for all players but himself
-native SpawnPlayerForWorld(playerid);
-// Keep re-sending the last received sync data
-native FreezeSyncData(playerid, bool:toggle);
-// Set the HP bar (warning: affects GetPlayerHealth)
-native SetFakeHealth(playerid, health);
-// Set the armour bar (warning: affects GetPlayerArmour)
-native SetFakeArmour(playerid, armour);
-// Force a specific facing angle to sync for other players
-native SetFakeFacingAngle(playerid, Float:angle = Float:0x7FFFFFFF);
-// Disable stealth-knife sync (only the player doing it will see it happen)
-native SetKnifeSync(toggle);
-// Make a player appear dead for other players
-native SendDeath(playerid);
-// Set the last animation data
-native SetLastAnimationData(playerid, data);
-// Send the last sync data
-// If an animation is specified, it will be similar to ApplyAnimation
-native SendLastSyncData(playerid, toplayerid, animation = 0);
-// Clear animations for another player only
-native ClearAnimationsForPlayer(playerid, forplayerid);
-// Disable infinity ammo bugs and other bugs (some bugs still work)
-native SetDisableSyncBugs(toggle);
-// Make the weapon state always synced as WEAPONSTATE_MORE_BULLETS
-native SetInfiniteAmmoSync(playerid, toggle);
-// Stop syncing keys for a player
-native SetKeySyncBlocked(playerid, toggle);
-// Same as YSF (renamed to avoid problems)
-native TextDrawSetPosition(Text:text, Float:x, Float:y);
-// Same as YSF (renamed to avoid problems)
-native PlayerTextDrawSetPosition(playerid, PlayerText:text, Float:x, Float:y);
-// Set the string of a TextDraw per-player
-native TextDrawSetStringForPlayer(Text:text, playerid, const string[]);
+#if defined _INC_SKY
+    #endinput
+#endif
+#define _INC_SKY
+
+// Make a player appear to spawn for all players but himself
+native SpawnPlayerForWorld(playerid);
+// Keep re-sending the last received sync data
+native FreezeSyncData(playerid, bool:toggle);
+// Set the HP bar (warning: affects GetPlayerHealth)
+native SetFakeHealth(playerid, health);
+// Set the armour bar (warning: affects GetPlayerArmour)
+native SetFakeArmour(playerid, armour);
+// Force a specific facing angle to sync for other players
+native SetFakeFacingAngle(playerid, Float:angle = Float:0x7FFFFFFF);
+// Disable stealth-knife sync (only the player doing it will see it happen)
+native SetKnifeSync(toggle);
+// Make a player appear dead for other players
+native SendDeath(playerid);
+// Set the last animation data
+native SetLastAnimationData(playerid, data);
+// Send the last sync data
+// If an animation is specified, it will be similar to ApplyAnimation
+native SendLastSyncData(playerid, toplayerid, animation = 0);
+// Clear animations for another player only
+native ClearAnimationsForPlayer(playerid, forplayerid);
+// Disable infinity ammo bugs and other bugs (some bugs still work)
+native SetDisableSyncBugs(toggle);
+// Make the weapon state always synced as WEAPONSTATE_MORE_BULLETS
+native SetInfiniteAmmoSync(playerid, toggle);
+// Stop syncing keys for a player
+native SetKeySyncBlocked(playerid, toggle);
+// Same as YSF (renamed to avoid problems)
+native TextDrawSetPosition(Text:text, Float:x, Float:y);
+// Same as YSF (renamed to avoid problems)
+native PlayerTextDrawSetPosition(playerid, PlayerText:text, Float:x, Float:y);
+// Set the string of a TextDraw per-player
+native TextDrawSetStringForPlayer(Text:text, playerid, const string[]);

+ 112 - 0
pawno/include/VehicleMatrix.inc

@@ -0,0 +1,112 @@
+/*
+	 Made by Gamer_Z
+		Provides vehicle offset functions and vehicle matrix functions for easier workflow with positioning tied to vehicle rotation.
+
+	LICENSE:
+
+	Copyright (c)  2013, Rafal "Gamer_Z" Grasman
+
+	All rights reserved.
+
+	Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+		-Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+		-Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+		-Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+		Special Clause for SA-MP Servers:
+		-The authors and or contributors must be credited in a visible and accessible area for the player, including but not limited to: about boxes, welcome messages on the server, commands displaying messages and/or message boxes
+
+	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+	AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+	IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+	ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+	LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  CONSEQUENTIAL
+	DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+	SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+	CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+	OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+	OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+#include <a_samp>
+
+enum MatrixParts
+{
+	mp_PITCH,
+	mp_ROLL,
+	mp_YAW,
+	mp_POS
+};
+
+enum MatrixIndicator
+{
+	Float:mi_X,
+	Float:mi_Y,
+	Float:mi_Z
+};
+
+/*
+	Get Corresponding GTA {{Internal}} Vehicle Matrix
+*/
+//aka quaternion to matrix conversion + including position
+stock GetVehicleMatrix(vehicleid,Mat4x3[MatrixParts][MatrixIndicator])
+{
+//initial processing step - gathering information
+	new
+		Float:x,
+		Float:y,
+		Float:z,
+		Float:w,
+		Float:Pos[3];
+
+	GetVehicleRotationQuat(vehicleid,w,x,y,z);
+	GetVehiclePos(vehicleid,Pos[0],Pos[1],Pos[2]);
+
+//initialized math for quaternion to matrix conversion {for sake of simplicity and efficiency}
+	new
+		Float:x2 = x * x,
+	 	Float:y2 = y * y,
+	 	Float:z2 = z * z,
+	 	Float:xy = x * y,
+	 	Float:xz = x * z,
+		Float:yz = y * z,
+		Float:wx = w * x,
+		Float:wy = w * y,
+		Float:wz = w * z;
+
+//the maths required to convert a quat to a matrix
+	Mat4x3[mp_PITCH][mi_X] = 1.0 - 2.0 * (y2 + z2);
+	Mat4x3[mp_PITCH][mi_Y] = 2.0 * (xy - wz);
+	Mat4x3[mp_PITCH][mi_Z] = 2.0 * (xz + wy);
+	Mat4x3[mp_ROLL][mi_X] = 2.0 * (xy + wz);
+	Mat4x3[mp_ROLL][mi_Y] = 1.0 - 2.0 * (x2 + z2);
+	Mat4x3[mp_ROLL][mi_Z] = 2.0 * (yz - wx);
+ 	Mat4x3[mp_YAW][mi_X] = 2.0 * (xz - wy);
+ 	Mat4x3[mp_YAW][mi_Y] = 2.0 * (yz + wx);
+ 	Mat4x3[mp_YAW][mi_Z] = 1.0 - 2.0 * (x2 + y2);
+//the gta vehicle matrix has the position in it, I want it to keep just like GTA does so I put the position in
+  	Mat4x3[mp_POS][mi_X] = Pos[0];
+  	Mat4x3[mp_POS][mi_Y] = Pos[1];
+  	Mat4x3[mp_POS][mi_Z] = Pos[2];
+  	
+	return 1;
+}
+
+/*
+	Get position offset at position corresponding to the correct vehicle rotation
+*/
+stock PositionFromVehicleOffset(vehicle,Float:offX,Float:offY,Float:offZ,&Float:x,&Float:y,&Float:z)
+{
+//initial processing step - gather information
+	new
+		Mat4x3[MatrixParts][MatrixIndicator];
+
+    GetVehicleMatrix(vehicle,Mat4x3);
+
+//offset calculation math
+	x = offX * Mat4x3[mp_PITCH][mi_X] + offY * Mat4x3[mp_ROLL][mi_X] + offZ * Mat4x3[mp_YAW][mi_X] + Mat4x3[mp_POS][mi_X];
+	y = offX * Mat4x3[mp_PITCH][mi_Y] + offY * Mat4x3[mp_ROLL][mi_Y] + offZ * Mat4x3[mp_YAW][mi_Y] + Mat4x3[mp_POS][mi_Y];
+	z = offX * Mat4x3[mp_PITCH][mi_Z] + offY * Mat4x3[mp_ROLL][mi_Z] + offZ * Mat4x3[mp_YAW][mi_Z] + Mat4x3[mp_POS][mi_Z];
+
+	return 1;
+}

+ 177 - 0
pawno/include/VeronaMall.inc

@@ -0,0 +1,177 @@
+#include <a_samp>
+#define MALL_OBJECT_DRAW_DIST 30.0
+
+stock AddMallObjects()
+{
+    // Main mall mesh, interior areas
+	CreateDynamicObject(19322, 1117.580, -1490.01, 32.72,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19323, 1117.580, -1490.01, 32.72,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	
+	// Mall windows
+    CreateDynamicObject(19325, 1155.40, -1434.89, 16.49,   0.00, 0.00, 0.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1155.37, -1445.41, 16.31,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1155.29, -1452.38, 16.31,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1157.36, -1468.35, 16.31,   0.00, 0.00, 18.66, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1160.64, -1478.37, 16.31,   0.00, 0.00, 17.76, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1159.84, -1502.06, 16.31,   0.00, 0.00, -19.92, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1139.28, -1523.71, 16.31,   0.00, 0.00, -69.36, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1117.06, -1523.43, 16.51,   0.00, 0.00, -109.44, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1097.18, -1502.43, 16.51,   0.00, 0.00, -158.58, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1096.47, -1478.29, 16.51,   0.00, 0.00, -197.94, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1099.70, -1468.27, 16.51,   0.00, 0.00, -197.94, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1101.81, -1445.45, 16.22,   0.00, 0.00, -180.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1101.76, -1452.47, 16.22,   0.00, 0.00, -181.62, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1101.77, -1434.88, 16.22,   0.00, 0.00, -180.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1094.31, -1444.92, 23.47,   0.00, 0.00, -180.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1094.37, -1458.37, 23.47,   0.00, 0.00, -179.46, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1093.01, -1517.44, 23.44,   0.00, 0.00, -138.72, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1101.08, -1526.64, 23.42,   0.00, 0.00, -137.34, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1155.12, -1526.38, 23.46,   0.00, 0.00, -42.12, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1163.09, -1517.25, 23.46,   0.00, 0.00, -40.74, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1163.04, -1442.06, 23.40,   0.00, 0.00, -0.12, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19325, 1163.09, -1428.47, 23.50,   0.00, 0.00, 0.54, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+
+	// This is an example 24/7. Normally you'd want to stream these
+	// interior objects in your streamer.
+	
+	// signs
+	CreateDynamicObject(19326, 1155.34, -1446.73, 16.38,   0.00, 0.00, -89.82, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19326, 1155.25, -1443.85, 16.36,   0.00, 0.00, -89.82, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19326, 1155.37, -1436.32, 16.36,   0.00, 0.00, -89.82, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19326, 1155.35, -1433.51, 16.36,   0.00, 0.00, -89.70, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19329, 1155.18, -1440.22, 18.70,   0.00, 0.00, 89.04, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19329, 1161.59, -1431.50, 17.93,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(19329, 1160.40, -1448.79, 17.96,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+
+	// 24/7 food aisles
+	CreateDynamicObject(2543, 1168.18, -1436.39, 14.79,   0.00, 0.00, 0.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2535, 1182.74, -1448.30, 14.70,   0.00, 0.00, -90.96, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1167.10, -1436.40, 14.79,   0.00, 0.00, 0.31, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2538, 1172.31, -1435.32, 14.79,   0.00, 0.00, 180.34, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1171.38, -1435.31, 14.79,   0.00, 0.00, 180.19, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2540, 1169.56, -1435.36, 14.79,   0.00, 0.00, 180.17, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1984, 1157.37, -1442.59, 14.79,   0.00, 0.00, -450.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1163.25, -1448.31, 14.75,   0.00, 0.00, -179.16, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1169.29, -1431.92, 14.75,   0.00, 0.00, 359.80, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1987, 1163.13, -1436.34, 14.79,   0.00, 0.00, 361.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1988, 1164.13, -1436.33, 14.79,   0.00, 0.00, 360.80, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1164.79, -1443.96, 14.79,   0.00, 0.00, 177.73, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1164.70, -1444.98, 14.79,   0.00, 0.00, 358.07, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2942, 1155.52, -1464.68, 15.43,   0.00, 0.00, -71.22, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1987, 1164.12, -1435.32, 14.77,   0.00, 0.00, 180.96, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1171.13, -1443.79, 14.79,   0.00, 0.00, -182.16, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1991, 1173.75, -1439.56, 14.79,   0.00, 0.00, 179.47, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1996, 1169.82, -1439.50, 14.79,   0.00, 0.00, 179.10, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1996, 1174.24, -1435.38, 14.79,   0.00, 0.00, 179.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1991, 1175.23, -1435.39, 14.79,   0.00, 0.00, 179.57, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1995, 1182.65, -1435.10, 14.79,   0.00, 0.00, 90.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1994, 1182.66, -1438.07, 14.79,   0.00, 0.00, 90.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1993, 1182.66, -1437.08, 14.79,   0.00, 0.00, 90.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2542, 1163.78, -1443.92, 14.76,   0.00, 0.00, 178.77, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2536, 1166.88, -1445.07, 14.70,   0.00, 0.00, -0.42, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2542, 1163.70, -1444.93, 14.78,   0.00, 0.00, -1.74, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1984, 1157.34, -1435.71, 14.79,   0.00, 0.00, -450.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1166.31, -1448.28, 14.75,   0.00, 0.00, -180.12, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1172.14, -1443.83, 14.79,   0.00, 0.00, -181.38, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1173.14, -1443.85, 14.79,   0.00, 0.00, -180.96, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1174.13, -1443.88, 14.79,   0.00, 0.00, -181.50, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1981, 1170.76, -1439.52, 14.79,   0.00, 0.00, -181.74, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1981, 1171.76, -1439.54, 14.79,   0.00, 0.00, -180.80, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1981, 1172.75, -1439.55, 14.79,   0.00, 0.00, -180.84, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2535, 1182.75, -1447.28, 14.70,   0.00, 0.00, -90.78, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2535, 1182.74, -1446.28, 14.70,   0.00, 0.00, -90.78, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2535, 1182.74, -1445.26, 14.70,   0.00, 0.00, -90.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2541, 1182.75, -1444.22, 14.79,   0.00, 0.00, -90.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2541, 1182.75, -1443.20, 14.79,   0.00, 0.00, -90.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2541, 1182.74, -1442.16, 14.79,   0.00, 0.00, -90.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1182.76, -1441.18, 14.79,   0.00, 0.00, -90.84, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2541, 1182.79, -1440.17, 14.79,   0.00, 0.00, -90.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1182.72, -1439.15, 14.79,   0.00, 0.00, -90.84, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1182.66, -1431.67, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1181.63, -1431.73, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1180.61, -1431.81, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1179.61, -1431.83, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1178.61, -1431.89, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1177.59, -1431.86, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1993, 1182.66, -1436.09, 14.79,   0.00, 0.00, 90.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1175.50, -1431.82, 14.75,   0.00, 0.00, 361.17, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1172.42, -1431.87, 14.75,   0.00, 0.00, 359.93, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1160.10, -1448.35, 14.75,   0.00, 0.00, -179.94, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1170.45, -1435.33, 14.79,   0.00, 0.00, 181.26, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2545, 1161.82, -1431.84, 14.91,   0.00, 0.00, -90.54, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2545, 1160.82, -1431.83, 14.91,   0.00, 0.00, -90.54, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2545, 1159.81, -1431.86, 14.91,   0.00, 0.00, -90.54, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2545, 1162.82, -1431.87, 14.91,   0.00, 0.00, -90.54, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1988, 1163.13, -1435.34, 14.79,   0.00, 0.00, 541.46, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1988, 1166.07, -1436.32, 14.79,   0.00, 0.00, 360.80, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1987, 1165.07, -1436.33, 14.79,   0.00, 0.00, 361.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1987, 1166.11, -1435.30, 14.77,   0.00, 0.00, 180.96, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1988, 1165.07, -1435.31, 14.79,   0.00, 0.00, 540.44, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2536, 1165.79, -1445.07, 14.70,   0.00, 0.00, -1.20, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2536, 1167.83, -1445.07, 14.70,   0.00, 0.00, -0.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1165.79, -1444.00, 14.79,   0.00, 0.00, 178.27, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1166.81, -1444.03, 14.79,   0.00, 0.00, 179.35, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1167.79, -1444.04, 14.79,   0.00, 0.00, 179.89, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1168.13, -1435.36, 14.79,   0.00, 0.00, 180.05, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1167.10, -1435.37, 14.79,   0.00, 0.00, 180.35, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1170.63, -1440.67, 14.75,   0.00, 0.00, 359.50, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1173.77, -1440.72, 14.75,   0.00, 0.00, 359.82, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1177.30, -1445.31, 14.75,   0.00, 0.00, 359.93, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1996, 1173.36, -1448.30, 14.79,   0.00, 0.00, 179.10, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1981, 1174.33, -1448.32, 14.79,   0.00, 0.00, -181.74, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1981, 1175.32, -1448.35, 14.79,   0.00, 0.00, -180.84, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1981, 1176.30, -1448.37, 14.79,   0.00, 0.00, -180.84, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1991, 1177.28, -1448.37, 14.79,   0.00, 0.00, 179.47, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1996, 1178.33, -1448.36, 14.79,   0.00, 0.00, 179.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1991, 1179.33, -1448.37, 14.79,   0.00, 0.00, 179.57, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1994, 1176.82, -1444.16, 14.79,   0.00, 0.00, -0.84, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1995, 1178.81, -1444.20, 14.79,   0.00, 0.00, -1.26, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1168.89, -1444.06, 14.79,   0.00, 0.00, 178.97, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1169.91, -1444.07, 14.79,   0.00, 0.00, 179.69, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1169.87, -1445.12, 14.79,   0.00, 0.00, -0.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1168.86, -1445.11, 14.79,   0.00, 0.00, 0.31, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2538, 1167.02, -1431.87, 14.79,   0.00, 0.00, 0.42, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1166.03, -1431.89, 14.79,   0.00, 0.00, 0.70, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2540, 1164.04, -1431.91, 14.79,   0.00, 0.00, 0.60, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1165.03, -1431.91, 14.79,   0.00, 0.00, 1.02, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2538, 1176.17, -1436.38, 14.79,   0.00, 0.00, 0.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1174.22, -1436.37, 14.79,   0.00, 0.00, -0.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2540, 1173.22, -1436.36, 14.79,   0.00, 0.00, 0.18, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1175.20, -1436.38, 14.79,   0.00, 0.00, -2.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2540, 1173.26, -1435.31, 14.79,   0.00, 0.00, 180.17, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1991, 1175.74, -1439.58, 14.79,   0.00, 0.00, 179.57, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1996, 1174.74, -1439.57, 14.79,   0.00, 0.00, 179.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1996, 1176.17, -1435.37, 14.79,   0.00, 0.00, 179.24, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1991, 1177.16, -1435.38, 14.79,   0.00, 0.00, 179.57, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2540, 1169.44, -1436.35, 14.79,   0.00, 0.00, 0.18, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1170.43, -1436.35, 14.79,   0.00, 0.00, 0.90, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2539, 1171.34, -1436.33, 14.79,   0.00, 0.00, 0.58, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2538, 1172.22, -1436.32, 14.79,   0.00, 0.00, 0.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1163.40, -1440.68, 14.79,   0.00, 0.00, 360.41, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2536, 1164.49, -1440.73, 14.70,   0.00, 0.00, -1.20, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2536, 1165.49, -1440.75, 14.70,   0.00, 0.00, -0.42, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2536, 1166.50, -1440.75, 14.70,   0.00, 0.00, -0.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1167.61, -1440.64, 14.79,   0.00, 0.00, 0.31, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1168.62, -1440.64, 14.79,   0.00, 0.00, 0.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1168.64, -1439.60, 14.79,   0.00, 0.00, 180.05, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2543, 1167.67, -1439.61, 14.79,   0.00, 0.00, 180.35, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1163.65, -1439.67, 14.79,   0.00, 0.00, 180.61, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1164.68, -1439.67, 14.79,   0.00, 0.00, 179.77, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1165.68, -1439.68, 14.79,   0.00, 0.00, 180.61, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2871, 1166.68, -1439.66, 14.79,   0.00, 0.00, 180.61, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1175.09, -1444.97, 14.79,   0.00, 0.00, -2.46, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1181.63, -1431.73, 14.79,   0.00, 0.00, 3.30, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1174.07, -1444.94, 14.79,   0.00, 0.00, 0.48, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1173.09, -1444.94, 14.79,   0.00, 0.00, -1.20, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1172.11, -1444.92, 14.79,   0.00, 0.00, -1.14, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1990, 1171.12, -1444.91, 14.79,   0.00, 0.00, -0.72, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1168.54, -1448.31, 14.79,   0.00, 0.00, -178.98, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1169.60, -1448.29, 14.79,   0.00, 0.00, -178.98, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1170.67, -1448.30, 14.79,   0.00, 0.00, -178.98, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1171.72, -1448.32, 14.79,   0.00, 0.00, -181.50, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2530, 1175.13, -1443.91, 14.79,   0.00, 0.00, -181.50, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(2012, 1176.82, -1440.75, 14.75,   0.00, 0.00, 359.93, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1995, 1177.71, -1439.63, 14.79,   0.00, 0.00, 0.00, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1994, 1176.73, -1439.63, 14.79,   0.00, 0.00, 0.06, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+	CreateDynamicObject(1993, 1177.83, -1444.15, 14.79,   0.00, 0.00, 179.46, -1, -1, -1, MALL_OBJECT_DRAW_DIST);
+}

+ 463 - 0
pawno/include/YSF.inc

@@ -0,0 +1,463 @@
+/* YSF - kurta999's version */
+#if defined _YSF_included
+	#endinput
+#endif
+#define _YSF_included
+
+#define YSF_ERROR_ISNT_LOADED 					cellmin
+#define YSF_ERROR_PARAMETER_COUNT_ISNT_EQUAL 	(cellmin + 1)
+#define YSF_ERROR_PARAMETER_COUNT_ISNT_ENOUGH 	(cellmin + 2)
+
+// Definitions
+enum E_SERVER_RULE_FLAGS (<<= 1)
+{
+	CON_VARFLAG_DEBUG = 1,
+	CON_VARFLAG_READONLY,
+	CON_VARFLAG_RULE,
+	CON_VARFLAG_UNREMOVABLE
+}
+
+enum E_SCM_EVENT_TYPE
+{
+    SCM_EVENT_PAINTJOB = 1,
+    SCM_EVENT_MOD = 2,
+    SCM_EVENT_RESPRAY = 3,
+    SCM_EVENT_MOD_SHOP = 4
+}
+
+// Execute
+native execute(const command[], saveoutput=0, index=0);
+
+// File functions
+native ffind(const pattern[], filename[], len, &idx);
+native frename(const oldname[], const newname[]);
+
+// Directory functions
+native dfind(const pattern[], filename[], len, &idx);
+native dcreate(const name[]);
+native drename(const oldname[], const newname[]);
+
+// Gamemode restart time
+native SetModeRestartTime(Float:time);
+native Float:GetModeRestartTime();
+
+// Max player/npc change at runtime
+native SetMaxPlayers(maxplayers);
+native SetMaxNPCs(maxnpcs);
+
+// Filterscript functions
+native LoadFilterScript(const scriptname[]); // difference between "rcon loadfs": Return -> True if success, false if not
+native UnLoadFilterScript(const scriptname[]); // ^
+native GetFilterScriptCount();
+native GetFilterScriptName(id, name[], len = sizeof(name));
+
+// Server rule modifications
+native AddServerRule(const name[], const value[], E_SERVER_RULE_FLAGS:flags = CON_VARFLAG_RULE);
+native SetServerRule(const name[], const value[]);
+native IsValidServerRule(const name[]);
+native SetServerRuleFlags(const name[], E_SERVER_RULE_FLAGS:flags);
+native E_SERVER_RULE_FLAGS:GetServerRuleFlags(const name[]);
+
+// Server settings
+native GetServerSettings(&showplayermarkes, &shownametags, &stuntbonus, &useplayerpedanims, &bLimitchatradius, &disableinteriorenterexits, &nametaglos, &manualvehicleengine, &limitplayermarkers, &vehiclefriendlyfire, &defaultcameracollision, &Float:fGlobalchatradius, &Float:fNameTagDrawDistance, &Float:fPlayermarkerslimit);
+native GetNPCCommandLine(npcid, npcscript[], length = sizeof(npcscript));
+
+// Player position sync bounds
+native GetSyncBounds(&Float:hmin, &Float:hmax, &Float:vmin, &Float:vmax);
+native SetSyncBounds(Float:hmin, Float:hmax, Float:vmin, Float:vmax);
+
+// Toggling RCON commands
+native GetRCONCommandName(const cmdname[], changedname[], len = sizeof(changedname));
+native ChangeRCONCommandName(const cmdname[], changedname[]);
+
+// Per AMX function calling
+native CallFunctionInScript(const scriptname[], const function[], const format[], {Float,_}:...);
+
+// Broadcasting console messages
+native EnableConsoleMSGsForPlayer(playerid, color);
+native DisableConsoleMSGsForPlayer(playerid);
+native HasPlayerConsoleMessages(playerid, &color = 0);
+
+// YSF settings
+native YSF_SetTickRate(ticks);
+native YSF_GetTickRate();
+native YSF_EnableNightVisionFix(enable);
+native YSF_IsNightVisionFixEnabled();
+native YSF_ToggleOnServerMessage(toggle);
+native YSF_IsOnServerMessageEnabled();
+native YSF_SetExtendedNetStatsEnabled(enable);
+native YSF_IsExtendedNetStatsEnabled();
+native YSF_SetAFKAccuracy(time_ms);
+native YSF_GetAFKAccuracy();
+
+native SetRecordingDirectory(const dir[]);
+native GetRecordingDirectory(dir[], len = sizeof(dir));
+
+// Nickname
+native IsValidNickName(const name[]);
+native AllowNickNameCharacter(character, bool:allow);
+native IsNickNameCharacterAllowed(character);
+
+// Classes
+native GetAvailableClasses();
+native GetPlayerClass(classid, &teamid, &modelid, &Float:spawn_x, &Float:spawn_y, &Float:spawn_z, &Float:z_angle, &weapon1, &weapon1_ammo, &weapon2, &weapon2_ammo,& weapon3, &weapon3_ammo);
+native EditPlayerClass(classid, teamid, modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
+
+// Timers
+native GetRunningTimers();
+
+// Per player things
+native SetPlayerGravity(playerid, Float:gravity);
+native Float:GetPlayerGravity(playerid);
+native SetPlayerAdmin(playerid, bool:admin); // Set player as RCON admin
+native SetPlayerTeamForPlayer(playerid, teamplayerid, teamid);
+native GetPlayerTeamForPlayer(playerid, teamplayerid);
+native SetPlayerSkinForPlayer(playerid, skinplayerid, skin);
+native GetPlayerSkinForPlayer(playerid, skinplayerid);
+native SetPlayerNameForPlayer(playerid, nameplayerid, const playername[]);
+native GetPlayerNameForPlayer(playerid, nameplayerid, playername[], size = sizeof(playername));
+native SetPlayerFightStyleForPlayer(playerid, styleplayerid, style);
+native GetPlayerFightStyleForPlayer(playerid, skinplayerid);
+native SetPlayerPosForPlayer(playerid, posplayerid, Float:fX, Float:fY, Float:fZ, bool:forcesync = true);
+native SetPlayerRotationQuatForPlayer(playerid, quatplayerid, Float:w, Float:x, Float:y, Float:z, bool:forcesync = true);
+native ApplyAnimationForPlayer(playerid, animplayerid, const animlib[], const animname[], Float:fDelta, loop, lockx, locky, freeze, time); // DOESN'T WORK
+native GetPlayerWeather(playerid);
+native TogglePlayerWidescreen(playerid, bool:set);
+native IsPlayerWidescreenToggled(playerid);
+native GetSpawnInfo(playerid, &teamid, &modelid, &Float:spawn_x, &Float:spawn_y, &Float:spawn_z, &Float:z_angle, &weapon1, &weapon1_ammo, &weapon2, &weapon2_ammo,& weapon3, &weapon3_ammo);
+native GetPlayerSkillLevel(playerid, skill);
+native IsPlayerCheckpointActive(playerid);
+native GetPlayerCheckpoint(playerid, &Float:fX, &Float:fY, &Float:fZ, &Float:fSize);
+native IsPlayerRaceCheckpointActive(playerid);
+native GetPlayerRaceCheckpoint(playerid, &Float:fX, &Float:fY, &Float:fZ, &Float:fNextX, &Float:fNextY, &Float:fNextZ, &Float:fSize);
+native GetPlayerWorldBounds(playerid, &Float:x_max, &Float:x_min, &Float:y_max, &Float:y_min);
+native IsPlayerInModShop(playerid);
+native GetPlayerSirenState(playerid);
+native GetPlayerLandingGearState(playerid);
+native GetPlayerHydraReactorAngle(playerid);
+native Float:GetPlayerTrainSpeed(playerid);
+native Float:GetPlayerZAim(playerid);
+native GetPlayerSurfingOffsets(playerid, &Float:fOffsetX, &Float:fOffsetY, &Float:fOffsetZ);
+native GetPlayerRotationQuat(playerid, &Float:w, &Float:x, &Float:y, &Float:z);
+native GetPlayerDialogID(playerid);
+native GetPlayerSpectateID(playerid);
+native GetPlayerSpectateType(playerid);
+native GetPlayerLastSyncedVehicleID(playerid);
+native GetPlayerLastSyncedTrailerID(playerid);
+
+native SendBulletData(senderid, forplayerid = -1, weaponid, hittype, hitid, Float:fHitOriginX, Float:fHitOriginY, Float:fHitOriginZ, Float:fHitTargetX, Float:fHitTargetY, Float:fHitTargetZ, Float:fCenterOfHitX, Float:fCenterOfHitY, Float:fCenterOfHitZ);
+native ShowPlayerForPlayer(forplayerid, playerid);
+native HidePlayerForPlayer(forplayerid, playerid);
+native AddPlayerForPlayer(forplayerid, playerid, isnpc = 0);
+native RemovePlayerForPlayer(forplayerid, playerid);
+native SetPlayerChatBubbleForPlayer(forplayerid, playerid, const text[], color, Float:drawdistance, expiretime);
+native ResetPlayerMarkerForPlayer(playerid, resetplayerid);
+native SetPlayerVersion(playerid, const version[]);
+native IsPlayerSpawned(playerid);
+native IsPlayerControllable(playerid);
+native SpawnForWorld(playerid);
+native BroadcastDeath(playerid);
+native IsPlayerCameraTargetEnabled(playerid);
+native SetPlayerDisabledKeysSync(playerid, keys, updown = 0, leftright = 0);
+native GetPlayerDisabledKeysSync(playerid, &keys, &updown = 0, &leftright = 0);
+
+// Actors
+native GetActorSpawnInfo(actorid, &skinid, &Float:fX, &Float:fY, &Float:fZ, &Float:fAngle);
+native GetActorSkin(actorid);
+native GetActorAnimation(actorid, animlib[], animlibsize = sizeof(animlib), animname[], animnamesize = sizeof(animname), &Float:fDelta, &loop, &lockx, &locky, &freeze, &time);
+
+// Scoreboard manipulation
+native TogglePlayerScoresPingsUpdate(playerid, bool:toggle);
+native TogglePlayerFakePing(playerid, bool:toggle);
+native SetPlayerFakePing(playerid, ping);
+native TogglePlayerInServerQuery(playerid, bool:toggle);
+native IsPlayerToggledInServerQuery(playerid);
+
+// Pause functions
+native IsPlayerPaused(playerid);
+native GetPlayerPausedTime(playerid);
+
+// Objects get - global
+native Float:GetObjectDrawDistance(objectid);
+native SetObjectMoveSpeed(objectid, Float:fSpeed);
+native Float:GetObjectMoveSpeed(objectid);
+native GetObjectTarget(objectid, &Float:fX, &Float:fY, &Float:fZ);
+native GetObjectAttachedData(objectid, &attached_vehicleid, &attached_objectid, &attached_playerid);
+native GetObjectAttachedOffset(objectid, &Float:fX, &Float:fY, &Float:fZ, &Float:fRotX, &Float:fRotY, &Float:fRotZ);
+native IsObjectMaterialSlotUsed(objectid, materialindex); // Return values: 1 = material, 2 = material text
+native GetObjectMaterial(objectid, materialindex, &modelid, txdname[], txdnamelen = sizeof(txdname), texturename[], texturenamelen = sizeof(texturename), &materialcoor);
+native GetObjectMaterialText(objectid, materialindex, text[], textlen = sizeof(text), &materialsize, fontface[], fontfacelen = sizeof(fontface), &fontsize, &bold, &fontcolor, &backcolor, &textalignment);
+native IsObjectNoCameraCol(objectid);
+
+// Objects get - player
+native Float:GetPlayerObjectDrawDistance(playerid, objectid);
+native SetPlayerObjectMoveSpeed(playerid, objectid, Float:fSpeed);
+native Float:GetPlayerObjectMoveSpeed(playerid, objectid);
+native Float:GetPlayerObjectTarget(playerid, objectid, &Float:fX, &Float:fY, &Float:fZ);
+native GetPlayerObjectAttachedData(playerid, objectid, &attached_vehicleid, &attached_objectid, &attached_playerid);
+native GetPlayerObjectAttachedOffset(playerid, objectid, &Float:fX, &Float:fY, &Float:fZ, &Float:fRotX, &Float:fRotY, &Float:fRotZ);
+native IsPlayerObjectMaterialSlotUsed(playerid, objectid, materialindex); // Return values: 1 = material, 2 = material text
+native GetPlayerObjectMaterial(playerid, objectid, materialindex, &modelid, txdname[], txdnamelen = sizeof(txdname), texturename[], texturenamelen = sizeof(texturename), &materialcolor);
+native GetPlayerObjectMaterialText(playerid, objectid, materialindex, text[], textlen = sizeof(text), &materialsize, fontface[], fontfacelen = sizeof(fontface), &fontsize, &bold, &fontcolor, &backcolor, &textalignment);
+native IsPlayerObjectNoCameraCol(playerid, objectid);
+native GetPlayerSurfingPlayerObjectID(playerid);
+native GetPlayerCameraTargetPlayerObj(playerid);
+native GetObjectType(playerid, objectid);
+
+// special - for attached objects
+native GetPlayerAttachedObject(playerid, index, &modelid, &bone, &Float:fX, &Float:fY, &Float:fZ, &Float:fRotX, &Float:fRotY, &Float:fRotZ, &Float:fSacleX, &Float:fScaleY, &Float:fScaleZ, &materialcolor1, &materialcolor2);
+
+//n_ative AttachPlayerObjectToPlayer(objectplayer, objectid, attachplayer, Float:OffsetX, Float:OffsetY, Float:OffsetZ, Float:rX, Float:rY, Float:rZ);
+native AttachPlayerObjectToObject(playerid, objectid, attachtoid, Float:OffsetX, Float:OffsetY, Float:OffsetZ, Float:RotX, Float:RotY, Float:RotZ, SyncRotation = 1);
+
+// RakNet ban functions
+native ClearBanList();
+native IsBanned(const ipaddress[]);
+
+// RakNet
+native SetTimeoutTime(playerid, time_ms);
+native GetLocalIP(index, localip[], len = sizeof(localip));
+
+// Exclusive RPC broadcast
+native SetExclusiveBroadcast(toggle);
+native BroadcastToPlayer(playerid, toggle=1);
+
+// Vehicle functions
+native GetVehicleSpawnInfo(vehicleid, &Float:fX, &Float:fY, &Float:fZ, &Float:fRot, &color1, &color2);
+native SetVehicleSpawnInfo(vehicleid, modelid, Float:fX, Float:fY, Float:fZ, Float:fAngle, color1, color2, respawntime = -2, interior = -2);
+#if !defined GetVehicleColor
+native GetVehicleColor(vehicleid, &color1, &color2);
+#endif
+#if !defined GetVehiclePaintjob
+native GetVehiclePaintjob(vehicleid);
+#endif
+#if !defined GetVehicleInterior
+native GetVehicleInterior(vehicleid);
+#endif
+native GetVehicleNumberPlate(vehicleid, plate[], len = sizeof(plate));
+native SetVehicleRespawnDelay(vehicleid, delay);
+native GetVehicleRespawnDelay(vehicleid);
+native SetVehicleOccupiedTick(vehicleid, ticks);
+native GetVehicleOccupiedTick(vehicleid); // GetTickCount() - GetVehicleOccupiedTick(vehicleid) = time passed since vehicle is occupied, in ms
+native SetVehicleRespawnTick(vehicleid, ticks);
+native GetVehicleRespawnTick(vehicleid); // GetTickCount() - GetVehicleRespawnTick(vehicleid) = time passed since vehicle spawned, in ms
+native GetVehicleLastDriver(vehicleid);
+native GetVehicleCab(vehicleid);
+native HasVehicleBeenOccupied(vehicleid);
+native SetVehicleBeenOccupied(vehicleid, occupied);
+native IsVehicleOccupied(vehicleid);
+native IsVehicleDead(vehicleid);
+native SetVehicleParamsSirenState(vehicleid, sirenState);
+native ToggleVehicleSirenEnabled(vehicleid, enabled);
+native IsVehicleSirenEnabled(vehicleid);
+native GetVehicleMatrix(vehicleid, &Float:rightX, &Float:rightY, &Float:rightZ, &Float:upX, &Float:upY, &Float:upZ, &Float:atX, &Float:atY, &Float:atZ);
+native GetVehicleModelCount(modelid);
+native GetVehicleModelsUsed();
+
+// Gangzones - Global
+native IsValidGangZone(zoneid);
+native IsPlayerInGangZone(playerid, zoneid);
+native IsGangZoneVisibleForPlayer(playerid, zoneid);
+native GangZoneGetColorForPlayer(playerid, zoneid);
+native GangZoneGetFlashColorForPlayer(playerid, zoneid);
+native IsGangZoneFlashingForPlayer(playerid, zoneid);
+native GangZoneGetPos(zoneid, &Float:fMinX, &Float:fMinY, &Float:fMaxX, &Float:fMaxY);
+
+// Gangzones - Player
+native CreatePlayerGangZone(playerid, Float:minx, Float:miny, Float:maxx, Float:maxy);
+native PlayerGangZoneDestroy(playerid, zoneid);
+native PlayerGangZoneShow(playerid, zoneid, color);
+native PlayerGangZoneHide(playerid, zoneid);
+native PlayerGangZoneFlash(playerid, zoneid, color);
+native PlayerGangZoneStopFlash(playerid, zoneid);
+native IsValidPlayerGangZone(playerid, zoneid);
+native IsPlayerInPlayerGangZone(playerid, zoneid);
+native IsPlayerGangZoneVisible(playerid, zoneid);
+native PlayerGangZoneGetColor(playerid, zoneid);
+native PlayerGangZoneGetFlashColor(playerid, zoneid);
+native IsPlayerGangZoneFlashing(playerid, zoneid);
+native PlayerGangZoneGetPos(playerid, zoneid, &Float:fMinX, &Float:fMinY, &Float:fMaxX, &Float:fMaxY);
+
+// Textdraw - Global
+native IsValidTextDraw(Text:textdrawid);
+native IsTextDrawVisibleForPlayer(playerid, Text:textdrawid);
+native TextDrawGetString(Text:textdrawid, text[], len = sizeof(text));
+native TextDrawSetPos(Text:textdrawid, Float:fX, Float:fY); // You can change textdraw pos with it, but you need to use TextDrawShowForPlayer() after that
+native TextDrawGetLetterSize(Text:textdrawid, &Float:fX, &Float:fY);
+native TextDrawGetTextSize(Text:textdrawid, &Float:fX, &Float:fY);
+native TextDrawGetPos(Text:textdrawid, &Float:fX, &Float:fY);
+native TextDrawGetColor(Text:textdrawid);
+native TextDrawGetBoxColor(Text:textdrawid);
+native TextDrawGetBackgroundColor(Text:textdrawid);
+native TextDrawGetShadow(Text:textdrawid);
+native TextDrawGetOutline(Text:textdrawid);
+native TextDrawGetFont(Text:textdrawid);
+native TextDrawIsBox(Text:textdrawid);
+native TextDrawIsProportional(Text:textdrawid);
+native TextDrawIsSelectable(Text:textdrawid);
+native TextDrawGetAlignment(Text:textdrawid);
+native TextDrawGetPreviewModel(Text:textdrawid);
+native TextDrawGetPreviewRot(Text:textdrawid, &Float:fRotX, &Float:fRotY, &Float:fRotZ, &Float:fZoom);
+native TextDrawGetPreviewVehCol(Text:textdrawid, &color1, &color2);
+native TextDrawSetStringForPlayer(Text:textdrawid, playerid, const string[], {Float,_}:...);
+
+// Textdraw - Player
+native IsValidPlayerTextDraw(playerid, PlayerText:textdrawid);
+native IsPlayerTextDrawVisible(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetString(playerid, PlayerText:textdrawid, text[], len = sizeof(text));
+native PlayerTextDrawSetPos(playerid, PlayerText:textdrawid, Float:fX, Float:fY);
+native PlayerTextDrawGetLetterSize(playerid, PlayerText:textdrawid, &Float:fX, &Float:fY);
+native PlayerTextDrawGetTextSize(playerid, PlayerText:textdrawid, &Float:fX, &Float:fY);
+native PlayerTextDrawGetPos(playerid, PlayerText:textdrawid, &Float:fX, &Float:fY);
+native PlayerTextDrawGetColor(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetBoxColor(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetBackgroundCol(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetShadow(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetOutline(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetFont(playerid, PlayerText:textdrawid);
+native PlayerTextDrawIsBox(playerid, PlayerText:textdrawid);
+native PlayerTextDrawIsProportional(playerid, PlayerText:textdrawid);
+native PlayerTextDrawIsSelectable(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetAlignment(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetPreviewModel(playerid, PlayerText:textdrawid);
+native PlayerTextDrawGetPreviewRot(playerid, PlayerText:textdrawid, &Float:fRotX, &Float:fRotY, &Float:fRotZ, &Float:fZoom);
+native PlayerTextDrawGetPreviewVehCol(playerid, PlayerText:textdrawid, &color1, &color2);
+
+// 3D Text - Global
+native IsValid3DTextLabel(Text3D:id);
+native Is3DTextLabelStreamedIn(playerid, Text3D:id);
+native Get3DTextLabelText(Text3D:id, text[], len = sizeof(text));
+native Get3DTextLabelColor(Text3D:id);
+native Get3DTextLabelPos(Text3D:id, &Float:fX, &Float:fY, &Float:fZ);
+native Float:Get3DTextLabelDrawDistance(Text3D:id);
+native Get3DTextLabelLOS(Text3D:id);
+native Get3DTextLabelVirtualWorld(Text3D:id);
+native Get3DTextLabelAttachedData(Text3D:id, &attached_playerid, &attached_vehicleid);
+
+// 3D Text - Player
+native IsValidPlayer3DTextLabel(playerid, PlayerText3D:id);
+native GetPlayer3DTextLabelText(playerid, PlayerText3D:id, text[], len = sizeof(text));
+native GetPlayer3DTextLabelColor(playerid, PlayerText3D:id);
+native GetPlayer3DTextLabelPos(playerid, PlayerText3D:id, &Float:fX, &Float:fY, &Float:fZ);
+native Float:GetPlayer3DTextLabelDrawDist(playerid, PlayerText3D:id);
+native GetPlayer3DTextLabelLOS(playerid, PlayerText3D:id);
+native GetPlayer3DTextLabelVirtualW(playerid, PlayerText3D:id);
+native GetPlayer3DTextLabelAttached(playerid, PlayerText3D:id, &attached_playerid, &attached_vehicleid);
+
+// Menu
+native IsMenuDisabled(Menu:menuid);
+native IsMenuRowDisabled(Menu:menuid, row);
+native GetMenuColumns(Menu:menuid);
+native GetMenuItems(Menu:menuid, column);
+native GetMenuPos(Menu:menuid, &Float:fX, &Float:fY);
+native GetMenuColumnWidth(Menu:menuid, &Float:fColumn1, &Float:fColumn2);
+native GetMenuColumnHeader(Menu:menuid, column, header[], len = sizeof(header));
+native GetMenuItem(Menu:menuid, column, itemid, item[], len = sizeof(item));
+
+// Pickups - Global
+native IsValidPickup(pickupid);
+native IsPickupStreamedIn(playerid, pickupid);
+native GetPickupPos(pickupid, &Float:fX, &Float:fY, &Float:fZ);
+native GetPickupModel(pickupid);
+native GetPickupType(pickupid);
+native GetPickupVirtualWorld(pickupid);
+/*
+// Pickups - Player
+native CreatePlayerPickup(playerid, model, type, Float:X, Float:Y, Float:Z, virtualworld = 0);
+native DestroyPlayerPickup(playerid, pickupid);
+native IsValidPlayerPickup(playerid, pickupid);
+native IsPlayerPickupStreamedIn(playerid, pickupid);
+native GetPlayerPickupPos(playerid, pickupid, &Float:fX, &Float:fY, &Float:fZ);
+native GetPlayerPickupModel(playerid, pickupid);
+native GetPlayerPickupType(playerid, pickupid);
+native GetPlayerPickupVirtualWorld(playerid, pickupid);
+*/
+// Y_Less's model sizes inc
+native GetColCount();
+native Float:GetColSphereRadius(modelid);
+native GetColSphereOffset(modelid, &Float:fX, &Float:fY, &Float:fZ);
+
+// Formatting
+native SendClientMessagef(playerid, color, const message[], {Float,_}:...);
+native SendClientMessageToAllf(color, const message[], {Float,_}:...);
+native GameTextForPlayerf(playerid, displaytime, style, const message[], {Float,_}:...);
+native GameTextForAllf(displaytime, style, const message[], {Float,_}:...);
+native SendPlayerMessageToPlayerf(playerid, senderid, const message[], {Float,_}:...);
+native SendPlayerMessageToAllf(senderid, const message[], {Float,_}:...);
+native SendRconCommandf(const command[], {Float,_}:...);
+
+// Callbacks
+forward OnPlayerEnterGangZone(playerid, zoneid);
+forward OnPlayerLeaveGangZone(playerid, zoneid);
+forward OnPlayerEnterPlayerGangZone(playerid, zoneid);
+forward OnPlayerLeavePlayerGangZone(playerid, zoneid);
+forward OnPlayerPickUpPlayerPickup(playerid, pickupid);
+forward OnPlayerPauseStateChange(playerid, pausestate);
+forward OnPlayerStatsAndWeaponsUpdate(playerid);
+forward OnRemoteRCONPacket(const ipaddr[], port, const password[], success, const command[]);
+forward OnServerMessage(const msg[]);
+forward OnPlayerClientGameInit(playerid, &usecjwalk, &limitglobalchat, &Float:globalchatradius, &Float:nametagdistance, &disableenterexits, &nametaglos, &manualvehengineandlights,
+				&spawnsavailable, &shownametags, &showplayermarkers, &onfoot_rate, &incar_rate, &weapon_rate, &lacgompmode, &vehiclefriendlyfire);
+forward OnOutcomeScmEvent(playerid, issuerid, E_SCM_EVENT_TYPE:eventid, vehicleid, arg1, arg2);
+forward OnServerQueryInfo(const ipaddr[], hostname[51], gamemode[31], language[31]);
+forward OnSystemCommandExecute(const line_output[], retval, index, success, line_current, line_total);
+
+//////////////////////////////////////////////////////////////
+// Fixes
+//////////////////////////////////////////////////////////////
+
+// No comment..
+#if !defined IsValidVehicle
+	native IsValidVehicle(vehicleid);
+#endif
+
+#if !defined GetGravity
+	native Float:GetGravity();
+#endif
+
+#if !defined GetWeather
+	#define GetWeather() GetConsoleVarAsInt("weather")
+#endif
+native GetWeaponSlot(weaponid);
+
+enum
+{
+	BS_BOOL,
+	BS_CHAR,
+	BS_UNSIGNEDCHAR,
+	BS_SHORT,
+	BS_UNSIGNEDSHORT,
+	BS_INT,
+	BS_UNSIGNEDINT,
+	BS_FLOAT,
+	BS_STRING
+};
+
+// Developer functions
+native SendRPC(playerid, RPC, {Float,_}:...); // playerid == -1 -> broadcast
+native SendData(playerid, {Float,_}:...); // playerid == -1 -> broadcast
+
+/* EXAMPLE
+CMD:pickup(playerid, params[])
+{
+	new
+	    Float:X, Float:Y, Float:Z;
+	GetPlayerPos(playerid, X, Y, Z);
+
+    SendRPC(playerid, 95, // rpcid
+		BS_INT, strval(params), // int - pickupid
+		BS_INT, 1222,    // int - modelid
+		BS_INT, 19,     // int   - type
+		BS_FLOAT, X + 2.0,   // float
+		BS_FLOAT, Y,     // float
+		BS_FLOAT, Z);    // float
+	return 1;
+}
+
+CMD:destroypickup(playerid, params[])
+{
+	SendRPC(playerid, 63, // rpcid
+		BS_INT, strval(params));    // int - pickupid
+	return 1;
+}
+*/

+ 1022 - 0
pawno/include/YSI.inc

@@ -0,0 +1,1022 @@
+/*----------------------------------------------------------------------------*\
+                                        =======================================
+                                          YSI - YSI Server Includes functions
+                                        =======================================
+Description:
+        Lists all the functions available in YSI for PAWNO.
+Legal:
+        Version: MPL 1.1
+       
+        The contents of this file are subject to the Mozilla Public License Version
+        1.1 (the "License"); you may not use this file except in compliance with
+        the License. You may obtain a copy of the License at
+        http://www.mozilla.org/MPL/
+       
+        Software distributed under the License is distributed on an "AS IS" basis,
+        WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+        for the specific language governing rights and limitations under the
+        License.
+       
+        The Original Code is the YSI group include.
+       
+        The Initial Developer of the Original Code is Alex "Y_Less" Cole.
+        Portions created by the Initial Developer are Copyright (C) 2011
+        the Initial Developer. All Rights Reserved.
+       
+        Contributors:
+                ZeeX, koolk, JoeBullet/Google63, g_aSlice/Slice
+       
+        Thanks:
+                JoeBullet/Google63 - Handy arbitrary ASM jump code using SCTRL.
+                ZeeX - Very productive conversations.
+                koolk - IsPlayerinAreaEx code.
+                TheAlpha - Danish translation.
+                breadfish - German translation.
+                Fireburn - Dutch translation.
+                yom - French translation.
+                50p - Polish translation.
+                Zamaroht - Spanish translation.
+                Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
+                        for me to strive to better.
+                Pixels^ - Running XScripters where the idea was born.
+                Matite - Pestering me to release it and using it.
+       
+        Very special thanks to:
+                Thiadmer - PAWN, whose limits continue to amaze me!
+                Kye/Kalcor - SA:MP.
+                SA:MP Team past, present and future - SA:MP.
+       
+Version:
+        1.0
+Changelog:
+        25/02/12:
+                First version
+\*----------------------------------------------------------------------------*/
+ 
+#include <YSI\internal\y_version>
+ 
+/*
+ 
+native
+native __y_als__();
+native
+native
+native
+ 
+*/
+ 
+// CAN'T include by default.
+//#include <YSI\y_als>
+ 
+/*
+ 
+native
+native __y_amx__();
+native
+native
+native AMX_GetBaseCount(E_AMX_TABLE:table, &base, &count)
+native AMX_GetGlobalAddress(...);
+native AMX_Read(addr)
+native AMX_Write(addr, value)
+native AMX_ReadString(addr, str[], len = sizeof (str))
+native AMX_WriteString(addr, const str[], len = sizeof (str))
+native AMX_ReadArray(addr, dest[], len = sizeof (dest))
+native AMX_WriteArray(addr, const src[], len = sizeof (src))
+native
+native AMX_GetPublicEntry(idx, &buffer, const pattern[] = "")
+native AMX_GetNativeEntry(idx, &buffer, const pattern[] = "")
+native AMX_GetLibraryEntry(idx, &buffer, const pattern[] = "")
+native AMX_GetPubvarEntry(idx, &buffer, const pattern[] = "")
+native AMX_GetTagEntry(idx, &buffer, const pattern[] = "")
+native AMX_GetEntry(E_AMX_TABLE:table, idx, &buffer, const pattern[] = "")
+native
+native AMX_GetPublicEntryPrefix(idx, &buffer, pattern)
+native AMX_GetNativeEntryPrefix(idx, &buffer, pattern)
+native AMX_GetLibraryEntryPrefix(idx, &buffer, pattern)
+native AMX_GetPubvarEntryPrefix(idx, &buffer, pattern)
+native AMX_GetTagEntryPrefix(idx, &buffer, pattern)
+native AMX_GetEntryPrefix(E_AMX_TABLE:table, idx, &buffer, pattern)
+native
+native AMX_GetPublicEntrySuffix(idx, &buffer, pattern)
+native AMX_GetNativeEntrySuffix(idx, &buffer, pattern)
+native AMX_GetLibraryEntrySuffix(idx, &buffer, pattern)
+native AMX_GetPubvarEntrySuffix(idx, &buffer, pattern)
+native AMX_GetTagEntrySuffix(idx, &buffer, pattern)
+native AMX_GetEntrySuffix(E_AMX_TABLE:table, idx, &buffer, pattern)
+native
+native AMX_GetPublicName(idx, buffer[32], const pattern[] = "")
+native AMX_GetNativeName(idx, buffer[32], const pattern[] = "")
+native AMX_GetLibraryName(idx, buffer[32], const pattern[] = "")
+native AMX_GetPubvarName(idx, buffer[32], const pattern[] = "")
+native AMX_GetTagName(idx, buffer[32], const pattern[] = "")
+native AMX_GetName(E_AMX_TABLE:table, idx, buffer[32], const pattern[] = "")
+native
+native AMX_GetPublicNamePrefix(idx, buffer[32], pattern)
+native AMX_GetNativeNamePrefix(idx, buffer[32], pattern)
+native AMX_GetLibraryNamePrefix(idx, buffer[32], pattern)
+native AMX_GetPubvarNamePrefix(idx, buffer[32], pattern)
+native AMX_GetTagNamePrefix(idx, buffer[32], pattern)
+native AMX_GetNamePrefix(E_AMX_TABLE:table, idx, buffer[32], pattern)
+native
+native AMX_GetPublicNameSuffix(idx, buffer[32], pattern)
+native AMX_GetNativeNameSuffix(idx, buffer[32], pattern)
+native AMX_GetLibraryNameSuffix(idx, buffer[32], pattern)
+native AMX_GetPubvarNameSuffix(idx, buffer[32], pattern)
+native AMX_GetTagNameSuffix(idx, buffer[32], pattern)
+native AMX_GetNameSuffix(E_AMX_TABLE:table, idx, buffer[32], pattern)
+native
+native AMX_GetPublicPointer(idx, &buffer, const pattern[] = "")
+native AMX_GetNativePointer(idx, &buffer, const pattern[] = "")
+native AMX_GetLibraryPointer(idx, &buffer, const pattern[] = "")
+native AMX_GetPubvarPointer(idx, &buffer, const pattern[] = "")
+native AMX_GetTagPointer(idx, &buffer, const pattern[] = "")
+native AMX_GetPointer(E_AMX_TABLE:table, idx, &buffer, const pattern[] = "")
+native
+native AMX_GetPublicPointerPrefix(idx, &buffer, pattern)
+native AMX_GetNativePointerPrefix(idx, &buffer, pattern)
+native AMX_GetLibraryPointerPrefix(idx, &buffer, pattern)
+native AMX_GetPubvarPointerPrefix(idx, &buffer, pattern)
+native AMX_GetTagPointerPrefix(idx, &buffer, pattern)
+native AMX_GetPointerPrefix(E_AMX_TABLE:table, idx, &buffer, pattern)
+native
+native AMX_GetPublicPointerSuffix(idx, &buffer, pattern)
+native AMX_GetNativePointerSuffix(idx, &buffer, pattern)
+native AMX_GetLibraryPointerSuffix(idx, &buffer, pattern)
+native AMX_GetPubvarPointerSuffix(idx, &buffer, pattern)
+native AMX_GetTagPointerSuffix(idx, &buffer, pattern)
+native AMX_GetPointerSuffix(E_AMX_TABLE:table, idx, &buffer, pattern)
+native
+native AMX_GetPublicValue(idx, &buffer, const pattern[] = "")
+native AMX_GetNativeValue(idx, &buffer, const pattern[] = "")
+native AMX_GetLibraryValue(idx, &buffer, const pattern[] = "")
+native AMX_GetPubvarValue(idx, &buffer, const pattern[] = "")
+native AMX_GetTagValue(idx, &buffer, const pattern[] = "")
+native AMX_GetValue(E_AMX_TABLE:table, idx, &buffer, const pattern[] = "")
+native
+native AMX_GetPublicValuePrefix(idx, &buffer, pattern)
+native AMX_GetNativeValuePrefix(idx, &buffer, pattern)
+native AMX_GetLibraryValuePrefix(idx, &buffer, pattern)
+native AMX_GetPubvarValuePrefix(idx, &buffer, pattern)
+native AMX_GetTagValuePrefix(idx, &buffer, pattern)
+native AMX_GetValuePrefix(E_AMX_TABLE:table, idx, &buffer, pattern)
+native
+native AMX_GetPublicValueSuffix(idx, &buffer, pattern)
+native AMX_GetNativeValueSuffix(idx, &buffer, pattern)
+native AMX_GetLibraryValueSuffix(idx, &buffer, pattern)
+native AMX_GetPubvarValueSuffix(idx, &buffer, pattern)
+native AMX_GetTagValueSuffix(idx, &buffer, pattern)
+native AMX_GetValueSuffix(E_AMX_TABLE:table, idx, &buffer, pattern)
+native
+ 
+*/
+ 
+#include <YSI\y_amx>
+ 
+/*
+ 
+native
+native __y_areas__();
+native
+native
+native Area_AddCube(Float:x0, Float:y0, Float:z0, Float:x1, Float:y1, Float:z1);
+native Area_AddBox(Float:minx, Float:miny, Float:maxx, Float:maxy);
+native Area_AddCircle(Float:x, Float:y, Float:r, Float:h = FLOAT_INFINITY)
+native Area_AddSphere(Float:x, Float:y, Float:z, Float:r);
+native Area_AddPoly(Float:x1, Float:y1, Float:x2, Float:y2, Float:x3, Float:y3, Float:...);
+native Area_Delete(area);
+native Area_GetPlayerArea(playerid);
+native Area_SetPlayer(area, playerid, bool:set);
+native bool:Area_GetPlayer(area, playerid);
+native Area_SetAllPlayers(area, bool:set);
+native Area_SetWorld(area, world, bool:set);
+native bool:Area_GetWorld(area, world);
+native Area_SetAllWorlds(area, bool:set);
+native bool:Area_IsValid(area);
+native bool:Area_IsEmpty(area);
+native
+ 
+*/
+ 
+#include <YSI\y_areas>
+ 
+/*
+ 
+native
+native __y_bintree__();
+native
+native
+native Bintree_Generate(BinaryTree:output<>, input[][E_BINTREE_INPUT], size);
+native Bintree_Reset(BinaryTree:tree<>, pointer = 0);
+native Bintree_FindValue(BinaryTree:tree<>, value, &cont = 0, &old = 0);
+native Bintree_Add(BinaryTree:data<>, pointer, value, offset, maxsize = sizeof (data));
+native Bintree_Delete(BinaryTree:source<>, index, count);
+native Bintree_UpdatePointers(BinaryTree:data<>, offset, size, mod = -1);
+native
+ 
+*/
+ 
+#include <YSI\y_bintree>
+ 
+/*
+ 
+native
+native __y_bit__();
+native
+native
+native Bit_Set(BitArray:array<>, slot, bool:set);
+native Bit_SetAll(BitArray:array<>, bool:set, size = sizeof (array));
+native Bit_Get(BitArray:array<>, slot);
+native Bit_Let(BitArray:array<>, slot);
+native Bit_Vet(BitArray:array<>, slot);
+native Bit_Slot(value);
+native Bit_Mask(value);
+native Bit_GetCount(BitArray:array<>, size = sizeof (array));
+native Bit_Display(BitArray:array<>, size = sizeof (array));
+native Iterator:Bits(BitArray:array<>);
+native Iterator:Blanks(BitArray:array<>);
+native
+native bits();
+native bitsof();
+native
+ 
+*/
+ 
+#include <YSI\y_bit>
+ 
+/*
+ 
+native
+native __y_cell__();
+native
+native
+native Cell_ReverseBits({Float, _}:data);
+native Cell_ReverseNibbles({Float, _}:data);
+native Cell_ReverseBytes({Float, _}:data);
+native Cell_CountBits({Float, _}:data);
+native Cell_GetLowestBit({Float, _}:data);
+native Cell_GetLowestComponent({Float, _}:data);
+native
+ 
+*/
+ 
+#include <YSI\y_cell>
+ 
+/*
+ 
+native
+native __y_classes__();
+native
+native
+native Class_Add(skin, Float:x, Float:y, Float:z, Float:a, ...);
+native
+native Class_AddEx(Group:forgroup, Group:setgroup, skin, Float:x, Float:y, Float:z, Float:a, ...);
+native Class_AddForGroup(Group:group, skin, Float:x, Float:y, Float:z, Float:a, ...);
+native Class_AddWithGroupSet(Group:group, skin, Float:x, Float:y, Float:z, Float:a, ...);
+native Class_Enable(classid, bool:toggle);
+native Class_Delete(classid);
+native Class_SetPlayer(classid, playerid, bool:s);
+native bool:Class_GetPlayer(classid, playerid);
+native Class_Get(playerid);
+native Class_Goto(playerid, playerclass);
+native
+native Class_DisableSelection(playerid);
+native Class_DisableReselection(playerid);
+native Class_EnableReselection(playerid);
+native Class_ForceReselection(playerid);
+native Class_ReturnToSelection(playerid);
+native
+ 
+*/
+ 
+#include <YSI\y_classes>
+ 
+/*
+ 
+native
+native __y_colours__();
+native __y_colors__();
+native
+native
+native SetColoursCanHaveSpaces(bool:set);
+native SetColour(const name[], color);
+native SetColourHash(hash, color);
+native GetColour(const name[], alpha = 0xAA);
+native GetColourStream(const str[], &idx, alpha = 0xAA);
+native GetColourHash(hash, alpha = 0xAA);
+native
+ 
+*/
+ 
+#include <YSI\y_colours>
+ 
+/*
+ 
+native
+native __y_commands__();
+native
+native
+native Command_AddAlt(commandid, altname[]);
+native Command_AddAltNamed(command[], altname[]);
+native Command_SetPlayer(commandid, playerid, bool:set);
+native Command_SetPlayerNamed(command[], playerid, bool:set);
+native
+native Command_SetDeniedReturn(bool:set);
+native bool:Command_GetDeniedReturn();
+native Command_SetIllegalReturn(bool:set);
+native bool:Command_GetIllegalReturn();
+native Command_SetUnknownReturn(bool:set);
+native bool:Command_GetUnknownReturn();
+native Command_SetDisconnectReturn(bool:set);
+native bool:Command_GetDisconnectReturn();
+native
+native Command_GetID(command[]);
+native bool:Command_GetPlayer(commandid, playerid);
+native bool:Command_GetPlayerNamed(command[], playerid);
+native Command_Remove(commandid);
+native Command_RemoveNamed(command[]);
+native Command_ReProcess(playerid, cmdtext[], help);
+native Command_GetName(commandid);
+native Command_GetDisplay(commandid, playerid);
+native Command_GetDisplayNamed(command[], playerid);
+native Command_GetPlayerCommandCount(playerid);
+native Command_GetNext(index, playerid);
+native
+native Command_SetProvider(p);
+native Command_GetProvider();
+native Command_SetPlayerProvider(playerid, p);
+native Command_GetPlayerProvider(playerid);
+native
+ 
+*/
+ 
+#include <YSI\y_commands>
+ 
+/*
+ 
+native
+native __y_debug__();
+native
+native
+native P_level(str[], {Float, _}:...);
+native P_I(str[], {Float, _}:...);
+native P_W(str[], {Float, _}:...);
+native P_E(str[], {Float, _}:...);
+native P_F(str[], {Float, _}:...);
+native P_C(str[], {Float, _}:...);
+native
+ 
+*/
+ 
+#include <YSI\y_debug>
+ 
+/*
+ 
+native
+native __y_dialog__();
+native
+native
+native Dialog_Show(playerid, style, title[], caption[], button1[], button2[] = "", dialogid = -1);
+native Dialog_ShowCallback(playerid, using:callback[], style, title[], caption[], button1[], button2[] = "", dialogid = -1);
+native
+native Dialog_ObtainID();
+native Dialog_TryObtainID(id);
+native Dialog_Get(playerid);
+native Dialog_Garbage(dialogid);
+native Dialog_Free(dialogid);
+native Dialog_Set(playerid, dialogid);
+native Dialog_ShowCallbackData(playerid, callback[E_CALLBACK_DATA], style, title[], caption[], button1[], button2[] = "", dialogid = -1);
+native Dialog_Hide(playerid);
+native Dialog_SetCallback(dialogid, using:callback[]);
+native Dialog_SetCallbackData(dialogid, callback[E_CALLBACK_DATA]);
+native
+ 
+*/
+ 
+#include <YSI\y_dialog>
+ 
+/*
+ 
+native
+native __y_flooding__();
+native
+native
+native SetMaxConnections(max = -1, e_FLOOD_ACTION:action = e_FLOOD_ACTION_BLOCK)
+native
+ 
+*/
+ 
+#include <YSI\y_flooding>
+ 
+/*
+ 
+native
+native __y_groups__();
+native
+native
+native Group:Group_Create(name[]);
+native Group_Destroy(Group:group);
+native Group_SetPlayer(Group:group, playerid, bool:s);
+native bool:Group_GetPlayer(Group:group, playerid);
+native
+native Group_SetCommand(Group:group, commandid, bool:s);
+native Group_SetCommandDefault(Group:group, bool:s);
+native Group_SetGlobalCommand(commandid, bool:s);
+native Group_SetGlobalCommandDefault(bool:s);
+native
+native Group_SetArea(Group:group, area, bool:s);
+native Group_SetAreaDefault(Group:group, bool:s);
+native Group_SetGlobalArea(area, bool:s);
+native Group_SetGlobalAreaDefault(bool:s);
+native
+native Group_SetClass(Group:group, class, bool:s);
+native Group_SetClassDefault(Group:group, bool:s);
+native Group_SetGlobalClass(class, bool:s);
+native Group_SetGlobalCalssDefault(bool:s);
+native
+native Iterator:PlayerGroups(playerid)
+native Iterator:Group(Group:group)
+native
+native Group:Group_SetBalanced(playerid, Group:...)
+native Group_GetColour(Group:group);
+native Group_GetColor(Group:group);
+native Group_SetColour(Group:group, colour);
+native Group_SetColor(Group:group, color);
+native bool:Group_GetGang(Group:group);
+native Group_SetGang(Group:group, bool:set);
+native Group:Group_GetID(name[]);
+native Group_GetName(Group:group);
+native Group_SetName(Group:group, name[]);
+native
+ 
+*/
+ 
+#include <YSI\y_groups>
+ 
+/*
+ 
+native
+native __y_hooks__();
+native
+native
+native hook();
+native
+ 
+*/
+ 
+// Is included as then they can use hooks straight off.
+#include <YSI\y_hooks>
+ 
+/*
+ 
+native
+native __y_ini__();
+native
+native
+native bool:INI_ParseFile(fname[], remoteFormat[], bool:bFileFirst = false, bool:bExtra = false, extra = 0, bool:bLocal = true, bool:bPassTag = false, bool:bFilter = true, filter[] = "")
+native bool:INI_Load(filename[], bool:bExtra = false, extra = 0, bool:bLocal = true)
+native
+native INI_Int(name[], &dest);
+native INI_Float(name[], &Float:dest);
+native INI_Hex(name[], &dest);
+native INI_Bin(name[], &dest);
+native INI_String(name[], dest[], size);
+native
+native INI:INI_Open(filename[])
+native INI_Close(INI:file)
+native
+native INI_SetTag(INI:file, tag[])
+native INI_DeleteTag(INI:file, tag[])
+native INI_WriteArray(INI:file, const name[], data[], len)
+native INI_RemoveEntry(INI:file, name[])
+native INI_WriteString(INI:file, name[], data[])
+native INI_WriteInt(INI:file, name[], data)
+native INI_WriteHex(INI:file, name[], data)
+native INI_WriteBin(INI:file, name[], data)
+native INI_WriteBool(INI:file, name[], bool:data)
+native INI_WriteFloat(INI:file, name[], Float:data, accuracy = 6)
+native
+ 
+*/
+ 
+#include <YSI\y_ini>
+ 
+/*
+ 
+native
+native __y_inline__();
+native
+native
+native using();
+native inline();
+native
+native Callback_Get(callback:name, result[E_CALLBACK_DATA], expect = -1);
+native Callback_Release(const input[E_CALLBACK_DATA]);
+native Callback_Call(const input[E_CALLBACK_DATA], {Float, _}:...);
+native
+ 
+*/
+ 
+#include <YSI\y_inline>
+ 
+/*
+ 
+native
+native __y_iterate__();
+native
+native
+native Iter_Init(Iterator:arr[]<>);
+native Iter_Add(Iterator:iter<>, element);
+native Iter_Remove(Iterator:iter<>, element);
+native Iter_Contains(Iterator:iter<>, element);
+native Iter_SafeRemove(Iterator:iter<>, element, &ret);
+native Iter_Random(Iterator:iter<>);
+native Iter_Count(Iterator:iter<>);
+native Iter_Clear(Iterator:iter<>);
+native Iter_Free(Iterator:iter<>);
+native
+native foreach();
+native
+native Iter_Begin(Iterator:iter<>);
+native Iter_End(Iterator:iter<>);
+native Iter_First(Iterator:iter<>);
+native Iter_Last(Iterator:iter<>);
+native Iter_Next(Iterator:iter<>, cur);
+native Iter_Prev(Iterator:iter<>, cur);
+native
+ 
+*/
+ 
+#include <YSI\y_iterate>
+ 
+/*
+ 
+native
+native __y_languages__();
+native
+native
+native Language:Langs_Add(code[], name[]);
+native Language:Langs_SetPlayerLanguage(playerid, Language:l);
+native Language:Langs_GetPlayerLanguage(playerid);
+native
+native Language:Langs_AddLanguage(code[], name[]);
+native Langs_RemoveLanguage(Language:l);
+native Language:Langs_GetLanguage(identifier[]);
+native Language:Langs_GetLanguageCount();
+native Langs_GetLanguageCodes();
+native Langs_GetName(Language:l);
+native Langs_GetCode(Language:l);
+native bool:Langs_IsValid(Language:l);
+native Language:Langs_SetPlayerCode(playerid, code[]);
+native
+ 
+*/
+ 
+#include <YSI\y_languages>
+ 
+/*
+ 
+native
+native __y_lock__();
+native
+native
+native
+ 
+*/
+ 
+// DO NOT include by default!
+//#include <YSI\y_lock>
+ 
+/*
+ 
+native
+native __y_malloc__();
+native
+native
+native Alloc:malloc(size);
+native Alloc:calloc(size);
+native free(Alloc:slot);
+native
+native mget(Alloc:array, index);
+native mset(Alloc:array, index, value);
+native mgets(target[], length, Alloc:array, index);
+native msets(Alloc:array, index, const str[]);
+native
+native Malloc_SlotSize(Alloc:array);
+native Malloc_Get(Alloc:array, index);
+native Malloc_Set(Alloc:array, index, value);
+native Malloc_GetS(target[], length, Alloc:array, index);
+native Malloc_SetS(Alloc:array, index, const str[]);
+native Malloc_GetA(target[], length, Alloc:array, index);
+native Malloc_SetA(Alloc:array, index, const arr[], len);
+native
+ 
+*/
+ 
+#include <YSI\y_malloc>
+ 
+/*
+ 
+native
+native __y_master__();
+native
+native
+native Master_Caller();
+native
+native foreign();
+native global();
+native
+ 
+*/
+ 
+#include <YSI\y_master>
+ 
+/*
+ 
+native
+native __y_php__();
+native
+native
+native PHP_SendString(string:name[], string:value[], bool:priority = false);
+native PHP_SendFloat(string:name[], Float:value, bool:priority = false);
+native PHP_SendBool(string:name[], bool:value, bool:priority = false);
+native PHP_SendInt(string:name[], value, bool:priority = false);
+native
+native phpdata();
+native phpfunc();
+native
+ 
+*/
+ 
+// DO NOT include by default!
+//#include <YSI\y_php>
+ 
+/*
+ 
+native
+native __y_playerarray__();
+native
+native
+native PA_Init(PlayerArray:pa<>, bool:init = false, s = bits<MAX_PLAYERS>);
+native PA_FastInit(PlayerArray:pa<>);
+native PA_Set(PlayerArray:pa<>, slot, bool:set);
+native PA_Let(PlayerArray:pa<>, slot);
+native PA_Vet(PlayerArray:pa<>, slot);
+native PA_Get(PlayerArray:pa<>, slot);
+native PA_GetCount(PlayerArray:pa<>);
+native Iterator:PA(PlayerArray:pa<>);
+native
+ 
+*/
+ 
+#include <YSI\y_playerarray>
+ 
+/*
+ 
+native
+native __y_playerset__();
+native
+native
+native Iterator:PS(@PlayerSet:iter);
+native
+ 
+*/
+ 
+#include <YSI\y_playerset>
+ 
+/*
+ 
+native
+native __y_remote__();
+native
+native
+native remotefunc();
+native broadcastfunc();
+native localfunc();
+native targetfunc();
+native
+ 
+*/
+ 
+#include <YSI\y_remote>
+ 
+/*
+ 
+native
+native __y_scriptinit__();
+native
+native
+native
+ 
+*/
+ 
+#include <YSI\y_scriptinit>
+ 
+/*
+ 
+native
+native __y_stringhash__();
+native
+native
+native YHash(const str[], bool:sensitive = true, e_HASH_TYPE:type = hash_bernstein, len = -1, pack = false);
+native
+ 
+*/
+ 
+#include <YSI\y_stringhash>
+ 
+/*
+ 
+native
+native __y_svar__();
+native
+native
+native svar();
+native
+ 
+*/
+ 
+#include <YSI\y_svar>
+ 
+/*
+ 
+native
+native __y_td__();
+native
+native
+native Style:TD_Create(Float:x = 0.0, Float:y = 0.0, Float:letterX = 0.48, Float:letterY = 1.12, Float:textX = 1280.0, Float:textY = 1280.0, colour = 0xE1E1E1FF, boxColour = 0x80808080, bgColour = 0x000000FF, shadow = 2, outline = 0, align = _:td_align_none, font = 1, bool:proportional = false, bool:box = false, time = 0, name[] = "\1");
+native TD_Delete(Style:styleId);
+native
+native Text:TD_Display(text[], Style:id, Float:x = NAN, Float:y = NAN);
+native TD_Destroy(Text:textDraw);
+native TD_TextPosition(Text:textID, Float:x, Float:y);
+native TD_TextXPos(Text:textID, Float:x);
+native TD_TextYPos(Text:textID, Float:y);
+native TD_SetString(Text:td, text[]);
+native
+native TD_ShowForPlayer(playerid, Text:textDraw);
+native TD_HideForPlayer(playerid, Text:textDraw);
+native TD_ShowForAll(Text:textDraw);
+native TD_HideForAll(Text:textDraw);
+native Text:TD_DisplayForPlayer(playerid, text[], Style:id, Float:x = NAN, Float:y = NAN);
+native Text:TD_DisplayForAll(text[], Style:id, Float:x = NAN, Float:y = NAN);
+native
+native TD_StylePosition(Style:styleID, Float:x, Float:y);
+native TD_StyleXPos(Style:styleID, Float:x);
+native TD_StyleYPos(Style:styleID, Float:y);
+native TD_LetterSize(Style:styleID, Float:x, Float:y);
+native TD_LetterX(Style:styleID, Float:x);
+native TD_LetterY(Style:styleID, Float:y);
+native TD_TextSize(Style:styleID, Float:x, Float:y);
+native TD_TextX(Style:styleID, Float:x);
+native TD_TextY(Style:styleID, Float:y);
+native TD_Alignment(Style:styleID, alignment = _:td_align_none);
+native TD_Colour(Style:styleID, colour);
+native TD_Color(Style:styleID, color);
+native TD_UseBox(Style:styleID, bool:use);
+native TD_BoxColour(Style:styleID, colour);
+native TD_BoxColor(Style:styleID, color);
+native TD_SetShadow(Style:styleID, size);
+native TD_SetOutline(Style:styleID, size);
+native TD_BackgroundColour(Style:styleID, colour);
+native TD_BackgroundColor(Style:styleID, color);
+native TD_Font(Style:styleID, font);
+native TD_SetProportional(Style:styleID, bool:set);
+native TD_SetTime(Style:styleID, time, bool:existing = false);
+native
+native TD_Morph(Text:textDraw, Style:style, time, delay = 0);
+native TD_Link(Text:base, Text:other);
+native TD_Unlink(Text:td);
+native Style:TD_GetDisplayStyle(Text:td);
+native Text:TD_DisplayHashed(text[], hash, Float:x = NAN, Float:y = NAN);
+native Text:TD_DisplayHashedForPlayer(playerid, text[], hash, Float:x = NAN, Float:y = NAN);
+native Text:TD_DisplayHashedForAll(text[], hash, Float:x = NAN, Float:y = NAN);
+native Text:TD_DisplayNamed(text[], style[], Float:x = NAN, Float:y = NAN);
+native Text:TD_DisplayNamedForPlayer(playerid, text[], style[], Float:x = NAN, Float:y = NAN);
+native Text:TD_DisplayNamedForAll(text[], style[], Float:x = NAN, Float:y = NAN);
+native TD_Garbage(Text:textDraw);
+native TD_Parse(filename[]);
+native
+native Style:TD_GetNamed(name[]);
+native Style:TD_GetID(hash);
+native Style:TD_Clone(Style:styleID, name[] = "\1");
+native TD_GetStyleData(Style:styleID, ret[E_TD_DATA]);
+native TD_Name(Style:styleID, name[]);
+native
+ 
+*/
+ 
+#include <YSI\y_td>
+ 
+/*
+ 
+native
+native __y_testing__();
+native
+native
+native Testing_RunAll();
+native
+ 
+*/
+ 
+// DO NOT include by default!
+//#include <YSI\y_testing>
+ 
+/*
+ 
+native
+native __y_text__();
+native
+native
+native Text_Send(@PlayerSet:players, message[], {Float, _}:...);
+native
+native Text_MessageBox(@PlayerSet:players, using:callback[], title[], text[], button1[], button2[], {Float, _}:...);
+native Text_InputBox(@PlayerSet:players, using:callback[], title[], text[], button1[], button2[], {Float, _}:...);
+native Text_ListBox(@PlayerSet:players, using:callback[], title[], text[], button1[], button2[], {Float, _}:...);
+native Text_PasswordBox(@PlayerSet:players, using:callback[], title[], text[], button1[], button2[], {Float, _}:...);
+native Text_DialogBox(@PlayerSet:players, style, using:callback[], title[], text[], button1[], button2[], {Float, _}:...);
+native
+ 
+*/
+ 
+#include <YSI\y_text>
+ 
+/*
+ 
+native
+native __y_timers__();
+native
+native
+native stop();
+native defer();
+native repeat();
+native timer();
+native task();
+native ptask();
+native pause();
+native resume();
+native
+ 
+*/
+ 
+#include <YSI\y_timers>
+ 
+/*
+ 
+native
+native __y_users__();
+native
+native
+native Language:Player_GetPreloadLanguage(playerid);
+native Player_IsRegistered(playerid);
+native bool:Player_IsLoggedIn(playerid);
+native Player_GetYID(playerid);
+native
+native Player_RemoveEntry(name[]);
+native Player_WriteString(name[], data[]);
+native Player_WriteArray(const name[], data[], len);
+native Player_WriteInt(name[], data);
+native Player_WriteHex(name[], data);
+native Player_WriteBin(name[], data);
+native Player_WriteBool(name[], bool:data);
+native Player_WriteFloat(name[], Float:data, accuracy = 6);
+native Player_SetTag(tag[]);
+native Player_DeleteTag(tag[]);
+native
+native Player_TryLogin(playerid, password[]);
+native Player_ForceLogin(playerid);
+native Player_TryRegister(playerid, password[]);
+native Player_ChangePassword(playerid, password[]);
+native Player_TryGroup(playerid, other[], password[]);
+native Player_ForceGroup(playerid, other[]);
+native
+native Player_Reload(playerid);
+native Player_SetPreload(playerid, data[E_USER_PRELOAD]);
+native Player_Preload(name[], ret[E_USER_PRELOAD]);
+native
+ 
+*/
+ 
+#include <YSI\y_users>
+ 
+/*
+ 
+native
+native __y_utils__();
+native
+native
+native ceildiv(num, denom);
+native floordiv(num, denom);
+native isnull(str[]);
+native isodd(num);
+native iseven(num);
+native strcpy(dest[], src[], maxlength = sizeof (dest));
+native StripNL(str[]);
+native endofline(line[], pos);
+native chrfind(needle, haystack[], start = 0);
+native chrfindp(needle, haystack[], start = 0);
+native bernstein(string[]);
+native ishex(str[]);
+native unpack(const str[]);
+native GetIP(playerid);
+native getstring(addr);
+native getstringarg(addr);
+native isnumeric(str[]);
+native hexstr(string[]);
+native bool:boolstr(string[]);
+native binstr(string[]);
+native memset(dest[], size = sizeof (dest), val = 0, blocksize = 8);
+native ReturnPlayerName(playerid);
+native ftouch(const filename[]);
+native
+ 
+*/
+ 
+#include <YSI\y_utils>
+ 
+/*
+ 
+native
+native __y_uvar__();
+native
+native
+native uvar();
+native
+ 
+*/
+ 
+#include <YSI\y_uvar>
+ 
+/*
+ 
+native
+native __y_va__();
+native
+native
+native va_printf(fmat[], va_start);
+native va_format(out[], size, fmat[], va_start);
+native va_strlen(arg);
+native va_getstring(dest[], arg, len = sizeof (dest));
+native
+ 
+*/
+ 
+#include <YSI\y_va>
+ 
+/*
+ 
+native
+native __y_writemem__();
+native
+native
+native WriteMem(addr, value);
+native
+ 
+*/
+ 
+#include <YSI\y_writemem>
+ 
+/*
+ 
+native
+native __y_xml__();
+native
+native
+native XML:XML_New();
+native XML_Destroy(XML:rule);
+native
+native XML_AddHandler(XML:rule, trigger[], function[]);
+native XML_RemoveHandler(XML:rule, trigger[]);
+native XML_Parse(XML:rule, filename[]);
+native XML_GetKeyValue(key[], value[]);
+native
+native XMLEntry:XML_AddParameter(XMLEntry:parent, tag[], value[] = "");
+native XMLEntry:XML_AddItem(tag[], name[] = "", XMLEntry:parent = XMLEntry:cellmax);
+native XMLEntry:XML_CreateEntry(tag[], name[] = "", XMLEntry:parent = XMLEntry:cellmax);
+native XMLEntry:XML_AddSubEntry(tag[], name[] = "", XMLEntry:parent = XMLEntry:cellmax);
+native XML_WriteItem(filename[], XMLEntry:item, bool:bIncludeXML = true, bool:bFavourShort = false);
+native XML_WriteEntry(filename[], XMLEntry:item, bool:bIncludeXML = true, bool:bFavourShort = false);
+naitve XML_RemoveItem(file[], tag[], name[]);
+naitve XML_ReplaceItem(file[], tag[], name[], replacement);
+native
+ 
+*/
+ 
+#include <YSI\y_xml>
+ 
+/*
+ 
+native
+native __y_zonepulse__();
+native
+native
+native GangZonePulse(@PlayerSet:players, zone, from, to, time, delay = ZONE_PULSE_STAGE_TIME, time2 = -1, delay2 = -1);
+native GangZonePulseForPlayer(playerid, zone, from, to, time, delay = ZONE_PULSE_STAGE_TIME, time2 = -1, delay2 = -1);
+native GangZonePulseForAll(zone, from, to, time, delay = ZONE_PULSE_STAGE_TIME, time2 = -1, delay2 = -1);
+native GangZoneStopPulse(@PlayerSet:players, zone);
+native GangZoneStopPulseForPlayer(playerid, zone);
+native GangZoneStopPulseForAll(zone);
+native
+ 
+*/
+ 
+#include <YSI\y_zonepulse>

+ 45 - 0
pawno/include/YSI/YSI/extra/y_extra_languages.inc

@@ -0,0 +1,45 @@
+// Include pretty much 90% of YSI in one fell swoop!
+
+loadtext core[ysi_langs];
+
+YCMD:language(playerid, params[], help)
+{
+	if (help)
+	{
+		Text_Send(playerid, $YSI_LANGS_HELP);
+	}
+	else
+	{
+		new
+			lang;
+		if (sscanf(params, "i", lang))
+		{
+			new
+				c = _:Langs_GetLanguageCount(),
+				Language:i = Language:0;
+			while (c)
+			{
+				new
+					code[3];
+				strcpy(code, Langs_GetCode(i));
+				if (!isnull(code))
+				{
+					// They may not be in order.
+					Text_Send(playerid, $YSI_LANGS_DISP, _:i, Langs_GetName(i), code);
+					--c;
+				}
+				++i;
+			}
+			Text_Send(playerid, $YSI_LANGS_SET, YCMD:language);
+		}
+		else if (Langs_SetPlayerLanguage(playerid, Language:lang) == NO_LANGUAGE)
+		{
+			Text_Send(playerid, $YSI_LANGS_INV);
+		}
+		else
+		{
+			Text_Send(playerid, $YSI_LANGS_DONE, lang, Langs_GetName(Language:lang));
+		}
+	}
+	return 1;
+}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor