diff --git a/addons/sourcemod/configs/store/items.txt b/addons/sourcemod/configs/store/items.txt
new file mode 100644
index 0000000..56b7d41
--- /dev/null
+++ b/addons/sourcemod/configs/store/items.txt
@@ -0,0 +1,6122 @@
+"Store"
+{
+
+ "Pets"
+ {
+ "Chicken"
+ {
+ "model" "models/chicken/chicken.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "idle01"
+ "run" "run01"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Chicken Zombie"
+ {
+ "model" "models/chicken/chicken_zombie.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "idle01"
+ "run" "run01"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Crow"
+ {
+ "model" "models/crow.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "crow_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Crow Flying"
+ {
+ "model" "models/crow.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly01"
+ "run" "Fly01"
+ "unique_id" "crow_flying"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Pigeon"
+ {
+ "model" "models/pigeon.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "pigeon_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Pigeon Flying"
+ {
+ "model" "models/pigeon.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly01"
+ "run" "Fly01"
+ "unique_id" "pigeon_flying"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Seagull"
+ {
+ "model" "models/seagull.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "seagull_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Seagull Flying"
+ {
+ "model" "models/seagull.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly"
+ "run" "Fly"
+ "unique_id" "seagull_flying"
+ "price" "100"
+ "type" "pet"
+ }
+ }
+
+
+ "Tracers"
+ {
+ "Blue"
+ {
+ "color" "0 0 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Cyan"
+ {
+ "color" "0 255 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Fuschia"
+ {
+ "color" "125 0 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Gray"
+ {
+ "color" "240 240 240"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Green"
+ {
+ "color" "0 125 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Lawn Green"
+ {
+ "color" "124 122 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Olive Brown"
+ {
+ "color" "128 125 165"
+ "price" "120"
+ "type" "tracer"
+ }
+
+ "Orange"
+ {
+ "color" "125 77 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ }
+
+ "Laser Sight"
+ {
+ "Blue"
+ {
+ "color" "0 0 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Cyan"
+ {
+ "color" "0 255 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Fuschia"
+ {
+ "color" "125 0 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Gray"
+ {
+ "color" "240 240 240"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Green"
+ {
+ "color" "0 125 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Lawn Green"
+ {
+ "color" "124 122 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Olive Brown"
+ {
+ "color" "128 125 165"
+ "price" "120"
+ "type" "lasersight"
+ }
+
+ "Orange"
+ {
+ "color" "125 77 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ }
+
+ "Accessories"
+ {
+ "Hats"
+ {
+ "Spartan Helmet"
+ {
+ "model" "models/spartahelm/spartahelm.mdl"
+ "position" "0.0 -2.2 -68.4"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Ironman"
+ {
+ "model" "models/fo3_ironman_mask.mdl"
+ "position" "1.0 -4.6 -2.0"
+ "angles" "0.0 -90.0 -20.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "V Mask"
+ {
+ "model" "models/v/mask.mdl"
+ "position" "0.0 -5.2 -65.2"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Pika Hat"
+ {
+ "model" "models/pikahat/pikahat.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Mudkip Hat"
+ {
+ "model" "models/mudhatk/mudhatk.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Super Saiyan"
+ {
+ "model" "models/anime_patron/animepatr.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Sentry"
+ {
+ "model" "models/sentry_hat/sentryha.mdl"
+ "position" "0.0 -1.7 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Pedo Bear"
+ {
+ "model" "models/pedobear/pedobearf.mdl"
+ "position" "0.0 -1.7 -70.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Antlers"
+ {
+ "model" "models/sam/antlers.mdl"
+ "position" "0.0 0.0 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Car Tire"
+ {
+ "model" "models/props_vehicles/tire001c_car.mdl"
+ "position" "0.0 -10.0 0.0"
+ "angles" "90.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Watermelon"
+ {
+ "model" "models/props_junk/watermelon01.mdl"
+ "position" "0.0 0.0 5.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Traffic Cone"
+ {
+ "model" "models/props_junk/trafficcone001a.mdl"
+ "position" "0.0 -1.0 20.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Metal Bucket"
+ {
+ "model" "models/props_junk/metalbucket01a.mdl"
+ "position" "0.0 0.0 -8.0"
+ "angles" "180.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Terracotta"
+ {
+ "model" "models/props_junk/terracotta01.mdl"
+ "position" "0.0 3.0 -10.0"
+ "angles" "180.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Baseball Cap"
+ {
+ "model" "models/props/cs_office/snowman_hat.mdl"
+ "position" "0.0 0.0 7.0"
+ "angles" "0.0 -90.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Coffee Mug"
+ {
+ "model" "models/props/cs_office/coffee_mug.mdl"
+ "position" "0.0 0.0 9.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "I <3 Turtles"
+ {
+ "model" "models/props/de_tides/vending_hat.mdl"
+ "position" "1.8 0.0 4.0"
+ "angles" "0.0 -90.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Astronaut helmet"
+ {
+ "model" "models/astronauthelmet/astronauthelmet.mdl"
+ "position" "0.0 0.0 -5.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Viking helmet"
+ {
+ "model" "models/vikinghelmet/vikinghelmet.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Fedora"
+ {
+ "model" "models/gmod_tower/fedorahat.mdl"
+ "position" "0.0 -1.5 8.5"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "KFC Bucket"
+ {
+ "model" "models/gmod_tower/kfcbucket.mdl"
+ "position" "0.0 -1.0 3.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Cake Hat"
+ {
+ "model" "models/cakehat/cakehat.mdl"
+ "position" "0.0 -1.0 3.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Santa Hat"
+ {
+ "model" "models/santahat/santahat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Dunce Hat"
+ {
+ "model" "models/duncehat/duncehat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Sombrero"
+ {
+ "model" "models/gmod_tower/sombrero.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Cat Ears"
+ {
+ "model" "models/gmod_tower/catears.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Afro"
+ {
+ "model" "models/gmod_tower/afro.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Andross Mask"
+ {
+ "model" "models/gmod_tower/androssmask.mdl"
+ "position" "0.0 2.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Drink Cap"
+ {
+ "model" "models/gmod_tower/drinkcap.mdl"
+ "position" "0.0 -1.0 7.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Headcrab Hat"
+ {
+ "model" "models/gmod_tower/headcrabhat.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Majorasmask"
+ {
+ "model" "models/gmod_tower/majorasmask.mdl"
+ "position" "0.0 0.5 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Toromask"
+ {
+ "model" "models/gmod_tower/toromask.mdl"
+ "position" "0.0 -1.0 4.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Top Hat"
+ {
+ "model" "models/gmod_tower/tophat.mdl"
+ "position" "0.0 -1.7 4.5"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Witch Hat"
+ {
+ "model" "models/gmod_tower/witchhat.mdl"
+ "position" "0.0 0.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Toeto Hat"
+ {
+ "model" "models/gmod_tower/toetohat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Party Hat"
+ {
+ "model" "models/gmod_tower/partyhat.mdl"
+ "position" "1.0 -1.0 7.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Seuss Hat"
+ {
+ "model" "models/gmod_tower/seusshat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Link Hat"
+ {
+ "model" "models/gmod_tower/linkhat.mdl"
+ "position" "0.0 -5.0 4.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+
+ "Midna Hat"
+ {
+ "model" "models/gmod_tower/midnahat.mdl"
+ "position" "0.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "0"
+ }
+ }
+
+ "Masks"
+ {
+ "Porcelain Doll"
+ {
+ "model" "models/player/holiday/facemasks/porcelain_doll.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Zombie Fortune"
+ {
+ "model" "models/player/holiday/facemasks/facemask_zombie_fortune_plastic.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Wolf"
+ {
+ "model" "models/player/holiday/facemasks/facemask_wolf.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Tiki"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tiki.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+
+ "Spy"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_spy_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+
+ "Soldier"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_soldier_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sniper"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_sniper_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Scout"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_scout_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Pyro"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_pyro_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Medic"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_medic_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Heavy"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_heavy_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Engineer"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_engi_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Demoman"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_demo_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Skull"
+ {
+ "model" "models/player/holiday/facemasks/facemask_skull.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Skull (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_skull_gold.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_gold.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep (Bloody)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_bloody.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Samurai"
+ {
+ "model" "models/player/holiday/facemasks/facemask_samurai.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Pumpkin"
+ {
+ "model" "models/player/holiday/facemasks/facemask_pumpkin.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Porcelain Doll Kabuki"
+ {
+ "model" "models/player/holiday/facemasks/facemask_porcelain_doll_kabuki.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Hoxton"
+ {
+ "model" "models/player/holiday/facemasks/facemask_hoxton.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Devil"
+ {
+ "model" "models/player/holiday/facemasks/facemask_devil_plastic.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Dallas"
+ {
+ "model" "models/player/holiday/facemasks/facemask_dallas.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Chicken"
+ {
+ "model" "models/player/holiday/facemasks/facemask_chicken.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Chains"
+ {
+ "model" "models/player/holiday/facemasks/facemask_chains.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Bunny"
+ {
+ "model" "models/player/holiday/facemasks/facemask_bunny.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Bunny (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_bunny.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Boar"
+ {
+ "model" "models/player/holiday/facemasks/facemask_boar.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Anaglyph"
+ {
+ "model" "models/player/holiday/facemasks/facemask_anaglyph.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Evil Clown"
+ {
+ "model" "models/player/holiday/facemasks/evil_clown.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+ }
+
+ "Glasses"
+ {
+ "3D Glasses"
+ {
+ "model" "models/gmod_tower/3dglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "1"
+ }
+
+ "Aviators"
+ {
+ "model" "models/gmod_tower/aviators.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "1"
+ }
+
+ "Star Glasses"
+ {
+ "model" "models/gmod_tower/starglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "1"
+ }
+
+ "Kliener Glasses"
+ {
+ "model" "models/gmod_tower/klienerglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "slot" "1"
+ }
+ }
+ }
+
+ "Player Skins"
+ {
+ "Terrorists"
+ {
+ "Duke Nukem"
+ {
+ "model" "models/player/kuristaja/duke4eva/duke/duke.mdl"
+ "team" "2"
+ "price" "120"
+ "type" "playerskin"
+ }
+ }
+
+ "Counter-Terrorists"
+ {
+ "Nick"
+ {
+ "model" "models/player/techknow/nick/nick.mdl"
+ "team" "3"
+ "price" "120"
+ "type" "playerskin"
+ }
+ }
+ }
+
+ "Trails"
+ {
+ "8Bit Mushroom"
+ {
+ "material" "materials/sprites/store/trails/8bitmushroom.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "8Bit Pow"
+ {
+ "material" "materials/sprites/store/trails/8bitpow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Airforce"
+ {
+ "material" "materials/sprites/store/trails/airforce.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Airforce 2"
+ {
+ "material" "materials/sprites/store/trails/airforce2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Apple"
+ {
+ "material" "materials/sprites/store/trails/apple.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Arrow Rainbow"
+ {
+ "material" "materials/sprites/store/trails/arrowrainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Arrows"
+ {
+ "material" "materials/sprites/store/trails/arrows.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Assasin"
+ {
+ "material" "materials/sprites/store/trails/assasin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome"
+ {
+ "material" "materials/sprites/store/trails/awesome.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome Sad"
+ {
+ "material" "materials/sprites/store/trails/awesome_sad.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome Face"
+ {
+ "material" "materials/sprites/store/trails/awesomeface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Babyand"
+ {
+ "material" "materials/sprites/store/trails/babyand.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Banknote"
+ {
+ "material" "materials/sprites/store/trails/banknote.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Barcalona"
+ {
+ "material" "materials/sprites/store/trails/barcalona.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Batman"
+ {
+ "material" "materials/sprites/store/trails/batman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Battlefield"
+ {
+ "material" "materials/sprites/store/trails/battlefield.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Beer Mug"
+ {
+ "material" "materials/sprites/store/trails/beermug.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Biohazard"
+ {
+ "material" "materials/sprites/store/trails/biohazard.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Blade"
+ {
+ "material" "materials/sprites/store/trails/blade.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Blue Lightning"
+ {
+ "material" "materials/sprites/store/trails/bluelightning.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "BMW Logo"
+ {
+ "material" "materials/sprites/store/trails/bmwlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bom Bomb"
+ {
+ "material" "materials/sprites/store/trails/bombomb.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Boo"
+ {
+ "material" "materials/sprites/store/trails/boo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bullet Bill"
+ {
+ "material" "materials/sprites/store/trails/bulletbill.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bullets"
+ {
+ "material" "materials/sprites/store/trails/bullets.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Canada Flag"
+ {
+ "material" "materials/sprites/store/trails/canadaflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Candies"
+ {
+ "material" "materials/sprites/store/trails/candies.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ccole"
+ {
+ "material" "materials/sprites/store/trails/ccole.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Cereal-guy"
+ {
+ "material" "materials/sprites/store/trails/cereal-guy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Challenge"
+ {
+ "material" "materials/sprites/store/trails/challenge.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Chopped Pyro"
+ {
+ "material" "materials/sprites/store/trails/chopped_pyro.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Chris Light"
+ {
+ "material" "materials/sprites/store/trails/chrislight.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Christ Lights"
+ {
+ "material" "materials/sprites/store/trails/christlights.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Coca-Cola"
+ {
+ "material" "materials/sprites/store/trails/cocacola.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Coca-Cola 2"
+ {
+ "material" "materials/sprites/store/trails/cocacola2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Color Bolt"
+ {
+ "material" "materials/sprites/store/trails/colorbolt.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Cookies"
+ {
+ "material" "materials/sprites/store/trails/cookies.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Cracked Beam"
+ {
+ "material" "materials/sprites/store/trails/crackedbeam.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Creed"
+ {
+ "material" "materials/sprites/store/trails/creed.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Creeper"
+ {
+ "material" "materials/sprites/store/trails/creeper.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Crown"
+ {
+ "material" "materials/sprites/store/trails/crown.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Damnim Good"
+ {
+ "material" "materials/sprites/store/trails/damnimgood.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Danish Flag"
+ {
+ "material" "materials/sprites/store/trails/danishflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dark Knight"
+ {
+ "material" "materials/sprites/store/trails/darkknight.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5"
+ {
+ "material" "materials/sprites/store/trails/deadmau5.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5 2"
+ {
+ "material" "materials/sprites/store/trails/deadmau52.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5 3"
+ {
+ "material" "materials/sprites/store/trails/deadmau53.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5 4"
+ {
+ "material" "materials/sprites/store/trails/deadmau54.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dead Pool"
+ {
+ "material" "materials/sprites/store/trails/deadpool.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dirt"
+ {
+ "material" "materials/sprites/store/trails/dirt.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Disorder Dragon"
+ {
+ "material" "materials/sprites/store/trails/disorderdragonv2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Disorder Logo"
+ {
+ "material" "materials/sprites/store/trails/disorderlogo2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Disorder Text"
+ {
+ "material" "materials/sprites/store/trails/disordertext10.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "DNA 2"
+ {
+ "material" "materials/sprites/store/trails/dna2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dollars"
+ {
+ "material" "materials/sprites/store/trails/dollars.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Donuts"
+ {
+ "material" "materials/sprites/store/trails/donuts.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Double Rainbow"
+ {
+ "material" "materials/sprites/store/trails/doublerainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dragon"
+ {
+ "material" "materials/sprites/store/trails/dragon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dragon Disorder"
+ {
+ "material" "materials/sprites/store/trails/dragondisorder.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "EA Fifa"
+ {
+ "material" "materials/sprites/store/trails/eafifa.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "EA Logo"
+ {
+ "material" "materials/sprites/store/trails/ealogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Earth"
+ {
+ "material" "materials/sprites/store/trails/earth.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Energy"
+ {
+ "material" "materials/sprites/store/trails/energy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Energyball"
+ {
+ "material" "materials/sprites/store/trails/energyball.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Epicsax"
+ {
+ "material" "materials/sprites/store/trails/epicsax.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Facebook Icon"
+ {
+ "material" "materials/sprites/store/trails/facebookicon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fap Face"
+ {
+ "material" "materials/sprites/store/trails/fapface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Faxekondi"
+ {
+ "material" "materials/sprites/store/trails/faxekondi.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ferrari"
+ {
+ "material" "materials/sprites/store/trails/ferrari.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fire"
+ {
+ "material" "materials/sprites/store/trails/fire.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fire 2"
+ {
+ "material" "materials/sprites/store/trails/fire1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Firefox"
+ {
+ "material" "materials/sprites/store/trails/firefox.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fireman"
+ {
+ "material" "materials/sprites/store/trails/fireman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Footprint"
+ {
+ "material" "materials/sprites/store/trails/footprint.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Forever Alone"
+ {
+ "material" "materials/sprites/store/trails/foreveralone.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fuu 1"
+ {
+ "material" "materials/sprites/store/trails/fuu1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fuu 2"
+ {
+ "material" "materials/sprites/store/trails/fuu2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fuck Yeah"
+ {
+ "material" "materials/sprites/store/trails/fyeah.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "German Flag"
+ {
+ "material" "materials/sprites/store/trails/germanflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Google Chrome"
+ {
+ "material" "materials/sprites/store/trails/googlechrome.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Goomba"
+ {
+ "material" "materials/sprites/store/trails/goomba.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Grenade"
+ {
+ "material" "materials/sprites/store/trails/grenade.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Gummybears"
+ {
+ "material" "materials/sprites/store/trails/gummybears.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Gusta"
+ {
+ "material" "materials/sprites/store/trails/gusta.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Half-Life"
+ {
+ "material" "materials/sprites/store/trails/halflife.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Handgun"
+ {
+ "material" "materials/sprites/store/trails/handgun.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Headshot"
+ {
+ "material" "materials/sprites/store/trails/headshot.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Heart"
+ {
+ "material" "materials/sprites/store/trails/heart.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hello Kitty"
+ {
+ "material" "materials/sprites/store/trails/hellokitty.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hex"
+ {
+ "material" "materials/sprites/store/trails/hex.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hypnotic"
+ {
+ "material" "materials/sprites/store/trails/hypnotic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hypnotoad"
+ {
+ "material" "materials/sprites/store/trails/hypnotoad.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ice"
+ {
+ "material" "materials/sprites/store/trails/ice.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ice 2"
+ {
+ "material" "materials/sprites/store/trails/ice1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Icloud"
+ {
+ "material" "materials/sprites/store/trails/icloud.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Invisible Bike"
+ {
+ "material" "materials/sprites/store/trails/invisible_bike.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Jackass"
+ {
+ "material" "materials/sprites/store/trails/jackass.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Jester"
+ {
+ "material" "materials/sprites/store/trails/jester.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Kaleido Scope"
+ {
+ "material" "materials/sprites/store/trails/kaleidoscope.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Kingdom Hearts"
+ {
+ "material" "materials/sprites/store/trails/kingdomhearts.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Kirby"
+ {
+ "material" "materials/sprites/store/trails/kirby.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Latvia"
+ {
+ "material" "materials/sprites/store/trails/latvia.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves"
+ {
+ "material" "materials/sprites/store/trails/leaves.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves 2"
+ {
+ "material" "materials/sprites/store/trails/leaves1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves 3"
+ {
+ "material" "materials/sprites/store/trails/leaves2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves 4"
+ {
+ "material" "materials/sprites/store/trails/leaves21.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightning 2"
+ {
+ "material" "materials/sprites/store/trails/lightning2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightning 3"
+ {
+ "material" "materials/sprites/store/trails/lightning3.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightspeed"
+ {
+ "material" "materials/sprites/store/trails/lightspeed.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightwave"
+ {
+ "material" "materials/sprites/store/trails/lightwave.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "LOL"
+ {
+ "material" "materials/sprites/store/trails/lol.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "LOL Guy"
+ {
+ "material" "materials/sprites/store/trails/lolguy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mario"
+ {
+ "material" "materials/sprites/store/trails/mario.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Masterchief"
+ {
+ "material" "materials/sprites/store/trails/masterchief.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+
+ "Mcdonalds"
+ {
+ "material" "materials/sprites/store/trails/mcdonald.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Medic"
+ {
+ "material" "materials/sprites/store/trails/medic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Metallic"
+ {
+ "material" "materials/sprites/store/trails/metallic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Metal Skull"
+ {
+ "material" "materials/sprites/store/trails/metalskull.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Metroid"
+ {
+ "material" "materials/sprites/store/trails/metroid.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Micky Mouse"
+ {
+ "material" "materials/sprites/store/trails/mickymouse.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Minecraft"
+ {
+ "material" "materials/sprites/store/trails/minecraft.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Moneybag"
+ {
+ "material" "materials/sprites/store/trails/moneybag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "mtvlogo"
+ {
+ "material" "materials/sprites/store/trails/mtvlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mudkip"
+ {
+ "material" "materials/sprites/store/trails/mudkip.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mushroom"
+ {
+ "material" "materials/sprites/store/trails/mushroom.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mushroom 2"
+ {
+ "material" "materials/sprites/store/trails/mushroom2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Nevergup"
+ {
+ "material" "materials/sprites/store/trails/nevergup.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Nyan"
+ {
+ "material" "materials/sprites/store/trails/nyan.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ocarina"
+ {
+ "material" "materials/sprites/store/trails/ocarina.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Okami"
+ {
+ "material" "materials/sprites/store/trails/okami.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Okay Guy"
+ {
+ "material" "materials/sprites/store/trails/okayguy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Oops"
+ {
+ "material" "materials/sprites/store/trails/oops.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Orly"
+ {
+ "material" "materials/sprites/store/trails/orly.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pacman"
+ {
+ "material" "materials/sprites/store/trails/pacman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Paint Splatter"
+ {
+ "material" "materials/sprites/store/trails/paintsplatter.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Panda"
+ {
+ "material" "materials/sprites/store/trails/panda.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Paw Print"
+ {
+ "material" "materials/sprites/store/trails/pawprint.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Peace"
+ {
+ "material" "materials/sprites/store/trails/peace.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pedobear"
+ {
+ "material" "materials/sprites/store/trails/pedobear.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pfffft"
+ {
+ "material" "materials/sprites/store/trails/pfffft.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pika"
+ {
+ "material" "materials/sprites/store/trails/pika.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pikmin"
+ {
+ "material" "materials/sprites/store/trails/pikmin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pinkie"
+ {
+ "material" "materials/sprites/store/trails/pinkie.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pink Ribbon"
+ {
+ "material" "materials/sprites/store/trails/pinkribbon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Playboy"
+ {
+ "material" "materials/sprites/store/trails/playboy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Plur"
+ {
+ "material" "materials/sprites/store/trails/plur.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pokeball"
+ {
+ "material" "materials/sprites/store/trails/pokeball.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pokemon"
+ {
+ "material" "materials/sprites/store/trails/pokemon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Poker"
+ {
+ "material" "materials/sprites/store/trails/poker.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Police"
+ {
+ "material" "materials/sprites/store/trails/police.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Potleaf"
+ {
+ "material" "materials/sprites/store/trails/potleaf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pretzel"
+ {
+ "material" "materials/sprites/store/trails/pretzel.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Problems Face"
+ {
+ "material" "materials/sprites/store/trails/problems_face.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Psychball"
+ {
+ "material" "materials/sprites/store/trails/psychball.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Psych Triangle"
+ {
+ "material" "materials/sprites/store/trails/psychtriangle.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pumpkin"
+ {
+ "material" "materials/sprites/store/trails/pumpkin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Purple Lightning"
+ {
+ "material" "materials/sprites/store/trails/purplelightning.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Puttegris"
+ {
+ "material" "materials/sprites/store/trails/puttegris.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "pwned"
+ {
+ "material" "materials/sprites/store/trails/pwned.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Quake"
+ {
+ "material" "materials/sprites/store/trails/quake.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Question"
+ {
+ "material" "materials/sprites/store/trails/question.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Raf"
+ {
+ "material" "materials/sprites/store/trails/raf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rain"
+ {
+ "material" "materials/sprites/store/trails/rain.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow Dash"
+ {
+ "material" "materials/sprites/store/trails/rainbow-dash.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow"
+ {
+ "material" "materials/sprites/store/trails/rainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow Cobra 2"
+ {
+ "material" "materials/sprites/store/trails/rainbowcobra2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow Cry"
+ {
+ "material" "materials/sprites/store/trails/rainbowcry.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Real Madrid"
+ {
+ "material" "materials/sprites/store/trails/realmadrid.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Reaper"
+ {
+ "material" "materials/sprites/store/trails/reaper.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Retro Egg"
+ {
+ "material" "materials/sprites/store/trails/retroegg.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Retro Flower"
+ {
+ "material" "materials/sprites/store/trails/retroflower.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Sep Rainbow"
+ {
+ "material" "materials/sprites/store/trails/seprainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Sharingan"
+ {
+ "material" "materials/sprites/store/trails/sharingan.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Shell"
+ {
+ "material" "materials/sprites/store/trails/shell.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Shroom5"
+ {
+ "material" "materials/sprites/store/trails/shroom5.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Skull"
+ {
+ "material" "materials/sprites/store/trails/skull.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Skulln Bones"
+ {
+ "material" "materials/sprites/store/trails/skullnbones.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Skype Logo"
+ {
+ "material" "materials/sprites/store/trails/skypelogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Slow Poke"
+ {
+ "material" "materials/sprites/store/trails/slowpoke.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Smirnoff"
+ {
+ "material" "materials/sprites/store/trails/smirnoff.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Smugleaf"
+ {
+ "material" "materials/sprites/store/trails/smugleaf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Snowman"
+ {
+ "material" "materials/sprites/store/trails/snowman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Sony Logo"
+ {
+ "material" "materials/sprites/store/trails/sonylogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "SOS"
+ {
+ "material" "materials/sprites/store/trails/sos.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Spider"
+ {
+ "material" "materials/sprites/store/trails/spider.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Spongebob"
+ {
+ "material" "materials/sprites/store/trails/spongebob.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Spotify"
+ {
+ "material" "materials/sprites/store/trails/spotify.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "SRS Face"
+ {
+ "material" "materials/sprites/store/trails/srsface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Star"
+ {
+ "material" "materials/sprites/store/trails/star.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Superman Logo"
+ {
+ "material" "materials/sprites/store/trails/supermanlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Swirly"
+ {
+ "material" "materials/sprites/store/trails/swirly.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Taco"
+ {
+ "material" "materials/sprites/store/trails/taco.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Test 1000"
+ {
+ "material" "materials/sprites/store/trails/test1000.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Timebomb"
+ {
+ "material" "materials/sprites/store/trails/timebomb.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Tmi Shit"
+ {
+ "material" "materials/sprites/store/trails/tmishit.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "triforce"
+ {
+ "material" "materials/sprites/store/trails/triforce.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "trippy"
+ {
+ "material" "materials/sprites/store/trails/trippy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Troll Face"
+ {
+ "material" "materials/sprites/store/trails/trollface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Tux"
+ {
+ "material" "materials/sprites/store/trails/tux.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Twitter"
+ {
+ "material" "materials/sprites/store/trails/twitter.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "UK Flag"
+ {
+ "material" "materials/sprites/store/trails/ukflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ultra"
+ {
+ "material" "materials/sprites/store/trails/ultra.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Umbrella Corperation"
+ {
+ "material" "materials/sprites/store/trails/umbrellacorp.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Up Arrow"
+ {
+ "material" "materials/sprites/store/trails/uparrow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "US Flag"
+ {
+ "material" "materials/sprites/store/trails/usflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "War Heads"
+ {
+ "material" "materials/sprites/store/trails/warheads.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Warrior"
+ {
+ "material" "materials/sprites/store/trails/warrior.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Water 2"
+ {
+ "material" "materials/sprites/store/trails/water2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wheel"
+ {
+ "material" "materials/sprites/store/trails/wheel.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Windows"
+ {
+ "material" "materials/sprites/store/trails/windows.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wings"
+ {
+ "material" "materials/sprites/store/trails/wings.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wolf"
+ {
+ "material" "materials/sprites/store/trails/wolf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wonder Woman"
+ {
+ "material" "materials/sprites/store/trails/wonder_woman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Words"
+ {
+ "material" "materials/sprites/store/trails/words.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Medic 2"
+ {
+ "material" "materials/sprites/store/trails/x_medic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Xbox Logo"
+ {
+ "material" "materials/sprites/store/trails/xboxlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Y U NO Guy"
+ {
+ "material" "materials/sprites/store/trails/y-u-no-guy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ying-Yang"
+ {
+ "material" "materials/sprites/store/trails/yingyang.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ying-Yang 2"
+ {
+ "material" "materials/sprites/store/trails/yingyang2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Yukari"
+ {
+ "material" "materials/sprites/store/trails/yukari.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+ }
+
+ "Grenade Trails"
+ {
+ "Thin Beam"
+ {
+ "material" "materials/sprites/combineball_trail_black_1.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Squiggly Beam"
+ {
+ "material" "materials/sprites/hydragutbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Medium Beam"
+ {
+ "material" "materials/sprites/orangelight1.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Large Beam"
+ {
+ "material" "materials/sprites/spotlight.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Red Laserbeam"
+ {
+ "material" "materials/sprites/laserbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 0 255"
+ "unique_id" "grenadetrail_laserbeam_red"
+ }
+
+ "Blue Laserbeam"
+ {
+ "material" "materials/sprites/laserbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "0 0 255 255"
+ "unique_id" "grenadetrail_laserbeam_blue"
+ }
+ }
+
+ "Grenade Skins"
+ {
+ "HE Grenade"
+ {
+ "Orange"
+ {
+ "model" "models/props/cs_italy/orange.mdl"
+ "grenade" "hegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+
+ "Tortoise"
+ {
+ "model" "models/props/de_tides/vending_turtle.mdl"
+ "grenade" "hegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+
+ "Flashbang"
+ {
+ "Banana"
+ {
+ "model" "models/props/cs_italy/bananna.mdl"
+ "grenade" "flashbang"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+
+ "Smokegrenade"
+ {
+ "Watermelon"
+ {
+ "model" "models/props_junk/watermelon01.mdl"
+ "grenade" "smokegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+ }
+
+ "Weapon Colors"
+ {
+ "Antique White"
+ {
+ "color" "205 192 176 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Alice Blue"
+ {
+ "color" "240 248 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Blue"
+ {
+ "color" "0 0 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Corn Silk"
+ {
+ "color" "255 248 220 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Cyan"
+ {
+ "color" "0 255 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Dark Khaki"
+ {
+ "color" "189 183 107 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Dim Grey"
+ {
+ "color" "105 105 105 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Fuschia"
+ {
+ "color" "255 0 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Gray"
+ {
+ "color" "240 240 240 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Green"
+ {
+ "color" "0 255 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Lawn Green"
+ {
+ "color" "124 1202 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Navajo White"
+ {
+ "color" "255 222 173 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive"
+ {
+ "color" "128 128 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive Brown"
+ {
+ "color" "128 255 165 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive Drab"
+ {
+ "color" "607 142 35 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Orange"
+ {
+ "color" "255 77 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Orchid"
+ {
+ "color" "218 112 214 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Pale Turquoise"
+ {
+ "color" "175 238 238 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Purple"
+ {
+ "color" "128 0 128 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Pink"
+ {
+ "color" "255 103 103 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Plum"
+ {
+ "color" "221 160 221 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Red"
+ {
+ "color" "255 0 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sea Blue"
+ {
+ "color" "43 176 205 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sandy Brown"
+ {
+ "color" "244 164 96 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sienna"
+ {
+ "color" "180 82 45 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Silver"
+ {
+ "color" "192 192 192 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Scarlet"
+ {
+ "color" "140 23 23 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Seal Green"
+ {
+ "color" "128 255 165 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Steel Blue"
+ {
+ "color" "35 107 142 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Teal"
+ {
+ "color" "0 128 128 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Turquoise"
+ {
+ "color" "64 224 208 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Violet"
+ {
+ "color" "148 0 211 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Yellow"
+ {
+ "color" "255 255 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ }
+
+ "Chat stuff"
+ {
+ "Name Tags"
+ {
+ "Newbie"
+ {
+ "tag" "{lightblue}[Newbie]{teamcolor} "
+ "price" "60"
+ "type" "nametag"
+ }
+ "Wannabe"
+ {
+ "tag" "{red}[Wannabe]{teamcolor} "
+ "price" "90"
+ "type" "nametag"
+ }
+ "Ex-Con"
+ {
+ "tag" "{black}[Ex-Con]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "Officer"
+ {
+ "tag" "{lightblue}[Officer]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "S.W.A.T"
+ {
+ "tag" "{blue}[S.W.A.T]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "420"
+ {
+ "tag" "{green}[420]{teamcolor} "
+ "price" "180"
+ "type" "nametag"
+ }
+ "Equinox"
+ {
+ "tag" "{pink}[Equinox]{teamcolor} "
+ "price" "300"
+ "type" "nametag"
+ }
+ }
+
+ "Name Colors"
+ {
+ "Alice Blue"
+ {
+ "color" "{aliceblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Antique White"
+ {
+ "color" "{antiquewhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Aqua"
+ {
+ "color" "{aqua}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Aquamarine"
+ {
+ "color" "{aquamarine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Azure"
+ {
+ "color" "{azure}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Beige"
+ {
+ "color" "{beige}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Bisque"
+ {
+ "color" "{bisque}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Black"
+ {
+ "color" "{black}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blanche Dalmond"
+ {
+ "color" "{blanchedalmond}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blue"
+ {
+ "color" "{blue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blue Violet"
+ {
+ "color" "{blueviolet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Brown"
+ {
+ "color" "{brown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Burly Wood"
+ {
+ "color" "{burlywood}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cadet Blue"
+ {
+ "color" "{cadetblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Chartreuse"
+ {
+ "color" "{chartreuse}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Chocolate"
+ {
+ "color" "{chocolate}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Community"
+ {
+ "color" "{community}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Coral"
+ {
+ "color" "{coral}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cornflower Blue"
+ {
+ "color" "{cornflowerblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Corn Silk"
+ {
+ "color" "{cornsilk}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Crimson"
+ {
+ "color" "{crimson}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cyan"
+ {
+ "color" "{cyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Blue"
+ {
+ "color" "{darkblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Cyan"
+ {
+ "color" "{darkcyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Golden Rod"
+ {
+ "color" "{darkgoldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Gray"
+ {
+ "color" "{darkgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Green"
+ {
+ "color" "{darkgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark khaki"
+ {
+ "color" "{darkkhaki}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark magenta"
+ {
+ "color" "{darkmagenta}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark oliveGreen"
+ {
+ "color" "{darkolivegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark orange"
+ {
+ "color" "{darkorange}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Orchid"
+ {
+ "color" "{darkorchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Red"
+ {
+ "color" "{darkred}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Dark salmon"
+ {
+ "color" "{darksalmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Sea Green"
+ {
+ "color" "{darkseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark SlateBlue"
+ {
+ "color" "{darkslateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Slategray"
+ {
+ "color" "{darkslategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Turquoise"
+ {
+ "color" "{darkturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Violet"
+ {
+ "color" "{darkviolet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Pink"
+ {
+ "color" "{deeppink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Skyblue"
+ {
+ "color" "{deepskyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dimgray"
+ {
+ "color" "{dimgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dodger Blue"
+ {
+ "color" "{dodgerblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Firebrick"
+ {
+ "color" "{firebrick}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Floral White"
+ {
+ "color" "{floralwhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Forest Green"
+ {
+ "color" "{forestgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Fuchsia"
+ {
+ "color" "{fuchsia}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Blue"
+ {
+ "color" "{fullblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Red"
+ {
+ "color" "{fullred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gainsboro"
+ {
+ "color" "{gainsboro}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Genuine"
+ {
+ "color" "{genuine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ghost White"
+ {
+ "color" "{ghostwhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gold"
+ {
+ "color" "{gold}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Goldenrod"
+ {
+ "color" "{goldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gray"
+ {
+ "color" "{gray}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Green"
+ {
+ "color" "{green}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Green Yellow"
+ {
+ "color" "{greenyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Haunted"
+ {
+ "color" "{haunted}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Honeydew"
+ {
+ "color" "{honeydew}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Hot Pink"
+ {
+ "color" "{hotpink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indian Red"
+ {
+ "color" "{indianred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indigo"
+ {
+ "color" "{indigo}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ivory"
+ {
+ "color" "{ivory}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Khaki"
+ {
+ "color" "{khaki}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender"
+ {
+ "color" "{lavender}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender Blush"
+ {
+ "color" "{lavenderblush}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lawn Green"
+ {
+ "color" "{lawngreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lemon Chiffon"
+ {
+ "color" "{lemonchiffon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Blue"
+ {
+ "color" "{lightblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Coral"
+ {
+ "color" "{lightcoral}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Cyan"
+ {
+ "color" "{lightcyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Goldenrod Yellow"
+ {
+ "color" "{lightgoldenrodyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Red"
+ {
+ "color" "{lightred}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Light Gray"
+ {
+ "color" "{lightgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Green"
+ {
+ "color" "{lightgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Pink"
+ {
+ "color" "{lightpink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Salmon"
+ {
+ "color" "{lightsalmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Sea Green"
+ {
+ "color" "{lightseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Skyblue"
+ {
+ "color" "{lightskyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Slategray"
+ {
+ "color" "{lightslategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Steel Blue"
+ {
+ "color" "{lightsteelblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Yellow"
+ {
+ "color" "{lightyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lime"
+ {
+ "color" "{lime}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Lime Green"
+ {
+ "color" "{limegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Linen"
+ {
+ "color" "{linen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Magenta"
+ {
+ "color" "{magenta}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Maroon"
+ {
+ "color" "{maroon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Aquamarine"
+ {
+ "color" "{mediumaquamarine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Blue"
+ {
+ "color" "{mediumblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Orchid"
+ {
+ "color" "{mediumorchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Purple"
+ {
+ "color" "{mediumpurple}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Sea Green"
+ {
+ "color" "{mediumseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Slate Blue"
+ {
+ "color" "{mediumslateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Spring Green"
+ {
+ "color" "{mediumspringgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Turquoise"
+ {
+ "color" "{mediumturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Violet Red"
+ {
+ "color" "{mediumvioletred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Midnight Blue"
+ {
+ "color" "{midnightblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Mintcream"
+ {
+ "color" "{mintcream}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Misty Rose"
+ {
+ "color" "{mistyrose}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Moccasin"
+ {
+ "color" "{moccasin}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navajo White"
+ {
+ "color" "{navajowhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navy"
+ {
+ "color" "{navy}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Old Lace"
+ {
+ "color" "{oldlace}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Olive"
+ {
+ "color" "{olive}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Olive Drab"
+ {
+ "color" "{olivedrab}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange"
+ {
+ "color" "{orange}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange Red"
+ {
+ "color" "{orangered}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orchid"
+ {
+ "color" "{orchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Golden Rod"
+ {
+ "color" "{palegoldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Green"
+ {
+ "color" "{palegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Turquoise"
+ {
+ "color" "{paleturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale violetRed"
+ {
+ "color" "{palevioletred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Papaya Whip"
+ {
+ "color" "{papayawhip}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peach Puff"
+ {
+ "color" "{peachpuff}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peru"
+ {
+ "color" "{peru}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pink"
+ {
+ "color" "{pink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Plum"
+ {
+ "color" "{plum}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Powder Blue"
+ {
+ "color" "{powderblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Purple"
+ {
+ "color" "{purple}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Red"
+ {
+ "color" "{red}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Rosy Brown"
+ {
+ "color" "{rosybrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Royal Blue"
+ {
+ "color" "{royalblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Saddle Brown"
+ {
+ "color" "{saddlebrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Salmon"
+ {
+ "color" "{salmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sandy Brown"
+ {
+ "color" "{sandybrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sea Green"
+ {
+ "color" "{seagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Seashell"
+ {
+ "color" "{seashell}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sienna"
+ {
+ "color" "{sienna}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Silver"
+ {
+ "color" "{silver}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Skyblue"
+ {
+ "color" "{skyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate blue"
+ {
+ "color" "{slateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate Gray"
+ {
+ "color" "{slategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Snow"
+ {
+ "color" "{snow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Spring Green"
+ {
+ "color" "{springgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Steel Blue"
+ {
+ "color" "{steelblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tan"
+ {
+ "color" "{tan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Teal"
+ {
+ "color" "{teal}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Thistle"
+ {
+ "color" "{thistle}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tomato"
+ {
+ "color" "{tomato}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Turquoise"
+ {
+ "color" "{turquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Violet"
+ {
+ "color" "{violet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Wheat"
+ {
+ "color" "{wheat}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "White"
+ {
+ "color" "{white}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Yellow"
+ {
+ "color" "{yellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Yellow Green"
+ {
+ "color" "{yellowgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ }
+
+ "Message Colors"
+ {
+ "Alice Blue"
+ {
+ "color" "{aliceblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Antique White"
+ {
+ "color" "{antiquewhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Aqua"
+ {
+ "color" "{aqua}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Aquamarine"
+ {
+ "color" "{aquamarine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Azure"
+ {
+ "color" "{azure}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Beige"
+ {
+ "color" "{beige}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Bisque"
+ {
+ "color" "{bisque}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Black"
+ {
+ "color" "{black}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blanche Dalmond"
+ {
+ "color" "{blanchedalmond}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blue"
+ {
+ "color" "{blue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blue Violet"
+ {
+ "color" "{blueviolet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Brown"
+ {
+ "color" "{brown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Burly Wood"
+ {
+ "color" "{burlywood}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cadet Blue"
+ {
+ "color" "{cadetblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Chartreuse"
+ {
+ "color" "{chartreuse}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Chocolate"
+ {
+ "color" "{chocolate}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Community"
+ {
+ "color" "{community}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Coral"
+ {
+ "color" "{coral}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cornflower Blue"
+ {
+ "color" "{cornflowerblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Corn Silk"
+ {
+ "color" "{cornsilk}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Crimson"
+ {
+ "color" "{crimson}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cyan"
+ {
+ "color" "{cyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Blue"
+ {
+ "color" "{darkblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Cyan"
+ {
+ "color" "{darkcyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Golden Rod"
+ {
+ "color" "{darkgoldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Gray"
+ {
+ "color" "{darkgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Green"
+ {
+ "color" "{darkgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark khaki"
+ {
+ "color" "{darkkhaki}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark magenta"
+ {
+ "color" "{darkmagenta}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark oliveGreen"
+ {
+ "color" "{darkolivegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark orange"
+ {
+ "color" "{darkorange}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Orchid"
+ {
+ "color" "{darkorchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Red"
+ {
+ "color" "{darkred}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Dark salmon"
+ {
+ "color" "{darksalmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Sea Green"
+ {
+ "color" "{darkseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark SlateBlue"
+ {
+ "color" "{darkslateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Slategray"
+ {
+ "color" "{darkslategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Turquoise"
+ {
+ "color" "{darkturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Violet"
+ {
+ "color" "{darkviolet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Pink"
+ {
+ "color" "{deeppink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Skyblue"
+ {
+ "color" "{deepskyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dimgray"
+ {
+ "color" "{dimgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dodger Blue"
+ {
+ "color" "{dodgerblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Firebrick"
+ {
+ "color" "{firebrick}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Floral White"
+ {
+ "color" "{floralwhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Forest Green"
+ {
+ "color" "{forestgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Fuchsia"
+ {
+ "color" "{fuchsia}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Blue"
+ {
+ "color" "{fullblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Red"
+ {
+ "color" "{fullred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gainsboro"
+ {
+ "color" "{gainsboro}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Genuine"
+ {
+ "color" "{genuine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ghost White"
+ {
+ "color" "{ghostwhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gold"
+ {
+ "color" "{gold}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Goldenrod"
+ {
+ "color" "{goldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gray"
+ {
+ "color" "{gray}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Green"
+ {
+ "color" "{green}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Green Yellow"
+ {
+ "color" "{greenyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Haunted"
+ {
+ "color" "{haunted}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Honeydew"
+ {
+ "color" "{honeydew}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Hot Pink"
+ {
+ "color" "{hotpink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indian Red"
+ {
+ "color" "{indianred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indigo"
+ {
+ "color" "{indigo}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ivory"
+ {
+ "color" "{ivory}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Khaki"
+ {
+ "color" "{khaki}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender"
+ {
+ "color" "{lavender}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender Blush"
+ {
+ "color" "{lavenderblush}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lawn Green"
+ {
+ "color" "{lawngreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lemon Chiffon"
+ {
+ "color" "{lemonchiffon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Blue"
+ {
+ "color" "{lightblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Coral"
+ {
+ "color" "{lightcoral}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Cyan"
+ {
+ "color" "{lightcyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Goldenrod Yellow"
+ {
+ "color" "{lightgoldenrodyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Gray"
+ {
+ "color" "{lightgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Red"
+ {
+ "color" "{lightred}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Light Green"
+ {
+ "color" "{lightgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Pink"
+ {
+ "color" "{lightpink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Salmon"
+ {
+ "color" "{lightsalmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Sea Green"
+ {
+ "color" "{lightseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Skyblue"
+ {
+ "color" "{lightskyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Slategray"
+ {
+ "color" "{lightslategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Steel Blue"
+ {
+ "color" "{lightsteelblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Yellow"
+ {
+ "color" "{lightyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lime"
+ {
+ "color" "{lime}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Lime Green"
+ {
+ "color" "{limegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Linen"
+ {
+ "color" "{linen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Magenta"
+ {
+ "color" "{magenta}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Maroon"
+ {
+ "color" "{maroon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Aquamarine"
+ {
+ "color" "{mediumaquamarine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Blue"
+ {
+ "color" "{mediumblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Orchid"
+ {
+ "color" "{mediumorchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Purple"
+ {
+ "color" "{mediumpurple}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Sea Green"
+ {
+ "color" "{mediumseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Slate Blue"
+ {
+ "color" "{mediumslateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Spring Green"
+ {
+ "color" "{mediumspringgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Turquoise"
+ {
+ "color" "{mediumturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Violet Red"
+ {
+ "color" "{mediumvioletred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Midnight Blue"
+ {
+ "color" "{midnightblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Mintcream"
+ {
+ "color" "{mintcream}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Misty Rose"
+ {
+ "color" "{mistyrose}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Moccasin"
+ {
+ "color" "{moccasin}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navajo White"
+ {
+ "color" "{navajowhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navy"
+ {
+ "color" "{navy}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Old Lace"
+ {
+ "color" "{oldlace}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Olive"
+ {
+ "color" "{olive}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Olive Drab"
+ {
+ "color" "{olivedrab}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange"
+ {
+ "color" "{orange}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange Red"
+ {
+ "color" "{orangered}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orchid"
+ {
+ "color" "{orchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Golden Rod"
+ {
+ "color" "{palegoldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Green"
+ {
+ "color" "{palegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Turquoise"
+ {
+ "color" "{paleturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale violetRed"
+ {
+ "color" "{palevioletred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Papaya Whip"
+ {
+ "color" "{papayawhip}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peach Puff"
+ {
+ "color" "{peachpuff}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peru"
+ {
+ "color" "{peru}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pink"
+ {
+ "color" "{pink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Plum"
+ {
+ "color" "{plum}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Powder Blue"
+ {
+ "color" "{powderblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Purple"
+ {
+ "color" "{purple}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Red"
+ {
+ "color" "{red}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Rosy Brown"
+ {
+ "color" "{rosybrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Royal Blue"
+ {
+ "color" "{royalblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Saddle Brown"
+ {
+ "color" "{saddlebrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Salmon"
+ {
+ "color" "{salmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sandy Brown"
+ {
+ "color" "{sandybrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sea Green"
+ {
+ "color" "{seagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Seashell"
+ {
+ "color" "{seashell}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sienna"
+ {
+ "color" "{sienna}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Silver"
+ {
+ "color" "{silver}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Skyblue"
+ {
+ "color" "{skyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate blue"
+ {
+ "color" "{slateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate Gray"
+ {
+ "color" "{slategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Snow"
+ {
+ "color" "{snow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Spring Green"
+ {
+ "color" "{springgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Steel Blue"
+ {
+ "color" "{steelblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tan"
+ {
+ "color" "{tan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Teal"
+ {
+ "color" "{teal}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Thistle"
+ {
+ "color" "{thistle}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tomato"
+ {
+ "color" "{tomato}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Turquoise"
+ {
+ "color" "{turquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Violet"
+ {
+ "color" "{violet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Wheat"
+ {
+ "color" "{wheat}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "White"
+ {
+ "color" "{white}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Yellow"
+ {
+ "color" "{yellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Yellow Green"
+ {
+ "color" "{yellowgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ }
+ }
+
+ "Miscellaneous"
+ {
+ "Bunnyhop"
+ {
+ "price" "500"
+ "type" "bunnyhop"
+ }
+
+ "Jetpack"
+ {
+ "price" "500"
+ "type" "jetpack"
+ }
+
+ "Paintball"
+ {
+ "price" "500"
+ "type" "paintball"
+ "Decals"
+ {
+ "cyan"
+ {
+ "material" "paintball/pb_cyan.vmt"
+ }
+ "green"
+ {
+ "material" "paintball/pb_green.vmt"
+ }
+ "pink"
+ {
+ "material" "paintball/pb_pink.vmt"
+ }
+ "orange"
+ {
+ "material" "paintball/pb_orange.vmt"
+ }
+ "yellow"
+ {
+ "material" "paintball/pb_yellow.vmt"
+ }
+ }
+ }
+ }
+
+ "Unusual Effects"
+ {
+ "Flying Bits"
+ {
+ "unusual_id" "2"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Nemesis Burst"
+ {
+ "unusual_id" "3"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Community Sparkle"
+ {
+ "unusual_id" "4"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Holy Glow"
+ {
+ "unusual_id" "5"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Green Confetti"
+ {
+ "unusual_id" "6"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Purple Confetti"
+ {
+ "unusual_id" "7"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Haunted Ghosts"
+ {
+ "unusual_id" "8"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Green Energy"
+ {
+ "unusual_id" "9"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Purple Energy"
+ {
+ "unusual_id" "10"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Circling TF Logo"
+ {
+ "unusual_id" "11"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Massed Flies"
+ {
+ "unusual_id" "12"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Burning Flames"
+ {
+ "unusual_id" "13"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Scorching Flames"
+ {
+ "unusual_id" "14"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Searing Plasma"
+ {
+ "unusual_id" "15"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Vivid Plasma"
+ {
+ "unusual_id" "16"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Sunbeams"
+ {
+ "unusual_id" "17"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Circling Peace Sign"
+ {
+ "unusual_id" "18"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Circling Heart"
+ {
+ "unusual_id" "19"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Map Stamps"
+ {
+ "unusual_id" "20"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Genteel Smoke"
+ {
+ "unusual_id" "28"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Stormy Storm"
+ {
+ "unusual_id" "29"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Blizzardy Storm"
+ {
+ "unusual_id" "30"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Nuts n' Bolts"
+ {
+ "unusual_id" "31"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Orbiting Planets"
+ {
+ "unusual_id" "32"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Orbiting Fire"
+ {
+ "unusual_id" "33"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Bubbling"
+ {
+ "unusual_id" "34"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Smoking"
+ {
+ "unusual_id" "35"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Steaming"
+ {
+ "unusual_id" "36"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Flaming Lantern"
+ {
+ "unusual_id" "37"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Cloudy Moon"
+ {
+ "unusual_id" "38"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Cauldron Bubbles"
+ {
+ "unusual_id" "39"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Eerie Orbiting Fire"
+ {
+ "unusual_id" "40"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Knifestorm"
+ {
+ "unusual_id" "43"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Misty Skull"
+ {
+ "unusual_id" "44"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Harvest Moon"
+ {
+ "unusual_id" "45"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "It's A Secret To Everybody"
+ {
+ "unusual_id" "46"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Stormy 13th Hour"
+ {
+ "unusual_id" "47"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Attrib_Particle55"
+ {
+ "unusual_id" "55"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Kill-a-Watt"
+ {
+ "unusual_id" "56"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Terror-Watt"
+ {
+ "unusual_id" "57"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Cloud 9"
+ {
+ "unusual_id" "58"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Aces High"
+ {
+ "unusual_id" "59"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Dead Presidents"
+ {
+ "unusual_id" "180"
+ "type" "tfunusual"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Miami Nights"
+ {
+ "unusual_id" "61"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Disco Beat Down"
+ {
+ "unusual_id" "62"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Phosphorous"
+ {
+ "unusual_id" "63"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Sulphurous"
+ {
+ "unusual_id" "64"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Memory Leak"
+ {
+ "unusual_id" "65"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Overclocked"
+ {
+ "unusual_id" "66"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Electrostatic"
+ {
+ "unusual_id" "67"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Power Surge"
+ {
+ "unusual_id" "68"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Anti-Freeze"
+ {
+ "unusual_id" "69"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Time Warp"
+ {
+ "unusual_id" "70"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Green Black Hole"
+ {
+ "unusual_id" "71"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Roboactive"
+ {
+ "unusual_id" "72"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Arcana"
+ {
+ "unusual_id" "73"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Spellbound"
+ {
+ "unusual_id" "74"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Chiroptera Venenata"
+ {
+ "unusual_id" "75"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Poisoned Shadows"
+ {
+ "unusual_id" "76"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Something Burning This Way Comes"
+ {
+ "unusual_id" "77"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Hellfire"
+ {
+ "unusual_id" "78"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Darkblaze"
+ {
+ "unusual_id" "79"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Demonflame"
+ {
+ "unusual_id" "80"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Showstopper"
+ {
+ "unusual_id" "3002"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Holy Grail"
+ {
+ "unusual_id" "3003"
+ "price" "600"
+ "type" "tfunusual"
+ }
+ "Fountain of Delight"
+ {
+ "unusual_id" "3005"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Screaming Tiger"
+ {
+ "unusual_id" "3006"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Skill Gotten Gains"
+ {
+ "unusual_id" "3007"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Midnight Whirlwind"
+ {
+ "unusual_id" "3008"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Silver Cyclone"
+ {
+ "unusual_id" "3009"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Mega Strike"
+ {
+ "unusual_id" "3010"
+ "price" "600"
+ "type" "tfunusual"
+ }
+ }
+
+ "Paint Cans"
+ {
+ "A Color Similar to Slate"
+ {
+ "color" "47 79 79"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Deep Commitment to Purple"
+ {
+ "color" "125 64 113"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Distinctive Lack of Hue"
+ {
+ "color" "20 20 20"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Mann's Mint"
+ {
+ "color" "188 221 179"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "After Eight"
+ {
+ "color" "45 45 36"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Aged Moustache Grey"
+ {
+ "color" "126 126 126"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "An Extraordinary Abundance of Tinge"
+ {
+ "color" "230 230 230"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Australium Gold"
+ {
+ "color" "231 181 59"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Color No. 216-190-216 "
+ {
+ "color" "216 190 216"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Dark Salmon Injustice"
+ {
+ "color" "233 150 122"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Drably Olive"
+ {
+ "color" "128 128 0"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Indubitably Green"
+ {
+ "color" "114 158 66"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Mann Co. Orange"
+ {
+ "color" "207 115 54"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Muskelmannbraun"
+ {
+ "color" "165 117 69"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Noble Hatter's Violet"
+ {
+ "color" "81 56 74"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Peculiarly Drab Tincture"
+ {
+ "color" "197 175 145"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+ "Pink as Hell"
+ {
+ "color" "255 105 180"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Radigan Conagher Brown"
+ {
+ "color" "105 77 58"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "The Bitter Taste of Defeat and Lime"
+ {
+ "color" "50 205 50"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "The Color of a Gentlemann's Business Pants"
+ {
+ "color" "240 230 140"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Ye Olde Rustic Colour"
+ {
+ "color" "124 108 87"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Zepheniah's Greed"
+ {
+ "color" "66 79 59"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/sourcemod/configs/store/items_few_trails.txt b/addons/sourcemod/configs/store/items_few_trails.txt
new file mode 100644
index 0000000..d74e1b8
--- /dev/null
+++ b/addons/sourcemod/configs/store/items_few_trails.txt
@@ -0,0 +1,8755 @@
+"Store"
+{
+
+ "Weapon Skins"
+ {
+ "M4A1-S Hyper Beast"
+ {
+ "paint" "430"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Mag7 RedHot"
+ {
+ "paint" "431"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Negev Glory"
+ {
+ "paint" "432"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Mac10 NeonRider"
+ {
+ "paint" "433"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Sawedoff Origami"
+ {
+ "paint" "434"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "CZ75 Precision"
+ {
+ "paint" "435"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "UMP45 RACER"
+ {
+ "paint" "436"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Famas Jinn "
+ {
+ "paint" "429"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Galil Eco"
+ {
+ "paint" "428"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Five Seven Banana"
+ {
+ "paint" "427"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "P250 Contour"
+ {
+ "paint" "426"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "AWP Twine"
+ {
+ "paint" "424"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "MP9 Ultra Modern"
+ {
+ "paint" "423"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Ak47 Maestry"
+ {
+ "paint" "422"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Abyss"
+ {
+
+ "paint" "361"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Acid Fade"
+ {
+
+ "paint" "253"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Afterimage"
+ {
+
+ "paint" "154"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Amber Fade"
+ {
+
+ "paint" "246"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Anodized Gunmetal"
+ {
+
+ "paint" "210"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Anodized Navy"
+ {
+
+ "paint" "28"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Anodized Navy (2)"
+ {
+
+ "paint" "197"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Antique (Nova)"
+ {
+
+ "paint" "286"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Antique (PP-Bizon)"
+ {
+
+ "paint" "306"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Arctic Camo"
+ {
+
+ "paint" "6"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Army Mesh"
+ {
+
+ "paint" "242"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Army Recon"
+ {
+
+ "paint" "245"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Army Sheen"
+ {
+
+ "paint" "298"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ash Wood"
+ {
+
+ "paint" "234"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Asiimov (AWP)"
+ {
+
+ "paint" "279"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Asiimov (M4A4)"
+ {
+
+ "paint" "255"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Asiimov (P90)"
+ {
+
+ "paint" "359"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Atomic Alloy"
+ {
+
+ "paint" "301"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Azure Zebra"
+ {
+
+ "paint" "229"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Basilisk"
+ {
+
+ "paint" "383"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bengal Tiger"
+ {
+
+ "paint" "9"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Black Laminate"
+ {
+
+ "paint" "172"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Black Limba"
+ {
+
+ "paint" "190"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blaze"
+ {
+
+ "paint" "37"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blaze Orange"
+ {
+
+ "paint" "166"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blind Spot"
+ {
+
+ "paint" "228"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blizzard Marbelized"
+ {
+
+ "paint" "75"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blood In The Water"
+ {
+
+ "paint" "222"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blood Tiger"
+ {
+
+ "paint" "217"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bloomstick"
+ {
+
+ "paint" "62"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Fissure"
+ {
+
+ "paint" "278"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Laminate"
+ {
+
+ "paint" "226"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Steel"
+ {
+
+ "paint" "42"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Spruce"
+ {
+
+ "paint" "96"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Streak"
+ {
+
+ "paint" "13"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Titanium"
+ {
+
+ "paint" "216"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bone Mask"
+ {
+
+ "paint" "27"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bone Machine"
+ {
+
+ "paint" "370"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bone Pile"
+ {
+
+ "paint" "193"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "BOOM"
+ {
+
+ "paint" "174"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Boreal Forest"
+ {
+
+ "paint" "77"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Brass"
+ {
+
+ "paint" "159"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bratatat"
+ {
+
+ "paint" "317"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Briar"
+ {
+
+ "paint" "330"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bright Water"
+ {
+
+ "paint" "189"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bulldozer"
+ {
+
+ "paint" "39"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bullet Rain"
+ {
+
+ "paint" "155"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Business Class"
+ {
+
+ "paint" "364"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Caged Steel"
+ {
+
+ "paint" "299"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Caiman"
+ {
+
+ "paint" "339"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "CaliCamo"
+ {
+
+ "paint" "240"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Candy Apple"
+ {
+
+ "paint" "3"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Caramel"
+ {
+
+ "paint" "93"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Carbon Fiber"
+ {
+
+ "paint" "70"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cardiac"
+ {
+
+ "paint" "391"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cartel (AK-47)"
+ {
+
+ "paint" "394"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cartel (P250)"
+ {
+
+ "paint" "388"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Case Hardened"
+ {
+
+ "paint" "44"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Catacombs"
+ {
+
+ "paint" "399"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cerberus"
+ {
+
+ "paint" "379"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chainmail"
+ {
+
+ "paint" "327"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chalice"
+ {
+
+ "paint" "325"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chameleon"
+ {
+
+ "paint" "280"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chatterbox"
+ {
+
+ "paint" "398"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chemical Green"
+ {
+
+ "paint" "376"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Coach Class"
+ {
+
+ "paint" "346"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cobalt Disruption"
+ {
+
+ "paint" "231"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cobalt Halftone"
+ {
+
+ "paint" "267"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cobalt Quartz"
+ {
+
+ "paint" "249"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cold Blooded"
+ {
+
+ "paint" "67"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Colony"
+ {
+
+ "paint" "47"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Commuter"
+ {
+
+ "paint" "343"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Condemned"
+ {
+
+ "paint" "110"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Conspiracy"
+ {
+
+ "paint" "351"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Contamination"
+ {
+
+ "paint" "373"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Contractor"
+ {
+
+ "paint" "46"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Contrast Spray"
+ {
+
+ "paint" "22"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Corporal"
+ {
+
+ "paint" "281"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Corticera (AWP)"
+ {
+
+ "paint" "184"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Corticera (P2000)"
+ {
+
+ "paint" "181"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Copper"
+ {
+
+ "paint" "41"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Copper Galaxy"
+ {
+
+ "paint" "274"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Copper Head"
+ {
+
+ "paint" "10"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Crimson Web"
+ {
+
+ "paint" "12"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Crimson Web (2)"
+ {
+
+ "paint" "232"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Curse"
+ {
+
+ "paint" "310"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cyanospatter"
+ {
+
+ "paint" "92"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cyrex (M4A1-S"
+ {
+
+ "paint" "360"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cyrex (SCAR-20)"
+ {
+
+ "paint" "312"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Damascus Steel (1)"
+
+
+ {
+
+ "paint" "410"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Damascus Steel (2)"
+ {
+
+ "paint" "411"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Damascus Steel (3)"
+ {
+
+ "paint" "247"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dark Age"
+ {
+
+ "paint" "329"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dark Water"
+ {
+
+ "paint" "60"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dart"
+ {
+
+ "paint" "386"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Deadly Poison"
+ {
+
+ "paint" "403"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Death By Kitty"
+ {
+
+ "paint" "156"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Death Rattle"
+ {
+
+ "paint" "293"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Delusion"
+ {
+
+ "paint" "392"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Demeter"
+ {
+
+ "paint" "195"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Demolition"
+ {
+
+ "paint" "153"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Detour"
+ {
+
+ "paint" "319"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert Storm"
+ {
+
+ "paint" "8"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert-Strike (M4A4)"
+ {
+
+ "paint" "336"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert-Strike (Negev)"
+ {
+
+ "paint" "355"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert Warfare"
+ {
+
+ "paint" "311"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doomkitty"
+ {
+
+ "paint" "178"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 1)"
+ {
+
+ "paint" "418"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 2)"
+ {
+
+ "paint" "419"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 3)"
+ {
+
+ "paint" "420"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 4)"
+ {
+
+ "paint" "421"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Black Pearl)"
+ {
+
+ "paint" "417"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Ruby)"
+ {
+
+ "paint" "415"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Sapphire)"
+ {
+
+ "paint" "416"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dragon King"
+ {
+
+ "paint" "400"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dragon Lore"
+ {
+
+ "paint" "344"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dragon Tattoo"
+ {
+
+ "paint" "48"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dry Season"
+ {
+
+ "paint" "199"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Electric Hive"
+ {
+
+ "paint" "227"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Emerald"
+ {
+
+ "paint" "196"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Emerald Dragon"
+ {
+
+ "paint" "182"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Emerald Pinstripe"
+ {
+
+ "paint" "300"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Facets"
+ {
+
+ "paint" "207"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fade"
+ {
+
+ "paint" "38"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Faded Zebra"
+ {
+
+ "paint" "176"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fallout Warning (1)"
+ {
+
+ "paint" "169"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fallout Warning (2)"
+ {
+
+ "paint" "378"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fire Elemental"
+ {
+
+ "paint" "389"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fire Serpent"
+ {
+
+ "paint" "180"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Firestarter"
+ {
+
+ "paint" "385"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "First Class (AK-47)"
+ {
+
+ "paint" "341"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "First Class (Sawed-Off)"
+ {
+
+ "paint" "345"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Forest DDPAT"
+ {
+
+ "paint" "5"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Forest Leaves"
+ {
+
+ "paint" "25"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Forest Night"
+ {
+
+ "paint" "78"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fowl Play"
+ {
+
+ "paint" "352"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Franklin"
+ {
+
+ "paint" "295"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Full Stop"
+ {
+
+ "paint" "250"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Gator Mesh"
+ {
+
+ "paint" "243"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ghost Camo"
+ {
+
+ "paint" "225"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Glacier Mesh"
+ {
+
+ "paint" "111"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Golden Koi"
+ {
+
+ "paint" "185"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Granite Marbelized"
+ {
+
+ "paint" "21"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Graphite (1)"
+ {
+
+ "paint" "214"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Graphite (2)"
+ {
+
+ "paint" "212"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grassland"
+ {
+
+ "paint" "95"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grassland Leaves"
+ {
+
+ "paint" "104"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Graven"
+ {
+
+ "paint" "188"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Green Apple"
+ {
+
+ "paint" "294"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Green Plaid"
+ {
+
+ "paint" "366"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Griffin"
+ {
+
+ "paint" "384"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grinder"
+ {
+
+ "paint" "381"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grotto"
+ {
+
+ "paint" "406"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Groundwater (1)"
+ {
+
+ "paint" "2"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Groundwater (2)"
+ {
+
+ "paint" "209"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Guardian (1)"
+ {
+
+ "paint" "257"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Guardian (2)"
+ {
+
+ "paint" "290"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Gun Smoke"
+ {
+
+ "paint" "15"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hand Cannon"
+ {
+
+ "paint" "328"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hazard (1)"
+ {
+
+ "paint" "101"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hazard (2)"
+ {
+
+ "paint" "198"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heat"
+ {
+
+ "paint" "284"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heaven Guard (MAG-7)"
+ {
+
+ "paint" "291"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heaven Guard (XM1014)"
+ {
+
+ "paint" "314"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heirloom"
+ {
+
+ "paint" "273"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hemoglobin"
+ {
+
+ "paint" "220"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hexane"
+ {
+
+ "paint" "218"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Highwayman"
+ {
+
+ "paint" "390"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hive"
+ {
+
+ "paint" "219"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hot Rod"
+ {
+
+ "paint" "33"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hot Shot"
+ {
+
+ "paint" "377"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Howl"
+ {
+
+ "paint" "309"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hunting Blind"
+ {
+
+ "paint" "241"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hypnotic"
+ {
+
+ "paint" "61"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Indigo"
+ {
+
+ "paint" "333"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Irradiated Alert"
+ {
+
+ "paint" "171"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Isaac"
+ {
+
+ "paint" "303"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ivory"
+ {
+
+ "paint" "357"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jaguar"
+ {
+
+ "paint" "316"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jet Set"
+ {
+
+ "paint" "340"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle (1)"
+ {
+
+ "paint" "151"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle (2)"
+ {
+
+ "paint" "205"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle Dashed"
+ {
+
+ "paint" "147"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle DDPAT"
+ {
+
+ "paint" "202"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle Spray"
+ {
+
+ "paint" "122"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle Tiger"
+ {
+
+ "paint" "16"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Kami (1)"
+ {
+
+ "paint" "265"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Kami (2)"
+ {
+
+ "paint" "308"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Knight"
+ {
+
+ "paint" "326"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Koi"
+ {
+
+ "paint" "356"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "The Kraken"
+ {
+
+ "paint" "256"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Labyrinth"
+ {
+
+ "paint" "362"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Leather"
+ {
+
+ "paint" "342"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Lichen Dashed"
+ {
+
+ "paint" "26"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Lightning Strike"
+ {
+
+ "paint" "51"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Magma"
+ {
+
+ "paint" "266"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Malachite"
+ {
+
+ "paint" "402"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Man-O'-War"
+ {
+
+ "paint" "395"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Marble Fade"
+ {
+
+ "paint" "413"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Marina"
+ {
+
+ "paint" "261"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Master Piece"
+ {
+
+ "paint" "321"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mayan Dreams"
+ {
+
+ "paint" "200"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mehndi"
+ {
+
+ "paint" "258"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Memento"
+ {
+
+ "paint" "177"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Metallic DDPAT"
+ {
+
+ "paint" "34"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Meteorite"
+ {
+
+ "paint" "296"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Modern Hunter"
+ {
+
+ "paint" "164"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Module"
+ {
+
+ "paint" "335"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mosaico"
+ {
+
+ "paint" "204"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mudder"
+ {
+
+ "paint" "90"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Muertos"
+ {
+
+ "paint" "404"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Murky"
+ {
+
+ "paint" "382"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Naga"
+ {
+
+ "paint" "397"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Night"
+ {
+
+ "paint" "40"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Night Ops"
+ {
+
+ "paint" "236"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nightshade"
+ {
+
+ "paint" "223"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nitro (CZ-75)"
+ {
+
+ "paint" "322"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nitro (M4A1-S)"
+ {
+
+ "paint" "254"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Garden"
+ {
+
+ "paint" "372"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Threat (1)"
+ {
+
+ "paint" "168"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Threat (2)"
+ {
+
+ "paint" "179"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Waste"
+ {
+
+ "paint" "369"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ocean Foam (MP7)"
+ {
+
+ "paint" "211"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ocean Foam (P2000)"
+ {
+
+ "paint" "213"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Olive Plaid"
+ {
+
+ "paint" "365"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Orange DDPAT"
+ {
+
+ "paint" "83"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Orange Peel"
+ {
+
+ "paint" "141"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Orion"
+ {
+
+ "paint" "313"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Osiris"
+ {
+
+ "paint" "349"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ossified"
+ {
+
+ "paint" "36"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Overgrowth"
+ {
+
+ "paint" "183"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Palm (1)"
+ {
+
+ "paint" "157"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Palm (2)"
+ {
+
+ "paint" "201"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Panther"
+ {
+
+ "paint" "276"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pilot"
+ {
+
+ "paint" "347"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pink DDPAT"
+ {
+
+ "paint" "84"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pit Viper"
+ {
+
+ "paint" "251"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Poison Dart"
+ {
+
+ "paint" "315"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Polar Camo"
+ {
+
+ "paint" "74"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Polar Mesh"
+ {
+
+ "paint" "107"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Predator"
+ {
+
+ "paint" "170"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pulse (FAMAS)"
+ {
+
+ "paint" "260"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pulse (P2000)"
+ {
+
+ "paint" "338"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pulse (SG553)"
+ {
+
+ "paint" "287"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Quicksilver"
+ {
+
+ "paint" "407"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+
+
+ "Radiation Hazard (1)"
+ {
+
+ "paint" "167"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Radiation Hazard (2)"
+ {
+
+ "paint" "375"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Reactor"
+ {
+
+ "paint" "367"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Redline (AK-47)"
+ {
+
+ "paint" "282"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+
+
+ "Redline (AWP)"
+ {
+
+ "paint" "259"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Laminate"
+ {
+
+ "paint" "14"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Leather"
+ {
+
+ "paint" "348"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Fragcam"
+ {
+
+ "paint" "275"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Python"
+ {
+
+ "paint" "320"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Quartz"
+ {
+
+ "paint" "248"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Retribution"
+ {
+
+ "paint" "307"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rising Skull"
+ {
+
+ "paint" "263"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Road Rash"
+ {
+
+ "paint" "318"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rose Iron"
+ {
+
+ "paint" "262"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Royal Blue"
+ {
+
+ "paint" "332"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rust Coat (1)"
+ {
+
+ "paint" "323"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rust Coat (2)"
+ {
+
+ "paint" "203"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rust Coat (3)"
+ {
+
+ "paint" "414"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Safari Mesh"
+ {
+
+ "paint" "72"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sage Spray"
+ {
+
+ "paint" "119"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sandstorm (1)"
+ {
+
+ "paint" "264"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sandstorm (2)"
+ {
+
+ "paint" "289"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Dashed"
+ {
+
+ "paint" "148"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Dune (1)"
+ {
+
+ "paint" "99"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Dune (2)"
+ {
+
+ "paint" "208"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Mesh"
+ {
+
+ "paint" "116"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Spray"
+ {
+
+ "paint" "124"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Scorched"
+ {
+
+ "paint" "175"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Scorpion"
+ {
+
+ "paint" "71"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sergeant"
+ {
+
+ "paint" "288"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Serenity"
+ {
+
+ "paint" "405"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Serum"
+ {
+
+ "paint" "221"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Setting Sun"
+ {
+
+ "paint" "368"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Shattered"
+ {
+
+ "paint" "192"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Silver"
+ {
+
+ "paint" "32"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+
+
+ }
+
+ "Silver Quartz"
+ {
+
+ "paint" "252"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Skulls"
+ {
+
+ "paint" "11"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Slashed"
+ {
+
+ "paint" "304"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Slaughter"
+ {
+
+ "paint" "59"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Snake Camo"
+ {
+
+ "paint" "30"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Spitfire"
+ {
+
+ "paint" "194"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Splash"
+ {
+
+ "paint" "162"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Splash Jam"
+ {
+
+ "paint" "165"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Stained"
+ {
+
+ "paint" "43"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Stainless"
+ {
+
+ "paint" "277"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Steel Disruption"
+ {
+
+ "paint" "230"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Storm"
+ {
+
+ "paint" "100"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Styx"
+ {
+
+ "paint" "371"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Supernova"
+ {
+
+ "paint" "358"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "System Lock"
+ {
+
+ "paint" "401"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tatter"
+ {
+
+ "paint" "337"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Teardown"
+ {
+
+ "paint" "244"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tempest"
+ {
+
+ "paint" "191"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Terrain"
+ {
+
+ "paint" "285"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "The Fuschia Is Now"
+ {
+
+ "paint" "269"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tiger Tooth"
+ {
+
+ "paint" "409"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tigris"
+ {
+
+ "paint" "350"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Titanium Bit"
+ {
+
+ "paint" "272"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tornado"
+ {
+
+ "paint" "206"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Torque"
+ {
+
+ "paint" "305"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Toxic"
+ {
+
+ "paint" "374"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tranquility"
+ {
+
+ "paint" "393"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Traveler"
+ {
+
+ "paint" "363"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tread Plate"
+ {
+
+ "paint" "268"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Trigon"
+ {
+
+ "paint" "283"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tropical Storm"
+ {
+
+ "paint" "233"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tuxedo"
+ {
+
+ "paint" "297"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Twist"
+ {
+
+ "paint" "334"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ultraviolet"
+ {
+
+ "paint" "98"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Undertow"
+ {
+
+ "paint" "271"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Dashed"
+ {
+
+ "paint" "149"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban DDPAT"
+ {
+
+ "paint" "17"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Hazard (1)"
+ {
+
+ "paint" "387"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Hazard (2)"
+ {
+
+ "paint" "354"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Masked"
+ {
+
+ "paint" "143"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Perforated"
+ {
+
+ "paint" "135"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Rubble"
+ {
+
+ "paint" "237"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Shock"
+ {
+
+ "paint" "396"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "VariCamo"
+ {
+
+ "paint" "235"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "VariCamo Blue"
+ {
+
+ "paint" "238"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Victoria"
+ {
+
+ "paint" "270"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Walnut"
+ {
+
+ "paint" "158"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Wasteland Rebel"
+ {
+
+ "paint" "380"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Water Elemental"
+ {
+
+ "paint" "353"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Water Sigil"
+ {
+
+ "paint" "224"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Wave Spray"
+ {
+
+ "paint" "186"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Waves Perforated"
+ {
+
+ "paint" "136"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Whiteout"
+ {
+
+ "paint" "102"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Wings"
+ {
+
+ "paint" "73"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Winter Forest"
+ {
+
+ "paint" "76"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Virus"
+ {
+
+ "paint" "20"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Vulcan"
+ {
+
+ "paint" "302"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "X-RAY"
+ {
+
+ "paint" "215"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Zirka"
+ {
+
+ "paint" "187"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ }
+
+ "Pets"
+ {
+ "Chicken"
+ {
+ "model" "models/chicken/chicken.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "idle01"
+ "run" "run01"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Chicken Zombie"
+ {
+ "model" "models/chicken/chicken_zombie.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "idle01"
+ "run" "run01"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Crow"
+ {
+ "model" "models/crow.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "crow_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Crow Flying"
+ {
+ "model" "models/crow.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly01"
+ "run" "Fly01"
+ "unique_id" "crow_flying"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Pigeon"
+ {
+ "model" "models/pigeon.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "pigeon_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Pigeon Flying"
+ {
+ "model" "models/pigeon.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly01"
+ "run" "Fly01"
+ "unique_id" "pigeon_flying"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Seagull"
+ {
+ "model" "models/seagull.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "seagull_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Seagull Flying"
+ {
+ "model" "models/seagull.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly"
+ "run" "Fly"
+ "unique_id" "seagull_flying"
+ "price" "100"
+ "type" "pet"
+ }
+ }
+
+ "Knives"
+ {
+ "Bayonet"
+ {
+ "entity" "weapon_bayonet"
+ "defindex" "500"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Gut"
+ {
+ "entity" "weapon_knife_gut"
+ "defindex" "506"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Flip"
+ {
+ "entity" "weapon_knife_flip"
+ "defindex" "505"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "M9 Bayonet"
+ {
+ "entity" "weapon_knife_m9_bayonet"
+ "defindex" "508"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Karambit"
+ {
+ "entity" "weapon_knife_karambit"
+ "defindex" "507"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Golden"
+ {
+ "entity" "weapon_knifegg"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Tactical"
+ {
+ "entity" "weapon_knife_tactical"
+ "defindex" "509"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Butterfly"
+ {
+ "entity" "weapon_knife_butterfly"
+ "defindex" "515"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Falchion"
+ {
+ "entity" "weapon_knife_falchion"
+ "defindex" "512"
+ "type" "knife"
+ "price" "100"
+ }
+ }
+
+ "Tracers"
+ {
+ "Blue"
+ {
+ "color" "0 0 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Cyan"
+ {
+ "color" "0 255 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Fuschia"
+ {
+ "color" "125 0 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Gray"
+ {
+ "color" "240 240 240"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Green"
+ {
+ "color" "0 125 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Lawn Green"
+ {
+ "color" "124 122 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Olive Brown"
+ {
+ "color" "128 125 165"
+ "price" "120"
+ "type" "tracer"
+ }
+
+ "Orange"
+ {
+ "color" "125 77 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ }
+
+ "Laser Sight"
+ {
+ "Blue"
+ {
+ "color" "0 0 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Cyan"
+ {
+ "color" "0 255 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Fuschia"
+ {
+ "color" "125 0 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Gray"
+ {
+ "color" "240 240 240"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Green"
+ {
+ "color" "0 125 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Lawn Green"
+ {
+ "color" "124 122 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Olive Brown"
+ {
+ "color" "128 125 165"
+ "price" "120"
+ "type" "lasersight"
+ }
+
+ "Orange"
+ {
+ "color" "125 77 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ }
+
+ "Accessories"
+ {
+ "Hats"
+ {
+ "Spartan Helmet"
+ {
+ "model" "models/spartahelm/spartahelm.mdl"
+ "position" "0.0 -2.2 -68.4"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Ironman"
+ {
+ "model" "models/fo3_ironman_mask.mdl"
+ "position" "1.0 -4.6 -2.0"
+ "angles" "0.0 -90.0 -20.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "V Mask"
+ {
+ "model" "models/v/mask.mdl"
+ "position" "0.0 -5.2 -65.2"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Pika Hat"
+ {
+ "model" "models/pikahat/pikahat.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Mudkip Hat"
+ {
+ "model" "models/mudhatk/mudhatk.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Super Saiyan"
+ {
+ "model" "models/anime_patron/animepatr.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Sentry"
+ {
+ "model" "models/sentry_hat/sentryha.mdl"
+ "position" "0.0 -1.7 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Pedo Bear"
+ {
+ "model" "models/pedobear/pedobearf.mdl"
+ "position" "0.0 -1.7 -70.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Antlers"
+ {
+ "model" "models/sam/antlers.mdl"
+ "position" "0.0 0.0 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Car Tire"
+ {
+ "model" "models/props_vehicles/tire001c_car.mdl"
+ "position" "0.0 -10.0 0.0"
+ "angles" "90.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Watermelon"
+ {
+ "model" "models/props_junk/watermelon01.mdl"
+ "position" "0.0 0.0 5.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Traffic Cone"
+ {
+ "model" "models/props_junk/trafficcone001a.mdl"
+ "position" "0.0 -1.0 20.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Metal Bucket"
+ {
+ "model" "models/props_junk/metalbucket01a.mdl"
+ "position" "0.0 0.0 -8.0"
+ "angles" "180.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Terracotta"
+ {
+ "model" "models/props_junk/terracotta01.mdl"
+ "position" "0.0 3.0 -10.0"
+ "angles" "180.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Baseball Cap"
+ {
+ "model" "models/props/cs_office/snowman_hat.mdl"
+ "position" "0.0 0.0 7.0"
+ "angles" "0.0 -90.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Coffee Mug"
+ {
+ "model" "models/props/cs_office/coffee_mug.mdl"
+ "position" "0.0 0.0 9.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "I <3 Turtles"
+ {
+ "model" "models/props/de_tides/vending_hat.mdl"
+ "position" "1.8 0.0 4.0"
+ "angles" "0.0 -90.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Astronaut helmet"
+ {
+ "model" "models/astronauthelmet/astronauthelmet.mdl"
+ "position" "0.0 0.0 -5.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Viking helmet"
+ {
+ "model" "models/vikinghelmet/vikinghelmet.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Fedora"
+ {
+ "model" "models/gmod_tower/fedorahat.mdl"
+ "position" "0.0 -1.5 8.5"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "KFC Bucket"
+ {
+ "model" "models/gmod_tower/kfcbucket.mdl"
+ "position" "0.0 -1.0 3.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Cake Hat"
+ {
+ "model" "models/cakehat/cakehat.mdl"
+ "position" "0.0 -1.0 3.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Santa Hat"
+ {
+ "model" "models/santahat/santahat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Dunce Hat"
+ {
+ "model" "models/duncehat/duncehat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Sombrero"
+ {
+ "model" "models/gmod_tower/sombrero.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Cat Ears"
+ {
+ "model" "models/gmod_tower/catears.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Afro"
+ {
+ "model" "models/gmod_tower/afro.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Andross Mask"
+ {
+ "model" "models/gmod_tower/androssmask.mdl"
+ "position" "0.0 2.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Drink Cap"
+ {
+ "model" "models/gmod_tower/drinkcap.mdl"
+ "position" "0.0 -1.0 7.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Headcrab Hat"
+ {
+ "model" "models/gmod_tower/headcrabhat.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Majorasmask"
+ {
+ "model" "models/gmod_tower/majorasmask.mdl"
+ "position" "0.0 0.5 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Toromask"
+ {
+ "model" "models/gmod_tower/toromask.mdl"
+ "position" "0.0 -1.0 4.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Top Hat"
+ {
+ "model" "models/gmod_tower/tophat.mdl"
+ "position" "0.0 -1.7 4.5"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Witch Hat"
+ {
+ "model" "models/gmod_tower/witchhat.mdl"
+ "position" "0.0 0.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Toeto Hat"
+ {
+ "model" "models/gmod_tower/toetohat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Party Hat"
+ {
+ "model" "models/gmod_tower/partyhat.mdl"
+ "position" "1.0 -1.0 7.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Seuss Hat"
+ {
+ "model" "models/gmod_tower/seusshat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Link Hat"
+ {
+ "model" "models/gmod_tower/linkhat.mdl"
+ "position" "0.0 -5.0 4.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Midna Hat"
+ {
+ "model" "models/gmod_tower/midnahat.mdl"
+ "position" "0.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Seuss Hat "
+ {
+ "model" "models/store/hats/seusshat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Andross Mask "
+ {
+ "model" "models/store/hats/androssmask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Afro "
+ {
+ "model" "models/store/hats/afro.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Fedora "
+ {
+ "model" "models/store/hats/fedorahat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "KFC Bucket "
+ {
+ "model" "models/store/hats/kfcbucket.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Asian Hat "
+ {
+ "model" "models/store/hats/asian_hat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Colonial Tricorn "
+ {
+ "model" "models/store/hats/colonial_tricorn_v1.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Deku Scrub Mask "
+ {
+ "model" "models/store/hats/deku_scrub_mask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Goron Mask "
+ {
+ "model" "models/store/hats/goron_mask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Gumby Mask "
+ {
+ "model" "models/store/hats/gumby_mask_v1.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Links Hat "
+ {
+ "model" "models/store/hats/links_hat_v4.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Uncle Sam "
+ {
+ "model" "models/store/hats/uncle_sam_hat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Daft Punk "
+ {
+ "model" "models/store/hats/daft_punk_v1.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Zora Mask "
+ {
+ "model" "models/store/hats/zora_mask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Witch Hat "
+ {
+ "model" "models/store/hats/witchhat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "1"
+ }
+ }
+
+ "Masks"
+ {
+ "Porcelain Doll"
+ {
+ "model" "models/player/holiday/facemasks/porcelain_doll.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Zombie Fortune"
+ {
+ "model" "models/player/holiday/facemasks/facemask_zombie_fortune_plastic.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Wolf"
+ {
+ "model" "models/player/holiday/facemasks/facemask_wolf.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Tiki"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tiki.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+
+ "Spy"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_spy_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+
+ "Soldier"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_soldier_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sniper"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_sniper_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Scout"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_scout_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Pyro"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_pyro_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Medic"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_medic_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Heavy"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_heavy_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Engineer"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_engi_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Demoman"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_demo_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Skull"
+ {
+ "model" "models/player/holiday/facemasks/facemask_skull.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Skull (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_skull_gold.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_gold.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep (Bloody)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_bloody.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Samurai"
+ {
+ "model" "models/player/holiday/facemasks/facemask_samurai.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Pumpkin"
+ {
+ "model" "models/player/holiday/facemasks/facemask_pumpkin.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Porcelain Doll Kabuki"
+ {
+ "model" "models/player/holiday/facemasks/facemask_porcelain_doll_kabuki.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Hoxton"
+ {
+ "model" "models/player/holiday/facemasks/facemask_hoxton.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Devil"
+ {
+ "model" "models/player/holiday/facemasks/facemask_devil_plastic.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Dallas"
+ {
+ "model" "models/player/holiday/facemasks/facemask_dallas.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Chicken"
+ {
+ "model" "models/player/holiday/facemasks/facemask_chicken.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Chains"
+ {
+ "model" "models/player/holiday/facemasks/facemask_chains.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Bunny"
+ {
+ "model" "models/player/holiday/facemasks/facemask_bunny.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Bunny (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_bunny.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Boar"
+ {
+ "model" "models/player/holiday/facemasks/facemask_boar.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Anaglyph"
+ {
+ "model" "models/player/holiday/facemasks/facemask_anaglyph.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Evil Clown"
+ {
+ "model" "models/player/holiday/facemasks/evil_clown.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+ }
+
+ "Glasses"
+ {
+ "3D Glasses"
+ {
+ "model" "models/gmod_tower/3dglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "3D Glasses "
+ {
+ "model" "models/store/hats/3dglasses.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "1"
+ }
+
+ "Aviators"
+ {
+ "model" "models/gmod_tower/aviators.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "Star Glasses"
+ {
+ "model" "models/gmod_tower/starglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "Kliener Glasses"
+ {
+ "model" "models/gmod_tower/klienerglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "Star Glasses "
+ {
+ "model" "models/store/hats/starglasses.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "1"
+ }
+ }
+
+ "Shields"
+ {
+ "Hylian Shield"
+ {
+ "model" "models/store/hats/hylian_shield.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "2"
+
+ "Attributes"
+ {
+ "health" "20"
+ }
+ }
+ }
+ }
+
+ "Player Skins"
+ {
+ "Terrorists"
+ {
+ "Duke Nukem"
+ {
+ "model" "models/player/kuristaja/duke4eva/duke/duke.mdl"
+ "team" "2"
+ "price" "120"
+ "type" "playerskin"
+ }
+ }
+
+ "Counter-Terrorists"
+ {
+ "Nick"
+ {
+ "model" "models/player/techknow/nick/nick.mdl"
+ "team" "3"
+ "price" "120"
+ "type" "playerskin"
+ }
+ }
+ }
+
+ "Trails"
+ {
+ "8Bit Mushroom"
+ {
+ "material" "materials/sprites/store/trails/8bitmushroom.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "8Bit Pow"
+ {
+ "material" "materials/sprites/store/trails/8bitpow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Airforce"
+ {
+ "material" "materials/sprites/store/trails/airforce.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Airforce 2"
+ {
+ "material" "materials/sprites/store/trails/airforce2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Apple"
+ {
+ "material" "materials/sprites/store/trails/apple.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Arrow Rainbow"
+ {
+ "material" "materials/sprites/store/trails/arrowrainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Arrows"
+ {
+ "material" "materials/sprites/store/trails/arrows.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Assasin"
+ {
+ "material" "materials/sprites/store/trails/assasin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome"
+ {
+ "material" "materials/sprites/store/trails/awesome.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome Sad"
+ {
+ "material" "materials/sprites/store/trails/awesome_sad.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome Face"
+ {
+ "material" "materials/sprites/store/trails/awesomeface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Babyand"
+ {
+ "material" "materials/sprites/store/trails/babyand.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Banknote"
+ {
+ "material" "materials/sprites/store/trails/banknote.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Barcalona"
+ {
+ "material" "materials/sprites/store/trails/barcalona.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Batman"
+ {
+ "material" "materials/sprites/store/trails/batman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Battlefield"
+ {
+ "material" "materials/sprites/store/trails/battlefield.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Beer Mug"
+ {
+ "material" "materials/sprites/store/trails/beermug.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Biohazard"
+ {
+ "material" "materials/sprites/store/trails/biohazard.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Blade"
+ {
+ "material" "materials/sprites/store/trails/blade.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Blue Lightning"
+ {
+ "material" "materials/sprites/store/trails/bluelightning.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "BMW Logo"
+ {
+ "material" "materials/sprites/store/trails/bmwlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bom Bomb"
+ {
+ "material" "materials/sprites/store/trails/bombomb.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Boo"
+ {
+ "material" "materials/sprites/store/trails/boo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bullet Bill"
+ {
+ "material" "materials/sprites/store/trails/bulletbill.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bullets"
+ {
+ "material" "materials/sprites/store/trails/bullets.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Canada Flag"
+ {
+ "material" "materials/sprites/store/trails/canadaflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Candies"
+ {
+ "material" "materials/sprites/store/trails/candies.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ccole"
+ {
+ "material" "materials/sprites/store/trails/ccole.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+ }
+
+ "Grenade Trails"
+ {
+ "Thin Beam"
+ {
+ "material" "materials/sprites/combineball_trail_black_1.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Squiggly Beam"
+ {
+ "material" "materials/sprites/hydragutbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Medium Beam"
+ {
+ "material" "materials/sprites/orangelight1.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Large Beam"
+ {
+ "material" "materials/sprites/spotlight.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Red Laserbeam"
+ {
+ "material" "materials/sprites/laserbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 0 255"
+ "unique_id" "grenadetrail_laserbeam_red"
+ }
+
+ "Blue Laserbeam"
+ {
+ "material" "materials/sprites/laserbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "0 0 255 255"
+ "unique_id" "grenadetrail_laserbeam_blue"
+ }
+ }
+
+ "Grenade Skins"
+ {
+ "HE Grenade"
+ {
+ "Orange"
+ {
+ "model" "models/props/cs_italy/orange.mdl"
+ "grenade" "hegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+
+ "Tortoise"
+ {
+ "model" "models/props/de_tides/vending_turtle.mdl"
+ "grenade" "hegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+
+ "Flashbang"
+ {
+ "Banana"
+ {
+ "model" "models/props/cs_italy/bananna.mdl"
+ "grenade" "flashbang"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+
+ "Smokegrenade"
+ {
+ "Watermelon"
+ {
+ "model" "models/props_junk/watermelon01.mdl"
+ "grenade" "smokegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+ }
+
+ "Weapon Colors"
+ {
+ "Antique White"
+ {
+ "color" "205 192 176 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Alice Blue"
+ {
+ "color" "240 248 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Blue"
+ {
+ "color" "0 0 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Corn Silk"
+ {
+ "color" "255 248 220 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Cyan"
+ {
+ "color" "0 255 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Dark Khaki"
+ {
+ "color" "189 183 107 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Dim Grey"
+ {
+ "color" "105 105 105 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Fuschia"
+ {
+ "color" "255 0 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Gray"
+ {
+ "color" "240 240 240 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Green"
+ {
+ "color" "0 255 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Lawn Green"
+ {
+ "color" "124 1202 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Navajo White"
+ {
+ "color" "255 222 173 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive"
+ {
+ "color" "128 128 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive Brown"
+ {
+ "color" "128 255 165 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive Drab"
+ {
+ "color" "607 142 35 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Orange"
+ {
+ "color" "255 77 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Orchid"
+ {
+ "color" "218 112 214 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Pale Turquoise"
+ {
+ "color" "175 238 238 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Purple"
+ {
+ "color" "128 0 128 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Pink"
+ {
+ "color" "255 103 103 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Plum"
+ {
+ "color" "221 160 221 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Red"
+ {
+ "color" "255 0 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sea Blue"
+ {
+ "color" "43 176 205 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sandy Brown"
+ {
+ "color" "244 164 96 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sienna"
+ {
+ "color" "180 82 45 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Silver"
+ {
+ "color" "192 192 192 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Scarlet"
+ {
+ "color" "140 23 23 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Seal Green"
+ {
+ "color" "128 255 165 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Steel Blue"
+ {
+ "color" "35 107 142 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Teal"
+ {
+ "color" "0 128 128 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Turquoise"
+ {
+ "color" "64 224 208 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Violet"
+ {
+ "color" "148 0 211 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Yellow"
+ {
+ "color" "255 255 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ }
+
+ "Chat stuff"
+ {
+ "Name Tags"
+ {
+ "Newbie"
+ {
+ "tag" "{lightblue}[Newbie]{teamcolor} "
+ "price" "60"
+ "type" "nametag"
+ }
+ "Wannabe"
+ {
+ "tag" "{red}[Wannabe]{teamcolor} "
+ "price" "90"
+ "type" "nametag"
+ }
+ "Ex-Con"
+ {
+ "tag" "{black}[Ex-Con]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "Officer"
+ {
+ "tag" "{lightblue}[Officer]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "S.W.A.T"
+ {
+ "tag" "{blue}[S.W.A.T]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "420"
+ {
+ "tag" "{green}[420]{teamcolor} "
+ "price" "180"
+ "type" "nametag"
+ }
+ "Equinox"
+ {
+ "tag" "{pink}[Equinox]{teamcolor} "
+ "price" "300"
+ "type" "nametag"
+ }
+ }
+
+ "Name Colors"
+ {
+ "Alice Blue"
+ {
+ "color" "{aliceblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Antique White"
+ {
+ "color" "{antiquewhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Aqua"
+ {
+ "color" "{aqua}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Aquamarine"
+ {
+ "color" "{aquamarine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Azure"
+ {
+ "color" "{azure}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Beige"
+ {
+ "color" "{beige}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Bisque"
+ {
+ "color" "{bisque}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Black"
+ {
+ "color" "{black}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blanche Dalmond"
+ {
+ "color" "{blanchedalmond}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blue"
+ {
+ "color" "{blue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blue Violet"
+ {
+ "color" "{blueviolet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Brown"
+ {
+ "color" "{brown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Burly Wood"
+ {
+ "color" "{burlywood}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cadet Blue"
+ {
+ "color" "{cadetblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Chartreuse"
+ {
+ "color" "{chartreuse}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Chocolate"
+ {
+ "color" "{chocolate}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Community"
+ {
+ "color" "{community}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Coral"
+ {
+ "color" "{coral}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cornflower Blue"
+ {
+ "color" "{cornflowerblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Corn Silk"
+ {
+ "color" "{cornsilk}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Crimson"
+ {
+ "color" "{crimson}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cyan"
+ {
+ "color" "{cyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Blue"
+ {
+ "color" "{darkblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Cyan"
+ {
+ "color" "{darkcyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Golden Rod"
+ {
+ "color" "{darkgoldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Gray"
+ {
+ "color" "{darkgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Green"
+ {
+ "color" "{darkgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark khaki"
+ {
+ "color" "{darkkhaki}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark magenta"
+ {
+ "color" "{darkmagenta}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark oliveGreen"
+ {
+ "color" "{darkolivegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark orange"
+ {
+ "color" "{darkorange}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Orchid"
+ {
+ "color" "{darkorchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Red"
+ {
+ "color" "{darkred}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Dark salmon"
+ {
+ "color" "{darksalmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Sea Green"
+ {
+ "color" "{darkseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark SlateBlue"
+ {
+ "color" "{darkslateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Slategray"
+ {
+ "color" "{darkslategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Turquoise"
+ {
+ "color" "{darkturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Violet"
+ {
+ "color" "{darkviolet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Pink"
+ {
+ "color" "{deeppink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Skyblue"
+ {
+ "color" "{deepskyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dimgray"
+ {
+ "color" "{dimgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dodger Blue"
+ {
+ "color" "{dodgerblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Firebrick"
+ {
+ "color" "{firebrick}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Floral White"
+ {
+ "color" "{floralwhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Forest Green"
+ {
+ "color" "{forestgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Fuchsia"
+ {
+ "color" "{fuchsia}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Blue"
+ {
+ "color" "{fullblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Red"
+ {
+ "color" "{fullred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gainsboro"
+ {
+ "color" "{gainsboro}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Genuine"
+ {
+ "color" "{genuine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ghost White"
+ {
+ "color" "{ghostwhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gold"
+ {
+ "color" "{gold}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Goldenrod"
+ {
+ "color" "{goldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gray"
+ {
+ "color" "{gray}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Green"
+ {
+ "color" "{green}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Green Yellow"
+ {
+ "color" "{greenyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Haunted"
+ {
+ "color" "{haunted}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Honeydew"
+ {
+ "color" "{honeydew}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Hot Pink"
+ {
+ "color" "{hotpink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indian Red"
+ {
+ "color" "{indianred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indigo"
+ {
+ "color" "{indigo}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ivory"
+ {
+ "color" "{ivory}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Khaki"
+ {
+ "color" "{khaki}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender"
+ {
+ "color" "{lavender}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender Blush"
+ {
+ "color" "{lavenderblush}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lawn Green"
+ {
+ "color" "{lawngreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lemon Chiffon"
+ {
+ "color" "{lemonchiffon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Blue"
+ {
+ "color" "{lightblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Coral"
+ {
+ "color" "{lightcoral}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Cyan"
+ {
+ "color" "{lightcyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Goldenrod Yellow"
+ {
+ "color" "{lightgoldenrodyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Red"
+ {
+ "color" "{lightred}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Light Gray"
+ {
+ "color" "{lightgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Green"
+ {
+ "color" "{lightgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Pink"
+ {
+ "color" "{lightpink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Salmon"
+ {
+ "color" "{lightsalmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Sea Green"
+ {
+ "color" "{lightseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Skyblue"
+ {
+ "color" "{lightskyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Slategray"
+ {
+ "color" "{lightslategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Steel Blue"
+ {
+ "color" "{lightsteelblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Yellow"
+ {
+ "color" "{lightyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lime"
+ {
+ "color" "{lime}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Lime Green"
+ {
+ "color" "{limegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Linen"
+ {
+ "color" "{linen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Magenta"
+ {
+ "color" "{magenta}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Maroon"
+ {
+ "color" "{maroon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Aquamarine"
+ {
+ "color" "{mediumaquamarine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Blue"
+ {
+ "color" "{mediumblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Orchid"
+ {
+ "color" "{mediumorchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Purple"
+ {
+ "color" "{mediumpurple}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Sea Green"
+ {
+ "color" "{mediumseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Slate Blue"
+ {
+ "color" "{mediumslateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Spring Green"
+ {
+ "color" "{mediumspringgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Turquoise"
+ {
+ "color" "{mediumturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Violet Red"
+ {
+ "color" "{mediumvioletred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Midnight Blue"
+ {
+ "color" "{midnightblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Mintcream"
+ {
+ "color" "{mintcream}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Misty Rose"
+ {
+ "color" "{mistyrose}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Moccasin"
+ {
+ "color" "{moccasin}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navajo White"
+ {
+ "color" "{navajowhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navy"
+ {
+ "color" "{navy}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Old Lace"
+ {
+ "color" "{oldlace}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Olive"
+ {
+ "color" "{olive}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Olive Drab"
+ {
+ "color" "{olivedrab}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange"
+ {
+ "color" "{orange}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange Red"
+ {
+ "color" "{orangered}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orchid"
+ {
+ "color" "{orchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Golden Rod"
+ {
+ "color" "{palegoldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Green"
+ {
+ "color" "{palegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Turquoise"
+ {
+ "color" "{paleturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale violetRed"
+ {
+ "color" "{palevioletred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Papaya Whip"
+ {
+ "color" "{papayawhip}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peach Puff"
+ {
+ "color" "{peachpuff}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peru"
+ {
+ "color" "{peru}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pink"
+ {
+ "color" "{pink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Plum"
+ {
+ "color" "{plum}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Powder Blue"
+ {
+ "color" "{powderblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Purple"
+ {
+ "color" "{purple}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Red"
+ {
+ "color" "{red}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Rosy Brown"
+ {
+ "color" "{rosybrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Royal Blue"
+ {
+ "color" "{royalblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Saddle Brown"
+ {
+ "color" "{saddlebrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Salmon"
+ {
+ "color" "{salmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sandy Brown"
+ {
+ "color" "{sandybrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sea Green"
+ {
+ "color" "{seagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Seashell"
+ {
+ "color" "{seashell}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sienna"
+ {
+ "color" "{sienna}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Silver"
+ {
+ "color" "{silver}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Skyblue"
+ {
+ "color" "{skyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate blue"
+ {
+ "color" "{slateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate Gray"
+ {
+ "color" "{slategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Snow"
+ {
+ "color" "{snow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Spring Green"
+ {
+ "color" "{springgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Steel Blue"
+ {
+ "color" "{steelblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tan"
+ {
+ "color" "{tan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Teal"
+ {
+ "color" "{teal}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Thistle"
+ {
+ "color" "{thistle}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tomato"
+ {
+ "color" "{tomato}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Turquoise"
+ {
+ "color" "{turquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Violet"
+ {
+ "color" "{violet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Wheat"
+ {
+ "color" "{wheat}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "White"
+ {
+ "color" "{white}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Yellow"
+ {
+ "color" "{yellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Yellow Green"
+ {
+ "color" "{yellowgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ }
+
+ "Message Colors"
+ {
+ "Alice Blue"
+ {
+ "color" "{aliceblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Antique White"
+ {
+ "color" "{antiquewhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Aqua"
+ {
+ "color" "{aqua}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Aquamarine"
+ {
+ "color" "{aquamarine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Azure"
+ {
+ "color" "{azure}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Beige"
+ {
+ "color" "{beige}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Bisque"
+ {
+ "color" "{bisque}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Black"
+ {
+ "color" "{black}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blanche Dalmond"
+ {
+ "color" "{blanchedalmond}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blue"
+ {
+ "color" "{blue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blue Violet"
+ {
+ "color" "{blueviolet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Brown"
+ {
+ "color" "{brown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Burly Wood"
+ {
+ "color" "{burlywood}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cadet Blue"
+ {
+ "color" "{cadetblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Chartreuse"
+ {
+ "color" "{chartreuse}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Chocolate"
+ {
+ "color" "{chocolate}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Community"
+ {
+ "color" "{community}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Coral"
+ {
+ "color" "{coral}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cornflower Blue"
+ {
+ "color" "{cornflowerblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Corn Silk"
+ {
+ "color" "{cornsilk}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Crimson"
+ {
+ "color" "{crimson}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cyan"
+ {
+ "color" "{cyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Blue"
+ {
+ "color" "{darkblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Cyan"
+ {
+ "color" "{darkcyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Golden Rod"
+ {
+ "color" "{darkgoldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Gray"
+ {
+ "color" "{darkgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Green"
+ {
+ "color" "{darkgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark khaki"
+ {
+ "color" "{darkkhaki}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark magenta"
+ {
+ "color" "{darkmagenta}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark oliveGreen"
+ {
+ "color" "{darkolivegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark orange"
+ {
+ "color" "{darkorange}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Orchid"
+ {
+ "color" "{darkorchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Red"
+ {
+ "color" "{darkred}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Dark salmon"
+ {
+ "color" "{darksalmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Sea Green"
+ {
+ "color" "{darkseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark SlateBlue"
+ {
+ "color" "{darkslateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Slategray"
+ {
+ "color" "{darkslategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Turquoise"
+ {
+ "color" "{darkturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Violet"
+ {
+ "color" "{darkviolet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Pink"
+ {
+ "color" "{deeppink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Skyblue"
+ {
+ "color" "{deepskyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dimgray"
+ {
+ "color" "{dimgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dodger Blue"
+ {
+ "color" "{dodgerblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Firebrick"
+ {
+ "color" "{firebrick}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Floral White"
+ {
+ "color" "{floralwhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Forest Green"
+ {
+ "color" "{forestgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Fuchsia"
+ {
+ "color" "{fuchsia}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Blue"
+ {
+ "color" "{fullblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Red"
+ {
+ "color" "{fullred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gainsboro"
+ {
+ "color" "{gainsboro}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Genuine"
+ {
+ "color" "{genuine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ghost White"
+ {
+ "color" "{ghostwhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gold"
+ {
+ "color" "{gold}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Goldenrod"
+ {
+ "color" "{goldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gray"
+ {
+ "color" "{gray}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Green"
+ {
+ "color" "{green}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Green Yellow"
+ {
+ "color" "{greenyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Haunted"
+ {
+ "color" "{haunted}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Honeydew"
+ {
+ "color" "{honeydew}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Hot Pink"
+ {
+ "color" "{hotpink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indian Red"
+ {
+ "color" "{indianred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indigo"
+ {
+ "color" "{indigo}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ivory"
+ {
+ "color" "{ivory}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Khaki"
+ {
+ "color" "{khaki}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender"
+ {
+ "color" "{lavender}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender Blush"
+ {
+ "color" "{lavenderblush}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lawn Green"
+ {
+ "color" "{lawngreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lemon Chiffon"
+ {
+ "color" "{lemonchiffon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Blue"
+ {
+ "color" "{lightblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Coral"
+ {
+ "color" "{lightcoral}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Cyan"
+ {
+ "color" "{lightcyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Goldenrod Yellow"
+ {
+ "color" "{lightgoldenrodyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Gray"
+ {
+ "color" "{lightgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Red"
+ {
+ "color" "{lightred}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Light Green"
+ {
+ "color" "{lightgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Pink"
+ {
+ "color" "{lightpink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Salmon"
+ {
+ "color" "{lightsalmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Sea Green"
+ {
+ "color" "{lightseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Skyblue"
+ {
+ "color" "{lightskyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Slategray"
+ {
+ "color" "{lightslategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Steel Blue"
+ {
+ "color" "{lightsteelblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Yellow"
+ {
+ "color" "{lightyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lime"
+ {
+ "color" "{lime}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Lime Green"
+ {
+ "color" "{limegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Linen"
+ {
+ "color" "{linen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Magenta"
+ {
+ "color" "{magenta}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Maroon"
+ {
+ "color" "{maroon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Aquamarine"
+ {
+ "color" "{mediumaquamarine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Blue"
+ {
+ "color" "{mediumblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Orchid"
+ {
+ "color" "{mediumorchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Purple"
+ {
+ "color" "{mediumpurple}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Sea Green"
+ {
+ "color" "{mediumseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Slate Blue"
+ {
+ "color" "{mediumslateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Spring Green"
+ {
+ "color" "{mediumspringgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Turquoise"
+ {
+ "color" "{mediumturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Violet Red"
+ {
+ "color" "{mediumvioletred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Midnight Blue"
+ {
+ "color" "{midnightblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Mintcream"
+ {
+ "color" "{mintcream}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Misty Rose"
+ {
+ "color" "{mistyrose}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Moccasin"
+ {
+ "color" "{moccasin}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navajo White"
+ {
+ "color" "{navajowhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navy"
+ {
+ "color" "{navy}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Old Lace"
+ {
+ "color" "{oldlace}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Olive"
+ {
+ "color" "{olive}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Olive Drab"
+ {
+ "color" "{olivedrab}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange"
+ {
+ "color" "{orange}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange Red"
+ {
+ "color" "{orangered}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orchid"
+ {
+ "color" "{orchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Golden Rod"
+ {
+ "color" "{palegoldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Green"
+ {
+ "color" "{palegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Turquoise"
+ {
+ "color" "{paleturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale violetRed"
+ {
+ "color" "{palevioletred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Papaya Whip"
+ {
+ "color" "{papayawhip}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peach Puff"
+ {
+ "color" "{peachpuff}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peru"
+ {
+ "color" "{peru}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pink"
+ {
+ "color" "{pink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Plum"
+ {
+ "color" "{plum}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Powder Blue"
+ {
+ "color" "{powderblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Purple"
+ {
+ "color" "{purple}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Red"
+ {
+ "color" "{red}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Rosy Brown"
+ {
+ "color" "{rosybrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Royal Blue"
+ {
+ "color" "{royalblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Saddle Brown"
+ {
+ "color" "{saddlebrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Salmon"
+ {
+ "color" "{salmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sandy Brown"
+ {
+ "color" "{sandybrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sea Green"
+ {
+ "color" "{seagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Seashell"
+ {
+ "color" "{seashell}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sienna"
+ {
+ "color" "{sienna}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Silver"
+ {
+ "color" "{silver}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Skyblue"
+ {
+ "color" "{skyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate blue"
+ {
+ "color" "{slateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate Gray"
+ {
+ "color" "{slategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Snow"
+ {
+ "color" "{snow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Spring Green"
+ {
+ "color" "{springgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Steel Blue"
+ {
+ "color" "{steelblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tan"
+ {
+ "color" "{tan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Teal"
+ {
+ "color" "{teal}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Thistle"
+ {
+ "color" "{thistle}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tomato"
+ {
+ "color" "{tomato}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Turquoise"
+ {
+ "color" "{turquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Violet"
+ {
+ "color" "{violet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Wheat"
+ {
+ "color" "{wheat}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "White"
+ {
+ "color" "{white}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Yellow"
+ {
+ "color" "{yellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Yellow Green"
+ {
+ "color" "{yellowgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ }
+ }
+
+ "Miscellaneous"
+ {
+ "Bunnyhop"
+ {
+ "price" "500"
+ "type" "bunnyhop"
+ }
+
+ "Jetpack"
+ {
+ "price" "500"
+ "type" "jetpack"
+ }
+
+ "Paintball"
+ {
+ "price" "500"
+ "type" "paintball"
+ "Decals"
+ {
+ "cyan"
+ {
+ "material" "paintball/pb_cyan.vmt"
+ }
+ "green"
+ {
+ "material" "paintball/pb_green.vmt"
+ }
+ "pink"
+ {
+ "material" "paintball/pb_pink.vmt"
+ }
+ "orange"
+ {
+ "material" "paintball/pb_orange.vmt"
+ }
+ "yellow"
+ {
+ "material" "paintball/pb_yellow.vmt"
+ }
+ }
+ }
+ }
+
+ "Unusual Effects"
+ {
+ "Flying Bits"
+ {
+ "unusual_id" "2"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Nemesis Burst"
+ {
+ "unusual_id" "3"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Community Sparkle"
+ {
+ "unusual_id" "4"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Holy Glow"
+ {
+ "unusual_id" "5"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Green Confetti"
+ {
+ "unusual_id" "6"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Purple Confetti"
+ {
+ "unusual_id" "7"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Haunted Ghosts"
+ {
+ "unusual_id" "8"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Green Energy"
+ {
+ "unusual_id" "9"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Purple Energy"
+ {
+ "unusual_id" "10"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Circling TF Logo"
+ {
+ "unusual_id" "11"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Massed Flies"
+ {
+ "unusual_id" "12"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Burning Flames"
+ {
+ "unusual_id" "13"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Scorching Flames"
+ {
+ "unusual_id" "14"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Searing Plasma"
+ {
+ "unusual_id" "15"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Vivid Plasma"
+ {
+ "unusual_id" "16"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Sunbeams"
+ {
+ "unusual_id" "17"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Circling Peace Sign"
+ {
+ "unusual_id" "18"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Circling Heart"
+ {
+ "unusual_id" "19"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Map Stamps"
+ {
+ "unusual_id" "20"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Genteel Smoke"
+ {
+ "unusual_id" "28"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Stormy Storm"
+ {
+ "unusual_id" "29"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Blizzardy Storm"
+ {
+ "unusual_id" "30"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Nuts n' Bolts"
+ {
+ "unusual_id" "31"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Orbiting Planets"
+ {
+ "unusual_id" "32"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Orbiting Fire"
+ {
+ "unusual_id" "33"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Bubbling"
+ {
+ "unusual_id" "34"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Smoking"
+ {
+ "unusual_id" "35"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Steaming"
+ {
+ "unusual_id" "36"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Flaming Lantern"
+ {
+ "unusual_id" "37"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Cloudy Moon"
+ {
+ "unusual_id" "38"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Cauldron Bubbles"
+ {
+ "unusual_id" "39"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Eerie Orbiting Fire"
+ {
+ "unusual_id" "40"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Knifestorm"
+ {
+ "unusual_id" "43"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Misty Skull"
+ {
+ "unusual_id" "44"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Harvest Moon"
+ {
+ "unusual_id" "45"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "It's A Secret To Everybody"
+ {
+ "unusual_id" "46"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Stormy 13th Hour"
+ {
+ "unusual_id" "47"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Attrib_Particle55"
+ {
+ "unusual_id" "55"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Kill-a-Watt"
+ {
+ "unusual_id" "56"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Terror-Watt"
+ {
+ "unusual_id" "57"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Cloud 9"
+ {
+ "unusual_id" "58"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Aces High"
+ {
+ "unusual_id" "59"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Dead Presidents"
+ {
+ "unusual_id" "180"
+ "type" "tfunusual"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Miami Nights"
+ {
+ "unusual_id" "61"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Disco Beat Down"
+ {
+ "unusual_id" "62"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Phosphorous"
+ {
+ "unusual_id" "63"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Sulphurous"
+ {
+ "unusual_id" "64"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Memory Leak"
+ {
+ "unusual_id" "65"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Overclocked"
+ {
+ "unusual_id" "66"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Electrostatic"
+ {
+ "unusual_id" "67"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Power Surge"
+ {
+ "unusual_id" "68"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Anti-Freeze"
+ {
+ "unusual_id" "69"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Time Warp"
+ {
+ "unusual_id" "70"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Green Black Hole"
+ {
+ "unusual_id" "71"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Roboactive"
+ {
+ "unusual_id" "72"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Arcana"
+ {
+ "unusual_id" "73"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Spellbound"
+ {
+ "unusual_id" "74"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Chiroptera Venenata"
+ {
+ "unusual_id" "75"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Poisoned Shadows"
+ {
+ "unusual_id" "76"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Something Burning This Way Comes"
+ {
+ "unusual_id" "77"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Hellfire"
+ {
+ "unusual_id" "78"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Darkblaze"
+ {
+ "unusual_id" "79"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Demonflame"
+ {
+ "unusual_id" "80"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Showstopper"
+ {
+ "unusual_id" "3002"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Holy Grail"
+ {
+ "unusual_id" "3003"
+ "price" "600"
+ "type" "tfunusual"
+ }
+ "Fountain of Delight"
+ {
+ "unusual_id" "3005"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Screaming Tiger"
+ {
+ "unusual_id" "3006"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Skill Gotten Gains"
+ {
+ "unusual_id" "3007"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Midnight Whirlwind"
+ {
+ "unusual_id" "3008"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Silver Cyclone"
+ {
+ "unusual_id" "3009"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Mega Strike"
+ {
+ "unusual_id" "3010"
+ "price" "600"
+ "type" "tfunusual"
+ }
+ }
+
+ "Paint Cans"
+ {
+ "A Color Similar to Slate"
+ {
+ "color" "47 79 79"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Deep Commitment to Purple"
+ {
+ "color" "125 64 113"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Distinctive Lack of Hue"
+ {
+ "color" "20 20 20"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Mann's Mint"
+ {
+ "color" "188 221 179"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "After Eight"
+ {
+ "color" "45 45 36"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Aged Moustache Grey"
+ {
+ "color" "126 126 126"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "An Extraordinary Abundance of Tinge"
+ {
+ "color" "230 230 230"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Australium Gold"
+ {
+ "color" "231 181 59"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Color No. 216-190-216 "
+ {
+ "color" "216 190 216"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Dark Salmon Injustice"
+ {
+ "color" "233 150 122"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Drably Olive"
+ {
+ "color" "128 128 0"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Indubitably Green"
+ {
+ "color" "114 158 66"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Mann Co. Orange"
+ {
+ "color" "207 115 54"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Muskelmannbraun"
+ {
+ "color" "165 117 69"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Noble Hatter's Violet"
+ {
+ "color" "81 56 74"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Peculiarly Drab Tincture"
+ {
+ "color" "197 175 145"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+ "Pink as Hell"
+ {
+ "color" "255 105 180"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Radigan Conagher Brown"
+ {
+ "color" "105 77 58"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "The Bitter Taste of Defeat and Lime"
+ {
+ "color" "50 205 50"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "The Color of a Gentlemann's Business Pants"
+ {
+ "color" "240 230 140"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Ye Olde Rustic Colour"
+ {
+ "color" "124 108 87"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Zepheniah's Greed"
+ {
+ "color" "66 79 59"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/sourcemod/configs/store/items_weapons.txt b/addons/sourcemod/configs/store/items_weapons.txt
new file mode 100644
index 0000000..d170ec4
--- /dev/null
+++ b/addons/sourcemod/configs/store/items_weapons.txt
@@ -0,0 +1,10292 @@
+"Store"
+{
+
+ "Weapon Skins"
+ {
+ "M4A1-S Hyper Beast"
+ {
+ "paint" "430"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Mag7 RedHot"
+ {
+ "paint" "431"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Negev Glory"
+ {
+ "paint" "432"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Mac10 NeonRider"
+ {
+ "paint" "433"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Sawedoff Origami"
+ {
+ "paint" "434"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "CZ75 Precision"
+ {
+ "paint" "435"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "UMP45 RACER"
+ {
+ "paint" "436"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Famas Jinn "
+ {
+ "paint" "429"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Galil Eco"
+ {
+ "paint" "428"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Five Seven Banana"
+ {
+ "paint" "427"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "P250 Contour"
+ {
+ "paint" "426"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "AWP Twine"
+ {
+ "paint" "424"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "MP9 Ultra Modern"
+ {
+ "paint" "423"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Ak47 Maestry"
+ {
+ "paint" "422"
+ "wear" "0.01"
+ "stattrak" "1"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ "Abyss"
+ {
+
+ "paint" "361"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Acid Fade"
+ {
+
+ "paint" "253"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Afterimage"
+ {
+
+ "paint" "154"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Amber Fade"
+ {
+
+ "paint" "246"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Anodized Gunmetal"
+ {
+
+ "paint" "210"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Anodized Navy"
+ {
+
+ "paint" "28"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Anodized Navy (2)"
+ {
+
+ "paint" "197"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Antique (Nova)"
+ {
+
+ "paint" "286"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Antique (PP-Bizon)"
+ {
+
+ "paint" "306"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Arctic Camo"
+ {
+
+ "paint" "6"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Army Mesh"
+ {
+
+ "paint" "242"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Army Recon"
+ {
+
+ "paint" "245"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Army Sheen"
+ {
+
+ "paint" "298"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ash Wood"
+ {
+
+ "paint" "234"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Asiimov (AWP)"
+ {
+
+ "paint" "279"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Asiimov (M4A4)"
+ {
+
+ "paint" "255"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Asiimov (P90)"
+ {
+
+ "paint" "359"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Atomic Alloy"
+ {
+
+ "paint" "301"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Azure Zebra"
+ {
+
+ "paint" "229"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Basilisk"
+ {
+
+ "paint" "383"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bengal Tiger"
+ {
+
+ "paint" "9"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Black Laminate"
+ {
+
+ "paint" "172"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Black Limba"
+ {
+
+ "paint" "190"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blaze"
+ {
+
+ "paint" "37"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blaze Orange"
+ {
+
+ "paint" "166"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blind Spot"
+ {
+
+ "paint" "228"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blizzard Marbelized"
+ {
+
+ "paint" "75"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blood In The Water"
+ {
+
+ "paint" "222"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blood Tiger"
+ {
+
+ "paint" "217"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bloomstick"
+ {
+
+ "paint" "62"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Fissure"
+ {
+
+ "paint" "278"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Laminate"
+ {
+
+ "paint" "226"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Steel"
+ {
+
+ "paint" "42"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Spruce"
+ {
+
+ "paint" "96"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Streak"
+ {
+
+ "paint" "13"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Blue Titanium"
+ {
+
+ "paint" "216"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bone Mask"
+ {
+
+ "paint" "27"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bone Machine"
+ {
+
+ "paint" "370"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bone Pile"
+ {
+
+ "paint" "193"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "BOOM"
+ {
+
+ "paint" "174"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Boreal Forest"
+ {
+
+ "paint" "77"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Brass"
+ {
+
+ "paint" "159"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bratatat"
+ {
+
+ "paint" "317"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Briar"
+ {
+
+ "paint" "330"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bright Water"
+ {
+
+ "paint" "189"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bulldozer"
+ {
+
+ "paint" "39"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Bullet Rain"
+ {
+
+ "paint" "155"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Business Class"
+ {
+
+ "paint" "364"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Caged Steel"
+ {
+
+ "paint" "299"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Caiman"
+ {
+
+ "paint" "339"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "CaliCamo"
+ {
+
+ "paint" "240"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Candy Apple"
+ {
+
+ "paint" "3"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Caramel"
+ {
+
+ "paint" "93"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Carbon Fiber"
+ {
+
+ "paint" "70"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cardiac"
+ {
+
+ "paint" "391"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cartel (AK-47)"
+ {
+
+ "paint" "394"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cartel (P250)"
+ {
+
+ "paint" "388"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Case Hardened"
+ {
+
+ "paint" "44"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Catacombs"
+ {
+
+ "paint" "399"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cerberus"
+ {
+
+ "paint" "379"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chainmail"
+ {
+
+ "paint" "327"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chalice"
+ {
+
+ "paint" "325"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chameleon"
+ {
+
+ "paint" "280"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chatterbox"
+ {
+
+ "paint" "398"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Chemical Green"
+ {
+
+ "paint" "376"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Coach Class"
+ {
+
+ "paint" "346"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cobalt Disruption"
+ {
+
+ "paint" "231"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cobalt Halftone"
+ {
+
+ "paint" "267"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cobalt Quartz"
+ {
+
+ "paint" "249"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cold Blooded"
+ {
+
+ "paint" "67"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Colony"
+ {
+
+ "paint" "47"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Commuter"
+ {
+
+ "paint" "343"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Condemned"
+ {
+
+ "paint" "110"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Conspiracy"
+ {
+
+ "paint" "351"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Contamination"
+ {
+
+ "paint" "373"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Contractor"
+ {
+
+ "paint" "46"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Contrast Spray"
+ {
+
+ "paint" "22"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Corporal"
+ {
+
+ "paint" "281"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Corticera (AWP)"
+ {
+
+ "paint" "184"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Corticera (P2000)"
+ {
+
+ "paint" "181"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Copper"
+ {
+
+ "paint" "41"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Copper Galaxy"
+ {
+
+ "paint" "274"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Copper Head"
+ {
+
+ "paint" "10"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Crimson Web"
+ {
+
+ "paint" "12"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Crimson Web (2)"
+ {
+
+ "paint" "232"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Curse"
+ {
+
+ "paint" "310"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cyanospatter"
+ {
+
+ "paint" "92"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cyrex (M4A1-S"
+ {
+
+ "paint" "360"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Cyrex (SCAR-20)"
+ {
+
+ "paint" "312"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Damascus Steel (1)"
+
+
+ {
+
+ "paint" "410"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Damascus Steel (2)"
+ {
+
+ "paint" "411"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Damascus Steel (3)"
+ {
+
+ "paint" "247"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dark Age"
+ {
+
+ "paint" "329"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dark Water"
+ {
+
+ "paint" "60"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dart"
+ {
+
+ "paint" "386"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Deadly Poison"
+ {
+
+ "paint" "403"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Death By Kitty"
+ {
+
+ "paint" "156"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Death Rattle"
+ {
+
+ "paint" "293"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Delusion"
+ {
+
+ "paint" "392"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Demeter"
+ {
+
+ "paint" "195"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Demolition"
+ {
+
+ "paint" "153"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Detour"
+ {
+
+ "paint" "319"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert Storm"
+ {
+
+ "paint" "8"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert-Strike (M4A4)"
+ {
+
+ "paint" "336"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert-Strike (Negev)"
+ {
+
+ "paint" "355"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Desert Warfare"
+ {
+
+ "paint" "311"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doomkitty"
+ {
+
+ "paint" "178"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 1)"
+ {
+
+ "paint" "418"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 2)"
+ {
+
+ "paint" "419"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 3)"
+ {
+
+ "paint" "420"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Phase 4)"
+ {
+
+ "paint" "421"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Black Pearl)"
+ {
+
+ "paint" "417"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Ruby)"
+ {
+
+ "paint" "415"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Doppler (Sapphire)"
+ {
+
+ "paint" "416"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dragon King"
+ {
+
+ "paint" "400"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dragon Lore"
+ {
+
+ "paint" "344"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dragon Tattoo"
+ {
+
+ "paint" "48"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Dry Season"
+ {
+
+ "paint" "199"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Electric Hive"
+ {
+
+ "paint" "227"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Emerald"
+ {
+
+ "paint" "196"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Emerald Dragon"
+ {
+
+ "paint" "182"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Emerald Pinstripe"
+ {
+
+ "paint" "300"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Facets"
+ {
+
+ "paint" "207"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fade"
+ {
+
+ "paint" "38"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Faded Zebra"
+ {
+
+ "paint" "176"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fallout Warning (1)"
+ {
+
+ "paint" "169"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fallout Warning (2)"
+ {
+
+ "paint" "378"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fire Elemental"
+ {
+
+ "paint" "389"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fire Serpent"
+ {
+
+ "paint" "180"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Firestarter"
+ {
+
+ "paint" "385"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "First Class (AK-47)"
+ {
+
+ "paint" "341"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "First Class (Sawed-Off)"
+ {
+
+ "paint" "345"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Forest DDPAT"
+ {
+
+ "paint" "5"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Forest Leaves"
+ {
+
+ "paint" "25"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Forest Night"
+ {
+
+ "paint" "78"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Fowl Play"
+ {
+
+ "paint" "352"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Franklin"
+ {
+
+ "paint" "295"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Full Stop"
+ {
+
+ "paint" "250"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Gator Mesh"
+ {
+
+ "paint" "243"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ghost Camo"
+ {
+
+ "paint" "225"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Glacier Mesh"
+ {
+
+ "paint" "111"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Golden Koi"
+ {
+
+ "paint" "185"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Granite Marbelized"
+ {
+
+ "paint" "21"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Graphite (1)"
+ {
+
+ "paint" "214"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Graphite (2)"
+ {
+
+ "paint" "212"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grassland"
+ {
+
+ "paint" "95"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grassland Leaves"
+ {
+
+ "paint" "104"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Graven"
+ {
+
+ "paint" "188"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Green Apple"
+ {
+
+ "paint" "294"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Green Plaid"
+ {
+
+ "paint" "366"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Griffin"
+ {
+
+ "paint" "384"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grinder"
+ {
+
+ "paint" "381"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Grotto"
+ {
+
+ "paint" "406"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Groundwater (1)"
+ {
+
+ "paint" "2"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Groundwater (2)"
+ {
+
+ "paint" "209"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Guardian (1)"
+ {
+
+ "paint" "257"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Guardian (2)"
+ {
+
+ "paint" "290"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Gun Smoke"
+ {
+
+ "paint" "15"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hand Cannon"
+ {
+
+ "paint" "328"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hazard (1)"
+ {
+
+ "paint" "101"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hazard (2)"
+ {
+
+ "paint" "198"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heat"
+ {
+
+ "paint" "284"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heaven Guard (MAG-7)"
+ {
+
+ "paint" "291"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heaven Guard (XM1014)"
+ {
+
+ "paint" "314"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Heirloom"
+ {
+
+ "paint" "273"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hemoglobin"
+ {
+
+ "paint" "220"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hexane"
+ {
+
+ "paint" "218"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Highwayman"
+ {
+
+ "paint" "390"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hive"
+ {
+
+ "paint" "219"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hot Rod"
+ {
+
+ "paint" "33"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hot Shot"
+ {
+
+ "paint" "377"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Howl"
+ {
+
+ "paint" "309"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hunting Blind"
+ {
+
+ "paint" "241"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Hypnotic"
+ {
+
+ "paint" "61"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Indigo"
+ {
+
+ "paint" "333"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Irradiated Alert"
+ {
+
+ "paint" "171"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Isaac"
+ {
+
+ "paint" "303"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ivory"
+ {
+
+ "paint" "357"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jaguar"
+ {
+
+ "paint" "316"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jet Set"
+ {
+
+ "paint" "340"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle (1)"
+ {
+
+ "paint" "151"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle (2)"
+ {
+
+ "paint" "205"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle Dashed"
+ {
+
+ "paint" "147"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle DDPAT"
+ {
+
+ "paint" "202"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle Spray"
+ {
+
+ "paint" "122"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Jungle Tiger"
+ {
+
+ "paint" "16"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Kami (1)"
+ {
+
+ "paint" "265"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Kami (2)"
+ {
+
+ "paint" "308"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Knight"
+ {
+
+ "paint" "326"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Koi"
+ {
+
+ "paint" "356"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "The Kraken"
+ {
+
+ "paint" "256"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Labyrinth"
+ {
+
+ "paint" "362"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Leather"
+ {
+
+ "paint" "342"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Lichen Dashed"
+ {
+
+ "paint" "26"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Lightning Strike"
+ {
+
+ "paint" "51"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Magma"
+ {
+
+ "paint" "266"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Malachite"
+ {
+
+ "paint" "402"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Man-O'-War"
+ {
+
+ "paint" "395"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Marble Fade"
+ {
+
+ "paint" "413"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Marina"
+ {
+
+ "paint" "261"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Master Piece"
+ {
+
+ "paint" "321"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mayan Dreams"
+ {
+
+ "paint" "200"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mehndi"
+ {
+
+ "paint" "258"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Memento"
+ {
+
+ "paint" "177"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Metallic DDPAT"
+ {
+
+ "paint" "34"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Meteorite"
+ {
+
+ "paint" "296"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Modern Hunter"
+ {
+
+ "paint" "164"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Module"
+ {
+
+ "paint" "335"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mosaico"
+ {
+
+ "paint" "204"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Mudder"
+ {
+
+ "paint" "90"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Muertos"
+ {
+
+ "paint" "404"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Murky"
+ {
+
+ "paint" "382"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Naga"
+ {
+
+ "paint" "397"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Night"
+ {
+
+ "paint" "40"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Night Ops"
+ {
+
+ "paint" "236"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nightshade"
+ {
+
+ "paint" "223"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nitro (CZ-75)"
+ {
+
+ "paint" "322"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nitro (M4A1-S)"
+ {
+
+ "paint" "254"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Garden"
+ {
+
+ "paint" "372"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Threat (1)"
+ {
+
+ "paint" "168"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Threat (2)"
+ {
+
+ "paint" "179"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Nuclear Waste"
+ {
+
+ "paint" "369"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ocean Foam (MP7)"
+ {
+
+ "paint" "211"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ocean Foam (P2000)"
+ {
+
+ "paint" "213"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Olive Plaid"
+ {
+
+ "paint" "365"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Orange DDPAT"
+ {
+
+ "paint" "83"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Orange Peel"
+ {
+
+ "paint" "141"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Orion"
+ {
+
+ "paint" "313"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Osiris"
+ {
+
+ "paint" "349"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ossified"
+ {
+
+ "paint" "36"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Overgrowth"
+ {
+
+ "paint" "183"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Palm (1)"
+ {
+
+ "paint" "157"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Palm (2)"
+ {
+
+ "paint" "201"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Panther"
+ {
+
+ "paint" "276"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pilot"
+ {
+
+ "paint" "347"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pink DDPAT"
+ {
+
+ "paint" "84"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pit Viper"
+ {
+
+ "paint" "251"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Poison Dart"
+ {
+
+ "paint" "315"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Polar Camo"
+ {
+
+ "paint" "74"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Polar Mesh"
+ {
+
+ "paint" "107"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Predator"
+ {
+
+ "paint" "170"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pulse (FAMAS)"
+ {
+
+ "paint" "260"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pulse (P2000)"
+ {
+
+ "paint" "338"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Pulse (SG553)"
+ {
+
+ "paint" "287"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Quicksilver"
+ {
+
+ "paint" "407"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+
+
+ "Radiation Hazard (1)"
+ {
+
+ "paint" "167"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Radiation Hazard (2)"
+ {
+
+ "paint" "375"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Reactor"
+ {
+
+ "paint" "367"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Redline (AK-47)"
+ {
+
+ "paint" "282"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+
+
+ "Redline (AWP)"
+ {
+
+ "paint" "259"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Laminate"
+ {
+
+ "paint" "14"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Leather"
+ {
+
+ "paint" "348"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Fragcam"
+ {
+
+ "paint" "275"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Python"
+ {
+
+ "paint" "320"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Red Quartz"
+ {
+
+ "paint" "248"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Retribution"
+ {
+
+ "paint" "307"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rising Skull"
+ {
+
+ "paint" "263"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Road Rash"
+ {
+
+ "paint" "318"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rose Iron"
+ {
+
+ "paint" "262"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Royal Blue"
+ {
+
+ "paint" "332"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rust Coat (1)"
+ {
+
+ "paint" "323"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rust Coat (2)"
+ {
+
+ "paint" "203"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Rust Coat (3)"
+ {
+
+ "paint" "414"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Safari Mesh"
+ {
+
+ "paint" "72"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sage Spray"
+ {
+
+ "paint" "119"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sandstorm (1)"
+ {
+
+ "paint" "264"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sandstorm (2)"
+ {
+
+ "paint" "289"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Dashed"
+ {
+
+ "paint" "148"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Dune (1)"
+ {
+
+ "paint" "99"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Dune (2)"
+ {
+
+ "paint" "208"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Mesh"
+ {
+
+ "paint" "116"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sand Spray"
+ {
+
+ "paint" "124"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Scorched"
+ {
+
+ "paint" "175"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Scorpion"
+ {
+
+ "paint" "71"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Sergeant"
+ {
+
+ "paint" "288"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Serenity"
+ {
+
+ "paint" "405"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Serum"
+ {
+
+ "paint" "221"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Setting Sun"
+ {
+
+ "paint" "368"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Shattered"
+ {
+
+ "paint" "192"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Silver"
+ {
+
+ "paint" "32"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+
+
+ }
+
+ "Silver Quartz"
+ {
+
+ "paint" "252"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Skulls"
+ {
+
+ "paint" "11"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Slashed"
+ {
+
+ "paint" "304"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Slaughter"
+ {
+
+ "paint" "59"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Snake Camo"
+ {
+
+ "paint" "30"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Spitfire"
+ {
+
+ "paint" "194"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Splash"
+ {
+
+ "paint" "162"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Splash Jam"
+ {
+
+ "paint" "165"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Stained"
+ {
+
+ "paint" "43"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Stainless"
+ {
+
+ "paint" "277"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Steel Disruption"
+ {
+
+ "paint" "230"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Storm"
+ {
+
+ "paint" "100"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Styx"
+ {
+
+ "paint" "371"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Supernova"
+ {
+
+ "paint" "358"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "System Lock"
+ {
+
+ "paint" "401"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tatter"
+ {
+
+ "paint" "337"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Teardown"
+ {
+
+ "paint" "244"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tempest"
+ {
+
+ "paint" "191"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Terrain"
+ {
+
+ "paint" "285"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "The Fuschia Is Now"
+ {
+
+ "paint" "269"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tiger Tooth"
+ {
+
+ "paint" "409"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tigris"
+ {
+
+ "paint" "350"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Titanium Bit"
+ {
+
+ "paint" "272"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tornado"
+ {
+
+ "paint" "206"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Torque"
+ {
+
+ "paint" "305"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Toxic"
+ {
+
+ "paint" "374"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tranquility"
+ {
+
+ "paint" "393"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Traveler"
+ {
+
+ "paint" "363"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tread Plate"
+ {
+
+ "paint" "268"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Trigon"
+ {
+
+ "paint" "283"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tropical Storm"
+ {
+
+ "paint" "233"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Tuxedo"
+ {
+
+ "paint" "297"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Twist"
+ {
+
+ "paint" "334"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Ultraviolet"
+ {
+
+ "paint" "98"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Undertow"
+ {
+
+ "paint" "271"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Dashed"
+ {
+
+ "paint" "149"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban DDPAT"
+ {
+
+ "paint" "17"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Hazard (1)"
+ {
+
+ "paint" "387"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Hazard (2)"
+ {
+
+ "paint" "354"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Masked"
+ {
+
+ "paint" "143"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Perforated"
+ {
+
+ "paint" "135"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Rubble"
+ {
+
+ "paint" "237"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Urban Shock"
+ {
+
+ "paint" "396"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "VariCamo"
+ {
+
+ "paint" "235"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "VariCamo Blue"
+ {
+
+ "paint" "238"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Victoria"
+ {
+
+ "paint" "270"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Walnut"
+ {
+
+ "paint" "158"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Wasteland Rebel"
+ {
+
+ "paint" "380"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Water Elemental"
+ {
+
+ "paint" "353"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Water Sigil"
+ {
+
+ "paint" "224"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Wave Spray"
+ {
+
+ "paint" "186"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Waves Perforated"
+ {
+
+ "paint" "136"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Whiteout"
+ {
+
+ "paint" "102"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Wings"
+ {
+
+ "paint" "73"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Winter Forest"
+ {
+
+ "paint" "76"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Virus"
+ {
+
+ "paint" "20"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Vulcan"
+ {
+
+ "paint" "302"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "X-RAY"
+ {
+
+ "paint" "215"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+
+ "Zirka"
+ {
+
+ "paint" "187"
+ "wear" "0.01"
+ "stattrak" "2015"
+ "quality" "3"
+ "type" "weaponskin"
+ "price" "100"
+ }
+ }
+
+ "Pets"
+ {
+ "Chicken"
+ {
+ "model" "models/chicken/chicken.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "idle01"
+ "run" "run01"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Chicken Zombie"
+ {
+ "model" "models/chicken/chicken_zombie.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "idle01"
+ "run" "run01"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Crow"
+ {
+ "model" "models/crow.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "crow_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Crow Flying"
+ {
+ "model" "models/crow.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly01"
+ "run" "Fly01"
+ "unique_id" "crow_flying"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Pigeon"
+ {
+ "model" "models/pigeon.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "pigeon_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Pigeon Flying"
+ {
+ "model" "models/pigeon.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly01"
+ "run" "Fly01"
+ "unique_id" "pigeon_flying"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Seagull"
+ {
+ "model" "models/seagull.mdl"
+ "position" "50.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Idle01"
+ "run" "Run"
+ "unique_id" "seagull_running"
+ "price" "100"
+ "type" "pet"
+ }
+
+ "Seagull Flying"
+ {
+ "model" "models/seagull.mdl"
+ "position" "50.0 0.0 70.0"
+ "angles" "0.0 0.0 0.0"
+ "idle" "Fly"
+ "run" "Fly"
+ "unique_id" "seagull_flying"
+ "price" "100"
+ "type" "pet"
+ }
+ }
+
+ "Knives"
+ {
+ "Bayonet"
+ {
+ "entity" "weapon_bayonet"
+ "defindex" "500"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Gut"
+ {
+ "entity" "weapon_knife_gut"
+ "defindex" "506"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Flip"
+ {
+ "entity" "weapon_knife_flip"
+ "defindex" "505"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "M9 Bayonet"
+ {
+ "entity" "weapon_knife_m9_bayonet"
+ "defindex" "508"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Karambit"
+ {
+ "entity" "weapon_knife_karambit"
+ "defindex" "507"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Golden"
+ {
+ "entity" "weapon_knifegg"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Tactical"
+ {
+ "entity" "weapon_knife_tactical"
+ "defindex" "509"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Butterfly"
+ {
+ "entity" "weapon_knife_butterfly"
+ "defindex" "515"
+ "type" "knife"
+ "price" "100"
+ }
+
+ "Falchion"
+ {
+ "entity" "weapon_knife_falchion"
+ "defindex" "512"
+ "type" "knife"
+ "price" "100"
+ }
+ }
+
+ "Tracers"
+ {
+ "Blue"
+ {
+ "color" "0 0 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Cyan"
+ {
+ "color" "0 255 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Fuschia"
+ {
+ "color" "125 0 125"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Gray"
+ {
+ "color" "240 240 240"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Green"
+ {
+ "color" "0 125 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Lawn Green"
+ {
+ "color" "124 122 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ "Olive Brown"
+ {
+ "color" "128 125 165"
+ "price" "120"
+ "type" "tracer"
+ }
+
+ "Orange"
+ {
+ "color" "125 77 0"
+ "price" "120"
+ "type" "tracer"
+ }
+ }
+
+ "Laser Sight"
+ {
+ "Blue"
+ {
+ "color" "0 0 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Cyan"
+ {
+ "color" "0 255 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Fuschia"
+ {
+ "color" "125 0 125"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Gray"
+ {
+ "color" "240 240 240"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Green"
+ {
+ "color" "0 125 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Lawn Green"
+ {
+ "color" "124 122 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ "Olive Brown"
+ {
+ "color" "128 125 165"
+ "price" "120"
+ "type" "lasersight"
+ }
+
+ "Orange"
+ {
+ "color" "125 77 0"
+ "price" "120"
+ "type" "lasersight"
+ }
+ }
+
+ "Accessories"
+ {
+ "Hats"
+ {
+ "Spartan Helmet"
+ {
+ "model" "models/spartahelm/spartahelm.mdl"
+ "position" "0.0 -2.2 -68.4"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Ironman"
+ {
+ "model" "models/fo3_ironman_mask.mdl"
+ "position" "1.0 -4.6 -2.0"
+ "angles" "0.0 -90.0 -20.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "V Mask"
+ {
+ "model" "models/v/mask.mdl"
+ "position" "0.0 -5.2 -65.2"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Pika Hat"
+ {
+ "model" "models/pikahat/pikahat.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Mudkip Hat"
+ {
+ "model" "models/mudhatk/mudhatk.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Super Saiyan"
+ {
+ "model" "models/anime_patron/animepatr.mdl"
+ "position" "0.0 -2.2 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Sentry"
+ {
+ "model" "models/sentry_hat/sentryha.mdl"
+ "position" "0.0 -1.7 -68.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Pedo Bear"
+ {
+ "model" "models/pedobear/pedobearf.mdl"
+ "position" "0.0 -1.7 -70.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Antlers"
+ {
+ "model" "models/sam/antlers.mdl"
+ "position" "0.0 0.0 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Car Tire"
+ {
+ "model" "models/props_vehicles/tire001c_car.mdl"
+ "position" "0.0 -10.0 0.0"
+ "angles" "90.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Watermelon"
+ {
+ "model" "models/props_junk/watermelon01.mdl"
+ "position" "0.0 0.0 5.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Traffic Cone"
+ {
+ "model" "models/props_junk/trafficcone001a.mdl"
+ "position" "0.0 -1.0 20.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Metal Bucket"
+ {
+ "model" "models/props_junk/metalbucket01a.mdl"
+ "position" "0.0 0.0 -8.0"
+ "angles" "180.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Terracotta"
+ {
+ "model" "models/props_junk/terracotta01.mdl"
+ "position" "0.0 3.0 -10.0"
+ "angles" "180.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Baseball Cap"
+ {
+ "model" "models/props/cs_office/snowman_hat.mdl"
+ "position" "0.0 0.0 7.0"
+ "angles" "0.0 -90.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Coffee Mug"
+ {
+ "model" "models/props/cs_office/coffee_mug.mdl"
+ "position" "0.0 0.0 9.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "I <3 Turtles"
+ {
+ "model" "models/props/de_tides/vending_hat.mdl"
+ "position" "1.8 0.0 4.0"
+ "angles" "0.0 -90.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Astronaut helmet"
+ {
+ "model" "models/astronauthelmet/astronauthelmet.mdl"
+ "position" "0.0 0.0 -5.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Viking helmet"
+ {
+ "model" "models/vikinghelmet/vikinghelmet.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Fedora"
+ {
+ "model" "models/gmod_tower/fedorahat.mdl"
+ "position" "0.0 -1.5 8.5"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "KFC Bucket"
+ {
+ "model" "models/gmod_tower/kfcbucket.mdl"
+ "position" "0.0 -1.0 3.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Cake Hat"
+ {
+ "model" "models/cakehat/cakehat.mdl"
+ "position" "0.0 -1.0 3.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Santa Hat"
+ {
+ "model" "models/santahat/santahat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Dunce Hat"
+ {
+ "model" "models/duncehat/duncehat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Sombrero"
+ {
+ "model" "models/gmod_tower/sombrero.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Cat Ears"
+ {
+ "model" "models/gmod_tower/catears.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Afro"
+ {
+ "model" "models/gmod_tower/afro.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Andross Mask"
+ {
+ "model" "models/gmod_tower/androssmask.mdl"
+ "position" "0.0 2.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Drink Cap"
+ {
+ "model" "models/gmod_tower/drinkcap.mdl"
+ "position" "0.0 -1.0 7.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Headcrab Hat"
+ {
+ "model" "models/gmod_tower/headcrabhat.mdl"
+ "position" "0.0 -3.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Majorasmask"
+ {
+ "model" "models/gmod_tower/majorasmask.mdl"
+ "position" "0.0 0.5 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Toromask"
+ {
+ "model" "models/gmod_tower/toromask.mdl"
+ "position" "0.0 -1.0 4.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Top Hat"
+ {
+ "model" "models/gmod_tower/tophat.mdl"
+ "position" "0.0 -1.7 4.5"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Witch Hat"
+ {
+ "model" "models/gmod_tower/witchhat.mdl"
+ "position" "0.0 0.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Toeto Hat"
+ {
+ "model" "models/gmod_tower/toetohat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Party Hat"
+ {
+ "model" "models/gmod_tower/partyhat.mdl"
+ "position" "1.0 -1.0 7.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Seuss Hat"
+ {
+ "model" "models/gmod_tower/seusshat.mdl"
+ "position" "0.0 -1.0 6.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Link Hat"
+ {
+ "model" "models/gmod_tower/linkhat.mdl"
+ "position" "0.0 -5.0 4.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Midna Hat"
+ {
+ "model" "models/gmod_tower/midnahat.mdl"
+ "position" "0.0 0.0 0.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "0"
+ }
+
+ "Seuss Hat "
+ {
+ "model" "models/store/hats/seusshat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Andross Mask "
+ {
+ "model" "models/store/hats/androssmask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Afro "
+ {
+ "model" "models/store/hats/afro.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Fedora "
+ {
+ "model" "models/store/hats/fedorahat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "KFC Bucket "
+ {
+ "model" "models/store/hats/kfcbucket.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Asian Hat "
+ {
+ "model" "models/store/hats/asian_hat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Colonial Tricorn "
+ {
+ "model" "models/store/hats/colonial_tricorn_v1.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Deku Scrub Mask "
+ {
+ "model" "models/store/hats/deku_scrub_mask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Goron Mask "
+ {
+ "model" "models/store/hats/goron_mask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Gumby Mask "
+ {
+ "model" "models/store/hats/gumby_mask_v1.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Links Hat "
+ {
+ "model" "models/store/hats/links_hat_v4.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Uncle Sam "
+ {
+ "model" "models/store/hats/uncle_sam_hat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Daft Punk "
+ {
+ "model" "models/store/hats/daft_punk_v1.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Zora Mask "
+ {
+ "model" "models/store/hats/zora_mask.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "0"
+ }
+
+ "Witch Hat "
+ {
+ "model" "models/store/hats/witchhat.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "1"
+ }
+ }
+
+ "Masks"
+ {
+ "Porcelain Doll"
+ {
+ "model" "models/player/holiday/facemasks/porcelain_doll.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Zombie Fortune"
+ {
+ "model" "models/player/holiday/facemasks/facemask_zombie_fortune_plastic.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Wolf"
+ {
+ "model" "models/player/holiday/facemasks/facemask_wolf.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Tiki"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tiki.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+
+ "Spy"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_spy_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+
+ "Soldier"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_soldier_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sniper"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_sniper_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Scout"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_scout_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Pyro"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_pyro_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Medic"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_medic_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Heavy"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_heavy_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Engineer"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_engi_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Demoman"
+ {
+ "model" "models/player/holiday/facemasks/facemask_tf2_demo_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Skull"
+ {
+ "model" "models/player/holiday/facemasks/facemask_skull.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Skull (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_skull_gold.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_model.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_gold.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Sheep (Bloody)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_sheep_bloody.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Samurai"
+ {
+ "model" "models/player/holiday/facemasks/facemask_samurai.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Pumpkin"
+ {
+ "model" "models/player/holiday/facemasks/facemask_pumpkin.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Porcelain Doll Kabuki"
+ {
+ "model" "models/player/holiday/facemasks/facemask_porcelain_doll_kabuki.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Hoxton"
+ {
+ "model" "models/player/holiday/facemasks/facemask_hoxton.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Devil"
+ {
+ "model" "models/player/holiday/facemasks/facemask_devil_plastic.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Dallas"
+ {
+ "model" "models/player/holiday/facemasks/facemask_dallas.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Chicken"
+ {
+ "model" "models/player/holiday/facemasks/facemask_chicken.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Chains"
+ {
+ "model" "models/player/holiday/facemasks/facemask_chains.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Bunny"
+ {
+ "model" "models/player/holiday/facemasks/facemask_bunny.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Bunny (Gold)"
+ {
+ "model" "models/player/holiday/facemasks/facemask_bunny.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Boar"
+ {
+ "model" "models/player/holiday/facemasks/facemask_boar.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Anaglyph"
+ {
+ "model" "models/player/holiday/facemasks/facemask_anaglyph.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+
+ "Evil Clown"
+ {
+ "model" "models/player/holiday/facemasks/evil_clown.mdl"
+ "attachment" "facemask"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "3"
+ }
+ }
+
+ "Glasses"
+ {
+ "3D Glasses"
+ {
+ "model" "models/gmod_tower/3dglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "3D Glasses "
+ {
+ "model" "models/store/hats/3dglasses.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "1"
+ }
+
+ "Aviators"
+ {
+ "model" "models/gmod_tower/aviators.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "Star Glasses"
+ {
+ "model" "models/gmod_tower/starglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "Kliener Glasses"
+ {
+ "model" "models/gmod_tower/klienerglasses.mdl"
+ "position" "0.0 0.5 2.0"
+ "angles" "0.0 0.0 0.0"
+ "price" "120"
+ "type" "hat"
+ "games" "cstrike"
+ "slot" "1"
+ }
+
+ "Star Glasses "
+ {
+ "model" "models/store/hats/starglasses.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "1"
+ }
+ }
+
+ "Shields"
+ {
+ "Hylian Shield"
+ {
+ "model" "models/store/hats/hylian_shield.mdl"
+ "bonemerge" "1"
+ "price" "120"
+ "type" "hat"
+ "games" "csgo"
+ "slot" "2"
+
+ "Attributes"
+ {
+ "health" "20"
+ }
+ }
+ }
+ }
+
+ "Player Skins"
+ {
+ "Terrorists"
+ {
+ "Duke Nukem"
+ {
+ "model" "models/player/kuristaja/duke4eva/duke/duke.mdl"
+ "team" "2"
+ "price" "120"
+ "type" "playerskin"
+ }
+ }
+
+ "Counter-Terrorists"
+ {
+ "Nick"
+ {
+ "model" "models/player/techknow/nick/nick.mdl"
+ "team" "3"
+ "price" "120"
+ "type" "playerskin"
+ }
+ }
+ }
+
+ "Trails"
+ {
+ "8Bit Mushroom"
+ {
+ "material" "materials/sprites/store/trails/8bitmushroom.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "8Bit Pow"
+ {
+ "material" "materials/sprites/store/trails/8bitpow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Airforce"
+ {
+ "material" "materials/sprites/store/trails/airforce.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Airforce 2"
+ {
+ "material" "materials/sprites/store/trails/airforce2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Apple"
+ {
+ "material" "materials/sprites/store/trails/apple.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Arrow Rainbow"
+ {
+ "material" "materials/sprites/store/trails/arrowrainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Arrows"
+ {
+ "material" "materials/sprites/store/trails/arrows.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Assasin"
+ {
+ "material" "materials/sprites/store/trails/assasin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome"
+ {
+ "material" "materials/sprites/store/trails/awesome.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome Sad"
+ {
+ "material" "materials/sprites/store/trails/awesome_sad.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Awesome Face"
+ {
+ "material" "materials/sprites/store/trails/awesomeface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Babyand"
+ {
+ "material" "materials/sprites/store/trails/babyand.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Banknote"
+ {
+ "material" "materials/sprites/store/trails/banknote.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Barcalona"
+ {
+ "material" "materials/sprites/store/trails/barcalona.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Batman"
+ {
+ "material" "materials/sprites/store/trails/batman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Battlefield"
+ {
+ "material" "materials/sprites/store/trails/battlefield.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Beer Mug"
+ {
+ "material" "materials/sprites/store/trails/beermug.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Biohazard"
+ {
+ "material" "materials/sprites/store/trails/biohazard.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Blade"
+ {
+ "material" "materials/sprites/store/trails/blade.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Blue Lightning"
+ {
+ "material" "materials/sprites/store/trails/bluelightning.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "BMW Logo"
+ {
+ "material" "materials/sprites/store/trails/bmwlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bom Bomb"
+ {
+ "material" "materials/sprites/store/trails/bombomb.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Boo"
+ {
+ "material" "materials/sprites/store/trails/boo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bullet Bill"
+ {
+ "material" "materials/sprites/store/trails/bulletbill.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Bullets"
+ {
+ "material" "materials/sprites/store/trails/bullets.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Canada Flag"
+ {
+ "material" "materials/sprites/store/trails/canadaflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Candies"
+ {
+ "material" "materials/sprites/store/trails/candies.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ccole"
+ {
+ "material" "materials/sprites/store/trails/ccole.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Cereal-guy"
+ {
+ "material" "materials/sprites/store/trails/cereal-guy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Challenge"
+ {
+ "material" "materials/sprites/store/trails/challenge.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Chopped Pyro"
+ {
+ "material" "materials/sprites/store/trails/chopped_pyro.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Chris Light"
+ {
+ "material" "materials/sprites/store/trails/chrislight.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Christ Lights"
+ {
+ "material" "materials/sprites/store/trails/christlights.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Coca-Cola"
+ {
+ "material" "materials/sprites/store/trails/cocacola.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Coca-Cola 2"
+ {
+ "material" "materials/sprites/store/trails/cocacola2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Color Bolt"
+ {
+ "material" "materials/sprites/store/trails/colorbolt.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Cookies"
+ {
+ "material" "materials/sprites/store/trails/cookies.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Cracked Beam"
+ {
+ "material" "materials/sprites/store/trails/crackedbeam.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Creed"
+ {
+ "material" "materials/sprites/store/trails/creed.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Creeper"
+ {
+ "material" "materials/sprites/store/trails/creeper.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Crown"
+ {
+ "material" "materials/sprites/store/trails/crown.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Damnim Good"
+ {
+ "material" "materials/sprites/store/trails/damnimgood.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Danish Flag"
+ {
+ "material" "materials/sprites/store/trails/danishflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dark Knight"
+ {
+ "material" "materials/sprites/store/trails/darkknight.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5"
+ {
+ "material" "materials/sprites/store/trails/deadmau5.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5 2"
+ {
+ "material" "materials/sprites/store/trails/deadmau52.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5 3"
+ {
+ "material" "materials/sprites/store/trails/deadmau53.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Deadmau5 4"
+ {
+ "material" "materials/sprites/store/trails/deadmau54.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dead Pool"
+ {
+ "material" "materials/sprites/store/trails/deadpool.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dirt"
+ {
+ "material" "materials/sprites/store/trails/dirt.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Disorder Dragon"
+ {
+ "material" "materials/sprites/store/trails/disorderdragonv2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Disorder Logo"
+ {
+ "material" "materials/sprites/store/trails/disorderlogo2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Disorder Text"
+ {
+ "material" "materials/sprites/store/trails/disordertext10.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "DNA 2"
+ {
+ "material" "materials/sprites/store/trails/dna2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dollars"
+ {
+ "material" "materials/sprites/store/trails/dollars.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Donuts"
+ {
+ "material" "materials/sprites/store/trails/donuts.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Double Rainbow"
+ {
+ "material" "materials/sprites/store/trails/doublerainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dragon"
+ {
+ "material" "materials/sprites/store/trails/dragon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Dragon Disorder"
+ {
+ "material" "materials/sprites/store/trails/dragondisorder.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "EA Fifa"
+ {
+ "material" "materials/sprites/store/trails/eafifa.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "EA Logo"
+ {
+ "material" "materials/sprites/store/trails/ealogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Earth"
+ {
+ "material" "materials/sprites/store/trails/earth.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Energy"
+ {
+ "material" "materials/sprites/store/trails/energy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Energyball"
+ {
+ "material" "materials/sprites/store/trails/energyball.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Epicsax"
+ {
+ "material" "materials/sprites/store/trails/epicsax.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Facebook Icon"
+ {
+ "material" "materials/sprites/store/trails/facebookicon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fap Face"
+ {
+ "material" "materials/sprites/store/trails/fapface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Faxekondi"
+ {
+ "material" "materials/sprites/store/trails/faxekondi.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ferrari"
+ {
+ "material" "materials/sprites/store/trails/ferrari.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fire"
+ {
+ "material" "materials/sprites/store/trails/fire.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fire 2"
+ {
+ "material" "materials/sprites/store/trails/fire1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Firefox"
+ {
+ "material" "materials/sprites/store/trails/firefox.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fireman"
+ {
+ "material" "materials/sprites/store/trails/fireman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Footprint"
+ {
+ "material" "materials/sprites/store/trails/footprint.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Forever Alone"
+ {
+ "material" "materials/sprites/store/trails/foreveralone.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fuu 1"
+ {
+ "material" "materials/sprites/store/trails/fuu1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fuu 2"
+ {
+ "material" "materials/sprites/store/trails/fuu2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Fuck Yeah"
+ {
+ "material" "materials/sprites/store/trails/fyeah.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "German Flag"
+ {
+ "material" "materials/sprites/store/trails/germanflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Google Chrome"
+ {
+ "material" "materials/sprites/store/trails/googlechrome.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Goomba"
+ {
+ "material" "materials/sprites/store/trails/goomba.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Grenade"
+ {
+ "material" "materials/sprites/store/trails/grenade.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Gummybears"
+ {
+ "material" "materials/sprites/store/trails/gummybears.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Gusta"
+ {
+ "material" "materials/sprites/store/trails/gusta.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Half-Life"
+ {
+ "material" "materials/sprites/store/trails/halflife.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Handgun"
+ {
+ "material" "materials/sprites/store/trails/handgun.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Headshot"
+ {
+ "material" "materials/sprites/store/trails/headshot.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Heart"
+ {
+ "material" "materials/sprites/store/trails/heart.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hello Kitty"
+ {
+ "material" "materials/sprites/store/trails/hellokitty.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hex"
+ {
+ "material" "materials/sprites/store/trails/hex.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hypnotic"
+ {
+ "material" "materials/sprites/store/trails/hypnotic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Hypnotoad"
+ {
+ "material" "materials/sprites/store/trails/hypnotoad.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ice"
+ {
+ "material" "materials/sprites/store/trails/ice.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ice 2"
+ {
+ "material" "materials/sprites/store/trails/ice1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Icloud"
+ {
+ "material" "materials/sprites/store/trails/icloud.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Invisible Bike"
+ {
+ "material" "materials/sprites/store/trails/invisible_bike.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Jackass"
+ {
+ "material" "materials/sprites/store/trails/jackass.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Jester"
+ {
+ "material" "materials/sprites/store/trails/jester.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Kaleido Scope"
+ {
+ "material" "materials/sprites/store/trails/kaleidoscope.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Kingdom Hearts"
+ {
+ "material" "materials/sprites/store/trails/kingdomhearts.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Kirby"
+ {
+ "material" "materials/sprites/store/trails/kirby.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Latvia"
+ {
+ "material" "materials/sprites/store/trails/latvia.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves"
+ {
+ "material" "materials/sprites/store/trails/leaves.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves 2"
+ {
+ "material" "materials/sprites/store/trails/leaves1.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves 3"
+ {
+ "material" "materials/sprites/store/trails/leaves2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Leaves 4"
+ {
+ "material" "materials/sprites/store/trails/leaves21.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightning 2"
+ {
+ "material" "materials/sprites/store/trails/lightning2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightning 3"
+ {
+ "material" "materials/sprites/store/trails/lightning3.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightspeed"
+ {
+ "material" "materials/sprites/store/trails/lightspeed.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Lightwave"
+ {
+ "material" "materials/sprites/store/trails/lightwave.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "LOL"
+ {
+ "material" "materials/sprites/store/trails/lol.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "LOL Guy"
+ {
+ "material" "materials/sprites/store/trails/lolguy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mario"
+ {
+ "material" "materials/sprites/store/trails/mario.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Masterchief"
+ {
+ "material" "materials/sprites/store/trails/masterchief.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+
+ "Mcdonalds"
+ {
+ "material" "materials/sprites/store/trails/mcdonald.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Medic"
+ {
+ "material" "materials/sprites/store/trails/medic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Metallic"
+ {
+ "material" "materials/sprites/store/trails/metallic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Metal Skull"
+ {
+ "material" "materials/sprites/store/trails/metalskull.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Metroid"
+ {
+ "material" "materials/sprites/store/trails/metroid.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Micky Mouse"
+ {
+ "material" "materials/sprites/store/trails/mickymouse.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Minecraft"
+ {
+ "material" "materials/sprites/store/trails/minecraft.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Moneybag"
+ {
+ "material" "materials/sprites/store/trails/moneybag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "mtvlogo"
+ {
+ "material" "materials/sprites/store/trails/mtvlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mudkip"
+ {
+ "material" "materials/sprites/store/trails/mudkip.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mushroom"
+ {
+ "material" "materials/sprites/store/trails/mushroom.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Mushroom 2"
+ {
+ "material" "materials/sprites/store/trails/mushroom2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Nevergup"
+ {
+ "material" "materials/sprites/store/trails/nevergup.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Nyan"
+ {
+ "material" "materials/sprites/store/trails/nyan.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ocarina"
+ {
+ "material" "materials/sprites/store/trails/ocarina.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Okami"
+ {
+ "material" "materials/sprites/store/trails/okami.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Okay Guy"
+ {
+ "material" "materials/sprites/store/trails/okayguy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Oops"
+ {
+ "material" "materials/sprites/store/trails/oops.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Orly"
+ {
+ "material" "materials/sprites/store/trails/orly.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pacman"
+ {
+ "material" "materials/sprites/store/trails/pacman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Paint Splatter"
+ {
+ "material" "materials/sprites/store/trails/paintsplatter.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Panda"
+ {
+ "material" "materials/sprites/store/trails/panda.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Paw Print"
+ {
+ "material" "materials/sprites/store/trails/pawprint.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Peace"
+ {
+ "material" "materials/sprites/store/trails/peace.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pedobear"
+ {
+ "material" "materials/sprites/store/trails/pedobear.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pfffft"
+ {
+ "material" "materials/sprites/store/trails/pfffft.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pika"
+ {
+ "material" "materials/sprites/store/trails/pika.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pikmin"
+ {
+ "material" "materials/sprites/store/trails/pikmin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pinkie"
+ {
+ "material" "materials/sprites/store/trails/pinkie.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pink Ribbon"
+ {
+ "material" "materials/sprites/store/trails/pinkribbon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Playboy"
+ {
+ "material" "materials/sprites/store/trails/playboy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Plur"
+ {
+ "material" "materials/sprites/store/trails/plur.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pokeball"
+ {
+ "material" "materials/sprites/store/trails/pokeball.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pokemon"
+ {
+ "material" "materials/sprites/store/trails/pokemon.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Poker"
+ {
+ "material" "materials/sprites/store/trails/poker.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Police"
+ {
+ "material" "materials/sprites/store/trails/police.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Potleaf"
+ {
+ "material" "materials/sprites/store/trails/potleaf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pretzel"
+ {
+ "material" "materials/sprites/store/trails/pretzel.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Problems Face"
+ {
+ "material" "materials/sprites/store/trails/problems_face.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Psychball"
+ {
+ "material" "materials/sprites/store/trails/psychball.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Psych Triangle"
+ {
+ "material" "materials/sprites/store/trails/psychtriangle.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Pumpkin"
+ {
+ "material" "materials/sprites/store/trails/pumpkin.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Purple Lightning"
+ {
+ "material" "materials/sprites/store/trails/purplelightning.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Puttegris"
+ {
+ "material" "materials/sprites/store/trails/puttegris.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "pwned"
+ {
+ "material" "materials/sprites/store/trails/pwned.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Quake"
+ {
+ "material" "materials/sprites/store/trails/quake.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Question"
+ {
+ "material" "materials/sprites/store/trails/question.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Raf"
+ {
+ "material" "materials/sprites/store/trails/raf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rain"
+ {
+ "material" "materials/sprites/store/trails/rain.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow Dash"
+ {
+ "material" "materials/sprites/store/trails/rainbow-dash.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow"
+ {
+ "material" "materials/sprites/store/trails/rainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow Cobra 2"
+ {
+ "material" "materials/sprites/store/trails/rainbowcobra2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Rainbow Cry"
+ {
+ "material" "materials/sprites/store/trails/rainbowcry.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Real Madrid"
+ {
+ "material" "materials/sprites/store/trails/realmadrid.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Reaper"
+ {
+ "material" "materials/sprites/store/trails/reaper.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Retro Egg"
+ {
+ "material" "materials/sprites/store/trails/retroegg.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Retro Flower"
+ {
+ "material" "materials/sprites/store/trails/retroflower.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Sep Rainbow"
+ {
+ "material" "materials/sprites/store/trails/seprainbow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Sharingan"
+ {
+ "material" "materials/sprites/store/trails/sharingan.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Shell"
+ {
+ "material" "materials/sprites/store/trails/shell.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Shroom5"
+ {
+ "material" "materials/sprites/store/trails/shroom5.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Skull"
+ {
+ "material" "materials/sprites/store/trails/skull.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Skulln Bones"
+ {
+ "material" "materials/sprites/store/trails/skullnbones.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Skype Logo"
+ {
+ "material" "materials/sprites/store/trails/skypelogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Slow Poke"
+ {
+ "material" "materials/sprites/store/trails/slowpoke.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Smirnoff"
+ {
+ "material" "materials/sprites/store/trails/smirnoff.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Smugleaf"
+ {
+ "material" "materials/sprites/store/trails/smugleaf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Snowman"
+ {
+ "material" "materials/sprites/store/trails/snowman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Sony Logo"
+ {
+ "material" "materials/sprites/store/trails/sonylogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "SOS"
+ {
+ "material" "materials/sprites/store/trails/sos.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Spider"
+ {
+ "material" "materials/sprites/store/trails/spider.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Spongebob"
+ {
+ "material" "materials/sprites/store/trails/spongebob.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Spotify"
+ {
+ "material" "materials/sprites/store/trails/spotify.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "SRS Face"
+ {
+ "material" "materials/sprites/store/trails/srsface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Star"
+ {
+ "material" "materials/sprites/store/trails/star.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Superman Logo"
+ {
+ "material" "materials/sprites/store/trails/supermanlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Swirly"
+ {
+ "material" "materials/sprites/store/trails/swirly.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Taco"
+ {
+ "material" "materials/sprites/store/trails/taco.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Test 1000"
+ {
+ "material" "materials/sprites/store/trails/test1000.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Timebomb"
+ {
+ "material" "materials/sprites/store/trails/timebomb.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Tmi Shit"
+ {
+ "material" "materials/sprites/store/trails/tmishit.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "triforce"
+ {
+ "material" "materials/sprites/store/trails/triforce.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "trippy"
+ {
+ "material" "materials/sprites/store/trails/trippy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Troll Face"
+ {
+ "material" "materials/sprites/store/trails/trollface.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Tux"
+ {
+ "material" "materials/sprites/store/trails/tux.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Twitter"
+ {
+ "material" "materials/sprites/store/trails/twitter.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "UK Flag"
+ {
+ "material" "materials/sprites/store/trails/ukflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ultra"
+ {
+ "material" "materials/sprites/store/trails/ultra.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Umbrella Corperation"
+ {
+ "material" "materials/sprites/store/trails/umbrellacorp.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Up Arrow"
+ {
+ "material" "materials/sprites/store/trails/uparrow.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "US Flag"
+ {
+ "material" "materials/sprites/store/trails/usflag.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "War Heads"
+ {
+ "material" "materials/sprites/store/trails/warheads.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Warrior"
+ {
+ "material" "materials/sprites/store/trails/warrior.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Water 2"
+ {
+ "material" "materials/sprites/store/trails/water2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wheel"
+ {
+ "material" "materials/sprites/store/trails/wheel.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Windows"
+ {
+ "material" "materials/sprites/store/trails/windows.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wings"
+ {
+ "material" "materials/sprites/store/trails/wings.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wolf"
+ {
+ "material" "materials/sprites/store/trails/wolf.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Wonder Woman"
+ {
+ "material" "materials/sprites/store/trails/wonder_woman.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Words"
+ {
+ "material" "materials/sprites/store/trails/words.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Medic 2"
+ {
+ "material" "materials/sprites/store/trails/x_medic.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Xbox Logo"
+ {
+ "material" "materials/sprites/store/trails/xboxlogo.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Y U NO Guy"
+ {
+ "material" "materials/sprites/store/trails/y-u-no-guy.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ying-Yang"
+ {
+ "material" "materials/sprites/store/trails/yingyang.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Ying-Yang 2"
+ {
+ "material" "materials/sprites/store/trails/yingyang2.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+
+ "Yukari"
+ {
+ "material" "materials/sprites/store/trails/yukari.vmt"
+ "price" "300"
+ "color" "255 255 255 255"
+ "type" "trail"
+ }
+ }
+
+ "Grenade Trails"
+ {
+ "Thin Beam"
+ {
+ "material" "materials/sprites/combineball_trail_black_1.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Squiggly Beam"
+ {
+ "material" "materials/sprites/hydragutbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Medium Beam"
+ {
+ "material" "materials/sprites/orangelight1.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Large Beam"
+ {
+ "material" "materials/sprites/spotlight.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 255 255"
+ }
+
+ "Red Laserbeam"
+ {
+ "material" "materials/sprites/laserbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "255 0 0 255"
+ "unique_id" "grenadetrail_laserbeam_red"
+ }
+
+ "Blue Laserbeam"
+ {
+ "material" "materials/sprites/laserbeam.vmt"
+ "price" "120"
+ "type" "grenadetrail"
+ "color" "0 0 255 255"
+ "unique_id" "grenadetrail_laserbeam_blue"
+ }
+ }
+
+ "Grenade Skins"
+ {
+ "HE Grenade"
+ {
+ "Orange"
+ {
+ "model" "models/props/cs_italy/orange.mdl"
+ "grenade" "hegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+
+ "Tortoise"
+ {
+ "model" "models/props/de_tides/vending_turtle.mdl"
+ "grenade" "hegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+
+ "Flashbang"
+ {
+ "Banana"
+ {
+ "model" "models/props/cs_italy/bananna.mdl"
+ "grenade" "flashbang"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+
+ "Smokegrenade"
+ {
+ "Watermelon"
+ {
+ "model" "models/props_junk/watermelon01.mdl"
+ "grenade" "smokegrenade"
+ "price" "60"
+ "type" "grenadeskin"
+ }
+ }
+ }
+
+ "Weapon Colors"
+ {
+ "Antique White"
+ {
+ "color" "205 192 176 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Alice Blue"
+ {
+ "color" "240 248 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Blue"
+ {
+ "color" "0 0 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Blue Violet"
+ {
+ "color" "138 43 226 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Corn Silk"
+ {
+ "color" "255 248 220 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Cyan"
+ {
+ "color" "0 255 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Dark Khaki"
+ {
+ "color" "189 183 107 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Dim Grey"
+ {
+ "color" "105 105 105 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Fire Brick"
+ {
+ "color" "178 34 34 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Fuschia"
+ {
+ "color" "255 0 255 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Gray"
+ {
+ "color" "240 240 240 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Green"
+ {
+ "color" "0 255 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Hunter Green"
+ {
+ "color" "35 142 35 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Lawn Green"
+ {
+ "color" "124 1202 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Navajo White"
+ {
+ "color" "255 222 173 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive"
+ {
+ "color" "128 128 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive Brown"
+ {
+ "color" "128 255 165 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Olive Drab"
+ {
+ "color" "607 142 35 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Orange"
+ {
+ "color" "255 77 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Orchid"
+ {
+ "color" "218 112 214 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Pale Turquoise"
+ {
+ "color" "175 238 238 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Purple"
+ {
+ "color" "128 0 128 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Pink"
+ {
+ "color" "255 103 103 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Plum"
+ {
+ "color" "221 160 221 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Red"
+ {
+ "color" "255 0 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sea Blue"
+ {
+ "color" "43 176 205 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sandy Brown"
+ {
+ "color" "244 164 96 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Sienna"
+ {
+ "color" "180 82 45 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Silver"
+ {
+ "color" "192 192 192 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Scarlet"
+ {
+ "color" "140 23 23 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Seal Green"
+ {
+ "color" "128 255 165 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Steel Blue"
+ {
+ "color" "35 107 142 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Teal"
+ {
+ "color" "0 128 128 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Turquoise"
+ {
+ "color" "64 224 208 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Violet"
+ {
+ "color" "148 0 211 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ "Yellow"
+ {
+ "color" "255 255 0 255"
+ "price" "60"
+ "type" "weaponcolor"
+ }
+ }
+
+ "Chat stuff"
+ {
+ "Name Tags"
+ {
+ "Newbie"
+ {
+ "tag" "{lightblue}[Newbie]{teamcolor} "
+ "price" "60"
+ "type" "nametag"
+ }
+ "Wannabe"
+ {
+ "tag" "{red}[Wannabe]{teamcolor} "
+ "price" "90"
+ "type" "nametag"
+ }
+ "Ex-Con"
+ {
+ "tag" "{black}[Ex-Con]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "Officer"
+ {
+ "tag" "{lightblue}[Officer]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "S.W.A.T"
+ {
+ "tag" "{blue}[S.W.A.T]{teamcolor} "
+ "price" "120"
+ "type" "nametag"
+ }
+ "420"
+ {
+ "tag" "{green}[420]{teamcolor} "
+ "price" "180"
+ "type" "nametag"
+ }
+ "Equinox"
+ {
+ "tag" "{pink}[Equinox]{teamcolor} "
+ "price" "300"
+ "type" "nametag"
+ }
+ }
+
+ "Name Colors"
+ {
+ "Alice Blue"
+ {
+ "color" "{aliceblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Antique White"
+ {
+ "color" "{antiquewhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Aqua"
+ {
+ "color" "{aqua}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Aquamarine"
+ {
+ "color" "{aquamarine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Azure"
+ {
+ "color" "{azure}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Beige"
+ {
+ "color" "{beige}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Bisque"
+ {
+ "color" "{bisque}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Black"
+ {
+ "color" "{black}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blanche Dalmond"
+ {
+ "color" "{blanchedalmond}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blue"
+ {
+ "color" "{blue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Blue Violet"
+ {
+ "color" "{blueviolet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Brown"
+ {
+ "color" "{brown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Burly Wood"
+ {
+ "color" "{burlywood}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cadet Blue"
+ {
+ "color" "{cadetblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Chartreuse"
+ {
+ "color" "{chartreuse}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Chocolate"
+ {
+ "color" "{chocolate}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Community"
+ {
+ "color" "{community}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Coral"
+ {
+ "color" "{coral}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cornflower Blue"
+ {
+ "color" "{cornflowerblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Corn Silk"
+ {
+ "color" "{cornsilk}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Crimson"
+ {
+ "color" "{crimson}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ "Cyan"
+ {
+ "color" "{cyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Blue"
+ {
+ "color" "{darkblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Cyan"
+ {
+ "color" "{darkcyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Golden Rod"
+ {
+ "color" "{darkgoldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Gray"
+ {
+ "color" "{darkgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Green"
+ {
+ "color" "{darkgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark khaki"
+ {
+ "color" "{darkkhaki}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark magenta"
+ {
+ "color" "{darkmagenta}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark oliveGreen"
+ {
+ "color" "{darkolivegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark orange"
+ {
+ "color" "{darkorange}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Orchid"
+ {
+ "color" "{darkorchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Red"
+ {
+ "color" "{darkred}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Dark salmon"
+ {
+ "color" "{darksalmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Sea Green"
+ {
+ "color" "{darkseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark SlateBlue"
+ {
+ "color" "{darkslateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Slategray"
+ {
+ "color" "{darkslategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Turquoise"
+ {
+ "color" "{darkturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Violet"
+ {
+ "color" "{darkviolet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Pink"
+ {
+ "color" "{deeppink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Skyblue"
+ {
+ "color" "{deepskyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dimgray"
+ {
+ "color" "{dimgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dodger Blue"
+ {
+ "color" "{dodgerblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Firebrick"
+ {
+ "color" "{firebrick}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Floral White"
+ {
+ "color" "{floralwhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Forest Green"
+ {
+ "color" "{forestgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Fuchsia"
+ {
+ "color" "{fuchsia}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Blue"
+ {
+ "color" "{fullblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Red"
+ {
+ "color" "{fullred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gainsboro"
+ {
+ "color" "{gainsboro}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Genuine"
+ {
+ "color" "{genuine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ghost White"
+ {
+ "color" "{ghostwhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gold"
+ {
+ "color" "{gold}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Goldenrod"
+ {
+ "color" "{goldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gray"
+ {
+ "color" "{gray}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Green"
+ {
+ "color" "{green}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Green Yellow"
+ {
+ "color" "{greenyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Haunted"
+ {
+ "color" "{haunted}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Honeydew"
+ {
+ "color" "{honeydew}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Hot Pink"
+ {
+ "color" "{hotpink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indian Red"
+ {
+ "color" "{indianred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indigo"
+ {
+ "color" "{indigo}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ivory"
+ {
+ "color" "{ivory}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Khaki"
+ {
+ "color" "{khaki}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender"
+ {
+ "color" "{lavender}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender Blush"
+ {
+ "color" "{lavenderblush}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lawn Green"
+ {
+ "color" "{lawngreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lemon Chiffon"
+ {
+ "color" "{lemonchiffon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Blue"
+ {
+ "color" "{lightblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Coral"
+ {
+ "color" "{lightcoral}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Cyan"
+ {
+ "color" "{lightcyan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Goldenrod Yellow"
+ {
+ "color" "{lightgoldenrodyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Red"
+ {
+ "color" "{lightred}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Light Gray"
+ {
+ "color" "{lightgray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Green"
+ {
+ "color" "{lightgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Pink"
+ {
+ "color" "{lightpink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Salmon"
+ {
+ "color" "{lightsalmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Sea Green"
+ {
+ "color" "{lightseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Skyblue"
+ {
+ "color" "{lightskyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Slategray"
+ {
+ "color" "{lightslategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Steel Blue"
+ {
+ "color" "{lightsteelblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Yellow"
+ {
+ "color" "{lightyellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lime"
+ {
+ "color" "{lime}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Lime Green"
+ {
+ "color" "{limegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Linen"
+ {
+ "color" "{linen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Magenta"
+ {
+ "color" "{magenta}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Maroon"
+ {
+ "color" "{maroon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Aquamarine"
+ {
+ "color" "{mediumaquamarine}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Blue"
+ {
+ "color" "{mediumblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Orchid"
+ {
+ "color" "{mediumorchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Purple"
+ {
+ "color" "{mediumpurple}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Sea Green"
+ {
+ "color" "{mediumseagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Slate Blue"
+ {
+ "color" "{mediumslateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Spring Green"
+ {
+ "color" "{mediumspringgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Turquoise"
+ {
+ "color" "{mediumturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Violet Red"
+ {
+ "color" "{mediumvioletred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Midnight Blue"
+ {
+ "color" "{midnightblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Mintcream"
+ {
+ "color" "{mintcream}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Misty Rose"
+ {
+ "color" "{mistyrose}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Moccasin"
+ {
+ "color" "{moccasin}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navajo White"
+ {
+ "color" "{navajowhite}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navy"
+ {
+ "color" "{navy}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Old Lace"
+ {
+ "color" "{oldlace}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Olive"
+ {
+ "color" "{olive}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Olive Drab"
+ {
+ "color" "{olivedrab}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange"
+ {
+ "color" "{orange}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange Red"
+ {
+ "color" "{orangered}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orchid"
+ {
+ "color" "{orchid}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Golden Rod"
+ {
+ "color" "{palegoldenrod}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Green"
+ {
+ "color" "{palegreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Turquoise"
+ {
+ "color" "{paleturquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale violetRed"
+ {
+ "color" "{palevioletred}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Papaya Whip"
+ {
+ "color" "{papayawhip}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peach Puff"
+ {
+ "color" "{peachpuff}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peru"
+ {
+ "color" "{peru}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pink"
+ {
+ "color" "{pink}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Plum"
+ {
+ "color" "{plum}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Powder Blue"
+ {
+ "color" "{powderblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Purple"
+ {
+ "color" "{purple}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Red"
+ {
+ "color" "{red}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Rosy Brown"
+ {
+ "color" "{rosybrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Royal Blue"
+ {
+ "color" "{royalblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Saddle Brown"
+ {
+ "color" "{saddlebrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Salmon"
+ {
+ "color" "{salmon}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sandy Brown"
+ {
+ "color" "{sandybrown}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sea Green"
+ {
+ "color" "{seagreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Seashell"
+ {
+ "color" "{seashell}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sienna"
+ {
+ "color" "{sienna}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Silver"
+ {
+ "color" "{silver}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Skyblue"
+ {
+ "color" "{skyblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate blue"
+ {
+ "color" "{slateblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate Gray"
+ {
+ "color" "{slategray}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Snow"
+ {
+ "color" "{snow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Spring Green"
+ {
+ "color" "{springgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Steel Blue"
+ {
+ "color" "{steelblue}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tan"
+ {
+ "color" "{tan}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Teal"
+ {
+ "color" "{teal}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Thistle"
+ {
+ "color" "{thistle}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tomato"
+ {
+ "color" "{tomato}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Turquoise"
+ {
+ "color" "{turquoise}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Violet"
+ {
+ "color" "{violet}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Wheat"
+ {
+ "color" "{wheat}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "White"
+ {
+ "color" "{white}"
+ "price" "60"
+ "type" "namecolor"
+ }
+
+ "Yellow"
+ {
+ "color" "{yellow}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+
+ "Yellow Green"
+ {
+ "color" "{yellowgreen}"
+ "price" "60"
+ "type" "namecolor"
+ "games" "tf,cstrike"
+ }
+ }
+
+ "Message Colors"
+ {
+ "Alice Blue"
+ {
+ "color" "{aliceblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Antique White"
+ {
+ "color" "{antiquewhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Aqua"
+ {
+ "color" "{aqua}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Aquamarine"
+ {
+ "color" "{aquamarine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Azure"
+ {
+ "color" "{azure}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Beige"
+ {
+ "color" "{beige}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Bisque"
+ {
+ "color" "{bisque}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Black"
+ {
+ "color" "{black}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blanche Dalmond"
+ {
+ "color" "{blanchedalmond}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blue"
+ {
+ "color" "{blue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Blue Violet"
+ {
+ "color" "{blueviolet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Brown"
+ {
+ "color" "{brown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Burly Wood"
+ {
+ "color" "{burlywood}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cadet Blue"
+ {
+ "color" "{cadetblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Chartreuse"
+ {
+ "color" "{chartreuse}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Chocolate"
+ {
+ "color" "{chocolate}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Community"
+ {
+ "color" "{community}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Coral"
+ {
+ "color" "{coral}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cornflower Blue"
+ {
+ "color" "{cornflowerblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Corn Silk"
+ {
+ "color" "{cornsilk}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Crimson"
+ {
+ "color" "{crimson}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ "Cyan"
+ {
+ "color" "{cyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Blue"
+ {
+ "color" "{darkblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Cyan"
+ {
+ "color" "{darkcyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Golden Rod"
+ {
+ "color" "{darkgoldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Gray"
+ {
+ "color" "{darkgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Green"
+ {
+ "color" "{darkgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark khaki"
+ {
+ "color" "{darkkhaki}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark magenta"
+ {
+ "color" "{darkmagenta}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark oliveGreen"
+ {
+ "color" "{darkolivegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark orange"
+ {
+ "color" "{darkorange}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Orchid"
+ {
+ "color" "{darkorchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Red"
+ {
+ "color" "{darkred}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Dark salmon"
+ {
+ "color" "{darksalmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Sea Green"
+ {
+ "color" "{darkseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark SlateBlue"
+ {
+ "color" "{darkslateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Slategray"
+ {
+ "color" "{darkslategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Turquoise"
+ {
+ "color" "{darkturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dark Violet"
+ {
+ "color" "{darkviolet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Pink"
+ {
+ "color" "{deeppink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Deep Skyblue"
+ {
+ "color" "{deepskyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dimgray"
+ {
+ "color" "{dimgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Dodger Blue"
+ {
+ "color" "{dodgerblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Firebrick"
+ {
+ "color" "{firebrick}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Floral White"
+ {
+ "color" "{floralwhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Forest Green"
+ {
+ "color" "{forestgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Fuchsia"
+ {
+ "color" "{fuchsia}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Blue"
+ {
+ "color" "{fullblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Full Red"
+ {
+ "color" "{fullred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gainsboro"
+ {
+ "color" "{gainsboro}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Genuine"
+ {
+ "color" "{genuine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ghost White"
+ {
+ "color" "{ghostwhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gold"
+ {
+ "color" "{gold}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Goldenrod"
+ {
+ "color" "{goldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Gray"
+ {
+ "color" "{gray}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Green"
+ {
+ "color" "{green}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Green Yellow"
+ {
+ "color" "{greenyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Haunted"
+ {
+ "color" "{haunted}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Honeydew"
+ {
+ "color" "{honeydew}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Hot Pink"
+ {
+ "color" "{hotpink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indian Red"
+ {
+ "color" "{indianred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Indigo"
+ {
+ "color" "{indigo}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Ivory"
+ {
+ "color" "{ivory}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Khaki"
+ {
+ "color" "{khaki}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender"
+ {
+ "color" "{lavender}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lavender Blush"
+ {
+ "color" "{lavenderblush}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lawn Green"
+ {
+ "color" "{lawngreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lemon Chiffon"
+ {
+ "color" "{lemonchiffon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Blue"
+ {
+ "color" "{lightblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Coral"
+ {
+ "color" "{lightcoral}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Cyan"
+ {
+ "color" "{lightcyan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Goldenrod Yellow"
+ {
+ "color" "{lightgoldenrodyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Gray"
+ {
+ "color" "{lightgray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Red"
+ {
+ "color" "{lightred}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Light Green"
+ {
+ "color" "{lightgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Pink"
+ {
+ "color" "{lightpink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Salmon"
+ {
+ "color" "{lightsalmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Sea Green"
+ {
+ "color" "{lightseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Skyblue"
+ {
+ "color" "{lightskyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Slategray"
+ {
+ "color" "{lightslategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Steel Blue"
+ {
+ "color" "{lightsteelblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Light Yellow"
+ {
+ "color" "{lightyellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Lime"
+ {
+ "color" "{lime}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Lime Green"
+ {
+ "color" "{limegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Linen"
+ {
+ "color" "{linen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Magenta"
+ {
+ "color" "{magenta}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Maroon"
+ {
+ "color" "{maroon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Aquamarine"
+ {
+ "color" "{mediumaquamarine}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Blue"
+ {
+ "color" "{mediumblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Orchid"
+ {
+ "color" "{mediumorchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Purple"
+ {
+ "color" "{mediumpurple}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Sea Green"
+ {
+ "color" "{mediumseagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Slate Blue"
+ {
+ "color" "{mediumslateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Spring Green"
+ {
+ "color" "{mediumspringgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Turquoise"
+ {
+ "color" "{mediumturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Medium Violet Red"
+ {
+ "color" "{mediumvioletred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Midnight Blue"
+ {
+ "color" "{midnightblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Mintcream"
+ {
+ "color" "{mintcream}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Misty Rose"
+ {
+ "color" "{mistyrose}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Moccasin"
+ {
+ "color" "{moccasin}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navajo White"
+ {
+ "color" "{navajowhite}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Navy"
+ {
+ "color" "{navy}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Old Lace"
+ {
+ "color" "{oldlace}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Olive"
+ {
+ "color" "{olive}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Olive Drab"
+ {
+ "color" "{olivedrab}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange"
+ {
+ "color" "{orange}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orange Red"
+ {
+ "color" "{orangered}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Orchid"
+ {
+ "color" "{orchid}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Golden Rod"
+ {
+ "color" "{palegoldenrod}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Green"
+ {
+ "color" "{palegreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale Turquoise"
+ {
+ "color" "{paleturquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pale violetRed"
+ {
+ "color" "{palevioletred}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Papaya Whip"
+ {
+ "color" "{papayawhip}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peach Puff"
+ {
+ "color" "{peachpuff}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Peru"
+ {
+ "color" "{peru}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Pink"
+ {
+ "color" "{pink}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Plum"
+ {
+ "color" "{plum}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Powder Blue"
+ {
+ "color" "{powderblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Purple"
+ {
+ "color" "{purple}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Red"
+ {
+ "color" "{red}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Rosy Brown"
+ {
+ "color" "{rosybrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Royal Blue"
+ {
+ "color" "{royalblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Saddle Brown"
+ {
+ "color" "{saddlebrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Salmon"
+ {
+ "color" "{salmon}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sandy Brown"
+ {
+ "color" "{sandybrown}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sea Green"
+ {
+ "color" "{seagreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Seashell"
+ {
+ "color" "{seashell}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Sienna"
+ {
+ "color" "{sienna}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Silver"
+ {
+ "color" "{silver}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Skyblue"
+ {
+ "color" "{skyblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate blue"
+ {
+ "color" "{slateblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Slate Gray"
+ {
+ "color" "{slategray}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Snow"
+ {
+ "color" "{snow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Spring Green"
+ {
+ "color" "{springgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Steel Blue"
+ {
+ "color" "{steelblue}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tan"
+ {
+ "color" "{tan}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Teal"
+ {
+ "color" "{teal}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Thistle"
+ {
+ "color" "{thistle}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Tomato"
+ {
+ "color" "{tomato}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Turquoise"
+ {
+ "color" "{turquoise}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Violet"
+ {
+ "color" "{violet}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Wheat"
+ {
+ "color" "{wheat}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "White"
+ {
+ "color" "{white}"
+ "price" "120"
+ "type" "msgcolor"
+ }
+
+ "Yellow"
+ {
+ "color" "{yellow}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+
+ "Yellow Green"
+ {
+ "color" "{yellowgreen}"
+ "price" "120"
+ "type" "msgcolor"
+ "games" "tf,cstrike"
+ }
+ }
+ }
+
+ "Miscellaneous"
+ {
+ "Bunnyhop"
+ {
+ "price" "500"
+ "type" "bunnyhop"
+ }
+
+ "Jetpack"
+ {
+ "price" "500"
+ "type" "jetpack"
+ }
+
+ "Paintball"
+ {
+ "price" "500"
+ "type" "paintball"
+ "Decals"
+ {
+ "cyan"
+ {
+ "material" "paintball/pb_cyan.vmt"
+ }
+ "green"
+ {
+ "material" "paintball/pb_green.vmt"
+ }
+ "pink"
+ {
+ "material" "paintball/pb_pink.vmt"
+ }
+ "orange"
+ {
+ "material" "paintball/pb_orange.vmt"
+ }
+ "yellow"
+ {
+ "material" "paintball/pb_yellow.vmt"
+ }
+ }
+ }
+ }
+
+ "Unusual Effects"
+ {
+ "Flying Bits"
+ {
+ "unusual_id" "2"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Nemesis Burst"
+ {
+ "unusual_id" "3"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Community Sparkle"
+ {
+ "unusual_id" "4"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Holy Glow"
+ {
+ "unusual_id" "5"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Green Confetti"
+ {
+ "unusual_id" "6"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Purple Confetti"
+ {
+ "unusual_id" "7"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Haunted Ghosts"
+ {
+ "unusual_id" "8"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Green Energy"
+ {
+ "unusual_id" "9"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Purple Energy"
+ {
+ "unusual_id" "10"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Circling TF Logo"
+ {
+ "unusual_id" "11"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Massed Flies"
+ {
+ "unusual_id" "12"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Burning Flames"
+ {
+ "unusual_id" "13"
+ "price" "200"
+ "type" "tfunusual"
+ }
+
+ "Scorching Flames"
+ {
+ "unusual_id" "14"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Searing Plasma"
+ {
+ "unusual_id" "15"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Vivid Plasma"
+ {
+ "unusual_id" "16"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Sunbeams"
+ {
+ "unusual_id" "17"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Circling Peace Sign"
+ {
+ "unusual_id" "18"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Circling Heart"
+ {
+ "unusual_id" "19"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Map Stamps"
+ {
+ "unusual_id" "20"
+ "price" "280"
+ "type" "tfunusual"
+ }
+
+ "Genteel Smoke"
+ {
+ "unusual_id" "28"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Stormy Storm"
+ {
+ "unusual_id" "29"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Blizzardy Storm"
+ {
+ "unusual_id" "30"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Nuts n' Bolts"
+ {
+ "unusual_id" "31"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Orbiting Planets"
+ {
+ "unusual_id" "32"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Orbiting Fire"
+ {
+ "unusual_id" "33"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Bubbling"
+ {
+ "unusual_id" "34"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Smoking"
+ {
+ "unusual_id" "35"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Steaming"
+ {
+ "unusual_id" "36"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Flaming Lantern"
+ {
+ "unusual_id" "37"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Cloudy Moon"
+ {
+ "unusual_id" "38"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Cauldron Bubbles"
+ {
+ "unusual_id" "39"
+ "price" "360"
+ "type" "tfunusual"
+ }
+
+ "Eerie Orbiting Fire"
+ {
+ "unusual_id" "40"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Knifestorm"
+ {
+ "unusual_id" "43"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Misty Skull"
+ {
+ "unusual_id" "44"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Harvest Moon"
+ {
+ "unusual_id" "45"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "It's A Secret To Everybody"
+ {
+ "unusual_id" "46"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Stormy 13th Hour"
+ {
+ "unusual_id" "47"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Attrib_Particle55"
+ {
+ "unusual_id" "55"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Kill-a-Watt"
+ {
+ "unusual_id" "56"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Terror-Watt"
+ {
+ "unusual_id" "57"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Cloud 9"
+ {
+ "unusual_id" "58"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Aces High"
+ {
+ "unusual_id" "59"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Dead Presidents"
+ {
+ "unusual_id" "180"
+ "type" "tfunusual"
+ "price" "440"
+ "type" "tfunusual"
+ }
+
+ "Miami Nights"
+ {
+ "unusual_id" "61"
+ "price" "180"
+ "type" "tfunusual"
+ }
+
+ "Disco Beat Down"
+ {
+ "unusual_id" "62"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Phosphorous"
+ {
+ "unusual_id" "63"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Sulphurous"
+ {
+ "unusual_id" "64"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Memory Leak"
+ {
+ "unusual_id" "65"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Overclocked"
+ {
+ "unusual_id" "66"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Electrostatic"
+ {
+ "unusual_id" "67"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Power Surge"
+ {
+ "unusual_id" "68"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Anti-Freeze"
+ {
+ "unusual_id" "69"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Time Warp"
+ {
+ "unusual_id" "70"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Green Black Hole"
+ {
+ "unusual_id" "71"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Roboactive"
+ {
+ "unusual_id" "72"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Arcana"
+ {
+ "unusual_id" "73"
+ "price" "520"
+ "type" "tfunusual"
+ }
+
+ "Spellbound"
+ {
+ "unusual_id" "74"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Chiroptera Venenata"
+ {
+ "unusual_id" "75"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Poisoned Shadows"
+ {
+ "unusual_id" "76"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Something Burning This Way Comes"
+ {
+ "unusual_id" "77"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Hellfire"
+ {
+ "unusual_id" "78"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Darkblaze"
+ {
+ "unusual_id" "79"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Demonflame"
+ {
+ "unusual_id" "80"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Showstopper"
+ {
+ "unusual_id" "3002"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Holy Grail"
+ {
+ "unusual_id" "3003"
+ "price" "600"
+ "type" "tfunusual"
+ }
+ "Fountain of Delight"
+ {
+ "unusual_id" "3005"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Screaming Tiger"
+ {
+ "unusual_id" "3006"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Skill Gotten Gains"
+ {
+ "unusual_id" "3007"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Midnight Whirlwind"
+ {
+ "unusual_id" "3008"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Silver Cyclone"
+ {
+ "unusual_id" "3009"
+ "price" "600"
+ "type" "tfunusual"
+ }
+
+ "Mega Strike"
+ {
+ "unusual_id" "3010"
+ "price" "600"
+ "type" "tfunusual"
+ }
+ }
+
+ "Paint Cans"
+ {
+ "A Color Similar to Slate"
+ {
+ "color" "47 79 79"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Deep Commitment to Purple"
+ {
+ "color" "125 64 113"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Distinctive Lack of Hue"
+ {
+ "color" "20 20 20"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "A Mann's Mint"
+ {
+ "color" "188 221 179"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "After Eight"
+ {
+ "color" "45 45 36"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Aged Moustache Grey"
+ {
+ "color" "126 126 126"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "An Extraordinary Abundance of Tinge"
+ {
+ "color" "230 230 230"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Australium Gold"
+ {
+ "color" "231 181 59"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Color No. 216-190-216 "
+ {
+ "color" "216 190 216"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Dark Salmon Injustice"
+ {
+ "color" "233 150 122"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Drably Olive"
+ {
+ "color" "128 128 0"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Indubitably Green"
+ {
+ "color" "114 158 66"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Mann Co. Orange"
+ {
+ "color" "207 115 54"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Muskelmannbraun"
+ {
+ "color" "165 117 69"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Noble Hatter's Violet"
+ {
+ "color" "81 56 74"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Peculiarly Drab Tincture"
+ {
+ "color" "197 175 145"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+ "Pink as Hell"
+ {
+ "color" "255 105 180"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Radigan Conagher Brown"
+ {
+ "color" "105 77 58"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "The Bitter Taste of Defeat and Lime"
+ {
+ "color" "50 205 50"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "The Color of a Gentlemann's Business Pants"
+ {
+ "color" "240 230 140"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Ye Olde Rustic Colour"
+ {
+ "color" "124 108 87"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+
+ "Zepheniah's Greed"
+ {
+ "color" "66 79 59"
+ "price" "60"
+ "type" "tyhatdye"
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/sourcemod/gamedata/store.gamedata.txt b/addons/sourcemod/gamedata/store.gamedata.txt
new file mode 100644
index 0000000..425e9ec
--- /dev/null
+++ b/addons/sourcemod/gamedata/store.gamedata.txt
@@ -0,0 +1,104 @@
+"Games"
+{
+ "#default"
+ {
+ "Offsets"
+ {
+ "EntityListeners"
+ {
+ "windows" "65572"
+ "linux" "65572"
+ "mac" "65572"
+ }
+ }
+ }
+
+ "cstrike"
+ {
+ "Signatures"
+ {
+ "LookupAttachment"
+ {
+ "library" "server"
+ "linux" "@_ZN14CBaseAnimating16LookupAttachmentEPKc"
+ "windows" "\x55\x8B\xEC\x56\x8B\xF1\x80\xBE\x2A\x2A\x2A\x2A\x00\x75\x2A\x83\xBE\x2A\x2A\x2A\x2A\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x83\x2A\x2A\x74\x2A\xFF\x75\x08"
+ }
+ }
+
+ "Offsets"
+ {
+ "Weapon_ShootPosition"
+ {
+ "windows" "263"
+ "linux" "264"
+ }
+
+ "SetModel"
+ {
+ "windows" "24"
+ "linux" "25"
+ }
+ }
+ }
+
+ "csgo"
+ {
+ "Signatures"
+ {
+ "LookupAttachment"
+ {
+ "library" "server"
+ "linux" "@_ZN14CBaseAnimating16LookupAttachmentEPKc"
+ "windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x56\x57\x8B\xF9\x89\x55\xF8\x85\xFF\x0F\x84\x80\x00\x00\x00\xE8\x75\xA6\xE3\xFF\x84\xC0\x74\x77\x8B\xCF\x33\xDB\xE8\xA8\xAA\xE3\xFF\x85\xC0\x7E\x6A\x8B\x47\x04\x33\xF6\x89\x75\xFC"
+ }
+ }
+ "Offsets"
+ {
+ "Weapon_ShootPosition"
+ {
+ "windows" "280"
+ "linux" "281"
+ }
+
+ "SetModel"
+ {
+ "windows" "26"
+ "linux" "27"
+ }
+
+ "EntityListeners"
+ {
+ "windows" "196644"
+ "linux" "196644"
+ "mac" "196644"
+ }
+ }
+ }
+
+ "tf"
+ {
+ "Offsets"
+ {
+ "EquipWearable"
+ {
+ "windows" "425"
+ "linux" "426"
+ "mac" "426"
+ }
+
+ "RemoveWearable"
+ {
+ "windows" "426"
+ "linux" "427"
+ "mac" "427"
+ }
+
+ "IsWearable"
+ {
+ "windows" "87"
+ "linux" "88"
+ "mac" "88"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/addons/sourcemod/plugins/store-trade.smx b/addons/sourcemod/plugins/store-trade.smx
new file mode 100644
index 0000000..9b0cfab
Binary files /dev/null and b/addons/sourcemod/plugins/store-trade.smx differ
diff --git a/addons/sourcemod/plugins/store.smx b/addons/sourcemod/plugins/store.smx
new file mode 100644
index 0000000..922e980
Binary files /dev/null and b/addons/sourcemod/plugins/store.smx differ
diff --git a/addons/sourcemod/plugins/thirdperson.smx b/addons/sourcemod/plugins/thirdperson.smx
new file mode 100644
index 0000000..78926fa
Binary files /dev/null and b/addons/sourcemod/plugins/thirdperson.smx differ
diff --git a/addons/sourcemod/scripting/include/admin.inc b/addons/sourcemod/scripting/include/admin.inc
new file mode 100644
index 0000000..40c5907
--- /dev/null
+++ b/addons/sourcemod/scripting/include/admin.inc
@@ -0,0 +1,631 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _admin_included
+ #endinput
+#endif
+#define _admin_included
+
+/**
+ * Access levels (flags) for admins.
+ */
+enum AdminFlag
+{
+ Admin_Reservation = 0, /**< Reserved slot */
+ Admin_Generic, /**< Generic admin abilities */
+ Admin_Kick, /**< Kick another user */
+ Admin_Ban, /**< Ban another user */
+ Admin_Unban, /**< Unban another user */
+ Admin_Slay, /**< Slay/kill/damage another user */
+ Admin_Changemap, /**< Change the map */
+ Admin_Convars, /**< Change basic convars */
+ Admin_Config, /**< Change configuration */
+ Admin_Chat, /**< Special chat privileges */
+ Admin_Vote, /**< Special vote privileges */
+ Admin_Password, /**< Set a server password */
+ Admin_RCON, /**< Use RCON */
+ Admin_Cheats, /**< Change sv_cheats and use its commands */
+ Admin_Root, /**< All access by default */
+ Admin_Custom1, /**< First custom flag type */
+ Admin_Custom2, /**< Second custom flag type */
+ Admin_Custom3, /**< Third custom flag type */
+ Admin_Custom4, /**< Fourth custom flag type */
+ Admin_Custom5, /**< Fifth custom flag type */
+ Admin_Custom6, /**< Sixth custom flag type */
+ /* --- */
+};
+
+#define AdminFlags_TOTAL 21 /**< Total number of admin flags */
+
+/**
+ * @section Bitwise values definitions for admin flags.
+ */
+#define ADMFLAG_RESERVATION (1<<0) /**< Convenience macro for Admin_Reservation as a FlagBit */
+#define ADMFLAG_GENERIC (1<<1) /**< Convenience macro for Admin_Generic as a FlagBit */
+#define ADMFLAG_KICK (1<<2) /**< Convenience macro for Admin_Kick as a FlagBit */
+#define ADMFLAG_BAN (1<<3) /**< Convenience macro for Admin_Ban as a FlagBit */
+#define ADMFLAG_UNBAN (1<<4) /**< Convenience macro for Admin_Unban as a FlagBit */
+#define ADMFLAG_SLAY (1<<5) /**< Convenience macro for Admin_Slay as a FlagBit */
+#define ADMFLAG_CHANGEMAP (1<<6) /**< Convenience macro for Admin_Changemap as a FlagBit */
+#define ADMFLAG_CONVARS (1<<7) /**< Convenience macro for Admin_Convars as a FlagBit */
+#define ADMFLAG_CONFIG (1<<8) /**< Convenience macro for Admin_Config as a FlagBit */
+#define ADMFLAG_CHAT (1<<9) /**< Convenience macro for Admin_Chat as a FlagBit */
+#define ADMFLAG_VOTE (1<<10) /**< Convenience macro for Admin_Vote as a FlagBit */
+#define ADMFLAG_PASSWORD (1<<11) /**< Convenience macro for Admin_Password as a FlagBit */
+#define ADMFLAG_RCON (1<<12) /**< Convenience macro for Admin_RCON as a FlagBit */
+#define ADMFLAG_CHEATS (1<<13) /**< Convenience macro for Admin_Cheats as a FlagBit */
+#define ADMFLAG_ROOT (1<<14) /**< Convenience macro for Admin_Root as a FlagBit */
+#define ADMFLAG_CUSTOM1 (1<<15) /**< Convenience macro for Admin_Custom1 as a FlagBit */
+#define ADMFLAG_CUSTOM2 (1<<16) /**< Convenience macro for Admin_Custom2 as a FlagBit */
+#define ADMFLAG_CUSTOM3 (1<<17) /**< Convenience macro for Admin_Custom3 as a FlagBit */
+#define ADMFLAG_CUSTOM4 (1<<18) /**< Convenience macro for Admin_Custom4 as a FlagBit */
+#define ADMFLAG_CUSTOM5 (1<<19) /**< Convenience macro for Admin_Custom5 as a FlagBit */
+#define ADMFLAG_CUSTOM6 (1<<20) /**< Convenience macro for Admin_Custom6 as a FlagBit */
+
+/**
+ * @endsection
+ */
+
+/**
+ * @section Hardcoded authentication methods
+ */
+#define AUTHMETHOD_STEAM "steam" /**< SteamID based authentication */
+#define AUTHMETHOD_IP "ip" /**< IP based authentication */
+#define AUTHMETHOD_NAME "name" /**< Name based authentication */
+
+/**
+ * @endsection
+ */
+
+/**
+ * Access override types.
+ */
+enum OverrideType
+{
+ Override_Command = 1, /**< Command */
+ Override_CommandGroup, /**< Command group */
+};
+
+/**
+ * Access override rules.
+ */
+enum OverrideRule
+{
+ Command_Deny = 0,
+ Command_Allow = 1,
+};
+
+/**
+ * DEPRECATED, do not use.
+ */
+enum ImmunityType
+{
+ Immunity_Default = 1, /**< Deprecated. */
+ Immunity_Global, /**< Deprecated. */
+};
+
+/**
+ * Identifies a unique entry in the group permissions cache. These are not Handles.
+ */
+enum GroupId
+{
+ INVALID_GROUP_ID = -1, /**< An invalid/non-existent group */
+};
+
+/**
+ * Identifies a unique entry in the admin permissions cache. These are not Handles.
+ */
+enum AdminId
+{
+ INVALID_ADMIN_ID = -1, /**< An invalid/non-existent admin */
+};
+
+/**
+ * Methods of computing access permissions.
+ */
+enum AdmAccessMode
+{
+ Access_Real, /**< Access the user has inherently */
+ Access_Effective, /**< Access the user has from their groups */
+};
+
+/**
+ * Represents the various cache regions.
+ */
+enum AdminCachePart
+{
+ AdminCache_Overrides = 0, /**< Global overrides */
+ AdminCache_Groups = 1, /**< All groups (automatically invalidates admins too) */
+ AdminCache_Admins = 2, /**< All admins */
+};
+
+/**
+ * Called when part of the cache needs to be rebuilt.
+ *
+ * @param part Part of the admin cache to rebuild.
+ */
+forward OnRebuildAdminCache(AdminCachePart:part);
+
+/**
+ * Tells the admin system to dump a portion of the cache.
+ *
+ * @param part Part of the cache to dump. Specifying groups also dumps admins.
+ * @param rebuild If true, the rebuild forwards will fire.
+ * @noreturn
+ */
+native DumpAdminCache(AdminCachePart:part, bool:rebuild);
+
+/**
+ * Adds a global command flag override. Any command registered with this name
+ * will assume the new flag. This is applied retroactively as well.
+ *
+ * @param cmd String containing command name (case sensitive).
+ * @param type Override type (specific command or group).
+ * @param flags New admin flag.
+ * @noreturn
+ */
+native AddCommandOverride(const String:cmd[], OverrideType:type, flags);
+
+/**
+ * Returns a command override.
+ *
+ * @param cmd String containing command name (case sensitive).
+ * @param type Override type (specific command or group).
+ * @param flags By-reference cell to store the flag (undefined if not found).
+ * @return True if there is an override, false otherwise.
+ */
+native bool:GetCommandOverride(const String:cmd[], OverrideType:type, &flags);
+
+/**
+ * Unsets a command override.
+ *
+ * @param cmd String containing command name (case sensitive).
+ * @param type Override type (specific command or group).
+ * @noreturn
+ */
+native UnsetCommandOverride(const String:cmd[], OverrideType:type);
+
+/**
+ * Adds a new group. Name must be unique.
+ *
+ * @param group_name String containing the group name.
+ * @return A new group id, INVALID_GROUP_ID if it already exists.
+ */
+native GroupId:CreateAdmGroup(const String:group_name[]);
+
+/**
+ * Finds a group by name.
+ *
+ * @param group_name String containing the group name.
+ * @return A group id, or INVALID_GROUP_ID if not found.
+ */
+native GroupId:FindAdmGroup(const String:group_name[]);
+
+/**
+ * Adds or removes a flag from a group's flag set.
+ * @note These are called "add flags" because they add to a user's flags.
+ *
+ * @param id Group id.
+ * @param flag Admin flag to toggle.
+ * @param enabled True to set the flag, false to unset/disable.
+ * @noreturn
+ */
+native SetAdmGroupAddFlag(GroupId:id, AdminFlag:flag, bool:enabled);
+
+/**
+ * Gets the set value of an add flag on a group's flag set.
+ * @note These are called "add flags" because they add to a user's flags.
+ *
+ * @param id Group id.
+ * @param flag Admin flag to retrieve.
+ * @return True if enabled, false otherwise,
+ */
+native bool:GetAdmGroupAddFlag(GroupId:id, AdminFlag:flag);
+
+/**
+ * Returns the flag set that is added to a user from their group.
+ * @note These are called "add flags" because they add to a user's flags.
+ *
+ * @param id GroupId of the group.
+ * @return Bitstring containing the flags enabled.
+ */
+native GetAdmGroupAddFlags(GroupId:id);
+
+/**
+ * @deprecated Functionality removed.
+ */
+#pragma deprecated Use SetAdmGroupImmunityLevel() instead.
+native SetAdmGroupImmunity(GroupId:id, ImmunityType:type, bool:enabled);
+
+/**
+ * @deprecated Functionality removed.
+ */
+#pragma deprecated Use GetAdmGroupImmunityLevel() instead.
+native bool:GetAdmGroupImmunity(GroupId:id, ImmunityType:type);
+
+/**
+ * Adds immunity to a specific group.
+ *
+ * @param id Group id.
+ * @param other_id Group id to receive immunity to.
+ * @noreturn
+ */
+native SetAdmGroupImmuneFrom(GroupId:id, GroupId:other_id);
+
+/**
+ * Returns the number of specific group immunities.
+ *
+ * @param id Group id.
+ * @return Number of group immunities.
+ */
+native GetAdmGroupImmuneCount(GroupId:id);
+
+/**
+ * Returns a group that this group is immune to given an index.
+ *
+ * @param id Group id.
+ * @param number Index from 0 to N-1, from GetAdmGroupImmuneCount().
+ * @return GroupId that this group is immune to, or INVALID_GROUP_ID on failure.
+ */
+native GroupId:GetAdmGroupImmuneFrom(GroupId:id, number);
+
+/**
+ * Adds a group-specific override type.
+ *
+ * @param id Group id.
+ * @param name String containing command name (case sensitive).
+ * @param type Override type (specific command or group).
+ * @param rule Override allow/deny setting.
+ * @noreturn
+ */
+native AddAdmGroupCmdOverride(GroupId:id, const String:name[], OverrideType:type, OverrideRule:rule);
+
+/**
+ * Retrieves a group-specific command override.
+ *
+ * @param id Group id.
+ * @param name String containing command name (case sensitive).
+ * @param type Override type (specific command or group).
+ * @param rule Optional pointer to store allow/deny setting.
+ * @return True if an override exists, false otherwise.
+ */
+native bool:GetAdmGroupCmdOverride(GroupId:id, const String:name[], OverrideType:type, &OverrideRule:rule);
+
+/**
+ * Registers an authentication identity type. You normally never need to call this except for
+ * very specific systems.
+ *
+ * @param name Codename to use for your authentication type.
+ * @noreturn
+ */
+native RegisterAuthIdentType(const String:name[]);
+
+/**
+ * Creates a new admin entry in the permissions cache.
+ *
+ * @param name Name for this entry (does not have to be unique).
+ * Specify an empty string for an anonymous admin.
+ */
+native AdminId:CreateAdmin(const String:name[]="");
+
+/**
+ * Retrieves an admin's user name as made with CreateAdmin().
+ *
+ * @note This function can return UTF-8 strings, and will safely chop UTF-8 strings.
+ *
+ * @param id AdminId of the admin.
+ * @param name String buffer to store name.
+ * @param maxlength Maximum size of string buffer.
+ * @return Number of bytes written.
+ */
+native GetAdminUsername(AdminId:id, String:name[], maxlength);
+
+/**
+ * Binds an admin to an identity for fast lookup later on. The bind must be unique.
+ *
+ * @param id AdminId of the admin.
+ * @param auth Auth method to use, predefined or from RegisterAuthIdentType().
+ * @param ident String containing the arbitrary, unique identity.
+ * @return True on success, false if the auth method was not found,
+ * or ident was already taken.
+ */
+native bool:BindAdminIdentity(AdminId:id, const String:auth[], const String:ident[]);
+
+/**
+ * Sets whether or not a flag is enabled on an admin.
+ *
+ * @param id AdminId index of the admin.
+ * @param flag Admin flag to use.
+ * @param enabled True to enable, false to disable.
+ * @noreturn
+ */
+native SetAdminFlag(AdminId:id, AdminFlag:flag, bool:enabled);
+
+/**
+ * Returns whether or not a flag is enabled on an admin.
+ *
+ * @param id AdminId index of the admin.
+ * @param flag Admin flag to use.
+ * @param mode Access mode to check.
+ * @return True if enabled, false otherwise.
+ */
+native bool:GetAdminFlag(AdminId:id, AdminFlag:flag, AdmAccessMode:mode=Access_Effective);
+
+/**
+ * Returns the bitstring of access flags on an admin.
+ *
+ * @param id AdminId index of the admin.
+ * @param mode Access mode to use.
+ * @return A bitstring containing which flags are enabled.
+ */
+native GetAdminFlags(AdminId:id, AdmAccessMode:mode);
+
+/**
+ * Adds a group to an admin's inherited group list. Any flags the group has
+ * will be added to the admin's effective flags.
+ *
+ * @param id AdminId index of the admin.
+ * @param gid GroupId index of the group.
+ * @return True on success, false on invalid input or duplicate membership.
+ */
+native bool:AdminInheritGroup(AdminId:id, GroupId:gid);
+
+/**
+ * Returns the number of groups this admin is a member of.
+ *
+ * @param id AdminId index of the admin.
+ * @return Number of groups this admin is a member of.
+ */
+native GetAdminGroupCount(AdminId:id);
+
+/**
+ * Returns group information from an admin.
+ *
+ * @param id AdminId index of the admin.
+ * @param index Group number to retrieve, from 0 to N-1, where N
+ * is the value of GetAdminGroupCount(id).
+ * @param name Buffer to store the group's name.
+ * Note: This will safely chop UTF-8 strings.
+ * @param maxlength Maximum size of the output name buffer.
+ * @return A GroupId index and a name pointer, or
+ * INVALID_GROUP_ID and NULL if an error occurred.
+*/
+native GroupId:GetAdminGroup(AdminId:id, index, const String:name[], maxlength);
+
+/**
+ * Sets a password on an admin.
+ *
+ * @param id AdminId index of the admin.
+ * @param password String containing the password.
+ * @noreturn
+ */
+native SetAdminPassword(AdminId:id, const String:password[]);
+
+/**
+ * Gets an admin's password.
+ *
+ * @param id AdminId index of the admin.
+ * @param buffer Optional buffer to store the admin's password.
+ * @param maxlength Maximum size of the output name buffer.
+ * Note: This will safely chop UTF-8 strings.
+ * @return True if there was a password set, false otherwise.
+ */
+native bool:GetAdminPassword(AdminId:id, String:buffer[]="", maxlength=0);
+
+/**
+ * Attempts to find an admin by an auth method and an identity.
+ *
+ * @param auth Auth method to try.
+ * @param identity Identity string to look up.
+ * @return An AdminId index if found, INVALID_ADMIN_ID otherwise.
+ */
+native AdminId:FindAdminByIdentity(const String:auth[], const String:identity[]);
+
+/**
+ * Removes an admin entry from the cache.
+ *
+ * @note This will remove any bindings to a specific user.
+ *
+ * @param id AdminId index to remove/invalidate.
+ * @return True on success, false otherwise.
+ */
+native bool:RemoveAdmin(AdminId:id);
+
+/**
+ * Converts a flag bit string to a bit array.
+ *
+ * @param bits Bit string containing the flags.
+ * @param array Array to write the flags to. Enabled flags will be 'true'.
+ * @param maxSize Maximum number of flags the array can store.
+ * @return Number of flags written.
+ */
+native FlagBitsToBitArray(bits, bool:array[], maxSize);
+
+/**
+ * Converts a flag array to a bit string.
+ *
+ * @param array Array containing true or false for each AdminFlag.
+ * @param maxSize Maximum size of the flag array.
+ * @return A bit string composed of the array bits.
+ */
+native FlagBitArrayToBits(const bool:array[], maxSize);
+
+/**
+ * Converts an array of flags to bits.
+ *
+ * @param array Array containing flags that are enabled.
+ * @param numFlags Number of flags in the array.
+ * @return A bit string composed of the array flags.
+ */
+native FlagArrayToBits(const AdminFlag:array[], numFlags);
+
+/**
+ * Converts a bit string to an array of flags.
+ *
+ * @param bits Bit string containing the flags.
+ * @param array Output array to write flags.
+ * @param maxSize Maximum size of the flag array.
+ * @return Number of flags written.
+ */
+native FlagBitsToArray(bits, AdminFlag:array[], maxSize);
+
+/**
+ * Finds a flag by its string name.
+ *
+ * @param name Flag name (like "kick"), case sensitive.
+ * @param flag Variable to store flag in.
+ * @return True on success, false if not found.
+ */
+native bool:FindFlagByName(const String:name[], &AdminFlag:flag);
+
+/**
+ * Finds a flag by a given character.
+ *
+ * @param c Flag ASCII character/token.
+ * @param flag Variable to store flag in.
+ * @return True on success, false if not found.
+ */
+native bool:FindFlagByChar(c, &AdminFlag:flag);
+
+/**
+ * Finds a flag char by a gived admin flag.
+ *
+ * @param flag Flag to look up.
+ * @param c Variable to store flag char.
+ * @return True on success, false if not found.
+ */
+native bool:FindFlagChar(AdminFlag:flag, &c);
+
+/**
+ * Converts a string of flag characters to a bit string.
+ *
+ * @param flags Flag ASCII string.
+ * @param numchars Optional variable to store the number of bytes read.
+ * @return Bit string of ADMFLAG values.
+ */
+native ReadFlagString(const String:flags[], &numchars=0);
+
+/**
+ * Tests whether one admin can target another.
+ *
+ * The heuristics for this check are as follows:
+ * 0. If the targeting AdminId is INVALID_ADMIN_ID, targeting fails.
+ * 1. If the targeted AdminId is INVALID_ADMIN_ID, targeting succeeds.
+ * 2. If the targeted AdminId is the same as the targeting AdminId,
+ * (self) targeting succeeds.
+ * 3. If the targeting admin is root, targeting succeeds.
+ * 4. If the targeted admin has access higher (as interpreted by
+ * (sm_immunity_mode) than the targeting admin, then targeting fails.
+ * 5. If the targeted admin has specific immunity from the
+ * targeting admin via group immunities, targeting fails.
+ * 6. Targeting succeeds.
+ *
+ * @param admin Admin doing the targetting (may be INVALID_ADMIN_ID).
+ * @param target Target admin (may be INVALID_ADMIN_ID).
+ * @return True if targetable, false if immune.
+ */
+native CanAdminTarget(AdminId:admin, AdminId:target);
+
+/**
+ * Creates an admin auth method. This does not need to be called more than once
+ * per method, ever.
+ *
+ * @param method Name of the authentication method.
+ * @return True on success, false on failure.
+ */
+native bool:CreateAuthMethod(const String:method[]);
+
+/**
+ * Sets a group's immunity level.
+ *
+ * @param gid Group Id.
+ * @param level Immunity level value.
+ * @return Old immunity level value.
+ */
+native SetAdmGroupImmunityLevel(GroupId:gid, level);
+
+/**
+ * Gets a group's immunity level (defaults to 0).
+ *
+ * @param gid Group Id.
+ * @return Immunity level value.
+ */
+native GetAdmGroupImmunityLevel(GroupId:gid);
+
+/**
+ * Sets an admin's immunity level.
+ *
+ * @param id Admin Id.
+ * @param level Immunity level value.
+ * @return Old immunity level value.
+ */
+native SetAdminImmunityLevel(AdminId:id, level);
+
+/**
+ * Gets an admin's immunity level.
+ *
+ * @param id Admin Id.
+ * @return Immunity level value.
+ */
+native GetAdminImmunityLevel(AdminId:id);
+
+/**
+ * Converts a flag to its single bit.
+ *
+ * @param flag Flag to convert.
+ * @return Bit representation of the flag.
+ */
+stock FlagToBit(AdminFlag:flag)
+{
+ return (1<<_:flag);
+}
+
+/**
+ * Converts a bit to an AdminFlag.
+ *
+ * @param bit Bit to convert.
+ * @param flag Stores the converted flag by reference.
+ * @return True on success, false otherwise.
+ */
+stock bool:BitToFlag(bit, &AdminFlag:flag)
+{
+ new AdminFlag:array[1];
+
+ if (FlagBitsToArray(bit, array, 1))
+ {
+ flag = array[0];
+ return true;
+ }
+
+ return false;
+}
+
diff --git a/addons/sourcemod/scripting/include/adminmenu.inc b/addons/sourcemod/scripting/include/adminmenu.inc
new file mode 100644
index 0000000..f96eb2a
--- /dev/null
+++ b/addons/sourcemod/scripting/include/adminmenu.inc
@@ -0,0 +1,154 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _adminmenu_included
+ #endinput
+#endif
+#define _adminmenu_included
+
+/* Decide whether topmenus should be required */
+#if !defined REQUIRE_PLUGIN
+ #if defined REQUIRE_EXTENSIONS
+ #define TEMP_REQUIRE_EXTENSIONS
+ #undef REQUIRE_EXTENSIONS
+ #endif
+#endif
+
+#include
+
+/* Restore old REQUIRE_EXTENSIONS value if necessary */
+#if defined TEMP_REQUIRE_EXTENSIONS
+ #define REQUIRE_EXTENSIONS
+ #undef TEMP_REQUIRE_EXTENSIONS
+#endif
+
+/** Category for player commands. */
+#define ADMINMENU_PLAYERCOMMANDS "PlayerCommands"
+/** Category for server commands. */
+#define ADMINMENU_SERVERCOMMANDS "ServerCommands"
+/** Category for voting commands. */
+#define ADMINMENU_VOTINGCOMMANDS "VotingCommands"
+
+/**
+ * Called when the admin menu is created and 3rd party plugins can grab
+ * the Handle or add categories.
+ *
+ * @param topmenu Handle to the admin menu's TopMenu.
+ * @noreturn
+ */
+forward OnAdminMenuCreated(Handle:topmenu);
+
+/**
+ * Called when the admin menu is ready to have items added.
+ *
+ * @param topmenu Handle to the admin menu's TopMenu.
+ * @noreturn
+ */
+forward OnAdminMenuReady(Handle:topmenu);
+
+/**
+ * Retrieves the Handle to the admin top menu.
+ *
+ * @return Handle to the admin menu's TopMenu,
+ * or INVALID_HANDLE if not created yet.
+ */
+native Handle:GetAdminTopMenu();
+
+/**
+ * Adds targets to an admin menu.
+ *
+ * Each client is displayed as: name (userid)
+ * Each item contains the userid as a string for its info.
+ *
+ * @param menu Menu Handle.
+ * @param source_client Source client, or 0 to ignore immunity.
+ * @param in_game_only True to only select in-game players.
+ * @param alive_only True to only select alive players.
+ * @return Number of clients added.
+ */
+native AddTargetsToMenu(Handle:menu,
+ source_client,
+ bool:in_game_only=true,
+ bool:alive_only=false);
+
+/**
+ * Adds targets to an admin menu.
+ *
+ * Each client is displayed as: name (userid)
+ * Each item contains the userid as a string for its info.
+ *
+ * @param menu Menu Handle.
+ * @param source_client Source client, or 0 to ignore immunity.
+ * @param flags COMMAND_FILTER flags from commandfilters.inc.
+ * @return Number of clients added.
+ */
+native AddTargetsToMenu2(Handle:menu, source_client, flags);
+
+/**
+ * Re-displays the admin menu to a client after selecting an item.
+ * Auto-aborts if the Handle is invalid.
+ *
+ * @param topmenu TopMenu Handle.
+ * @param client Client index.
+ * @return True on success, false on failure.
+ */
+stock bool:RedisplayAdminMenu(Handle:topmenu, client)
+{
+ if (topmenu == INVALID_HANDLE)
+ {
+ return false;
+ }
+
+ return DisplayTopMenu(topmenu, client, TopMenuPosition_LastCategory);
+}
+
+/* DO NOT EDIT BELOW THIS LINE */
+
+public SharedPlugin:__pl_adminmenu =
+{
+ name = "adminmenu",
+ file = "adminmenu.smx",
+#if defined REQUIRE_PLUGIN
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+#if !defined REQUIRE_PLUGIN
+public __pl_adminmenu_SetNTVOptional()
+{
+ MarkNativeAsOptional("GetAdminTopMenu");
+ MarkNativeAsOptional("AddTargetsToMenu");
+ MarkNativeAsOptional("AddTargetsToMenu2");
+}
+#endif
diff --git a/addons/sourcemod/scripting/include/adt.inc b/addons/sourcemod/scripting/include/adt.inc
new file mode 100644
index 0000000..75051bf
--- /dev/null
+++ b/addons/sourcemod/scripting/include/adt.inc
@@ -0,0 +1,40 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _adt_included
+ #endinput
+#endif
+#define _adt_included
+
+#include
+#include
+#include
diff --git a/addons/sourcemod/scripting/include/adt_array.inc b/addons/sourcemod/scripting/include/adt_array.inc
new file mode 100644
index 0000000..798ae55
--- /dev/null
+++ b/addons/sourcemod/scripting/include/adt_array.inc
@@ -0,0 +1,283 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _adt_array_included
+ #endinput
+#endif
+#define _adt_array_included
+
+/**
+ * Given a maximum string size (including the null terminator),
+ * returns the number of cells required to fit that string.
+ *
+ * @param size Number of bytes.
+ * @return Minimum number of cells required to fit the byte count.
+ */
+stock ByteCountToCells(size)
+{
+ if (!size)
+ {
+ return 1;
+ }
+
+ return (size + 3) / 4;
+}
+
+/**
+ * Creates a dynamic global cell array. While slower than a normal array,
+ * it can be used globally AND dynamically, which is otherwise impossible.
+ *
+ * The contents of the array are uniform; i.e. storing a string at index X
+ * and then retrieving it as an integer is NOT the same as StringToInt()!
+ * The "blocksize" determines how many cells each array slot has; it cannot
+ * be changed after creation.
+ *
+ * @param blocksize The number of cells each member of the array can
+ * hold. For example, 32 cells is equivalent to:
+ * new Array[X][32]
+ * @param startsize Initial size of the array. Note that data will
+ * NOT be auto-intialized.
+ * @return New Handle to the array object.
+ */
+native Handle:CreateArray(blocksize=1, startsize=0);
+
+/**
+ * Clears an array of all entries. This is the same as ResizeArray(0).
+ *
+ * @param array Array Handle.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native ClearArray(Handle:array);
+
+/**
+ * Clones an array, returning a new handle with the same size and data. This should NOT
+ * be confused with CloneHandle. This is a completely new handle with the same data but
+ * no relation to the original. You MUST close it.
+ *
+ * @param array Array handle to be cloned
+ * @return New handle to the cloned array object
+ * @error Invalid Handle
+ */
+native Handle:CloneArray(Handle:array);
+
+/**
+ * Resizes an array. If the size is smaller than the current size,
+ * the array is truncated.
+ *
+ * @param array Array Handle.
+ * @param newsize New size.
+ * @noreturn
+ * @error Invalid Handle or out of memory.
+ */
+native bool:ResizeArray(Handle:array, newsize);
+
+/**
+ * Returns the array size.
+ *
+ * @param array Array Handle.
+ * @return Number of elements in the array.
+ * @error Invalid Handle.
+ */
+native GetArraySize(Handle:array);
+
+/**
+ * Pushes a value onto the end of an array, adding a new index.
+ *
+ * This may safely be used even if the array has a blocksize
+ * greater than 1.
+ *
+ * @param array Array Handle.
+ * @param value Value to push.
+ * @return Index of the new entry.
+ * @error Invalid Handle or out of memory.
+ */
+native PushArrayCell(Handle:array, any:value);
+
+/**
+ * Pushes a string onto the end of an array, truncating it
+ * if it is too big.
+ *
+ * @param array Array Handle.
+ * @param value String to push.
+ * @return Index of the new entry.
+ * @error Invalid Handle or out of memory.
+ */
+native PushArrayString(Handle:array, const String:value[]);
+
+/**
+ * Pushes an array of cells onto the end of an array. The cells
+ * are pushed as a block (i.e. the entire array sits at the index),
+ * rather than pushing each cell individually.
+ *
+ * @param array Array Handle.
+ * @param values Block of values to copy.
+ * @param size If not set, the number of elements copied from the array
+ * will be equal to the blocksize. If set higher than the
+ * blocksize, the operation will be truncated.
+ * @return Index of the new entry.
+ * @error Invalid Handle or out of memory.
+ */
+native PushArrayArray(Handle:array, const any:values[], size=-1);
+
+/**
+ * Retrieves a cell value from an array.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array.
+ * @param block Optionally specify which block to read from
+ * (useful if the blocksize > 0).
+ * @param asChar Optionally read as a byte instead of a cell.
+ * @return Value read.
+ * @error Invalid Handle, invalid index, or invalid block.
+ */
+native any:GetArrayCell(Handle:array, index, block=0, bool:asChar=false);
+
+/**
+ * Retrieves a string value from an array.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array.
+ * @param buffer Buffer to copy to.
+ * @param maxlength Maximum size of the buffer.
+ * @return Number of characters copied.
+ * @error Invalid Handle or invalid index.
+ */
+native GetArrayString(Handle:array, index, String:buffer[], maxlength);
+
+/**
+ * Retrieves an array of cells from an array.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array.
+ * @param buffer Buffer to store the array in.
+ * @param size If not set, assumes the buffer size is equal to the
+ * blocksize. Otherwise, the size passed is used.
+ * @return Number of cells copied.
+ * @error Invalid Handle or invalid index.
+ */
+native GetArrayArray(Handle:array, index, any:buffer[], size=-1);
+
+/**
+ * Sets a cell value in an array.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array.
+ * @param value Cell value to set.
+ * @param block Optionally specify which block to write to
+ * (useful if the blocksize > 0).
+ * @param asChar Optionally set as a byte instead of a cell.
+ * @noreturn
+ * @error Invalid Handle, invalid index, or invalid block.
+ */
+native SetArrayCell(Handle:array, index, any:value, block=0, bool:asChar=false);
+
+/**
+ * Sets a string value in an array.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array.
+ * @param value String value to set.
+ * @return Number of characters copied.
+ * @error Invalid Handle or invalid index.
+ */
+native SetArrayString(Handle:array, index, const String:value[]);
+
+/**
+ * Sets an array of cells in an array.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array.
+ * @param values Array to copy.
+ * @param size If not set, assumes the buffer size is equal to the
+ * blocksize. Otherwise, the size passed is used.
+ * @return Number of cells copied.
+ * @error Invalid Handle or invalid index.
+ */
+native SetArrayArray(Handle:array, index, const any:values[], size=-1);
+
+/**
+ * Shifts an array up. All array contents after and including the given
+ * index are shifted up by one, and the given index is then "free."
+ * After shifting, the contents of the given index is undefined.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array to shift up from.
+ * @noreturn
+ * @error Invalid Handle or invalid index.
+ */
+native ShiftArrayUp(Handle:array, index);
+
+/**
+ * Removes an array index, shifting the entire array down from that position
+ * on. For example, if item 8 of 10 is removed, the last 3 items will then be
+ * (6,7,8) instead of (7,8,9), and all indexes before 8 will remain unchanged.
+ *
+ * @param array Array Handle.
+ * @param index Index in the array to remove at.
+ * @noreturn
+ * @error Invalid Handle or invalid index.
+ */
+native RemoveFromArray(Handle:array, index);
+
+/**
+ * Swaps two items in the array.
+ *
+ * @param array Array Handle.
+ * @param index1 First index.
+ * @param index2 Second index.
+ * @noreturn
+ * @error Invalid Handle or invalid index.
+ */
+native SwapArrayItems(Handle:array, index1, index2);
+
+/**
+ * Returns the index for the first occurance of the provided string. If the string
+ * cannot be located, -1 will be returned.
+ *
+ * @param array Array Handle.
+ * @param item String to search for
+ * @return Array index, or -1 on failure
+ * @error Invalid Handle
+ */
+native FindStringInArray(Handle:array, const String:item[]);
+
+/**
+ * Returns the index for the first occurance of the provided value. If the value
+ * cannot be located, -1 will be returned.
+ *
+ * @param array Array Handle.
+ * @param item Value to search for
+ * @return Array index, or -1 on failure
+ * @error Invalid Handle
+ */
+native FindValueInArray(Handle:array, any:item);
diff --git a/addons/sourcemod/scripting/include/adt_stack.inc b/addons/sourcemod/scripting/include/adt_stack.inc
new file mode 100644
index 0000000..54029c3
--- /dev/null
+++ b/addons/sourcemod/scripting/include/adt_stack.inc
@@ -0,0 +1,154 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _adt_stack_included
+ #endinput
+#endif
+#define _adt_stack_included
+
+/**
+ * Creates a stack structure. A stack is a LIFO (last in, first out)
+ * vector (array) of items. It has O(1) insertion and O(1) removal.
+ *
+ * Stacks have two operations: Push (adding an item) and Pop (removes
+ * items in reverse-push order).
+ *
+ * The contents of the stack are uniform; i.e. storing a string and then
+ * retrieving it as an integer is NOT the same as StringToInt()!
+ *
+ * The "blocksize" determines how many cells each slot has; it cannot
+ * be changed after creation.
+ *
+ * @param blocksize The number of cells each entry in the stack can
+ * hold. For example, 32 cells is equivalent to:
+ * new Array[X][32]
+ * @return New stack Handle.
+ */
+native Handle:CreateStack(blocksize=1);
+
+/**
+ * Pushes a value onto the end of the stack, adding a new index.
+ *
+ * This may safely be used even if the stack has a blocksize
+ * greater than 1.
+ *
+ * @param stack Stack Handle.
+ * @param value Value to push.
+ * @noreturn
+ * @error Invalid Handle or out of memory.
+ */
+native PushStackCell(Handle:stack, any:value);
+
+/**
+ * Pushes a string onto the end of a stack, truncating it if it is
+ * too big.
+ *
+ * @param stack Stack Handle.
+ * @param value String to push.
+ * @noreturn
+ * @error Invalid Handle or out of memory.
+ */
+native PushStackString(Handle:stack, const String:value[]);
+
+/**
+ * Pushes an array of cells onto the end of a stack. The cells
+ * are pushed as a block (i.e. the entire array takes up one stack slot),
+ * rather than pushing each cell individually.
+ *
+ * @param stack Stack Handle.
+ * @param values Block of values to copy.
+ * @param size If not set, the number of elements copied from the array
+ * will be equal to the blocksize. If set higher than the
+ * blocksize, the operation will be truncated.
+ * @noreturn
+ * @error Invalid Handle or out of memory.
+ */
+native PushStackArray(Handle:stack, const any:values[], size=-1);
+
+/**
+ * Pops a cell value from a stack.
+ *
+ * @param stack Stack Handle.
+ * @param value Variable to store the value.
+ * @param block Optionally specify which block to read from
+ * (useful if the blocksize > 0).
+ * @param asChar Optionally read as a byte instead of a cell.
+ * @return True on success, false if the stack is empty.
+ * @error Invalid Handle.
+ */
+native bool:PopStackCell(Handle:stack, &any:value, block=0, bool:asChar=false);
+
+/**
+ * Pops a string value from a stack.
+ *
+ * @param stack Stack Handle.
+ * @param buffer Buffer to store string.
+ * @param maxlength Maximum size of the buffer.
+ * @return True on success, false if the stack is empty.
+ * @error Invalid Handle.
+ */
+native bool:PopStackString(Handle:stack, String:buffer[], maxlength, &written=0);
+
+/**
+ * Pops an array of cells from a stack.
+ *
+ * @param stack Stack Handle.
+ * @param buffer Buffer to store the array in.
+ * @param size If not set, assumes the buffer size is equal to the
+ * blocksize. Otherwise, the size passed is used.
+ * @return True on success, false if the stack is empty.
+ * @error Invalid Handle.
+ */
+native bool:PopStackArray(Handle:stack, any:buffer[], size=-1);
+
+/**
+ * Checks if a stack is empty.
+ *
+ * @param stack Stack Handle.
+ * @return True if empty, false if not empty.
+ * @error Invalid Handle.
+ */
+native bool:IsStackEmpty(Handle:stack);
+
+/**
+ * Pops a value off a stack, ignoring it completely.
+ *
+ * @param stack Stack Handle.
+ * @return True if something was popped, false otherwise.
+ * @error Invalid Handle.
+ */
+stock PopStack(Handle:stack)
+{
+ new value;
+
+ return PopStackCell(stack, value);
+}
diff --git a/addons/sourcemod/scripting/include/adt_trie.inc b/addons/sourcemod/scripting/include/adt_trie.inc
new file mode 100644
index 0000000..4e9f120
--- /dev/null
+++ b/addons/sourcemod/scripting/include/adt_trie.inc
@@ -0,0 +1,156 @@
+/**
+ * vim: set ts=4 sw=4 tw=99 noet :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _adt_trie_included
+ #endinput
+#endif
+#define _adt_trie_included
+
+/**
+ * Creates a hash map. A hash map is a container that can map strings (called
+ * "keys") to arbitrary values (cells, arrays, or strings). Keys in a hash map
+ * are unique. That is, there is at most one entry in the map for a given key.
+ *
+ * Insertion, deletion, and lookup in a hash map are all considered to be fast
+ * operations, amortized to O(1), or constant time.
+ *
+ * The word "Trie" in this API is historical. As of SourceMod 1.6, tries have
+ * been internally replaced with hash tables, which have O(1) insertion time
+ * instead of O(n).
+ *
+ * @return New Map Handle, which must be freed via CloseHandle().
+ */
+native Handle:CreateTrie();
+
+/**
+ * Sets a value in a hash map, either inserting a new entry or replacing an old one.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @param value Value to store at this key.
+ * @param replace If false, operation will fail if the key is already set.
+ * @return True on success, false on failure.
+ * @error Invalid Handle.
+ */
+native bool:SetTrieValue(Handle:map, const String:key[], any:value, bool:replace=true);
+
+/**
+ * Sets an array value in a Map, either inserting a new entry or replacing an old one.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @param array Array to store.
+ * @param num_items Number of items in the array.
+ * @param replace If false, operation will fail if the key is already set.
+ * @return True on success, false on failure.
+ * @error Invalid Handle.
+ */
+native bool:SetTrieArray(Handle:map, const String:key[], const any:array[], num_items, bool:replace=true);
+
+/**
+ * Sets a string value in a Map, either inserting a new entry or replacing an old one.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @param value String to store.
+ * @param replace If false, operation will fail if the key is already set.
+ * @return True on success, false on failure.
+ * @error Invalid Handle.
+ */
+native bool:SetTrieString(Handle:map, const String:key[], const String:value[], bool:replace=true);
+
+/**
+ * Retrieves a value in a Map.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @param value Variable to store value.
+ * @return True on success. False if the key is not set, or the key is set
+ * as an array or string (not a value).
+ * @error Invalid Handle.
+ */
+native bool:GetTrieValue(Handle:map, const String:key[], &any:value);
+
+/**
+ * Retrieves an array in a Map.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @param array Buffer to store array.
+ * @param max_size Maximum size of array buffer.
+ * @param size Optional parameter to store the number of elements written to the buffer.
+ * @return True on success. False if the key is not set, or the key is set
+ * as a value or string (not an array).
+ * @error Invalid Handle.
+ */
+native bool:GetTrieArray(Handle:map, const String:key[], any:array[], max_size, &size=0);
+
+/**
+ * Retrieves a string in a Map.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @param value Buffer to store value.
+ * @param max_size Maximum size of string buffer.
+ * @param size Optional parameter to store the number of bytes written to the buffer.
+ * @return True on success. False if the key is not set, or the key is set
+ * as a value or array (not a string).
+ * @error Invalid Handle.
+ */
+native bool:GetTrieString(Handle:map, const String:key[], String:value[], max_size, &size=0);
+
+/**
+ * Removes a key entry from a Map.
+ *
+ * @param map Map Handle.
+ * @param key Key string.
+ * @return True on success, false if the value was never set.
+ * @error Invalid Handle.
+ */
+native RemoveFromTrie(Handle:map, const String:key[]);
+
+/**
+ * Clears all entries from a Map.
+ *
+ * @param map Map Handle.
+ * @error Invalid Handle.
+ */
+native ClearTrie(Handle:map);
+
+/**
+ * Retrieves the number of elements in a map.
+ *
+ * @param map Map Handle.
+ * @return Number of elements in the trie.
+ * @error Invalid Handle.
+ */
+native GetTrieSize(Handle:map);
diff --git a/addons/sourcemod/scripting/include/banning.inc b/addons/sourcemod/scripting/include/banning.inc
new file mode 100644
index 0000000..038b113
--- /dev/null
+++ b/addons/sourcemod/scripting/include/banning.inc
@@ -0,0 +1,157 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _banning_included
+ #endinput
+#endif
+#define _banning_included
+
+#define BANFLAG_AUTO (1<<0) /**< Auto-detects whether to ban by steamid or IP */
+#define BANFLAG_IP (1<<1) /**< Always ban by IP address */
+#define BANFLAG_AUTHID (1<<2) /**< Always ban by authstring (for BanIdentity) if possible */
+#define BANFLAG_NOKICK (1<<3) /**< Does not kick the client */
+
+/**
+ * Called for calls to BanClient() with a non-empty command.
+ *
+ * @param client Client being banned.
+ * @param time Time the client is being banned for (0 = permanent).
+ * @param flags One if AUTHID or IP will be enabled. If AUTO is also
+ * enabled, it means Core autodetected which to use.
+ * @param reason Reason passed via BanClient().
+ * @param kick_message Kick message passed via BanClient().
+ * @param command Command string to identify the ban source.
+ * @param source Source value passed via BanClient().
+ * @return Plugin_Handled to block the actual server banning.
+ * Kicking will still occur.
+ */
+forward Action:OnBanClient(client,
+ time,
+ flags,
+ const String:reason[],
+ const String:kick_message[],
+ const String:command[],
+ any:source);
+
+/**
+ * Called for calls to BanIdentity() with a non-empty command.
+ *
+ * @param identity Identity string being banned (authstring or ip).
+ * @param time Time the client is being banned for (0 = permanent).
+ * @param flags Ban flags (only IP or AUTHID are valid here).
+ * @param reason Reason passed via BanIdentity().
+ * @param command Command string to identify the ban source.
+ * @param source Source value passed via BanIdentity().
+ * @return Plugin_Handled to block the actual server banning.
+ */
+forward Action:OnBanIdentity(const String:identity[],
+ time,
+ flags,
+ const String:reason[],
+ const String:command[],
+ any:source);
+
+/**
+ * Called for calls to RemoveBan() with a non-empty command.
+ *
+ * @param identity Identity string being banned (authstring or ip).
+ * @param flags Ban flags (only IP or AUTHID are valid here).
+ * @param command Command string to identify the ban source.
+ * @param source Source value passed via BanIdentity().
+ * @return Plugin_Handled to block the actual server banning.
+ */
+forward Action:OnRemoveBan(const String:identity[],
+ flags,
+ const String:command[],
+ any:source);
+
+/**
+ * Bans a client.
+ *
+ * @param client Client being banned.
+ * @param time Time (in minutes) to ban (0 = permanent).
+ * @param flags Flags for controlling the ban mechanism. If AUTHID
+ * is set and no AUTHID is available, the ban will fail
+ * unless AUTO is also flagged.
+ * @param reason Reason to ban the client for.
+ * @param kick_message Message to display to the user when kicking.
+ * @param command Command string to identify the source. If this is left
+ * empty, then the OnBanClient forward will not be called.
+ * @param source A source value that could be interpreted as a player
+ * index of any sort (not actually checked by Core).
+ * @return True on success, false on failure.
+ * @error Invalid client index or client not in game.
+ */
+native bool:BanClient(client,
+ time,
+ flags,
+ const String:reason[],
+ const String:kick_message[]="",
+ const String:command[]="",
+ any:source=0);
+
+/**
+ * Bans an identity (either an IP address or auth string).
+ *
+ * @param identity String to ban (ip or authstring).
+ * @param time Time to ban for (0 = permanent).
+ * @param flags Flags (only IP and AUTHID are valid flags here).
+ * @param reason Ban reason string.
+ * @param command Command string to identify the source. If this is left
+ * empty, then the OnBanIdentity forward will not be called.
+ * @param source A source value that could be interpreted as a player
+ * index of any sort (not actually checked by Core).
+ * @return True on success, false on failure.
+ */
+native bool:BanIdentity(const String:identity[],
+ time,
+ flags,
+ const String:reason[],
+ const String:command[]="",
+ any:source=0);
+
+/**
+ * Removes a ban that was written to the server (either in memory or on disk).
+ *
+ * @param identity String to unban (ip or authstring).
+ * @param flags Flags (only IP and AUTHID are valid flags here).
+ * @param command Command string to identify the source. If this is left
+ * empty, then OnRemoveBan will not be called.
+ * @param source A source value that could be interpreted as a player
+ * index of any sort (not actually checked by Core).
+ * @return True on success, false on failure.
+ */
+native bool:RemoveBan(const String:identity[],
+ flags,
+ const String:command[]="",
+ any:source=0);
+
diff --git a/addons/sourcemod/scripting/include/basecomm.inc b/addons/sourcemod/scripting/include/basecomm.inc
new file mode 100644
index 0000000..832afbc
--- /dev/null
+++ b/addons/sourcemod/scripting/include/basecomm.inc
@@ -0,0 +1,109 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2011 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _basecomm_included
+ #endinput
+#endif
+#define _basecomm_included
+
+/**
+ * Called when a client is muted or unmuted
+ *
+ * @param client Client index
+ * @param muteState True if client was muted, false otherwise
+ */
+ forward BaseComm_OnClientMute(client, bool:muteState);
+
+ /**
+ * Called when a client is gagged or ungagged
+ *
+ * @param client Client index
+ * @param gagState True if client was gaged, false otherwise
+ */
+ forward BaseComm_OnClientGag(client, bool:gagState);
+
+/**
+ * Returns whether or not a client is gagged
+ *
+ * @param client Client index.
+ * @return True if client is gagged, false otherwise.
+ */
+native bool:BaseComm_IsClientGagged(client);
+
+/**
+ * Returns whether or not a client is muted
+ *
+ * @param client Client index.
+ * @return True if client is muted, false otherwise.
+ */
+native bool:BaseComm_IsClientMuted(client);
+
+/**
+ * Sets a client's gag state
+ *
+ * @param client Client index.
+ * @param gagState True to gag client, false to ungag.
+ * @return True if this caused a change in gag state, false otherwise.
+ */
+native bool:BaseComm_SetClientGag(client, bool:gagState);
+
+/**
+ * Sets a client's mute state
+ *
+ * @param client Client index.
+ * @param muteState True to mute client, false to unmute.
+ * @return True if this caused a change in mute state, false otherwise.
+ */
+native bool:BaseComm_SetClientMute(client, bool:muteState);
+
+/* DO NOT EDIT BELOW THIS LINE */
+
+public SharedPlugin:__pl_basecomm =
+{
+ name = "basecomm",
+ file = "basecomm.smx",
+#if defined REQUIRE_PLUGIN
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+#if !defined REQUIRE_PLUGIN
+public __pl_basecomm_SetNTVOptional()
+{
+ MarkNativeAsOptional("BaseComm_IsClientGagged");
+ MarkNativeAsOptional("BaseComm_IsClientMuted");
+ MarkNativeAsOptional("BaseComm_SetClientGag");
+ MarkNativeAsOptional("BaseComm_SetClientMute");
+}
+#endif
diff --git a/addons/sourcemod/scripting/include/bitbuffer.inc b/addons/sourcemod/scripting/include/bitbuffer.inc
new file mode 100644
index 0000000..fd1c18e
--- /dev/null
+++ b/addons/sourcemod/scripting/include/bitbuffer.inc
@@ -0,0 +1,325 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _bitbuffer_included
+ #endinput
+#endif
+#define _bitbuffer_included
+
+/**
+ * Writes a single bit to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param bit Bit to write (true for 1, false for 0).
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteBool(Handle:bf, bool:bit);
+
+/**
+ * Writes a byte to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param byte Byte to write (value will be written as 8bit).
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteByte(Handle:bf, byte);
+
+/**
+ * Writes a byte to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param chr Character to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteChar(Handle:bf, chr);
+
+/**
+ * Writes a 16bit integer to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param num Integer to write (value will be written as 16bit).
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteShort(Handle:bf, num);
+
+/**
+ * Writes a 16bit unsigned integer to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param num Integer to write (value will be written as 16bit).
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteWord(Handle:bf, num);
+
+/**
+ * Writes a normal integer to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param num Integer to write (value will be written as 32bit).
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteNum(Handle:bf, num);
+
+/**
+ * Writes a floating point number to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param num Number to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteFloat(Handle:bf, Float:num);
+
+/**
+ * Writes a string to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param string Text string to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteString(Handle:bf, const String:string[]);
+
+/**
+ * Writes an entity to a writable bitbuffer (bf_write).
+ * @note This is a wrapper around BfWriteShort().
+ *
+ * @param bf bf_write handle to write to.
+ * @param ent Entity index to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle, or invalid entity.
+ */
+native BfWriteEntity(Handle:bf, ent);
+
+/**
+ * Writes a bit angle to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param angle Angle to write.
+ * @param numBits Optional number of bits to use.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteAngle(Handle:bf, Float:angle, numBits=8);
+
+/**
+ * Writes a coordinate to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param coord Coordinate to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteCoord(Handle:bf, Float:coord);
+
+/**
+ * Writes a 3D vector of coordinates to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param coord Coordinate array to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteVecCoord(Handle:bf, Float:coord[3]);
+
+/**
+ * Writes a 3D normal vector to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param vec Vector to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteVecNormal(Handle:bf, Float:vec[3]);
+
+/**
+ * Writes a 3D angle vector to a writable bitbuffer (bf_write).
+ *
+ * @param bf bf_write handle to write to.
+ * @param angles Angle vector to write.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfWriteAngles(Handle:bf, Float:angles[3]);
+
+/**
+ * Reads a single bit from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Bit value read.
+ * @error Invalid or incorrect Handle.
+ */
+native bool:BfReadBool(Handle:bf);
+
+/**
+ * Reads a byte from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Byte value read (read as 8bit).
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadByte(Handle:bf);
+
+/**
+ * Reads a character from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Character value read.
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadChar(Handle:bf);
+
+/**
+ * Reads a 16bit integer from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Integer value read (read as 16bit).
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadShort(Handle:bf);
+
+/**
+ * Reads a 16bit unsigned integer from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Integer value read (read as 16bit).
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadWord(Handle:bf);
+
+/**
+ * Reads a normal integer to a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Integer value read (read as 32bit).
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadNum(Handle:bf);
+
+/**
+ * Reads a floating point number from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Floating point value read.
+ * @error Invalid or incorrect Handle.
+ */
+native Float:BfReadFloat(Handle:bf);
+
+/**
+ * Reads a string from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @param buffer Destination string buffer.
+ * @param maxlength Maximum length of output string buffer.
+ * @param line If true the buffer will be copied until it reaches a '\n' or a null terminator.
+ * @return Number of bytes written to the buffer. If the bitbuffer stream overflowed,
+ * that is, had no terminator before the end of the stream, then a negative
+ * number will be returned equal to the number of characters written to the
+ * buffer minus 1. The buffer will be null terminated regardless of the
+ * return value.
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadString(Handle:bf, String:buffer[], maxlength, bool:line=false);
+
+/**
+ * Reads an entity from a readable bitbuffer (bf_read).
+ * @note This is a wrapper around BfReadShort().
+ *
+ * @param bf bf_read handle to read from.
+ * @return Entity index read.
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadEntity(Handle:bf);
+
+/**
+ * Reads a bit angle from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @param numBits Optional number of bits to use.
+ * @return Angle read.
+ * @error Invalid or incorrect Handle.
+ */
+native Float:BfReadAngle(Handle:bf, numBits=8);
+
+/**
+ * Reads a coordinate from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Coordinate read.
+ * @error Invalid or incorrect Handle.
+ */
+native Float:BfReadCoord(Handle:bf);
+
+/**
+ * Reads a 3D vector of coordinates from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @param coord Destination coordinate array.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadVecCoord(Handle:bf, Float:coord[3]);
+
+/**
+ * Reads a 3D normal vector from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @param vec Destination vector array.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadVecNormal(Handle:bf, Float:vec[3]);
+
+/**
+ * Reads a 3D angle vector from a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @param angles Destination angle vector.
+ * @noreturn
+ * @error Invalid or incorrect Handle.
+ */
+native BfReadAngles(Handle:bf, Float:angles[3]);
+
+/**
+ * Returns the number of bytes left in a readable bitbuffer (bf_read).
+ *
+ * @param bf bf_read handle to read from.
+ * @return Number of bytes left unread.
+ * @error Invalid or incorrect Handle.
+ */
+native BfGetNumBytesLeft(Handle:bf);
diff --git a/addons/sourcemod/scripting/include/bonemerge.inc b/addons/sourcemod/scripting/include/bonemerge.inc
new file mode 100644
index 0000000..f836586
--- /dev/null
+++ b/addons/sourcemod/scripting/include/bonemerge.inc
@@ -0,0 +1,237 @@
+/***************************************************************************
+ * *
+ * BoneMerge Workaround *
+ * Author: Master Xykon *
+ * Version: 1.0.0 *
+ * *
+ **************************************************************************/
+
+#include
+#include
+
+ #if defined _attachments_included
+ #endinput
+#endif
+#define _attachments_included
+
+// ---- Engine flags ---------------------------------------------------------------
+#define EF_BONEMERGE (1 << 0)
+#define EF_NOSHADOW (1 << 4)
+#define EF_BONEMERGE_FASTCULL (1 << 7)
+#define EF_PARENT_ANIMATES (1 << 9)
+
+new Handle:attachments_array = INVALID_HANDLE;
+new gItem[MAXPLAYERS+1];
+new bool:delete_enabled[MAXPLAYERS+1] = false;
+new gLink[MAXPLAYERS+1];
+
+new bool:g_bSdkStarted = false;
+new Handle:g_hSdkEquipWearable;
+new Handle:g_hSdkRemoveWearable;
+
+/**
+ * Attaches a child to a parent.
+ *
+ * @param child Child entity.
+ * @param parent Parent entity.
+ * @param variant Attachment point. Empty for none.
+ * @return True if able to create attachment. False if fail.
+ *
+ * On error/Errors: If unable to create attachment.
+ */
+stock CAttach(child, parent, client, String:modelname[]) {
+ if (attachments_array == INVALID_HANDLE) attachments_array = CreateArray(2);
+ if (!IsValidEntity(child)) return false;
+ if (!IsValidEntity(parent)) return false;
+ new link = CGetLink(child);
+ if (link == -1 || !IsValidEntity(link)) link = CAddLink(child, client);
+ if (link == -1 || !IsValidEntity(link)) {
+ decl String:Classname[128];
+ if (GetEdictClassname(child, Classname, sizeof(Classname))) ThrowError("Unable to create link for entity %s", Classname);
+ else ThrowError("Unable to create link for unknown entity");
+ return false;
+ }
+
+ new String:name[16];
+ Format(name, sizeof(name), "target%i", parent);
+ DispatchKeyValue(parent, "targetname", name);
+
+ new String:name2[32];
+ GetEntPropString(parent, Prop_Data, "m_iName", name2, sizeof(name2));
+ DispatchKeyValue(link, "parentname", name2);
+
+
+ SetVariantString(name2);
+ AcceptEntityInput(link, "SetParent", link, link, 0);
+
+ SetVariantString("head");
+ AcceptEntityInput(link, "SetParentAttachment", link, link, 0);
+
+ return true;
+}
+
+/**
+ * Detaches an entity from all its parents. Should be called before the entity is killed.
+ *
+ * @param ent Entity to detach.
+ * @return True if an attachment is destroyed. False if no attachment.
+ *
+ * On error/Errors: Never.
+ */
+stock CDetach(ent) {
+ if (attachments_array == INVALID_HANDLE) attachments_array = CreateArray(2);
+
+ if (!IsValidEntity(ent)) return false;
+
+ new link = CGetLink(ent);
+ if (link != -1) {
+ AcceptEntityInput(ent, "SetParent", -1, -1, 0);
+ if (IsValidEntity(link)) AcceptEntityInput(link, "kill");
+ for (new i = 0; i < GetArraySize(attachments_array); i++) {
+ new ent2 = GetArrayCell(attachments_array, i);
+ if (ent == ent2) RemoveFromArray(attachments_array, i);
+ }
+
+ return true;
+ }
+ return false;
+}
+
+stock CGetLink(ent) {
+ for (new i = 0; i < GetArraySize(attachments_array); i++) {
+ new ent2 = GetArrayCell(attachments_array, i);
+ if (ent == ent2) return (GetArrayCell(attachments_array, i, 1));
+ }
+ return -1;
+}
+
+stock CAddLink(ent, client) {
+ new String:name_ent[16];
+ Format(name_ent, sizeof(name_ent), "target%i", ent);
+ DispatchKeyValue(ent, "targetname", name_ent);
+
+ new link = CreateEntityByName("prop_dynamic_override");
+ if (IsValidEntity(link)) {
+ new String:name_link[16];
+ Format(name_link, sizeof(name_link), "target%i", link);
+ DispatchKeyValue(link, "targetname", name_link);
+
+ DispatchKeyValue(link, "classname", "prop_dynamic_override");
+ DispatchKeyValue(link, "spawnflags", "1");
+ SetEntPropFloat(link, Prop_Send, "m_flModelScale", 0.000000001);
+
+ SetEntProp(link, Prop_Send, "m_CollisionGroup", 11);
+
+ SetEntProp(link, Prop_Send, "m_fEffects", EF_BONEMERGE|EF_NOSHADOW|EF_PARENT_ANIMATES);
+
+ decl String:m_szModelName[PLATFORM_MAX_PATH];
+ GetEntPropString(client, Prop_Data, "m_ModelName", STRING(m_szModelName));
+ SetEntityModel(link, m_szModelName);
+
+ new m_iTeam = GetClientTeam(client);
+ SetEntProp(link, Prop_Send, "m_nSkin", (m_iTeam-2));
+
+ SetEntityRenderMode(link, RENDER_NONE);
+ AcceptEntityInput(link, "TurnOff", link, link, 0);
+
+ SetVariantString(name_link);
+ AcceptEntityInput(ent, "SetParent", ent, ent, 0);
+
+ SetVariantString("head");
+ AcceptEntityInput(ent, "SetParentAttachment", ent, ent, 0);
+
+ return link;
+ }
+ return -1;
+}
+
+stock Attachable_CreateAttachable(client, parent, String:modelname[])
+{
+ new m_iTeam = GetClientTeam(client);
+ gItem[client] = CreateEntityByName("prop_dynamic_override");
+
+ if (IsValidEdict(gItem[client]))
+ {
+ SetEntProp(gItem[client], Prop_Send, "m_nSkin", (m_iTeam-2));
+ SetEntProp(gItem[client], Prop_Send, "m_CollisionGroup", 11);
+
+ SetEntProp(gItem[client], Prop_Send, "m_fEffects", EF_BONEMERGE|EF_NOSHADOW|EF_PARENT_ANIMATES);
+
+ DispatchKeyValue(gItem[client], "model", modelname);
+
+ DispatchSpawn(gItem[client]);
+ ActivateEntity(gItem[client]);
+ AcceptEntityInput(gItem[client], "Start");
+
+ CAttach(gItem[client], parent, client, modelname);
+
+ delete_enabled[client] = true;
+ }
+
+ return gItem[client];
+}
+
+stock Attachable_UnhookEntity(client, ent)
+{
+ if (delete_enabled[client] == true)
+ {
+ CDetach(ent);
+ AcceptEntityInput(ent, "KillHierarchy");
+ }
+}
+
+stock TF2_SpawnWearable(iOwner, iDef=138, iLevel=22, iQuality=9)
+{
+ new m_iTeam = GetClientTeam(iOwner);
+ new iItem = CreateEntityByName("tf_wearable");
+
+ if (IsValidEdict(iItem))
+ {
+ //SetEntProp(iItem, Prop_Send, "m_bInitialized", 1); // Disabling this avoids the crashes related to spies
+ // disguising as someone with hat in Windows.
+
+ // Using reference data from Batter's Helmet. Thanks to MrSaturn.
+ SetEntProp(iItem, Prop_Send, "m_fEffects", EF_BONEMERGE|EF_NOSHADOW|EF_PARENT_ANIMATES);
+ SetEntProp(iItem, Prop_Send, "m_iTeamNum", m_iTeam);
+ SetEntProp(iItem, Prop_Send, "m_nSkin", (m_iTeam-2));
+ SetEntProp(iItem, Prop_Send, "m_CollisionGroup", 11);
+ SetEntProp(iItem, Prop_Send, "m_iItemDefinitionIndex", iDef);
+ SetEntProp(iItem, Prop_Send, "m_iEntityLevel", iLevel);
+ SetEntProp(iItem, Prop_Send, "m_iEntityQuality", iQuality);
+
+ // Spawn.
+ DispatchSpawn(iItem);
+ }
+
+ return iItem;
+}
+
+stock TF2_EquipWearable(iOwner, iItem)
+{
+ if (g_bSdkStarted == false) TF2_SdkStartup();
+
+ SDKCall(g_hSdkEquipWearable, iOwner, iItem);
+}
+
+stock TF2_SdkStartup()
+{
+
+ new Handle:hGameConf = LoadGameConfigFile("TF2_EquipmentManager");
+ if (hGameConf != INVALID_HANDLE)
+ {
+ StartPrepSDKCall(SDKCall_Player);
+ PrepSDKCall_SetFromConf(hGameConf,SDKConf_Virtual,"EquipWearable");
+ PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer);
+ g_hSdkEquipWearable = EndPrepSDKCall();
+
+ StartPrepSDKCall(SDKCall_Player);
+ PrepSDKCall_SetFromConf(hGameConf,SDKConf_Virtual,"RemoveWearable");
+ PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer);
+ g_hSdkRemoveWearable = EndPrepSDKCall();
+
+ CloseHandle(hGameConf);
+ g_bSdkStarted = true;
+ } else {
+ SetFailState("Couldn't load SDK functions (TF2_EquipmentManager).");
+ }
+}
\ No newline at end of file
diff --git a/addons/sourcemod/scripting/include/clientprefs.inc b/addons/sourcemod/scripting/include/clientprefs.inc
new file mode 100644
index 0000000..c6ac023
--- /dev/null
+++ b/addons/sourcemod/scripting/include/clientprefs.inc
@@ -0,0 +1,282 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2011 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _clientprefs_included
+ #endinput
+#endif
+#define _clientprefs_included
+
+/**
+ * Cookie access types for client viewing
+ */
+enum CookieAccess
+{
+ CookieAccess_Public, /**< Visible and Changeable by users */
+ CookieAccess_Protected, /**< Read only to users */
+ CookieAccess_Private, /**< Completely hidden cookie */
+};
+
+/**
+ * Cookie Prefab menu types
+ */
+enum CookieMenu
+{
+ CookieMenu_YesNo, /**< Yes/No menu with "yes"/"no" results saved into the cookie */
+ CookieMenu_YesNo_Int, /**< Yes/No menu with 1/0 saved into the cookie */
+ CookieMenu_OnOff, /**< On/Off menu with "on"/"off" results saved into the cookie */
+ CookieMenu_OnOff_Int, /**< On/Off menu with 1/0 saved into the cookie */
+};
+
+enum CookieMenuAction
+{
+ /**
+ * An option is being drawn for a menu.
+ *
+ * INPUT : Client index and data if available.
+ * OUTPUT: Buffer for rendering, maxlength of buffer.
+ */
+ CookieMenuAction_DisplayOption = 0,
+
+ /**
+ * A menu option has been selected.
+ *
+ * INPUT : Client index and any data if available.
+ */
+ CookieMenuAction_SelectOption = 1,
+};
+
+/**
+ * Note:
+ *
+ * A successful return value/result on any client prefs native only guarantees that the local cache has been updated.
+ * Database connection problems can still prevent the data from being permanently saved. Connection problems will be logged as
+ * errors by the clientprefs extension.
+ */
+
+/**
+ * Creates a new Client preference cookie.
+ *
+ * Handles returned by RegClientCookie can be closed via CloseHandle() when
+ * no longer needed.
+ *
+ * @param name Name of the new preference cookie.
+ * @param description Optional description of the preference cookie.
+ * @param access What CookieAccess level to assign to this cookie.
+ * @return A handle to the newly created cookie. If the cookie already
+ * exists, a handle to it will still be returned.
+ * @error Cookie name is blank.
+ */
+native Handle:RegClientCookie(const String:name[], const String:description[], CookieAccess:access);
+
+/**
+ * Searches for a Client preference cookie.
+ *
+ * Handles returned by FindClientCookie can be closed via CloseHandle() when
+ * no longer needed.
+ *
+ * @param name Name of cookie to find.
+ * @return A handle to the cookie if it is found. INVALID_HANDLE otherwise.
+ */
+native Handle:FindClientCookie(const String:name[]);
+
+/**
+ * Set the value of a Client preference cookie.
+ *
+ * @param client Client index.
+ * @param cookie Client preference cookie handle.
+ * @param value String value to set.
+ * @noreturn
+ * @error Invalid cookie handle or invalid client index.
+ */
+native SetClientCookie(client, Handle:cookie, const String:value[]);
+
+/**
+ * Retrieve the value of a Client preference cookie.
+ *
+ * @param client Client index.
+ * @param cookie Client preference cookie handle.
+ * @param buffer Copyback buffer for value.
+ * @param maxlen Maximum length of the buffer.
+ * @noreturn
+ * @error Invalid cookie handle or invalid client index.
+ */
+native GetClientCookie(client, Handle:cookie, String:buffer[], maxlen);
+
+/**
+ * Sets the value of a Client preference cookie based on an authID string.
+ *
+ * @param authID String Auth/STEAM ID of player to set.
+ * @param cookie Client preference cookie handle.
+ * @param value String value to set.
+ * @noreturn
+ * @error Invalid cookie handle.
+ */
+native SetAuthIdCookie(const String:authID[], Handle:cookie, const String:value[]);
+
+/**
+ * Checks if a clients cookies have been loaded from the database.
+ *
+ * @param client Client index.
+ * @return True if loaded, false otherwise.
+ * @error Invalid client index.
+ */
+native bool:AreClientCookiesCached(client);
+
+/**
+ * Called once a client's saved cookies have been loaded from the database.
+ *
+ * @param client Client index.
+ */
+forward OnClientCookiesCached(client);
+
+/**
+ * Cookie Menu Callback prototype
+ *
+ * @param client Client index.
+ * @param action CookieMenuAction being performed.
+ * @param info Info data passed.
+ * @param buffer Outbut buffer.
+ * @param maxlen Max length of the output buffer.
+ */
+functag public CookieMenuHandler(client, CookieMenuAction:action, any:info, String:buffer[], maxlen);
+
+/**
+ * Add a new prefab item to the client cookie settings menu.
+ *
+ * Note: This handles everything automatically and does not require a callback
+ *
+ * @param cookie Client preference cookie handle.
+ * @param type A CookieMenu prefab menu type.
+ * @param display Text to show on the menu.
+ * @param handler Optional handler callback for translations and output on selection
+ * @param info Info data to pass to the callback.
+ * @noreturn
+ * @error Invalid cookie handle.
+ */
+native SetCookiePrefabMenu(Handle:cookie, CookieMenu:type, const String:display[], CookieMenuHandler:handler=CookieMenuHandler:-1, info=0);
+
+/**
+ * Adds a new item to the client cookie settings menu.
+ *
+ * Note: This only adds the top level menu item. You need to handle any submenus from the callback.
+ *
+ * @param handler A MenuHandler callback function.
+ * @param info Data to pass to the callback.
+ * @param display Text to show on the menu.
+ * @noreturn
+ * @error Invalid cookie handle.
+ */
+native SetCookieMenuItem(CookieMenuHandler:handler, any:info, const String:display[]);
+
+/**
+ * Displays the settings menu to a client.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+native ShowCookieMenu(client);
+
+/**
+ * Gets a cookie iterator. Must be freed with CloseHandle().
+ *
+ * @return A new cookie iterator.
+ */
+native Handle:GetCookieIterator();
+
+/**
+ * Reads a cookie iterator, then advances to the next cookie if any.
+ *
+ * @param iter Cookie iterator Handle.
+ * @param name Name buffer.
+ * @param nameLen Name buffer size.
+ * @param access Access level of the cookie.
+ * @param desc Cookie description buffer.
+ * @param descLen Cookie description buffer size.
+ * @return True on success, false if there are no more commands.
+ */
+native bool:ReadCookieIterator(Handle:iter,
+ String:name[],
+ nameLen,
+ &CookieAccess:access,
+ String:desc[]="",
+ descLen=0);
+
+/**
+ * Returns the access level of a cookie
+ *
+ * @param cookie Client preference cookie handle.
+ * @return CookieAccess access level.
+ * @error Invalid cookie handle.
+ */
+native CookieAccess:GetCookieAccess(Handle:cookie);
+
+/**
+ * Returns the last updated timestamp for a client cookie
+ *
+ * @param client Client index.
+ * @param cookie Cookie handle.
+ * @return Last updated timestamp.
+ */
+native GetClientCookieTime(client, Handle:cookie);
+
+/**
+ * Do not edit below this line!
+ */
+public Extension:__ext_cprefs =
+{
+ name = "Client Preferences",
+ file = "clientprefs.ext",
+ autoload = 1,
+#if defined REQUIRE_EXTENSIONS
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+#if !defined REQUIRE_EXTENSIONS
+public __ext_cprefs_SetNTVOptional()
+{
+ MarkNativeAsOptional("RegClientCookie");
+ MarkNativeAsOptional("FindClientCookie");
+ MarkNativeAsOptional("SetClientCookie");
+ MarkNativeAsOptional("GetClientCookie");
+ MarkNativeAsOptional("AreClientCookiesCached");
+ MarkNativeAsOptional("SetCookiePrefabMenu");
+ MarkNativeAsOptional("SetCookieMenuItem");
+ MarkNativeAsOptional("ShowCookieMenu");
+ MarkNativeAsOptional("GetCookieIterator");
+ MarkNativeAsOptional("ReadCookieIterator");
+ MarkNativeAsOptional("GetCookieAccess");
+ MarkNativeAsOptional("GetClientCookieTime");
+}
+#endif
diff --git a/addons/sourcemod/scripting/include/clients.inc b/addons/sourcemod/scripting/include/clients.inc
new file mode 100644
index 0000000..13381c3
--- /dev/null
+++ b/addons/sourcemod/scripting/include/clients.inc
@@ -0,0 +1,778 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _clients_included
+ #endinput
+#endif
+#define _clients_included
+
+/**
+ * Network flow directions.
+ */
+enum NetFlow
+{
+ NetFlow_Outgoing = 0, /**< Outgoing traffic */
+ NetFlow_Incoming, /**< Incoming traffic */
+ NetFlow_Both, /**< Both values added together */
+};
+
+/**
+ * MAXPLAYERS is not the same as MaxClients.
+ * MAXPLAYERS is a hardcoded value as an upper limit. MaxClients changes based on the server.
+ *
+ * Both GetMaxClients() and MaxClients are only available once the map is loaded, and should
+ * not be used in OnPluginStart().
+ */
+
+#define MAXPLAYERS 65 /**< Maximum number of players SourceMod supports */
+#define MAX_NAME_LENGTH 32 /**< Maximum buffer required to store a client name */
+
+public const MaxClients; /**< Maximum number of players the server supports (dynamic) */
+
+/**
+ * Called on client connection. If you return true, the client will be allowed in the server.
+ * If you return false (or return nothing), the client will be rejected. If the client is
+ * rejected by this forward or any other, OnClientDisconnect will not be called.
+ *
+ * Note: Do not write to rejectmsg if you plan on returning true. If multiple plugins write
+ * to the string buffer, it is not defined which plugin's string will be shown to the client,
+ * but it is guaranteed one of them will.
+ *
+ * @param client Client index.
+ * @param rejectmsg Buffer to store the rejection message when the connection is refused.
+ * @param maxlen Maximum number of characters for rejection buffer.
+ * @return True to validate client's connection, false to refuse it.
+ */
+forward bool:OnClientConnect(client, String:rejectmsg[], maxlen);
+
+/**
+ * Called once a client successfully connects. This callback is paired with OnClientDisconnect.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientConnected(client);
+
+/**
+ * Called when a client is entering the game.
+ *
+ * Whether a client has a steamid is undefined until OnClientAuthorized
+ * is called, which may occur either before or after OnClientPutInServer.
+ * Similarly, use OnClientPostAdminCheck() if you need to verify whether
+ * connecting players are admins.
+ *
+ * GetClientCount() will include clients as they are passed through this
+ * function, as clients are already in game at this point.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientPutInServer(client);
+
+/**
+ * Called when a client is disconnecting from the server.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientDisconnect(client);
+
+/**
+ * Called when a client is disconnected from the server.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientDisconnect_Post(client);
+
+/**
+ * Called when a client is sending a command.
+ *
+ * As of SourceMod 1.3, the client is guaranteed to be in-game.
+ * Use command listeners (console.inc) for more advanced hooks.
+ *
+ * @param client Client index.
+ * @param args Number of arguments.
+ * @noreturn
+ */
+forward Action:OnClientCommand(client, args);
+
+/**
+ * Called whenever the client's settings are changed.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientSettingsChanged(client);
+
+/**
+ * Called when a client receives a Steam ID. The state of a client's
+ * authorization as an admin is not guaranteed here. Use
+ * OnClientPostAdminCheck() if you need a client's admin status.
+ *
+ * This is called by bots, but the ID will be "BOT".
+ *
+ * @param client Client index.
+ * @param auth Client auth string.
+ * @noreturn
+ */
+forward OnClientAuthorized(client, const String:auth[]);
+
+/**
+ * Called once a client is authorized and fully in-game, but
+ * before admin checks are done. This can be used to override
+ * the default admin checks for a client. You should only use
+ * this for overriding; use OnClientPostAdminCheck() instead
+ * if you want notification.
+ *
+ * Note: If handled/blocked, PostAdminCheck must be signalled
+ * manually via NotifyPostAdminCheck().
+ *
+ * This callback is gauranteed to occur on all clients, and always
+ * after each OnClientPutInServer() call.
+ *
+ * @param client Client index.
+ * @return Plugin_Handled to block admin checks.
+ */
+forward Action:OnClientPreAdminCheck(client);
+
+/**
+ * Called directly before OnClientPostAdminCheck() as a method to
+ * alter administrative permissions before plugins perform final
+ * post-connect operations.
+ *
+ * In general, do not use this function unless you are specifically
+ * attempting to change access permissions. Use OnClientPostAdminCheck()
+ * instead if you simply want to perform post-connect authorization
+ * routines.
+ *
+ * See OnClientPostAdminCheck() for more information.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientPostAdminFilter(client);
+
+/**
+ * Called once a client is authorized and fully in-game, and
+ * after all post-connection authorizations have been performed.
+ *
+ * This callback is gauranteed to occur on all clients, and always
+ * after each OnClientPutInServer() call.
+ *
+ * @param client Client index.
+ * @noreturn
+ */
+forward OnClientPostAdminCheck(client);
+
+/**
+ * This function will be deprecated in a future release. Use the MaxClients variable instead.
+ *
+ * Returns the maximum number of clients allowed on the server. This may
+ * return 0 if called before OnMapStart(), and thus should not be called
+ * in OnPluginStart().
+ *
+ * You should not globally cache the value to GetMaxClients() because it can change from
+ * SourceTV or TF2's arena mode. Use the "MaxClients" dynamic variable documented at the
+ * top of this file.
+ *
+ * @return Maximum number of clients allowed.
+ */
+native GetMaxClients();
+
+/**
+ * Returns the maximum number of human players allowed on the server. This is
+ * a game-specific function used on newer games to limit the number of humans
+ * that can join a game and can be lower than MaxClients. It is the number often
+ * reflected in the server browser or when viewing the output of the status command.
+ * On unsupported games or modes without overrides, it will return the same value
+ * as MaxClients.
+ *
+ * You should not globally cache the value to GetMaxHumanPlayers() because it can change across
+ * game modes. You may still cache it locally.
+ *
+ * @return Maximum number of humans allowed.
+ */
+native GetMaxHumanPlayers();
+
+/**
+ * Returns the client count put in the server.
+ *
+ * @param inGameOnly If false connecting players are also counted.
+ * @return Client count in the server.
+ */
+native GetClientCount(bool:inGameOnly=true);
+
+/**
+ * Returns the client's name.
+ *
+ * @param client Player index.
+ * @param name Buffer to store the client's name.
+ * @param maxlen Maximum length of string buffer (includes NULL terminator).
+ * @return True on success, false otherwise.
+ * @error If the client is not connected an error will be thrown.
+ */
+native bool:GetClientName(client, String:name[], maxlen);
+
+/**
+ * Retrieves a client's IP address.
+ *
+ * @param client Player index.
+ * @param ip Buffer to store the client's ip address.
+ * @param maxlen Maximum length of string buffer (includes NULL terminator).
+ * @param remport Remove client's port from the ip string (true by default).
+ * @return True on success, false otherwise.
+ * @error If the client is not connected or the index is invalid.
+ */
+native bool:GetClientIP(client, String:ip[], maxlen, bool:remport=true);
+
+/**
+ * Retrieves a client's authentication string (SteamID).
+ *
+ * @param client Player index.
+ * @param auth Buffer to store the client's auth string.
+ * @param maxlen Maximum length of string buffer (includes NULL terminator).
+ * @param validate Check backend validation status.
+ * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES,
+ * You WILL KNOW if you need to use this, MOST WILL NOT.
+ * @return True on success, false otherwise.
+ * @error If the client is not connected or the index is invalid.
+ */
+native bool:GetClientAuthString(client, String:auth[], maxlen, bool:validate=true);
+
+/**
+ * Returns the client's Steam account ID.
+ *
+ * @param client Client Index.
+ * @param validate Check backend validation status.
+ * DO NOT PASS FALSE UNLESS YOU UNDERSTAND THE CONSEQUENCES,
+ * You WILL KNOW if you need to use this, MOST WILL NOT.
+ * @return Steam account ID or 0 if not available.
+ * @error If the client is not connected or the index is invalid.
+ */
+native GetSteamAccountID(client, bool:validate=true);
+
+/**
+ * Retrieves a client's user id, which is an index incremented for every client
+ * that joins the server.
+ *
+ * @param client Player index.
+ * @return User id of the client.
+ * @error If the client is not connected or the index is invalid.
+ */
+native GetClientUserId(client);
+
+/**
+ * Returns if a certain player is connected.
+ *
+ * @param client Player index.
+ * @return True if player is connected to the server, false otherwise.
+ */
+native bool:IsClientConnected(client);
+
+/**
+ * Returns if a certain player has entered the game.
+ *
+ * @param client Player index (index does not have to be connected).
+ * @return True if player has entered the game, false otherwise.
+ * @error Invalid client index.
+ */
+native bool:IsClientInGame(client);
+
+/**
+ * Returns if a client is in the "kick queue" (i.e. the client will be kicked
+ * shortly and thus they should not appear as valid).
+ *
+ * @param client Player index (must be connected).
+ * @return True if in the kick queue, false otherwise.
+ * @error Invalid client index.
+ */
+native bool:IsClientInKickQueue(client);
+
+/**
+ * Backwards compatibility stock - use IsClientInGame
+ * @deprecated Renamed to IsClientInGame
+ */
+#pragma deprecated Use IsClientInGame() instead
+stock bool:IsPlayerInGame(client)
+{
+ return IsClientInGame(client);
+}
+
+/**
+ * Returns if a certain player has been authenticated.
+ *
+ * @param client Player index.
+ * @return True if player has been authenticated, false otherwise.
+ */
+native bool:IsClientAuthorized(client);
+
+/**
+ * Returns if a certain player is a fake client.
+ *
+ * @param client Player index.
+ * @return True if player is a fake client, false otherwise.
+ */
+native bool:IsFakeClient(client);
+
+/**
+ * Returns if a certain player is the SourceTV bot.
+ *
+ * @param client Player index.
+ * @return True if player is the SourceTV bot, false otherwise.
+ */
+native bool:IsClientSourceTV(client);
+
+/**
+ * Returns if a certain player is the Replay bot.
+ *
+ * @param client Player index.
+ * @return True if player is the Replay bot, false otherwise.
+ */
+native bool:IsClientReplay(client);
+
+/**
+ * Returns if a certain player is an observer/spectator.
+ *
+ * @param client Player index.
+ * @return True if player is an obverser, false otherwise.
+ */
+native bool:IsClientObserver(client);
+
+/**
+ * Returns if the client is alive or dead.
+ *
+ * Note: This function was originally in SDKTools and was moved to core.
+ *
+ * @param client Player's index.
+ * @return True if the client is alive, false otherwise.
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native bool:IsPlayerAlive(client);
+
+/**
+ * Retrieves values from client replicated keys.
+ *
+ * @param client Player's index.
+ * @param key Key string.
+ * @param value Buffer to store value.
+ * @param maxlen Maximum length of valve (UTF-8 safe).
+ * @return True on success, false otherwise.
+ * @error Invalid client index, or client not connected.
+ */
+native bool:GetClientInfo(client, const String:key[], String:value[], maxlen);
+
+/**
+ * Retrieves a client's team index.
+ *
+ * @param client Player's index.
+ * @return Team index the client is on (mod specific).
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientTeam(client);
+
+/**
+ * Sets a client's AdminId.
+ *
+ * @param client Player's index.
+ * @param id AdminId to set. INVALID_ADMIN_ID removes admin permissions.
+ * @param temp True if the id should be freed on disconnect.
+ * @noreturn
+ * @error Invalid client index, client not connected, or bogus AdminId.
+ */
+native SetUserAdmin(client, AdminId:id, bool:temp=false);
+
+/**
+ * Retrieves a client's AdminId.
+ *
+ * @param client Player's index.
+ * @return AdminId of the client, or INVALID_ADMIN_ID if none.
+ * @error Invalid client index, or client not connected.
+ */
+native AdminId:GetUserAdmin(client);
+
+/**
+ * Sets access flags on a client. If the client is not an admin,
+ * a temporary, anonymous AdminId is given.
+ *
+ * @param client Player's index.
+ * @param ... Flags to set on the client.
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native AddUserFlags(client, AdminFlag:...);
+
+/**
+ * Removes flags from a client. If the client is not an admin,
+ * this has no effect.
+ *
+ * @param client Player's index.
+ * @param ... Flags to remove from the client.
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native RemoveUserFlags(client, AdminFlag:...);
+
+/**
+ * Sets access flags on a client using bits instead of flags. If the
+ * client is not an admin, and flags not 0, a temporary, anonymous AdminId is given.
+ *
+ * @param client Player's index.
+ * @param flags Bitstring of flags to set on client.
+ * @noreturn
+ */
+native SetUserFlagBits(client, flags);
+
+/**
+ * Returns client access flags. If the client is not an admin,
+ * the result is always 0.
+ *
+ * @param client Player's index.
+ * @return Flags
+ * @error Invalid client index, or client not connected.
+ */
+native GetUserFlagBits(client);
+
+/**
+ * Returns whether a user can target another user.
+ * This is a helper function for CanAdminTarget.
+ *
+ * @param client Player's index.
+ * @param target Target player's index.
+ * @return True if target is targettable by the player, false otherwise.
+ * @error Invalid or unconnected player indexers.
+ */
+native bool:CanUserTarget(client, target);
+
+/**
+ * Runs through the Core-defined admin authorization checks on a player.
+ * Has no effect if the player is already an admin.
+ *
+ * Note: This function is based on the internal cache only.
+ *
+ * @param client Client index.
+ * @return True if access was changed, false if it did not.
+ * @error Invalid client index or client not in-game AND authorized.
+ */
+native bool:RunAdminCacheChecks(client);
+
+/**
+ * Signals that a player has completed post-connection admin checks.
+ * Has no effect if the player has already had this event signalled.
+ *
+ * Note: This must be sent even if no admin id was assigned.
+ *
+ * @param client Client index.
+ * @noreturn
+ * @error Invalid client index or client not in-game AND authorized.
+ */
+native NotifyPostAdminCheck(client);
+
+/**
+ * Creates a fake client.
+ *
+ * @param name Name to use.
+ * @return Client index on success, 0 otherwise.
+ */
+native CreateFakeClient(const String:name[]);
+
+/**
+ * Sets a convar value on a fake client.
+ *
+ * @param client Client index.
+ * @param cvar ConVar name.
+ * @param value ConVar value.
+ * @noreturn
+ * @error Invalid client index, client not connected,
+ * or client not a fake client.
+ */
+native SetFakeClientConVar(client, const String:cvar[], const String:value[]);
+
+/**
+ * Returns the client's health.
+ *
+ * @param client Player's index.
+ * @return Health value.
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientHealth(client);
+
+/**
+ * Returns the client's model name.
+ *
+ * @param client Player's index.
+ * @param model Buffer to store the client's model name.
+ * @param maxlen Maximum length of string buffer (includes NULL terminator).
+ * @noreturn
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientModel(client, String:model[], maxlen);
+
+/**
+ * Returns the client's weapon name.
+ *
+ * @param client Player's index.
+ * @param weapon Buffer to store the client's weapon name.
+ * @param maxlen Maximum length of string buffer (includes NULL terminator).
+ * @noreturn
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientWeapon(client, String:weapon[], maxlen);
+
+/**
+ * Returns the client's max size vector.
+ *
+ * @param client Player's index.
+ * @param vec Destination vector to store the client's max size.
+ * @noreturn
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientMaxs(client, Float:vec[3]);
+
+/**
+ * Returns the client's min size vector.
+ *
+ * @param client Player's index.
+ * @param vec Destination vector to store the client's min size.
+ * @noreturn
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientMins(client, Float:vec[3]);
+
+/**
+ * Returns the client's position angle.
+ *
+ * @param client Player's index.
+ * @param ang Destination vector to store the client's position angle.
+ * @noreturn
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientAbsAngles(client, Float:ang[3]);
+
+/**
+ * Returns the client's origin vector.
+ *
+ * @param client Player's index.
+ * @param vec Destination vector to store the client's origin vector.
+ * @noreturn
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientAbsOrigin(client, Float:vec[3]);
+
+/**
+ * Returns the client's armor.
+ *
+ * @param client Player's index.
+ * @return Armor value.
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientArmor(client);
+
+/**
+ * Returns the client's death count.
+ *
+ * @param client Player's index.
+ * @return Death count.
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientDeaths(client);
+
+/**
+ * Returns the client's frag count.
+ *
+ * @param client Player's index.
+ * @return Frag count.
+ * @error Invalid client index, client not in game, or no mod support.
+ */
+native GetClientFrags(client);
+
+/**
+ * Returns the client's send data rate in bytes/sec.
+ *
+ * @param client Player's index.
+ * @return Data rate.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native GetClientDataRate(client);
+
+/**
+ * Returns if a client is timing out
+ *
+ * @param client Player's index.
+ * @return True if client is timing out, false otherwise.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native bool:IsClientTimingOut(client);
+
+/**
+ * Returns the client's connection time in seconds.
+ *
+ * @param client Player's index.
+ * @return Connection time.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientTime(client);
+
+/**
+ * Returns the client's current latency (RTT), more accurate than GetAvgLatency but jittering.
+ *
+ * @param client Player's index.
+ * @param flow Traffic flowing direction.
+ * @return Latency, or -1 if network info is not available.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientLatency(client, NetFlow:flow);
+
+/**
+ * Returns the client's average packet latency in seconds.
+ *
+ * @param client Player's index.
+ * @param flow Traffic flowing direction.
+ * @return Latency, or -1 if network info is not available.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientAvgLatency(client, NetFlow:flow);
+
+/**
+ * Returns the client's average packet loss, values go from 0 to 1 (for percentages).
+ *
+ * @param client Player's index.
+ * @param flow Traffic flowing direction.
+ * @return Average packet loss, or -1 if network info is not available.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientAvgLoss(client, NetFlow:flow);
+
+/**
+ * Returns the client's average packet choke, values go from 0 to 1 (for percentages).
+ *
+ * @param client Player's index.
+ * @param flow Traffic flowing direction.
+ * @return Average packet loss, or -1 if network info is not available.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientAvgChoke(client, NetFlow:flow);
+
+/**
+ * Returns the client's data flow in bytes/sec.
+ *
+ * @param client Player's index.
+ * @param flow Traffic flowing direction.
+ * @return Data flow.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientAvgData(client, NetFlow:flow);
+
+/**
+ * Returns the client's average packet frequency in packets/sec.
+ *
+ * @param client Player's index.
+ * @param flow Traffic flowing direction.
+ * @return Packet frequency.
+ * @error Invalid client index, client not connected, or fake client.
+ */
+native Float:GetClientAvgPackets(client, NetFlow:flow);
+
+/**
+ * Translates an userid index to the real player index.
+ *
+ * @param userid Userid value.
+ * @return Client value.
+ * @error Returns 0 if invalid userid.
+ */
+native GetClientOfUserId(userid);
+
+/**
+ * Disconnects a client from the server as soon as the next frame starts.
+ *
+ * Note: Originally, KickClient() was immediate. The delay was introduced
+ * because despite warnings, plugins were using it in ways that would crash.
+ * The new safe version can break cases that rely on immediate disconnects,
+ * but ensures that plugins do not accidentally cause crashes.
+ *
+ * If you need immediate disconnects, use KickClientEx().
+ *
+ * Note: IsClientInKickQueue() will return true before the kick occurs.
+ *
+ * @param client Client index.
+ * @param format Optional formatting rules for disconnect reason.
+ * Note that a period is automatically appended to the string by the engine.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native KickClient(client, const String:format[]="", any:...);
+
+/**
+ * Immediately disconnects a client from the server.
+ *
+ * Kicking clients from certain events or callbacks may cause crashes. If in
+ * doubt, create a short (0.1 second) timer to kick the client in the next
+ * available frame.
+ *
+ * @param client Client index.
+ * @param format Optional formatting rules for disconnect reason.
+ * Note that a period is automatically appended to the string by the engine.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native KickClientEx(client, const String:format[]="", any:...);
+
+/**
+ * Changes a client's team through the mod's generic team changing function.
+ * On CS:S, this will kill the player.
+ *
+ * @param client Client index.
+ * @param team Mod-specific team index.
+ * @noreturn
+ * @error Invalid client index, client not connected, or lack of
+ * mod support.
+ */
+native ChangeClientTeam(client, team);
+
+/**
+ * Returns the clients unique serial identifier.
+ *
+ * @param client Client index.
+ * @return Serial number.
+ */
+native GetClientSerial(client);
+
+/**
+ * Returns the client index by its serial number.
+ *
+ * @param serial Serial number.
+ * @return Client index, or 0 for invalid serial.
+ */
+native GetClientFromSerial(serial);
+
diff --git a/addons/sourcemod/scripting/include/commandfilters.inc b/addons/sourcemod/scripting/include/commandfilters.inc
new file mode 100644
index 0000000..6ea447c
--- /dev/null
+++ b/addons/sourcemod/scripting/include/commandfilters.inc
@@ -0,0 +1,165 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _commandfilters_included
+ #endinput
+#endif
+#define _commandfilters_included
+
+#define MAX_TARGET_LENGTH 64
+
+#define COMMAND_FILTER_ALIVE (1<<0) /**< Only allow alive players */
+#define COMMAND_FILTER_DEAD (1<<1) /**< Only filter dead players */
+#define COMMAND_FILTER_CONNECTED (1<<2) /**< Allow players not fully in-game */
+#define COMMAND_FILTER_NO_IMMUNITY (1<<3) /**< Ignore immunity rules */
+#define COMMAND_FILTER_NO_MULTI (1<<4) /**< Do not allow multiple target patterns */
+#define COMMAND_FILTER_NO_BOTS (1<<5) /**< Do not allow bots to be targetted */
+
+#define COMMAND_TARGET_NONE 0 /**< No target was found */
+#define COMMAND_TARGET_NOT_ALIVE -1 /**< Single client is not alive */
+#define COMMAND_TARGET_NOT_DEAD -2 /**< Single client is not dead */
+#define COMMAND_TARGET_NOT_IN_GAME -3 /**< Single client is not in game */
+#define COMMAND_TARGET_IMMUNE -4 /**< Single client is immune */
+#define COMMAND_TARGET_EMPTY_FILTER -5 /**< A multi-filter (such as @all) had no targets */
+#define COMMAND_TARGET_NOT_HUMAN -6 /**< Target was not human */
+#define COMMAND_TARGET_AMBIGUOUS -7 /**< Partial name had too many targets */
+
+/**
+ * Processes a generic command target string, and resolves it to a list
+ * of clients or one client, based on filtering rules and a pattern.
+ *
+ * Note that you should use LoadTranslations("common.phrases") in OnPluginStart(),
+ * as that file is guaranteed to contain all of the translatable phrases that
+ * ProcessTargetString() will return.
+ *
+ * @param pattern Pattern to find clients against.
+ * @param admin Admin performing the action, or 0 if the server.
+ * @param targets Array to hold targets.
+ * @param max_targets Maximum size of the targets array.
+ * @param filter_flags Filter flags.
+ * @param target_name Buffer to store the target name.
+ * @param tn_maxlength Maximum length of the target name buffer.
+ * @param tn_is_ml OUTPUT: Will be true if the target name buffer is an ML phrase,
+ * false if it is a normal string.
+ * @return If a multi-target pattern was used, the number of clients found
+ * is returned. If a single-target pattern was used, 1 is returned
+ * if one valid client is found. Otherwise, a COMMAND_TARGET reason
+ * for failure is returned.
+ */
+native ProcessTargetString(const String:pattern[],
+ admin,
+ targets[],
+ max_targets,
+ filter_flags,
+ String:target_name[],
+ tn_maxlength,
+ &bool:tn_is_ml);
+
+/**
+ * Replies to a client with a given message describing a targetting
+ * failure reason.
+ *
+ * Note: The translation phrases are found in common.phrases.txt.
+ *
+ * @param client Client index, or 0 for server.
+ * @param reason COMMAND_TARGET reason.
+ * @noreturn
+ */
+stock ReplyToTargetError(client, reason)
+{
+ switch (reason)
+ {
+ case COMMAND_TARGET_NONE:
+ {
+ ReplyToCommand(client, "[SM] %t", "No matching client");
+ }
+ case COMMAND_TARGET_NOT_ALIVE:
+ {
+ ReplyToCommand(client, "[SM] %t", "Target must be alive");
+ }
+ case COMMAND_TARGET_NOT_DEAD:
+ {
+ ReplyToCommand(client, "[SM] %t", "Target must be dead");
+ }
+ case COMMAND_TARGET_NOT_IN_GAME:
+ {
+ ReplyToCommand(client, "[SM] %t", "Target is not in game");
+ }
+ case COMMAND_TARGET_IMMUNE:
+ {
+ ReplyToCommand(client, "[SM] %t", "Unable to target");
+ }
+ case COMMAND_TARGET_EMPTY_FILTER:
+ {
+ ReplyToCommand(client, "[SM] %t", "No matching clients");
+ }
+ case COMMAND_TARGET_NOT_HUMAN:
+ {
+ ReplyToCommand(client, "[SM] %t", "Cannot target bot");
+ }
+ case COMMAND_TARGET_AMBIGUOUS:
+ {
+ ReplyToCommand(client, "[SM] %t", "More than one client matched");
+ }
+ }
+}
+
+/**
+ * Adds clients to a multi-target filter.
+ *
+ * @param pattern Pattern name.
+ * @param clients Array to fill with unique, valid client indexes.
+ * @return True if pattern was recognized, false otherwise.
+ */
+functag public bool:MultiTargetFilter(const String:pattern[], Handle:clients);
+
+/**
+ * Adds a multi-target filter function for ProcessTargetString().
+ *
+ * @param pattern Pattern to match (case sensitive).
+ * @param filter Filter function.
+ * @param phrase Descriptive phrase to display on successful match.
+ * @param phraseIsML True if phrase is multi-lingual, false otherwise.
+ * @noreturn
+ */
+native AddMultiTargetFilter(const String:pattern[], MultiTargetFilter:filter,
+ const String:phrase[], bool:phraseIsML);
+
+/**
+ * Removes a multi-target filter function from ProcessTargetString().
+ *
+ * @param pattern Pattern to match (case sensitive).
+ * @param filter Filter function.
+ * @noreturn
+ */
+native RemoveMultiTargetFilter(const String:pattern[], MultiTargetFilter:filter);
+
diff --git a/addons/sourcemod/scripting/include/console.inc b/addons/sourcemod/scripting/include/console.inc
new file mode 100644
index 0000000..d89bcbc
--- /dev/null
+++ b/addons/sourcemod/scripting/include/console.inc
@@ -0,0 +1,971 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _console_included
+ #endinput
+#endif
+#define _console_included
+
+#define INVALID_FCVAR_FLAGS (-1)
+
+/**
+ * Console variable bound values used with Get/SetConVarBounds()
+ */
+enum ConVarBounds
+{
+ ConVarBound_Upper = 0,
+ ConVarBound_Lower
+};
+
+/**
+ * Console variable query helper values.
+ */
+enum QueryCookie
+{
+ QUERYCOOKIE_FAILED = 0,
+};
+
+/**
+ * Reply sources for commands.
+ */
+enum ReplySource
+{
+ SM_REPLY_TO_CONSOLE = 0,
+ SM_REPLY_TO_CHAT = 1,
+};
+
+/**
+ * Console variable query result values.
+ */
+enum ConVarQueryResult
+{
+ ConVarQuery_Okay = 0, /**< Retrieval of client convar value was successful. */
+ ConVarQuery_NotFound, /**< Client convar was not found. */
+ ConVarQuery_NotValid, /**< A console command with the same name was found, but there is no convar. */
+ ConVarQuery_Protected /**< Client convar was found, but it is protected. The server cannot retrieve its value. */
+};
+
+/**
+ * @section Flags for console commands and console variables. The descriptions
+ * for each constant come directly from the Source SDK.
+ */
+#define FCVAR_NONE 0 /**< The default, no flags at all */
+#define FCVAR_UNREGISTERED (1<<0) /**< If this is set, don't add to linked list, etc. */
+#define FCVAR_LAUNCHER (1<<1) /**< Defined by launcher. */
+#define FCVAR_GAMEDLL (1<<2) /**< Defined by the game DLL. */
+#define FCVAR_CLIENTDLL (1<<3) /**< Defined by the client DLL. */
+#define FCVAR_MATERIAL_SYSTEM (1<<4) /**< Defined by the material system. */
+#define FCVAR_PROTECTED (1<<5) /**< It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value. */
+#define FCVAR_SPONLY (1<<6) /**< This cvar cannot be changed by clients connected to a multiplayer server. */
+#define FCVAR_ARCHIVE (1<<7) /**< Set to cause it to be saved to vars.rc */
+#define FCVAR_NOTIFY (1<<8) /**< Notifies players when changed. */
+#define FCVAR_USERINFO (1<<9) /**< Changes the client's info string. */
+#define FCVAR_PRINTABLEONLY (1<<10) /**< This cvar's string cannot contain unprintable characters (e.g., used for player name, etc.) */
+#define FCVAR_UNLOGGED (1<<11) /**< If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log */
+#define FCVAR_NEVER_AS_STRING (1<<12) /**< Never try to print that cvar. */
+#define FCVAR_REPLICATED (1<<13) /**< Server setting enforced on clients. */
+#define FCVAR_CHEAT (1<<14) /**< Only useable in singleplayer / debug / multiplayer & sv_cheats */
+#define FCVAR_STUDIORENDER (1<<15) /**< Defined by the studiorender system. */
+#define FCVAR_DEMO (1<<16) /**< Record this cvar when starting a demo file. */
+#define FCVAR_DONTRECORD (1<<17) /**< Don't record these command in demo files. */
+#define FCVAR_PLUGIN (1<<18) /**< Defined by a 3rd party plugin. */
+#define FCVAR_DATACACHE (1<<19) /**< Defined by the datacache system. */
+#define FCVAR_TOOLSYSTEM (1<<20) /**< Defined by an IToolSystem library */
+#define FCVAR_FILESYSTEM (1<<21) /**< Defined by the file system. */
+#define FCVAR_NOT_CONNECTED (1<<22) /**< Cvar cannot be changed by a client that is connected to a server. */
+#define FCVAR_SOUNDSYSTEM (1<<23) /**< Defined by the soundsystem library. */
+#define FCVAR_ARCHIVE_XBOX (1<<24) /**< Cvar written to config.cfg on the Xbox. */
+#define FCVAR_INPUTSYSTEM (1<<25) /**< Defined by the inputsystem DLL. */
+#define FCVAR_NETWORKSYSTEM (1<<26) /**< Defined by the network system. */
+#define FCVAR_VPHYSICS (1<<27) /**< Defined by vphysics. */
+
+/**
+ * @endsection
+ */
+
+/**
+ * Executes a server command as if it were on the server console (or RCON)
+ *
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+native ServerCommand(const String:format[], any:...);
+
+/**
+ * Executes a server command as if it were on the server console (or RCON)
+ * and stores the printed text into buffer.
+ *
+ * Warning: This calls ServerExecute internally and may have issues if
+ * certain commands are in the buffer, only use when you really need
+ * the response.
+ * Also, on L4D2 this will not print the command output to the server console.
+ *
+ * @param buffer String to store command result into.
+ * @param maxlen Length of buffer.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+native ServerCommandEx(String:buffer[], maxlen, const String:format[], any:...);
+
+/**
+ * Inserts a server command at the beginning of the server command buffer.
+ *
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+native InsertServerCommand(const String:format[], any:...);
+
+/**
+ * Executes every command in the server's command buffer, rather than once per frame.
+ *
+ * @noreturn
+ */
+native ServerExecute();
+
+/**
+ * Executes a client command. Note that this will not work on clients unless
+ * they have cl_restrict_server_commands set to 0.
+ *
+ * @param client Index of the client.
+ * @param fmt Format of the client command.
+ * @param ... Format parameters
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native ClientCommand(client, const String:fmt[], any:...);
+
+/**
+ * Executes a client command on the server without being networked.
+ *
+ * FakeClientCommand() overwrites the command tokenization buffer. This can
+ * cause undesired effects because future calls to GetCmdArg* will return
+ * data from the FakeClientCommand(), not the parent command. If you are in
+ * a hook where this matters (for example, a "say" hook), you should use
+ * FakeClientCommandEx() instead.
+ *
+ * @param client Index of the client.
+ * @param fmt Format of the client command.
+ * @param ... Format parameters
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native FakeClientCommand(client, const String:fmt[], any:...);
+
+/**
+ * Executes a client command on the server without being networked. The
+ * execution of the client command is delayed by one frame to prevent any
+ * re-entrancy issues that might surface with FakeClientCommand().
+ *
+ * @param client Index of the client.
+ * @param fmt Format of the client command.
+ * @param ... Format parameters
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native FakeClientCommandEx(client, const String:fmt[], any:...);
+
+/**
+ * Sends a message to the server console.
+ *
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+native PrintToServer(const String:format[], any:...);
+
+/**
+ * Sends a message to a client's console.
+ *
+ * @param client Client index.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error If the client is not connected an error will be thrown.
+ */
+native PrintToConsole(client, const String:format[], any:...);
+
+/**
+ * Reples to a message in a command.
+ *
+ * A client index of 0 will use PrintToServer().
+ * If the command was from the console, PrintToConsole() is used.
+ * If the command was from chat, PrintToChat() is used.
+ *
+ * @param client Client index, or 0 for server.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error If the client is not connected or invalid.
+ */
+native ReplyToCommand(client, const String:format[], any:...);
+
+/**
+ * Returns the current reply source of a command.
+ *
+ * @return ReplySource value.
+ */
+native ReplySource:GetCmdReplySource();
+
+/**
+ * Sets the current reply source of a command.
+ *
+ * Only use this if you know what you are doing. You should save the old value
+ * and restore it once you are done.
+ *
+ * @param source New ReplySource value.
+ * @return Old ReplySource value.
+ */
+native ReplySource:SetCmdReplySource(ReplySource:source);
+
+/**
+ * Returns whether the current say hook is a chat trigger.
+ *
+ * This function is only meaningful inside say or say_team hooks.
+ *
+ * @return True if a chat trigger, false otherwise.
+ */
+native bool:IsChatTrigger();
+
+/**
+ * Displays usage of an admin command to users depending on the
+ * setting of the sm_show_activity cvar. All users receive a message
+ * in their chat text, except for the originating client, who receives
+ * the message based on the current ReplySource.
+ *
+ * @param client Client index doing the action, or 0 for server.
+ * @param tag Tag to prepend to the message.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error
+ */
+native ShowActivity2(client, const String:tag[], const String:format[], any:...);
+
+/**
+ * Displays usage of an admin command to users depending on the
+ * setting of the sm_show_activity cvar.
+ *
+ * This version does not display a message to the originating client
+ * if used from chat triggers or menus. If manual replies are used
+ * for these cases, then this function will suffice. Otherwise,
+ * ShowActivity2() is slightly more useful.
+ *
+ * @param client Client index doing the action, or 0 for server.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error
+ */
+native ShowActivity(client, const String:format[], any:...);
+
+/**
+ * Same as ShowActivity(), except the tag parameter is used instead of
+ * "[SM] " (note that you must supply any spacing).
+ *
+ * @param client Client index doing the action, or 0 for server.
+ * @param tag Tag to display with.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error
+ */
+native ShowActivityEx(client, const String:tag[], const String:format[], any:...);
+
+/**
+ * Given an originating client and a target client, returns the string
+ * that describes the originating client according to the sm_show_activity cvar.
+ *
+ * For example, "ADMIN", "PLAYER", or a player's name could be placed in this buffer.
+ *
+ * @param client Originating client; may be 0 for server console.
+ * @param target Targeted client.
+ * @param namebuf Name buffer.
+ * @param maxlength Maximum size of the name buffer.
+ * @return True if activity should be shown. False otherwise. In either
+ * case, the name buffer is filled. The return value can be used
+ * to broadcast a "safe" name to all players regardless of the
+ * sm_show_activity filters.
+ * @error Invalid client index or client not connected.
+ */
+native FormatActivitySource(client, target, const String:namebuf[], maxlength);
+
+/**
+ * Called when a server-only command is invoked.
+ *
+ * @param args Number of arguments that were in the argument string.
+ * @return An Action value. Not handling the command
+ * means that Source will report it as "not found."
+ */
+functag public Action:SrvCmd(args);
+
+/**
+ * Creates a server-only console command, or hooks an already existing one.
+ *
+ * Server commands are case sensitive.
+ *
+ * @param cmd Name of the command to hook or create.
+ * @param callback A function to use as a callback for when the command is invoked.
+ * @param description Optional description to use for command creation.
+ * @param flags Optional flags to use for command creation.
+ * @noreturn
+ * @error Command name is the same as an existing convar.
+ */
+native RegServerCmd(const String:cmd[], SrvCmd:callback, const String:description[]="", flags=0);
+
+/**
+ * Called when a generic console command is invoked.
+ *
+ * @param client Index of the client, or 0 from the server.
+ * @param args Number of arguments that were in the argument string.
+ * @return An Action value. Not handling the command
+ * means that Source will report it as "not found."
+ */
+functag public Action:ConCmd(client, args);
+
+/**
+ * Creates a console command, or hooks an already existing one.
+ *
+ * Console commands are case sensitive. However, if the command already exists in the game,
+ * a client may enter the command in any case. SourceMod corrects for this automatically,
+ * and you should only hook the "real" version of the command.
+ *
+ * @param cmd Name of the command to hook or create.
+ * @param callback A function to use as a callback for when the command is invoked.
+ * @param description Optional description to use for command creation.
+ * @param flags Optional flags to use for command creation.
+ * @noreturn
+ * @error Command name is the same as an existing convar.
+ */
+native RegConsoleCmd(const String:cmd[], ConCmd:callback, const String:description[]="", flags=0);
+
+/**
+ * Creates a console command as an administrative command. If the command does not exist,
+ * it is created. When this command is invoked, the access rights of the player are
+ * automatically checked before allowing it to continue.
+ *
+ * Admin commands are case sensitive from both the client and server.
+ *
+ * @param cmd String containing command to register.
+ * @param callback A function to use as a callback for when the command is invoked.
+ * @param adminflags Administrative flags (bitstring) to use for permissions.
+ * @param description Optional description to use for help.
+ * @param group String containing the command group to use. If empty,
+ * the plugin's filename will be used instead.
+ * @param flags Optional console flags.
+ * @noreturn
+ * @error Command name is the same as an existing convar.
+ */
+native RegAdminCmd(const String:cmd[],
+ ConCmd:callback,
+ adminflags,
+ const String:description[]="",
+ const String:group[]="",
+ flags=0);
+
+/**
+ * Returns the number of arguments from the current console or server command.
+ * @note Unlike the HL2 engine call, this does not include the command itself.
+ *
+ * @return Number of arguments to the current command.
+ */
+native GetCmdArgs();
+
+/**
+ * Retrieves a command argument given its index, from the current console or
+ * server command.
+ * @note Argument indexes start at 1; 0 retrieves the command name.
+ *
+ * @param argnum Argument number to retrieve.
+ * @param buffer Buffer to use for storing the string.
+ * @param maxlength Maximum length of the buffer.
+ * @return Length of string written to buffer.
+ */
+native GetCmdArg(argnum, String:buffer[], maxlength);
+
+/**
+ * Retrieves the entire command argument string in one lump from the current
+ * console or server command.
+ *
+ * @param buffer Buffer to use for storing the string.
+ * @param maxlength Maximum length of the buffer.
+ * @return Length of string written to buffer.
+ */
+native GetCmdArgString(String:buffer[], maxlength);
+
+/**
+ * Creates a new console variable.
+ *
+ * @param name Name of new convar.
+ * @param defaultValue String containing the default value of new convar.
+ * @param description Optional description of the convar.
+ * @param flags Optional bitstring of flags determining how the convar should be handled. See FCVAR_* constants for more details.
+ * @param hasMin Optional boolean that determines if the convar has a minimum value.
+ * @param min Minimum floating point value that the convar can have if hasMin is true.
+ * @param hasMax Optional boolean that determines if the convar has a maximum value.
+ * @param max Maximum floating point value that the convar can have if hasMax is true.
+ * @return A handle to the newly created convar. If the convar already exists, a handle to it will still be returned.
+ * @error Convar name is blank or is the same as an existing console command.
+ */
+native Handle:CreateConVar(const String:name[], const String:defaultValue[], const String:description[]="", flags=0, bool:hasMin=false, Float:min=0.0, bool:hasMax=false, Float:max=0.0);
+
+/**
+ * Searches for a console variable.
+ *
+ * @param name Name of convar to find.
+ * @return A handle to the convar if it is found. INVALID_HANDLE otherwise.
+ */
+native Handle:FindConVar(const String:name[]);
+
+/**
+ * Called when a console variable's value is changed.
+ *
+ * @param convar Handle to the convar that was changed.
+ * @param oldValue String containing the value of the convar before it was changed.
+ * @param newValue String containing the new value of the convar.
+ * @noreturn
+ */
+functag public ConVarChanged(Handle:convar, const String:oldValue[], const String:newValue[]);
+
+/**
+ * Creates a hook for when a console variable's value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param callback An OnConVarChanged function pointer.
+ * @noreturn
+ * @error Invalid or corrupt Handle or invalid callback function.
+ */
+native HookConVarChange(Handle:convar, ConVarChanged:callback);
+
+/**
+ * Removes a hook for when a console variable's value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param callback An OnConVarChanged function pointer.
+ * @noreturn
+ * @error Invalid or corrupt Handle, invalid callback function, or no active hook on convar.
+ */
+native UnhookConVarChange(Handle:convar, ConVarChanged:callback);
+
+/**
+ * Returns the boolean value of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @return The boolean value of the convar.
+ * @error Invalid or corrupt Handle.
+ */
+native bool:GetConVarBool(Handle:convar);
+
+/**
+ * Sets the boolean value of a console variable.
+ *
+ * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and
+ * Episode 1 engines. Newer engines automatically do these things when the convar value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param value New boolean value.
+ * @param replicate If set to true, the new convar value will be set on all clients.
+ * This will only work if the convar has the FCVAR_REPLICATED flag
+ * and actually exists on clients.
+ * @param notify If set to true, clients will be notified that the convar has changed.
+ * This will only work if the convar has the FCVAR_NOTIFY flag.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetConVarBool(Handle:convar, bool:value, bool:replicate=false, bool:notify=false);
+
+/**
+ * Returns the integer value of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @return The integer value of the convar.
+ * @error Invalid or corrupt Handle.
+ */
+native GetConVarInt(Handle:convar);
+
+/**
+ * Sets the integer value of a console variable.
+ *
+ * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and
+ * Episode 1 engines. Newer engines automatically do these things when the convar value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param value New integer value.
+ * @param replicate If set to true, the new convar value will be set on all clients.
+ * This will only work if the convar has the FCVAR_REPLICATED flag
+ * and actually exists on clients.
+ * @param notify If set to true, clients will be notified that the convar has changed.
+ * This will only work if the convar has the FCVAR_NOTIFY flag.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetConVarInt(Handle:convar, value, bool:replicate=false, bool:notify=false);
+
+/**
+ * Returns the floating point value of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @return The floating point value of the convar.
+ * @error Invalid or corrupt Handle.
+ */
+native Float:GetConVarFloat(Handle:convar);
+
+/**
+ * Sets the floating point value of a console variable.
+ *
+ * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and
+ * Episode 1 engines. Newer engines automatically do these things when the convar value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param value New floating point value.
+ * @param replicate If set to true, the new convar value will be set on all clients.
+ * This will only work if the convar has the FCVAR_REPLICATED flag
+ * and actually exists on clients.
+ * @param notify If set to true, clients will be notified that the convar has changed.
+ * This will only work if the convar has the FCVAR_NOTIFY flag.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetConVarFloat(Handle:convar, Float:value, bool:replicate=false, bool:notify=false);
+
+/**
+ * Retrieves the string value of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @param value Buffer to store the value of the convar.
+ * @param maxlength Maximum length of string buffer.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native GetConVarString(Handle:convar, String:value[], maxlength);
+
+/**
+ * Sets the string value of a console variable.
+ *
+ * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and
+ * Episode 1 engines. Newer engines automatically do these things when the convar value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param value New string value.
+ * @param replicate If set to true, the new convar value will be set on all clients.
+ * This will only work if the convar has the FCVAR_REPLICATED flag
+ * and actually exists on clients.
+ * @param notify If set to true, clients will be notified that the convar has changed.
+ * This will only work if the convar has the FCVAR_NOTIFY flag.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetConVarString(Handle:convar, const String:value[], bool:replicate=false, bool:notify=false);
+
+/**
+ * Resets the console variable to its default value.
+ *
+ * Note: The replicate and notify params are only relevant for the original, Dark Messiah, and
+ * Episode 1 engines. Newer engines automatically do these things when the convar value is changed.
+ *
+ * @param convar Handle to the convar.
+ * @param replicate If set to true, the new convar value will be set on all clients.
+ * This will only work if the convar has the FCVAR_REPLICATED flag
+ * and actually exists on clients.
+ * @param notify If set to true, clients will be notified that the convar has changed.
+ * This will only work if the convar has the FCVAR_NOTIFY flag.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native ResetConVar(Handle:convar, bool:replicate=false, bool:notify=false);
+
+/**
+ * Retrieves the default string value of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @param value Buffer to store the default value of the convar.
+ * @param maxlength Maximum length of string buffer.
+ * @return Number of bytes written to the buffer (UTF-8 safe).
+ * @error Invalid or corrupt Handle.
+ */
+native GetConVarDefault(Handle:convar, String:value[], maxlength);
+
+/**
+ * Returns the bitstring of flags on a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @return A bitstring containing the FCVAR_* flags that are enabled.
+ * @error Invalid or corrupt Handle.
+ */
+native GetConVarFlags(Handle:convar);
+
+/**
+ * Sets the bitstring of flags on a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @param flags A bitstring containing the FCVAR_* flags to enable.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetConVarFlags(Handle:convar, flags);
+
+/**
+ * Retrieves the specified bound of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @param type Type of bound to retrieve, ConVarBound_Lower or ConVarBound_Upper.
+ * @param value By-reference cell to store the specified floating point bound value.
+ * @return True if the convar has the specified bound set, false otherwise.
+ * @error Invalid or corrupt Handle.
+ */
+native bool:GetConVarBounds(Handle:convar, ConVarBounds:type, &Float:value);
+
+/**
+ * Sets the specified bound of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @param type Type of bound to set, ConVarBound_Lower or ConVarBound_Upper
+ * @param set If set to true, convar will use specified bound. If false, bound will be removed.
+ * @param value Floating point value to use as the specified bound.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetConVarBounds(Handle:convar, ConVarBounds:type, bool:set, Float:value=0.0);
+
+/**
+ * Retrieves the name of a console variable.
+ *
+ * @param convar Handle to the convar.
+ * @param name Buffer to store the name of the convar.
+ * @param maxlength Maximum length of string buffer.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native GetConVarName(Handle:convar, String:name[], maxlength);
+
+funcenum ConVarQueryFinished
+{
+ /**
+ * Called when a query to retrieve a client's console variable has finished.
+ *
+ * @param cookie Unique identifier of query.
+ * @param client Player index.
+ * @param result Result of query that tells one whether or not query was successful.
+ * See ConVarQueryResult enum for more details.
+ * @param convarName Name of client convar that was queried.
+ * @param convarValue Value of client convar that was queried if successful. This will be "" if it was not.
+ * @param value Value that was passed when query was started.
+ * @noreturn
+ */
+ public(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[], any:value),
+
+ /**
+ * Called when a query to retrieve a client's console variable has finished.
+ *
+ * @param cookie Unique identifier of query.
+ * @param client Player index.
+ * @param result Result of query that tells one whether or not query was successful.
+ * See ConVarQueryResult enum for more details.
+ * @param convarName Name of client convar that was queried.
+ * @param convarValue Value of client convar that was queried if successful. This will be "" if it was not.
+ * @noreturn
+ */
+ public(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
+};
+
+/**
+ * Starts a query to retrieve the value of a client's console variable.
+ *
+ * @param client Player index.
+ * @param cvarName Name of client convar to query.
+ * @param callback A function to use as a callback when the query has finished.
+ * @param value Optional value to pass to the callback function.
+ * @return A cookie that uniquely identifies the query.
+ * Returns QUERYCOOKIE_FAILED on failure, such as when used on a bot.
+ */
+native QueryCookie:QueryClientConVar(client, const String:cvarName[], ConVarQueryFinished:callback, any:value=0);
+
+/**
+ * Gets a command iterator. Must be freed with CloseHandle().
+ *
+ * @return A new command iterator.
+ */
+native Handle:GetCommandIterator();
+
+/**
+ * Reads a command iterator, then advances to the next command if any.
+ * Only SourceMod specific commands are returned.
+ *
+ * @param iter Command iterator Handle.
+ * @param name Name buffer.
+ * @param nameLen Name buffer size.
+ * @param eflags Effective default flags of a command.
+ * @param desc Command description buffer.
+ * @param descLen Command description buffer size.
+ * @return True on success, false if there are no more commands.
+ */
+native bool:ReadCommandIterator(Handle:iter,
+ String:name[],
+ nameLen,
+ &eflags=0,
+ String:desc[]="",
+ descLen=0);
+
+/**
+ * Returns whether a client has access to a given command string. The string
+ * can be any override string, as overrides can be independent of
+ * commands. This feature essentially allows you to create custom
+ * flags using the override system.
+ *
+ * @param client Client index.
+ * @param command Command name. If the command is not found, the default
+ * flags are used.
+ * @param flags Flag string to use as a default, if the command or override
+ * is not found.
+ * @param override_only If true, SourceMod will not attempt to find a matching
+ * command, and it will only use the default flags specified.
+ * Otherwise, SourceMod will ignore the default flags if
+ * there is a matching admin command.
+ * @return True if the client has access, false otherwise.
+ */
+native bool:CheckCommandAccess(client,
+ const String:command[],
+ flags,
+ bool:override_only=false);
+
+/**
+ * Returns whether an admin has access to a given command string. The string
+ * can be any override string, as overrides can be independent of
+ * commands. This feature essentially allows you to create custom flags
+ * using the override system.
+ *
+ * @param id AdminId of the admin.
+ * @param command Command name. If the command is not found, the default
+ * flags are used.
+ * @param flags Flag string to use as a default, if the command or override
+ * is not found.
+ * @param override_only If true, SourceMod will not attempt to find a matching
+ * command, and it will only use the default flags specified.
+ * Otherwise, SourceMod will ignore the default flags if
+ * there is a matching admin command.
+ * @return True if the admin has access, false otherwise.
+ */
+native bool:CheckAccess(AdminId:id,
+ const String:command[],
+ flags,
+ bool:override_only=false);
+
+/**
+ * Returns true if the supplied character is valid in a ConVar name.
+ *
+ * @param c Character to validate.
+ * @return True is valid for ConVars, false otherwise
+ */
+stock bool:IsValidConVarChar(c)
+{
+ return (c == '_' || IsCharAlpha(c) || IsCharNumeric(c));
+}
+
+/**
+ * Returns the bitstring of flags of a command.
+ *
+ * @param name Name of the command.
+ * @return A bitstring containing the FCVAR_* flags that are enabled
+ * or INVALID_FCVAR_FLAGS if command not found.
+ */
+native GetCommandFlags(const String:name[]);
+
+/**
+ * Sets the bitstring of flags of a command.
+ *
+ * @param name Name of the command.
+ * @param flags A bitstring containing the FCVAR_* flags to enable.
+ * @return True on success, otherwise false.
+ */
+native bool:SetCommandFlags(const String:name[], flags);
+
+/**
+ * Starts a ConCommandBase search, traversing the list of ConVars and
+ * ConCommands. If a Handle is returned, the next entry must be read
+ * via FindNextConCommand(). The order of the list is undefined.
+ *
+ * @param buffer Buffer to store entry name.
+ * @param max_size Maximum size of the buffer.
+ * @param isCommand Variable to store whether the entry is a command.
+ * If it is not a command, it is a ConVar.
+ * @param flags Variable to store entry flags.
+ * @param description Buffer to store the description, empty if no description present.
+ * @param descrmax_size Maximum size of the description buffer.
+ * @return On success, a ConCmdIter Handle is returned, which
+ * can be read via FindNextConCommand(), and must be
+ * closed via CloseHandle(). Additionally, the output
+ * parameters will be filled with information of the
+ * first ConCommandBase entry.
+ * On failure, INVALID_HANDLE is returned, and the
+ * contents of outputs is undefined.
+ */
+native Handle:FindFirstConCommand(String:buffer[], max_size, &bool:isCommand, &flags=0, String:description[]="", descrmax_size=0);
+
+/**
+ * Reads the next entry in a ConCommandBase iterator.
+ *
+ * @param search ConCmdIter Handle to search.
+ * @param buffer Buffer to store entry name.
+ * @param max_size Maximum size of the buffer.
+ * @param isCommand Variable to store whether the entry is a command.
+ * If it is not a command, it is a ConVar.
+ * @param flags Variable to store entry flags.
+ * @param description Buffer to store the description, empty if no description present.
+ * @param descrmax_size Maximum size of the description buffer.
+ * @return On success, the outputs are filled, the iterator is
+ * advanced to the next entry, and true is returned.
+ * If no more entries exist, false is returned, and the
+ * contents of outputs is undefined.
+ */
+native bool:FindNextConCommand(Handle:search, String:buffer[], max_size, &bool:isCommand, &flags=0, String:description[]="", descrmax_size=0);
+
+/**
+ * Replicates a convar value to a specific client. This does not change the actual convar value.
+ *
+ * @param client Client index
+ * @param convar ConVar handle
+ * @param value String value to send
+ * @return True on success, false on failure
+ * @error Invalid client index, client not in game, or client is fake
+ */
+native bool:SendConVarValue(client, Handle:convar, const String:value[]);
+
+/**
+ * Adds an informational string to the server's public "tags".
+ * This string should be a short, unique identifier.
+ *
+ * Note: Tags are automatically removed when a plugin unloads.
+ * Note: Currently, this function does nothing because of bugs in the Valve master.
+ *
+ * @param tag Tag string to append.
+ * @noreturn
+ */
+native AddServerTag(const String:tag[]);
+
+/**
+ * Removes a tag previously added by the calling plugin.
+ *
+ * @param tag Tag string to remove.
+ * @noreturn
+ */
+native RemoveServerTag(const String:tag[]);
+
+/**
+ * Callback for command listeners. This is invoked whenever any command
+ * reaches the server, from the server console itself or a player.
+ *
+ * Clients may be in the process of connecting when they are executing commands
+ * IsClientConnected(client) is not guaranteed to return true. Other functions
+ * such as GetClientIP() may not work at this point either.
+ *
+ * Returning Plugin_Handled or Plugin_Stop will prevent the original,
+ * baseline code from running.
+ *
+ * -- TEXT BELOW IS IMPLEMENTATION, AND NOT GUARANTEED --
+ * Even if returning Plugin_Handled or Plugin_Stop, some callbacks will still
+ * trigger. These are:
+ * * C++ command dispatch hooks from Metamod:Source plugins
+ * * Reg*Cmd() hooks that did not create new commands.
+ *
+ * @param client Client, or 0 for server.
+ * Client may not be connected or in game.
+ * @param command Command name, lower case. To get name as typed, use
+ * GetCmdArg() and specify argument 0.
+ * @param argc Argument count.
+ * @return Action to take (see extended notes above).
+ */
+functag public Action:CommandListener(client, const String:command[], argc);
+
+#define FEATURECAP_COMMANDLISTENER "command listener"
+
+/**
+ * Adds a callback that will fire when a command is sent to the server.
+ *
+ * Registering commands is designed to create a new command as part of the UI,
+ * whereas this is a lightweight hook on a command string, existing or not.
+ * Using Reg*Cmd to intercept is in poor practice, as it physically creates a
+ * new command and can slow down dispatch in general.
+ *
+ * To see if this feature is available, use FeatureType_Capability and
+ * FEATURECAP_COMMANDLISTENER.
+ *
+ * @param callback Callback.
+ * @param command Command, or if not specified, a global listener.
+ * The command is case insensitive.
+ * @return True if this feature is available on the current game,
+ * false otherwise.
+ */
+native bool:AddCommandListener(CommandListener:callback, const String:command[]="");
+
+/**
+ * Removes a previously added command listener, in reverse order of being added.
+ *
+ * @param callback Callback.
+ * @param command Command, or if not specified, a global listener.
+ * The command is case insensitive.
+ * @error Callback has no active listeners.
+ */
+native RemoveCommandListener(CommandListener:callback, const String:command[]="");
+
+/**
+ * Returns true if the supplied command exists.
+ *
+ * @param command Command to find.
+ * @return True if command is found, false otherwise.
+ */
+stock bool:CommandExists(const String:command[])
+{
+ return (GetCommandFlags(command) != INVALID_FCVAR_FLAGS);
+}
+/**
+ * Global listener for the chat commands.
+ *
+ * @param client Client index.
+ * @param command Command name.
+ * @param sArgs Chat argument string.
+ *
+ * @return An Action value. Returning Plugin_Handled bypasses the game function call.
+ Returning Plugin_Stop bypasses the post hook as well as the game function.
+ */
+forward Action:OnClientSayCommand(client, const String:command[], const String:sArgs[]);
+
+/**
+ * Global post listener for the chat commands.
+ *
+ * @param client Client index.
+ * @param command Command name.
+ * @param sArgs Chat argument string.
+ *
+ */
+forward OnClientSayCommand_Post(client, const String:command[], const String:sArgs[]);
diff --git a/addons/sourcemod/scripting/include/core.inc b/addons/sourcemod/scripting/include/core.inc
new file mode 100644
index 0000000..262e186
--- /dev/null
+++ b/addons/sourcemod/scripting/include/core.inc
@@ -0,0 +1,237 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _core_included
+ #endinput
+#endif
+#define _core_included
+
+#include
+
+/** If this gets changed, you need to update Core's check. */
+#define SOURCEMOD_PLUGINAPI_VERSION 5
+
+struct PlVers
+{
+ version,
+ String:filevers[],
+ String:date[],
+ String:time[]
+};
+
+/**
+ * Function helper values.
+ */
+enum Function
+{
+ INVALID_FUNCTION = -1,
+};
+
+/**
+ * Specifies what to do after a hook completes.
+ */
+enum Action
+{
+ Plugin_Continue = 0, /**< Continue with the original action */
+ Plugin_Changed = 1, /**< Inputs or outputs have been overridden with new values */
+ Plugin_Handled = 3, /**< Handle the action at the end (don't call it) */
+ Plugin_Stop = 4, /**< Immediately stop the hook chain and handle the original */
+};
+
+/**
+ * Specifies identity types.
+ */
+enum Identity
+{
+ Identity_Core = 0,
+ Identity_Extension = 1,
+ Identity_Plugin = 2
+};
+
+public PlVers:__version =
+{
+ version = SOURCEMOD_PLUGINAPI_VERSION,
+ filevers = SOURCEMOD_VERSION,
+ date = __DATE__,
+ time = __TIME__
+};
+
+/**
+ * Plugin status values.
+ */
+enum PluginStatus
+{
+ Plugin_Running=0, /**< Plugin is running */
+ /* All states below are "temporarily" unexecutable */
+ Plugin_Paused, /**< Plugin is loaded but paused */
+ Plugin_Error, /**< Plugin is loaded but errored/locked */
+ /* All states below do not have all natives */
+ Plugin_Loaded, /**< Plugin has passed loading and can be finalized */
+ Plugin_Failed, /**< Plugin has a fatal failure */
+ Plugin_Created, /**< Plugin is created but not initialized */
+ Plugin_Uncompiled, /**< Plugin is not yet compiled by the JIT */
+ Plugin_BadLoad, /**< Plugin failed to load */
+};
+
+/**
+ * Plugin information properties.
+ */
+enum PluginInfo
+{
+ PlInfo_Name, /**< Plugin name */
+ PlInfo_Author, /**< Plugin author */
+ PlInfo_Description, /**< Plugin description */
+ PlInfo_Version, /**< Plugin verison */
+ PlInfo_URL, /**< Plugin URL */
+};
+
+/**
+ * Defines how an extension must expose itself for autoloading.
+ */
+struct Extension
+{
+ const String:name[], /**< Short name */
+ const String:file[], /**< Default file name */
+ bool:autoload, /**< Whether or not to auto-load */
+ bool:required, /**< Whether or not to require */
+};
+
+/**
+ * Defines how a plugin must expose itself for native requiring.
+ */
+struct SharedPlugin
+{
+ const String:name[], /**< Short name */
+ const String:file[], /**< File name */
+ bool:required, /**< Whether or not to require */
+};
+
+public Float:NULL_VECTOR[3]; /**< Pass this into certain functions to act as a C++ NULL */
+public const String:NULL_STRING[1]; /**< pass this into certain functions to act as a C++ NULL */
+
+/**
+ * Horrible compatibility shim.
+ */
+public Extension:__ext_core =
+{
+ name = "Core",
+ file = "core",
+ autoload = 0,
+ required = 0,
+};
+
+native VerifyCoreVersion();
+
+/**
+ * Sets a native as optional, such that if it is unloaded, removed,
+ * or otherwise non-existent, the plugin will still work. Calling
+ * removed natives results in a run-time error.
+ *
+ * @param name Native name.
+ * @noreturn
+ */
+native MarkNativeAsOptional(const String:name[]);
+
+public __ext_core_SetNTVOptional()
+{
+ MarkNativeAsOptional("GetFeatureStatus");
+ MarkNativeAsOptional("RequireFeature");
+ MarkNativeAsOptional("AddCommandListener");
+ MarkNativeAsOptional("RemoveCommandListener");
+
+ MarkNativeAsOptional("BfWriteBool");
+ MarkNativeAsOptional("BfWriteByte");
+ MarkNativeAsOptional("BfWriteChar");
+ MarkNativeAsOptional("BfWriteShort");
+ MarkNativeAsOptional("BfWriteWord");
+ MarkNativeAsOptional("BfWriteNum");
+ MarkNativeAsOptional("BfWriteFloat");
+ MarkNativeAsOptional("BfWriteString");
+ MarkNativeAsOptional("BfWriteEntity");
+ MarkNativeAsOptional("BfWriteAngle");
+ MarkNativeAsOptional("BfWriteCoord");
+ MarkNativeAsOptional("BfWriteVecCoord");
+ MarkNativeAsOptional("BfWriteVecNormal");
+ MarkNativeAsOptional("BfWriteAngles");
+ MarkNativeAsOptional("BfReadBool");
+ MarkNativeAsOptional("BfReadByte");
+ MarkNativeAsOptional("BfReadChar");
+ MarkNativeAsOptional("BfReadShort");
+ MarkNativeAsOptional("BfReadWord");
+ MarkNativeAsOptional("BfReadNum");
+ MarkNativeAsOptional("BfReadFloat");
+ MarkNativeAsOptional("BfReadString");
+ MarkNativeAsOptional("BfReadEntity");
+ MarkNativeAsOptional("BfReadAngle");
+ MarkNativeAsOptional("BfReadCoord");
+ MarkNativeAsOptional("BfReadVecCoord");
+ MarkNativeAsOptional("BfReadVecNormal");
+ MarkNativeAsOptional("BfReadAngles");
+ MarkNativeAsOptional("BfGetNumBytesLeft");
+
+ MarkNativeAsOptional("PbReadInt");
+ MarkNativeAsOptional("PbReadFloat");
+ MarkNativeAsOptional("PbReadBool");
+ MarkNativeAsOptional("PbReadString");
+ MarkNativeAsOptional("PbReadColor");
+ MarkNativeAsOptional("PbReadAngle");
+ MarkNativeAsOptional("PbReadVector");
+ MarkNativeAsOptional("PbReadVector2D");
+ MarkNativeAsOptional("PbGetRepeatedFieldCount");
+ MarkNativeAsOptional("PbSetInt");
+ MarkNativeAsOptional("PbSetFloat");
+ MarkNativeAsOptional("PbSetBool");
+ MarkNativeAsOptional("PbSetString");
+ MarkNativeAsOptional("PbSetColor");
+ MarkNativeAsOptional("PbSetAngle");
+ MarkNativeAsOptional("PbSetVector");
+ MarkNativeAsOptional("PbSetVector2D");
+ MarkNativeAsOptional("PbAddInt");
+ MarkNativeAsOptional("PbAddFloat");
+ MarkNativeAsOptional("PbAddBool");
+ MarkNativeAsOptional("PbAddString");
+ MarkNativeAsOptional("PbAddColor");
+ MarkNativeAsOptional("PbAddAngle");
+ MarkNativeAsOptional("PbAddVector");
+ MarkNativeAsOptional("PbAddVector2D");
+ MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
+ MarkNativeAsOptional("PbReadMessage");
+ MarkNativeAsOptional("PbReadRepeatedMessage");
+ MarkNativeAsOptional("PbAddMessage");
+
+ VerifyCoreVersion();
+}
+
+
+#define AUTOLOAD_EXTENSIONS
+#define REQUIRE_EXTENSIONS
+#define REQUIRE_PLUGIN
diff --git a/addons/sourcemod/scripting/include/cstrike.inc b/addons/sourcemod/scripting/include/cstrike.inc
new file mode 100644
index 0000000..45ccac0
--- /dev/null
+++ b/addons/sourcemod/scripting/include/cstrike.inc
@@ -0,0 +1,422 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _cstrike_included
+ #endinput
+#endif
+#define _cstrike_included
+
+#define CS_TEAM_NONE 0 /**< No team yet. */
+#define CS_TEAM_SPECTATOR 1 /**< Spectators. */
+#define CS_TEAM_T 2 /**< Terrorists. */
+#define CS_TEAM_CT 3 /**< Counter-Terrorists. */
+
+#define CS_SLOT_PRIMARY 0 /**< Primary weapon slot. */
+#define CS_SLOT_SECONDARY 1 /**< Secondary weapon slot. */
+#define CS_SLOT_KNIFE 2 /**< Knife slot. */
+#define CS_SLOT_GRENADE 3 /**< Grenade slot (will only return one grenade). */
+#define CS_SLOT_C4 4 /**< C4 slot. */
+
+#define CS_DMG_HEADSHOT (1 << 30) /**< Headshot */
+
+enum CSRoundEndReason
+{
+ CSRoundEnd_TargetBombed = 0, /**< Target Successfully Bombed! */
+ CSRoundEnd_VIPEscaped, /**< The VIP has escaped! */
+ CSRoundEnd_VIPKilled, /**< VIP has been assassinated! */
+ CSRoundEnd_TerroristsEscaped, /**< The terrorists have escaped! */
+ CSRoundEnd_CTStoppedEscape, /**< The CTs have prevented most of the terrorists from escaping! */
+ CSRoundEnd_TerroristsStopped, /**< Escaping terrorists have all been neutralized! */
+ CSRoundEnd_BombDefused, /**< The bomb has been defused! */
+ CSRoundEnd_CTWin, /**< Counter-Terrorists Win! */
+ CSRoundEnd_TerroristWin, /**< Terrorists Win! */
+ CSRoundEnd_Draw, /**< Round Draw! */
+ CSRoundEnd_HostagesRescued, /**< All Hostages have been rescued! */
+ CSRoundEnd_TargetSaved, /**< Target has been saved! */
+ CSRoundEnd_HostagesNotRescued, /**< Hostages have not been rescued! */
+ CSRoundEnd_TerroristsNotEscaped, /**< Terrorists have not escaped! */
+ CSRoundEnd_VIPNotEscaped, /**< VIP has not escaped! */
+ CSRoundEnd_GameStart, /**< Game Commencing! */
+
+ // The below only exist on CS:GO
+ CSRoundEnd_TerroristsSurrender, /**< Terrorists Surrender */
+ CSRoundEnd_CTSurrender, /**< CTs Surrender */
+};
+
+enum CSWeaponID
+{
+ CSWeapon_NONE = 0,
+ CSWeapon_P228,
+ CSWeapon_GLOCK,
+ CSWeapon_SCOUT,
+ CSWeapon_HEGRENADE,
+ CSWeapon_XM1014,
+ CSWeapon_C4,
+ CSWeapon_MAC10,
+ CSWeapon_AUG,
+ CSWeapon_SMOKEGRENADE,
+ CSWeapon_ELITE,
+ CSWeapon_FIVESEVEN,
+ CSWeapon_UMP45,
+ CSWeapon_SG550,
+ CSWeapon_GALIL,
+ CSWeapon_FAMAS,
+ CSWeapon_USP,
+ CSWeapon_AWP,
+ CSWeapon_MP5NAVY,
+ CSWeapon_M249,
+ CSWeapon_M3,
+ CSWeapon_M4A1,
+ CSWeapon_TMP,
+ CSWeapon_G3SG1,
+ CSWeapon_FLASHBANG,
+ CSWeapon_DEAGLE,
+ CSWeapon_SG552,
+ CSWeapon_AK47,
+ CSWeapon_KNIFE,
+ CSWeapon_P90,
+ CSWeapon_SHIELD,
+ CSWeapon_KEVLAR,
+ CSWeapon_ASSAULTSUIT,
+ CSWeapon_NIGHTVISION,
+ CSWeapon_GALILAR,
+ CSWeapon_BIZON,
+ CSWeapon_MAG7,
+ CSWeapon_NEGEV,
+ CSWeapon_SAWEDOFF,
+ CSWeapon_TEC9,
+ CSWeapon_TASER,
+ CSWeapon_HKP2000,
+ CSWeapon_MP7,
+ CSWeapon_MP9,
+ CSWeapon_NOVA,
+ CSWeapon_P250,
+ CSWeapon_SCAR17,
+ CSWeapon_SCAR20,
+ CSWeapon_SG556,
+ CSWeapon_SSG08,
+ CSWeapon_KNIFE_GG,
+ CSWeapon_MOLOTOV,
+ CSWeapon_DECOY,
+ CSWeapon_INCGRENADE,
+ CSWeapon_DEFUSER
+};
+
+/**
+ * Called when a player attempts to purchase an item.
+ * Return Plugin_Continue to allow the purchase or return a
+ * higher action to deny.
+ *
+ * @param client Client index
+ * @param weapon User input for weapon name
+ */
+forward Action:CS_OnBuyCommand(client, const String:weapon[]);
+
+/**
+ * Called when CSWeaponDrop is called
+ * Return Plugin_Continue to allow the call or return a
+ * higher action to deny.
+ *
+ * @param client Client index
+ * @param weaponIndex Weapon index
+ */
+forward Action:CS_OnCSWeaponDrop(client, weaponIndex);
+
+/**
+ * Called when game retrieves a weapon's price for a player.
+ * Return Plugin_Continue to use default value or return a higher
+ * action to use a newly-set price.
+ *
+ * @note This can be called multiple times per weapon purchase
+ *
+ * @param client Client index
+ * @param weapon Weapon classname
+ * @param price Buffer param for the price of the weapon
+ *
+ * @note Not all "weapons" call GetWeaponPrice. Example: c4, knife, vest, vest helmet, night vision.
+ */
+forward Action:CS_OnGetWeaponPrice(client, const String:weapon[], &price);
+
+/**
+ * Called when TerminateRound is called.
+ * Return Plugin_Continue to ignore, return Plugin_Changed to continue,
+ * using the given delay and reason, or return Plugin_Handled or a higher
+ * action to block TerminateRound from firing.
+ *
+ * @param delay Time (in seconds) until new round starts
+ * @param reason Reason for round end
+ */
+forward Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason);
+
+/**
+ * Respawns a player.
+ *
+ * @param client Player's index.
+ * @noreturn
+ * @error Invalid client index, client not in game.
+ */
+native CS_RespawnPlayer(client);
+
+/**
+ * Switches the player's team.
+ *
+ * @param client Player's index.
+ * @param team Team index.
+ * @noreturn
+ * @error Invalid client index, client not in game.
+ */
+native CS_SwitchTeam(client, team);
+
+/**
+ * Forces a player to drop or toss their weapon
+ *
+ * @param client Player's index.
+ * @param weaponIndex Index of weapon to drop.
+ * @param toss True to toss weapon (with velocity) or false to just drop weapon
+ * @param blockhook Set to true to stop the corresponding CS_OnCSWeaponDrop
+ *
+ * @noreturn
+ * @error Invalid client index, client not in game, or invalid weapon index.
+ */
+native CS_DropWeapon(client, weaponIndex, bool:toss, bool:blockhook = false);
+
+/**
+ * Forces round to end with a reason
+ *
+ * @param delay Time (in seconds) to delay before new round starts
+ * @param reason Reason for the round ending
+ * @param blockhook Set to true to stop the corresponding CS_OnTerminateRound
+ * forward from being called.
+ * @noreturn
+ */
+native CS_TerminateRound(Float:delay, CSRoundEndReason:reason, bool:blockhook = false);
+
+/**
+ * Gets a weapon name from a weapon alias
+ *
+ * @param alias Weapons alias to get weapon name for.
+ * @param weapon Buffer to store weapons name
+ * @param size Size of buffer to store the weapons name.
+ * @noreturn
+ *
+ * @note Will set the buffer to the original alias if it is not an alias to a weapon.
+ */
+native CS_GetTranslatedWeaponAlias(const String:alias[], String:weapon[], size);
+
+/**
+ * Gets a weapon's price
+ *
+ * @param client Client to check weapon price for.
+ * @param id Weapon id for the weapon to check
+ * @param defaultprice Set to true to get defaultprice.
+ * @return Returns price of the weapon (even if modified)
+ *
+ * @error Invalid client, failing to get weapon info, or failing to get price offset.
+ * @note c4, knife and shield will always return 0. vest, vest helmet and night vision will always return default price.
+ */
+native CS_GetWeaponPrice(client, CSWeaponID:id, bool:defaultprice = false);
+
+/**
+ * Gets a clients clan tag
+ * @param client Client index to get clan tag for.
+ * @param buffer Buffer to store clients clan tag in.
+ * @param size Size of the buffer.
+ * @return Number of non-null bytes written.
+ *
+ * @error Invalid client.
+ */
+native CS_GetClientClanTag(client, String:buffer[], size);
+
+/**
+ * Sets a clients clan tag
+ * @param client Client index to set clan tag for.
+ * @param tag Tag to set clients clan tag as.
+ * @noreturn
+ *
+ * @error Invalid client.
+ */
+native CS_SetClientClanTag(client, const String:tag[]);
+
+/**
+ * Gets a team's score
+ * @param team Team index to get score for.
+ * @return Returns the internal team score.
+ *
+ * @error Invalid team index.
+ */
+native CS_GetTeamScore(team);
+
+/**
+ * Sets a team's score
+ * @param team Team index to set score for.
+ * @param value Value to set teams score as.
+ * @noreturn
+ *
+ * @error Invalid team index.
+ * @note This will update the scoreboard only after the scoreboard update function is called. Use SetTeamScore plus this to update the scoreboard instantly and save values correctly.
+ */
+native CS_SetTeamScore(team, value);
+
+/**
+ * Gets a client's mvp count
+ * @param client Client index to get mvp count of.
+ * @return Returns the client's internal MVP count.
+ *
+ * @error Invalid client.
+ */
+native CS_GetMVPCount(client);
+
+/**
+ * Sets a client's mvp count
+ * @param client Client index to set mvp count for.
+ * @param value Value to set client's mvp count as.
+ * @noreturn
+ *
+ * @error Invalid client.
+ */
+native CS_SetMVPCount(client, value);
+
+/**
+ * Gets a client's contribution score (CS:GO only)
+ * @param client Client index to get score of.
+ * @return Returns the client's score.
+ *
+ * @error Invalid client.
+ */
+native CS_GetClientContributionScore(client);
+
+/**
+ * Sets a client's contribution score (CS:GO only)
+ * @param client Client index to set score for.
+ * @param value Value to set client's score as.
+ * @noreturn
+ *
+ * @error Invalid client.
+ */
+native CS_SetClientContributionScore(client, value);
+
+/**
+ * Gets a client's assists (CS:GO only)
+ * @param client Client index to get assists of.
+ * @return Returns the client's assists.
+ *
+ * @error Invalid client.
+ */
+native CS_GetClientAssists(client);
+
+/**
+ * Sets a client's assists (CS:GO only)
+ * @param client Client index to set assists for.
+ * @param value Value to set client's assists as.
+ * @noreturn
+ *
+ * @error Invalid client.
+ */
+native CS_SetClientAssists(client, value);
+
+/**
+ * Gets a weaponID from a alias
+ * @param alias Weapon alias to attempt to get an id for.
+ * @return Returns a weapon id or 0 if failed to find a match.
+ *
+ * @note For best results use CS_GetTranslatedWeaponAlias on the weapon name before passing it.
+ */
+native CSWeaponID:CS_AliasToWeaponID(const String:alias[]);
+
+/**
+ * Gets a alias from a weaponID
+ * @param weaponID WeaponID to get alias for.
+ * @param destination Destination string to hold the weapon alias.
+ * @param len Length of the destination array.
+ * @return Returns number of cells written.
+ */
+native CS_WeaponIDToAlias(CSWeaponID:weaponID, String:destination[], len);
+
+/**
+ * Returns weather a WeaponID is valid on the current mod (css or csgo)
+ * @param weaponID WeaponID to check
+ * @return Returns true if its a valid WeaponID false otherwise.
+ *
+ * @note This will return false always for CSWeapon_NONE
+ */
+native bool:CS_IsValidWeaponID(CSWeaponID:id);
+
+/**
+ * Sets a player's model based on their current class
+ *
+ * @param client Player's index.
+ * @noreturn
+ * @error Invalid client index, client not in game.
+ */
+native CS_UpdateClientModel(client);
+
+/**
+ * Do not edit below this line!
+ */
+public Extension:__ext_cstrike =
+{
+ name = "cstrike",
+ file = "games/game.cstrike.ext",
+ autoload = 0,
+#if defined REQUIRE_EXTENSIONS
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+#if !defined REQUIRE_EXTENSIONS
+public __ext_cstrike_SetNTVOptional()
+{
+ MarkNativeAsOptional("CS_RespawnPlayer");
+ MarkNativeAsOptional("CS_SwitchTeam");
+ MarkNativeAsOptional("CS_DropWeapon");
+ MarkNativeAsOptional("CS_TerminateRound");
+ MarkNativeAsOptional("CS_GetTranslatedWeaponAlias");
+ MarkNativeAsOptional("CS_GetWeaponPrice");
+ MarkNativeAsOptional("CS_GetClientClanTag");
+ MarkNativeAsOptional("CS_SetClientClanTag");
+ MarkNativeAsOptional("CS_GetTeamScore");
+ MarkNativeAsOptional("CS_SetTeamScore");
+ MarkNativeAsOptional("CS_GetMVPCount");
+ MarkNativeAsOptional("CS_SetMVPCount");
+ MarkNativeAsOptional("CS_GetClientContributionScore");
+ MarkNativeAsOptional("CS_SetClientContributionScore");
+ MarkNativeAsOptional("CS_GetClientAssists");
+ MarkNativeAsOptional("CS_SetClientAssists");
+ MarkNativeAsOptional("CS_AliasToWeaponID");
+ MarkNativeAsOptional("CS_WeaponIDToAlias");
+ MarkNativeAsOptional("CS_IsValidWeaponID");
+ MarkNativeAsOptional("CS_UpdateClientModel");
+}
+#endif
+
diff --git a/addons/sourcemod/scripting/include/datapack.inc b/addons/sourcemod/scripting/include/datapack.inc
new file mode 100644
index 0000000..ce3d8b7
--- /dev/null
+++ b/addons/sourcemod/scripting/include/datapack.inc
@@ -0,0 +1,142 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _datapack_included
+ #endinput
+#endif
+#define _datapack_included
+
+/**
+ * Creates a new data pack.
+ *
+ * @return A Handle to the data pack. Must be closed with CloseHandle().
+ */
+native Handle:CreateDataPack();
+
+/**
+ * Packs a normal cell into a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @param cell Cell to add.
+ * @noreturn
+ * @error Invalid handle.
+ */
+native WritePackCell(Handle:pack, any:cell);
+
+/**
+ * Packs a float into a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @param val Float to add.
+ * @noreturn
+ * @error Invalid handle.
+ */
+native WritePackFloat(Handle:pack, Float:val);
+
+/**
+ * Packs a string into a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @param str String to add.
+ * @noreturn
+ * @error Invalid handle.
+ */
+native WritePackString(Handle:pack, const String:str[]);
+
+/**
+ * Reads a cell from a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @return Cell value.
+ * @error Invalid handle, or bounds error.
+ */
+native any:ReadPackCell(Handle:pack);
+
+/**
+ * Reads a float from a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @return Float value.
+ * @error Invalid handle, or bounds error.
+ */
+native Float:ReadPackFloat(Handle:pack);
+
+/**
+ * Reads a string from a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @param buffer Destination string buffer.
+ * @param maxlen Maximum length of output string buffer.
+ * @noreturn
+ * @error Invalid handle, or bounds error.
+ */
+native ReadPackString(Handle:pack, String:buffer[], maxlen);
+
+/**
+ * Resets the position in a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @param clear If true, clears the contained data.
+ * @noreturn
+ * @error Invalid handle.
+ */
+native ResetPack(Handle:pack, bool:clear=false);
+
+/**
+ * Returns the read or write position in a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @return Numerical position in the data pack.
+ * @error Invalid handle.
+ */
+native GetPackPosition(Handle:pack);
+
+/**
+ * Sets the read/write position in a data pack.
+ *
+ * @param pack Handle to the data pack.
+ * @param position New position to set.
+ * @noreturn
+ * @error Invalid handle, or position is beyond the pack bounds.
+ */
+native SetPackPosition(Handle:pack, position);
+
+/**
+ * Returns whether or not a specified number of bytes from the data pack
+ * position to the end can be read.
+ *
+ * @param pack Handle to the data pack.
+ * @param bytes Number of bytes to simulate reading.
+ * @return True if can be read, false otherwise.
+ * @error Invalid handle.
+ */
+native bool:IsPackReadable(Handle:pack, bytes);
diff --git a/addons/sourcemod/scripting/include/dbi.inc b/addons/sourcemod/scripting/include/dbi.inc
new file mode 100644
index 0000000..bbb1d6e
--- /dev/null
+++ b/addons/sourcemod/scripting/include/dbi.inc
@@ -0,0 +1,762 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _dbi_included
+ #endinput
+#endif
+#define _dbi_included
+
+/**
+ * @handle Driver
+ *
+ * Contains information about an SQL driver.
+ */
+
+/**
+ * @handle Database
+ *
+ * Contains information about a database connection.
+ */
+
+/**
+ * @handle Query
+ *
+ * Contains information about an active query and its
+ * result sets.
+ */
+
+/**
+ * @handle Statement : Query
+ *
+ * Extends a Query Handle and can be used as a Query Handle.
+ * Statement Handles are for prepared queries and contain
+ * their own function for binding parameters. Statement
+ * Handles can be used instead of database Handles in a few
+ * select functions.
+ */
+
+/**
+ * Describes a database field fetch status.
+ */
+enum DBResult
+{
+ DBVal_Error = 0, /**< Column number/field is invalid. */
+ DBVal_TypeMismatch = 1, /**< You cannot retrieve this data with this type. */
+ DBVal_Null = 2, /**< Field has no data (NULL) */
+ DBVal_Data = 3, /**< Field has data */
+};
+
+/**
+ * Describes binding types.
+ */
+enum DBBindType
+{
+ DBBind_Int = 0, /**< Bind an integer. */
+ DBBind_Float = 1, /**< Bind a float. */
+ DBBind_String = 2, /**< Bind a string. */
+};
+
+/**
+ * Threading priority level.
+ */
+enum DBPriority
+{
+ DBPrio_High = 0, /**< High priority. */
+ DBPrio_Normal = 1, /**< Normal priority. */
+ DBPrio_Low = 2, /**< Low priority. */
+};
+
+/**
+ * Creates an SQL connection from a named configuration.
+ *
+ * @param confname Named configuration.
+ * @param persistent True to re-use a previous persistent connection if
+ * possible, false otherwise.
+ * @param error Error buffer.
+ * @param maxlength Maximum length of the error buffer.
+ * @return A database connection Handle, or INVALID_HANDLE on failure.
+ */
+native Handle:SQL_Connect(const String:confname[], bool:persistent, String:error[], maxlength);
+
+/**
+ * Creates a default SQL connection.
+ *
+ * @param error Error buffer.
+ * @param maxlength Maximum length of the error buffer.
+ * @param persistent True to re-use a previous persistent connection
+ * if possible, false otherwise.
+ * @return A database connection Handle, or INVALID_HANDLE on failure.
+ * On failure the error buffer will be filled with a message.
+ */
+stock Handle:SQL_DefConnect(String:error[], maxlength, bool:persistent=true)
+{
+ return SQL_Connect("default", persistent, error, maxlength);
+}
+
+/**
+ * Connects to a database using key value pairs containing the database info.
+ * The key/value pairs should match what would be in databases.cfg.
+ *
+ * I.e. "driver" should be "default" or a driver name (or ommitted for
+ * the default). For SQLite, only the "database" parameter is needed in addition.
+ * For drivers which require external connections, more of the parameters may be
+ * needed.
+ *
+ * In general it is discouraged to use this function. Connections should go through
+ * databases.cfg for greatest flexibility on behalf of users.
+ *
+ * @param keyvalues Key/value pairs from a KeyValues handle, describing the connection.
+ * @param error Error buffer.
+ * @param maxlength Maximum length of the error buffer.
+ * @param persistent True to re-use a previous persistent connection if
+ * possible, false otherwise.
+ * @return A database connection Handle, or INVALID_HANDLE on failure.
+ * On failure the error buffer will be filled with a message.
+ * @error Invalid KeyValues handle.
+ */
+native Handle:SQL_ConnectCustom(Handle:keyvalues,
+ String:error[],
+ maxlength,
+ bool:persistent);
+
+/**
+ * Grabs a handle to an SQLite database, creating one if it does not exist.
+ *
+ * Unless there are extenuating circumstances, you should consider using "sourcemod-local" as the
+ * database name. This provides some unification between plugins on behalf of users.
+ *
+ * As a precaution, you should always create some sort of unique prefix to your table names so
+ * there are no conflicts, and you should never drop or modify tables that you do not own.
+ *
+ * @param database Database name.
+ * @param error Error buffer.
+ * @param maxlength Maximum length of the error buffer.
+ * @return A database connection Handle, or INVALID_HANDLE on failure.
+ * On failure the error buffer will be filled with a message.
+ */
+stock Handle:SQLite_UseDatabase(const String:database[],
+ String:error[],
+ maxlength)
+{
+ new Handle:kv, Handle:db;
+
+ kv = CreateKeyValues("");
+ KvSetString(kv, "driver", "sqlite");
+ KvSetString(kv, "database", database);
+
+ db = SQL_ConnectCustom(kv, error, maxlength, false);
+
+ CloseHandle(kv);
+
+ return db;
+}
+
+/**
+ * This function is deprecated. Use SQL_ConnectCustom or SQLite_UseDatabase instead.
+ */
+#pragma deprecated Use SQL_ConnectCustom instead.
+native Handle:SQL_ConnectEx(Handle:driver,
+ const String:host[],
+ const String:user[],
+ const String:pass[],
+ const String:database[],
+ String:error[],
+ maxlength,
+ bool:persistent=true,
+ port=0,
+ maxTimeout=0);
+
+/**
+ * Returns if a named configuration is present in databases.cfg.
+ *
+ * @param name Configuration name.
+ * @return True if it exists, false otherwise.
+ */
+native bool:SQL_CheckConfig(const String:name[]);
+
+/**
+ * Returns a driver Handle from a name string.
+ *
+ * If the driver is not found, SourceMod will attempt
+ * to load an extension named dbi..ext.[dll|so].
+ *
+ * @param name Driver identification string, or an empty
+ * string to return the default driver.
+ * @return Driver Handle, or INVALID_HANDLE on failure.
+ */
+native Handle:SQL_GetDriver(const String:name[]="");
+
+/**
+ * Reads the driver of an opened database.
+ *
+ * @param database Database Handle.
+ * @param ident Option buffer to store the identification string.
+ * @param ident_length Maximum length of the buffer.
+ * @return Driver Handle.
+ */
+native Handle:SQL_ReadDriver(Handle:database, String:ident[]="", ident_length=0);
+
+/**
+ * Retrieves a driver's identification string.
+ *
+ * Example: "mysql", "sqlite"
+ *
+ * @param driver Driver Handle, or INVALID_HANDLE for the default driver.
+ * @param ident Identification string buffer.
+ * @param maxlength Maximum length of the buffer.
+ * @noreturn
+ * @error Invalid Handle other than INVALID_HANDLE.
+ */
+native SQL_GetDriverIdent(Handle:driver, String:ident[], maxlength);
+
+/**
+ * Retrieves a driver's product string.
+ *
+ * Example: "MySQL", "SQLite"
+ *
+ * @param driver Driver Handle, or INVALID_HANDLE for the default driver.
+ * @param product Product string buffer.
+ * @param maxlength Maximum length of the buffer.
+ * @noreturn
+ * @error Invalid Handle other than INVALID_HANDLE.
+ */
+native SQL_GetDriverProduct(Handle:driver, String:product[], maxlength);
+
+/**
+ * Sets the character set of the current connection.
+ * Like SET NAMES .. in mysql, but stays after connection problems.
+ *
+ * Example: "utf8", "latin1"
+ *
+ * @param database Database Handle.
+ * @param characterset The character set string to change to.
+ * @return True, if character set was changed, false otherwise.
+ */
+native bool:SQL_SetCharset(Handle:database, const String:charset[]);
+
+/**
+ * Returns the number of affected rows from the last query.
+ *
+ * @param hndl A database OR statement Handle.
+ * @return Number of rows affected by the last query.
+ * @error Invalid database or statement Handle.
+ */
+native SQL_GetAffectedRows(Handle:hndl);
+
+/**
+ * Returns the last query's insertion id.
+ *
+ * @param hndl A database, query, OR statement Handle.
+ * @return Last query's insertion id.
+ * @error Invalid database, query, or statement Handle.
+ */
+native SQL_GetInsertId(Handle:hndl);
+
+/**
+ * Returns the error reported by the last query.
+ *
+ * @param hndl A database, query, OR statement Handle.
+ * @param error Error buffer.
+ * @param maxlength Maximum length of the buffer.
+ * @return True if there was an error, false otherwise.
+ * @error Invalid database, query, or statement Handle.
+ */
+native bool:SQL_GetError(Handle:hndl, String:error[], maxlength);
+
+/**
+ * Escapes a database string for literal insertion. This is not needed
+ * for binding strings in prepared statements.
+ *
+ * Generally, database strings are inserted into queries enclosed in
+ * single quotes ('). If user input has a single quote in it, the
+ * quote needs to be escaped. This function ensures that any unsafe
+ * characters are safely escaped according to the database engine and
+ * the database's character set.
+ *
+ * NOTE: SourceMod only guarantees properly escaped strings when the query
+ * encloses the string in ''. While drivers tend to allow " instead, the string
+ * may be not be escaped (for example, on SQLite)!
+ *
+ * @param database A database Handle.
+ * @param string String to quote.
+ * @param buffer Buffer to store quoted string in.
+ * @param maxlength Maximum length of the buffer.
+ * @param written Optionally returns the number of bytes written.
+ * @return True on success, false if buffer is not big enough.
+ * The buffer must be at least 2*strlen(string)+1.
+ * @error Invalid database or statement Handle.
+ */
+native bool:SQL_EscapeString(Handle:database,
+ const String:string[],
+ String:buffer[],
+ maxlength,
+ &written=0);
+
+/**
+ * This is a backwards compatibility stock. You should use SQL_EscapeString()
+ * instead, as this function will probably be deprecated in SourceMod 1.1.
+ */
+stock bool:SQL_QuoteString(Handle:database,
+ const String:string[],
+ String:buffer[],
+ maxlength,
+ &written=0)
+{
+ return SQL_EscapeString(database, string, buffer, maxlength, written);
+}
+
+/**
+ * Executes a query and ignores the result set.
+ *
+ * @param database A database Handle.
+ * @param query Query string.
+ * @param len Optional parameter to specify the query length, in
+ * bytes. This can be used to send binary queries that
+ * have a premature terminator.
+ * @return True if query succeeded, false otherwise. Use
+ * SQL_GetError to find the last error.
+ * @error Invalid database Handle.
+ */
+native bool:SQL_FastQuery(Handle:database, const String:query[], len=-1);
+
+/**
+ * Executes a simple query and returns a new query Handle for
+ * receiving the results.
+ *
+ * @param database A database Handle.
+ * @param query Query string.
+ * @param len Optional parameter to specify the query length, in
+ * bytes. This can be used to send binary queries that
+ * have a premature terminator.
+ * @return A new Query Handle on success, INVALID_HANDLE
+ * otherwise. The Handle must be freed with CloseHandle().
+ * @error Invalid database Handle.
+ */
+native Handle:SQL_Query(Handle:database, const String:query[], len=-1);
+
+/**
+ * Creates a new prepared statement query. Prepared statements can
+ * be executed any number of times. They can also have placeholder
+ * parameters, similar to variables, which can be bound safely and
+ * securely (for example, you do not need to quote bound strings).
+ *
+ * Statement handles will work in any function that accepts a Query handle.
+ *
+ * @param database A database Handle.
+ * @param query Query string.
+ * @param error Error buffer.
+ * @param maxlength Maximum size of the error buffer.
+ * @return A new statement Handle on success, INVALID_HANDLE
+ * otherwise. The Handle must be freed with CloseHandle().
+ * @error Invalid database Handle.
+ */
+native Handle:SQL_PrepareQuery(Handle:database, const String:query[], String:error[], maxlength);
+
+/**
+ * Advances to the next set of results.
+ *
+ * In some SQL implementations, multiple result sets can exist on one query.
+ * This is possible in MySQL with simple queries when executing a CALL
+ * query. If this is the case, all result sets must be processed before
+ * another query is made.
+ *
+ * @param query A query Handle.
+ * @return True if there was another result set, false otherwise.
+ * @error Invalid query Handle.
+ */
+native bool:SQL_FetchMoreResults(Handle:query);
+
+/**
+ * Returns whether or not a result set exists. This will
+ * return true even if 0 results were returned, but false
+ * on queries like UPDATE, INSERT, or DELETE.
+ *
+ * @param query A query (or statement) Handle.
+ * @return True if there is a result set, false otherwise.
+ * @error Invalid query Handle.
+ */
+native bool:SQL_HasResultSet(Handle:query);
+
+/**
+ * Retrieves the number of rows in the last result set.
+ *
+ * @param query A query (or statement) Handle.
+ * @return Number of rows in the current result set.
+ * @error Invalid query Handle.
+ */
+native SQL_GetRowCount(Handle:query);
+
+/**
+ * Retrieves the number of fields in the last result set.
+ *
+ * @param query A query (or statement) Handle.
+ * @return Number of fields in the current result set.
+ * @error Invalid query Handle.
+ */
+native SQL_GetFieldCount(Handle:query);
+
+/**
+ * Retrieves the name of a field by index.
+ *
+ * @param query A query (or statement) Handle.
+ * @param field Field number (starting from 0).
+ * @param name Name buffer.
+ * @param maxlength Maximum length of the name buffer.
+ * @noreturn
+ * @error Invalid query Handle, invalid field index, or
+ * no current result set.
+ */
+native SQL_FieldNumToName(Handle:query, field, String:name[], maxlength);
+
+/**
+ * Retrieves a field index by name.
+ *
+ * @param query A query (or statement) Handle.
+ * @param name Name of the field (case sensitive).
+ * @param field Variable to store field index in.
+ * @return True if found, false if not found.
+ * @error Invalid query Handle or no current result set.
+ */
+native bool:SQL_FieldNameToNum(Handle:query, const String:name[], &field);
+
+/**
+ * Fetches a row from the current result set. This must be
+ * successfully called before any results are fetched.
+ *
+ * If this function fails, SQL_MoreResults() can be used to
+ * tell if there was an error or the result set is finished.
+ *
+ * @param query A query (or statement) Handle.
+ * @return True if a row was fetched, false otherwise.
+ * @error Invalid query Handle.
+ */
+native bool:SQL_FetchRow(Handle:query);
+
+/**
+ * Returns if there are more rows.
+ *
+ * @param query A query (or statement) Handle.
+ * @return True if there are more rows, false otherwise.
+ * @error Invalid query Handle.
+ */
+native bool:SQL_MoreRows(Handle:query);
+
+/**
+ * Rewinds a result set back to the first result.
+ *
+ * @param query A query (or statement) Handle.
+ * @return True on success, false otherwise.
+ * @error Invalid query Handle or no current result set.
+ */
+native bool:SQL_Rewind(Handle:query);
+
+/**
+ * Fetches a string from a field in the current row of a result set.
+ * If the result is NULL, an empty string will be returned. A NULL
+ * check can be done with the result parameter, or SQL_IsFieldNull().
+ *
+ * @param query A query (or statement) Handle.
+ * @param field The field index (starting from 0).
+ * @param buffer String buffer.
+ * @param maxlength Maximum size of the string buffer.
+ * @param result Optional variable to store the status of the return value.
+ * @return Number of bytes written.
+ * @error Invalid query Handle or field index, invalid
+ * type conversion requested from the database,
+ * or no current result set.
+ */
+native SQL_FetchString(Handle:query, field, String:buffer[], maxlength, &DBResult:result=DBVal_Error);
+
+/**
+ * Fetches a float from a field in the current row of a result set.
+ * If the result is NULL, a value of 0.0 will be returned. A NULL
+ * check can be done with the result parameter, or SQL_IsFieldNull().
+ *
+ * @param query A query (or statement) Handle.
+ * @param field The field index (starting from 0).
+ * @param result Optional variable to store the status of the return value.
+ * @return A float value.
+ * @error Invalid query Handle or field index, invalid
+ * type conversion requested from the database,
+ * or no current result set.
+ */
+native Float:SQL_FetchFloat(Handle:query, field, &DBResult:result=DBVal_Error);
+
+/**
+ * Fetches an integer from a field in the current row of a result set.
+ * If the result is NULL, a value of 0 will be returned. A NULL
+ * check can be done with the result parameter, or SQL_IsFieldNull().
+ *
+ * @param query A query (or statement) Handle.
+ * @param field The field index (starting from 0).
+ * @param result Optional variable to store the status of the return value.
+ * @return An integer value.
+ * @error Invalid query Handle or field index, invalid
+ * type conversion requested from the database,
+ * or no current result set.
+ */
+native SQL_FetchInt(Handle:query, field, &DBResult:result=DBVal_Error);
+
+/**
+ * Returns whether a field's data in the current row of a result set is
+ * NULL or not. NULL is an SQL type which means "no data."
+ *
+ * @param query A query (or statement) Handle.
+ * @param field The field index (starting from 0).
+ * @return True if data is NULL, false otherwise.
+ * @error Invalid query Handle or field index, or no
+ * current result set.
+ */
+native bool:SQL_IsFieldNull(Handle:query, field);
+
+/**
+ * Returns the length of a field's data in the current row of a result
+ * set. This only needs to be called for strings to determine how many
+ * bytes to use. Note that the return value does not include the null
+ * terminator.
+ *
+ * @param query A query (or statement) Handle.
+ * @param field The field index (starting from 0).
+ * @return Number of bytes for the field's data size.
+ * @error Invalid query Handle or field index or no
+ * current result set.
+ */
+native SQL_FetchSize(Handle:query, field);
+
+/**
+ * Binds a parameter in a prepared statement to a given integer value.
+ *
+ * @param statement A statement (prepared query) Handle.
+ * @param param The parameter index (starting from 0).
+ * @param number The number to bind.
+ * @param signed True to bind the number as signed, false to
+ * bind it as unsigned.
+ * @noreturn
+ * @error Invalid statement Handle or parameter index, or
+ * SQL error.
+ */
+native SQL_BindParamInt(Handle:statement, param, number, bool:signed=true);
+
+/**
+ * Binds a parameter in a prepared statement to a given float value.
+ *
+ * @param statement A statement (prepared query) Handle.
+ * @param param The parameter index (starting from 0).
+ * @param value The float number to bind.
+ * @noreturn
+ * @error Invalid statement Handle or parameter index, or
+ * SQL error.
+ */
+native SQL_BindParamFloat(Handle:statement, param, Float:value);
+
+/**
+ * Binds a parameter in a prepared statement to a given string value.
+ *
+ * @param statement A statement (prepared query) Handle.
+ * @param param The parameter index (starting from 0).
+ * @param value The string to bind.
+ * @param copy Whether or not SourceMod should copy the value
+ * locally if necessary. If the string contents
+ * won't change before calling SQL_Execute(), this
+ * can be set to false for optimization.
+ * @noreturn
+ * @error Invalid statement Handle or parameter index, or
+ * SQL error.
+ */
+native SQL_BindParamString(Handle:statement, param, const String:value[], bool:copy);
+
+/**
+ * Executes a prepared statement. All parameters must be bound beforehand.
+ *
+ * @param statement A statement (prepared query) Handle.
+ * @return True on success, false on failure.
+ * @error Invalid statement Handle.
+ */
+native bool:SQL_Execute(Handle:statement);
+
+/**
+ * Locks a database so threading operations will not interrupt.
+ *
+ * If you are using a database Handle for both threading and non-threading,
+ * this MUST be called before doing any set of non-threading DB operations.
+ * Otherwise you risk corrupting the database driver's memory or network
+ * connection.
+ *
+ * Leaving a lock on a database and then executing a threaded query results
+ * in a dead lock! Make sure to call SQL_UnlockDatabase()!
+ *
+ * If the lock cannot be acquired, the main thread will pause until the
+ * threaded operation has concluded.
+ *
+ * @param database A database Handle.
+ * @noreturn
+ * @error Invalid database Handle.
+ */
+native SQL_LockDatabase(Handle:database);
+
+/**
+ * Unlocks a database so threading operations may continue.
+ *
+ * @param database A database Handle.
+ * @noreturn
+ * @error Invalid database Handle.
+ */
+native SQL_UnlockDatabase(Handle:database);
+
+/**
+ * General callback for threaded SQL stuff.
+ *
+ * @param owner Parent object of the Handle (or INVALID_HANDLE if none).
+ * @param hndl Handle to the child object (or INVALID_HANDLE if none).
+ * @param error Error string if there was an error. The error could be
+ * empty even if an error condition exists, so it is important
+ * to check the actual Handle value instead.
+ * @param data Data passed in via the original threaded invocation.
+ * @param
+ */
+functag public SQLTCallback(Handle:owner, Handle:hndl, const String:error[], any:data);
+
+/**
+ * Tells whether two database handles both point to the same database
+ * connection.
+ *
+ * @param hndl1 First database Handle.
+ * @param hndl2 Second database Handle.
+ * @return True if the Handles point to the same
+ * connection, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:SQL_IsSameConnection(Handle:hndl1, Handle:hndl2);
+
+/**
+ * Connects to a database via a thread. This can be used instead of
+ * SQL_Connect() if you wish for non-blocking functionality.
+ *
+ * It is not necessary to use this to use threaded queries. However, if you
+ * don't (or you mix threaded/non-threaded queries), you should see
+ * SQL_LockDatabase().
+ *
+ * @param callback Callback; new Handle will be in hndl, owner is the driver.
+ * If no driver was found, the owner is INVALID_HANDLE.
+ * @param name Database name.
+ * @param data Extra data value to pass to the callback.
+ * @noreturn
+ */
+native SQL_TConnect(SQLTCallback:callback, const String:name[]="default", any:data=0);
+
+/**
+ * Executes a simple query via a thread. The query Handle is passed through
+ * the callback.
+ *
+ * The database Handle returned through the callback is always a new Handle,
+ * and if necessary, SQL_IsSameConnection() should be used to test against
+ * other conenctions.
+ *
+ * The query Handle returned through the callback is temporary and destroyed
+ * at the end of the callback. If you need to hold onto it, use CloneHandle().
+ *
+ * @param database A database Handle.
+ * @param callback Callback; database is in "owner" and the query Handle
+ * is passed in "hndl".
+ * @param query Query string.
+ * @param data Extra data value to pass to the callback.
+ * @param prio Priority queue to use.
+ * @noreturn
+ * @error Invalid database Handle.
+ */
+native SQL_TQuery(Handle:database, SQLTCallback:callback, const String:query[], any:data=0, DBPriority:prio=DBPrio_Normal);
+
+/**
+ * Creates a new transaction object. A transaction object is a list of queries
+ * that can be sent to the database thread and executed as a single transaction.
+ *
+ * @return A transaction handle.
+ */
+native Handle:SQL_CreateTransaction();
+
+/**
+ * Adds a query to a transaction object.
+ *
+ * @param txn A transaction handle.
+ * @param query Query string.
+ * @param data Extra data value to pass to the final callback.
+ * @return The index of the query in the transaction's query list.
+ * @error Invalid transaction handle.
+ */
+native SQL_AddQuery(Handle:txn, const String:query[], any:data=0);
+
+/**
+ * Callback for a successful transaction.
+ *
+ * @param db Database handle.
+ * @param data Data value passed to SQL_ExecuteTransaction().
+ * @param numQueries Number of queries executed in the transaction.
+ * @param results An array of Query handle results, one for each of numQueries. They are closed automatically.
+ * @param queryData An array of each data value passed to SQL_AddQuery().
+ * @noreturn
+ */
+functag public SQLTxnSuccess(Handle:db, any:data, numQueries, Handle:results[], any:queryData[]);
+
+/**
+ * Callback for a failed transaction.
+ *
+ * @param db Database handle.
+ * @param data Data value passed to SQL_ExecuteTransaction().
+ * @param numQueries Number of queries executed in the transaction.
+ * @param error Error message.
+ * @param failIndex Index of the query that failed, or -1 if something else.
+ * @param queryData An array of each data value passed to SQL_AddQuery().
+ * @noreturn
+ */
+functag public SQLTxnFailure(Handle:db, any:data, numQueries, const String:error[], failIndex, any:queryData[]);
+
+/**
+ * Sends a transaction to the database thread. The transaction handle is
+ * automatically closed. When the transaction completes, the optional
+ * callback is invoked.
+ *
+ * @param db A database handle.
+ * @param txn A transaction handle.
+ * @param onSuccess An optional callback to receive a successful transaction.
+ * @param onError An optional callback to receive an error message.
+ * @param data An optional value to pass to callbacks.
+ * @param prio Priority queue to use.
+ * @noreturn
+ * @error An invalid handle.
+ */
+native SQL_ExecuteTransaction(
+ Handle:db,
+ Handle:txn,
+ SQLTxnSuccess:onSuccess=SQLTxnSuccess:-1,
+ SQLTxnFailure:onError=SQLTxnFailure:-1,
+ any:data=0,
+ DBPriority:priority=DBPrio_Normal);
diff --git a/addons/sourcemod/scripting/include/donate.inc b/addons/sourcemod/scripting/include/donate.inc
new file mode 100644
index 0000000..8911ad1
--- /dev/null
+++ b/addons/sourcemod/scripting/include/donate.inc
@@ -0,0 +1,24 @@
+#if defined _donate_Included_
+ #endinput
+#endif
+#define _donate_Included_
+
+public SharedPlugin:__pl_donate =
+{
+ name = "donate",
+ file = "donate.smx",
+#if defined REQUIRE_PLUGIN
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+native Donate_RegisterHandler(String:name[], Function:callback);
+native Donate_RemoveHandler(String:name[]);
+
+public __pl_donate_SetNTVOptional()
+{
+ MarkNativeAsOptional("Donate_RegisterHandler");
+ MarkNativeAsOptional("Donate_RemoveHandler");
+}
\ No newline at end of file
diff --git a/addons/sourcemod/scripting/include/entity.inc b/addons/sourcemod/scripting/include/entity.inc
new file mode 100644
index 0000000..d33a3b8
--- /dev/null
+++ b/addons/sourcemod/scripting/include/entity.inc
@@ -0,0 +1,738 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2011 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _entity_included
+ #endinput
+#endif
+#define _entity_included
+
+/**
+ * Property types for entities.
+ */
+enum PropType
+{
+ Prop_Send = 0, /**< This property is networked. */
+ Prop_Data = 1, /**< This property is for save game data fields. */
+};
+
+/**
+ * @section For more information on these, see the HL2SDK (public/edict.h)
+ */
+#define FL_EDICT_CHANGED (1<<0) /**< Game DLL sets this when the entity state changes
+ Mutually exclusive with FL_EDICT_PARTIAL_CHANGE. */
+#define FL_EDICT_FREE (1<<1) /**< this edict if free for reuse */
+#define FL_EDICT_FULL (1<<2) /**< this is a full server entity */
+#define FL_EDICT_FULLCHECK (0<<0) /**< call ShouldTransmit() each time, this is a fake flag */
+#define FL_EDICT_ALWAYS (1<<3) /**< always transmit this entity */
+#define FL_EDICT_DONTSEND (1<<4) /**< don't transmit this entity */
+#define FL_EDICT_PVSCHECK (1<<5) /**< always transmit entity, but cull against PVS */
+#define FL_EDICT_PENDING_DORMANT_CHECK (1<<6)
+#define FL_EDICT_DIRTY_PVS_INFORMATION (1<<7)
+#define FL_FULL_EDICT_CHANGED (1<<8)
+
+enum PropFieldType
+{
+ PropField_Unsupported, /**< The type is unsupported. */
+ PropField_Integer, /**< Valid for SendProp and Data fields */
+ PropField_Float, /**< Valid for SendProp and Data fields */
+ PropField_Entity, /**< Valid for Data fields only (SendProp shows as int) */
+ PropField_Vector, /**< Valid for SendProp and Data fields */
+ PropField_String, /**< Valid for SendProp and Data fields */
+ PropField_String_T, /**< Valid for Data fields. Read only.
+ Note that the size of a string_t is dynamic, and
+ thus FindDataMapOffs() will return the constant size
+ of the string_t container (which is 32 bits right now).
+ */
+};
+
+/**
+ * @endsection
+ */
+
+/**
+ * Returns the maximum number of entities.
+ *
+ * @return Maximum number of entities.
+ */
+native GetMaxEntities();
+
+/**
+ * Returns the number of entities in the server.
+ *
+ * @return Number of entities in the server.
+ */
+native GetEntityCount();
+
+/**
+ * Returns whether or not an entity is valid. Returns false
+ * if there is no matching CBaseEntity for this edict index.
+ *
+ * @param edict Index of the entity/edict.
+ * @return True if valid, false otherwise.
+ */
+native bool:IsValidEntity(edict);
+
+/**
+ * Returns whether or not an edict index is valid.
+ *
+ * @param edict Index of the edict.
+ * @return True if valid, false otherwise.
+ */
+native bool:IsValidEdict(edict);
+
+/**
+ * Returns whether or not an entity is a valid networkable edict.
+ *
+ * @param edict Index of the edict.
+ * @return True if networkable, false if invalid or not networkable.
+ */
+native bool:IsEntNetworkable(edict);
+
+/**
+ * Creates a new edict (the basis of a networkable entity)
+ *
+ * @return Index of the edict, 0 on failure.
+ */
+native CreateEdict();
+
+/**
+ * Removes an edict from the world.
+ *
+ * @param edict Index of the edict.
+ * @noreturn
+ * @error Invalid edict index.
+ */
+native RemoveEdict(edict);
+
+/**
+ * Returns the flags on an edict. These are not the same as entity flags.
+ *
+ * @param edict Index of the entity.
+ * @return Edict flags.
+ * @error Invalid edict index.
+ */
+native GetEdictFlags(edict);
+
+/**
+ * Sets the flags on an edict. These are not the same as entity flags.
+ *
+ * @param edict Index of the entity.
+ * @param flags Flags to set.
+ * @noreturn
+ * @error Invalid edict index.
+ */
+native SetEdictFlags(edict, flags);
+
+/**
+ * Retrieves an edict classname.
+ *
+ * @param edict Index of the entity.
+ * @param clsname Buffer to store the classname.
+ * @param maxlength Maximum length of the buffer.
+ * @return True on success, false if there is no classname set.
+ */
+native bool:GetEdictClassname(edict, String:clsname[], maxlength);
+
+/**
+ * Retrieves an entity's networkable serverclass name.
+ * This is not the same as the classname and is used for networkable state changes.
+ *
+ * @param edict Index of the entity.
+ * @param clsname Buffer to store the serverclass name.
+ * @param maxlength Maximum lnegth of the buffer.
+ * @return True on success, false if the edict is not networkable.
+ * @error Invalid edict index.
+ */
+native bool:GetEntityNetClass(edict, String:clsname[], maxlength);
+
+/**
+ * @section Entity offset functions
+ *
+ * Offsets should be specified in byte distance from the CBaseEntity
+ * structure, not short (double byte) or integer (four byte) multiples.
+ * It is somewhat common practice to use offsets aligned to their final
+ * type, and thus make sure you are not falling to this error in SourceMod.
+ * For example, if your "integer-aligned" offset was 119, your byte-aligned
+ * offset is 119*4, or 476.
+
+ * Specifying incorrect offsets or the incorrect data type for an offset
+ * can have fatal consequences. If you are hardcoding offsets, and the
+ * layout of CBaseEntity does not match, you can easily crash the server.
+ *
+ * The reasonable bounds for offsets is greater than or equal to 0 and
+ * below 32768. Offsets out of these bounds will throw an error. However,
+ * this does not represent any real range, it is simply a sanity check for
+ * illegal values. Any range outside of the CBaseEntity structure's private
+ * size will cause undefined behaviour or even crash.
+ */
+
+/**
+ * Marks an entity as state changed. This can be useful if you set an offset
+ * and wish for it to be immediately changed over the network. By default this
+ * is not done for offset setting functions.
+ *
+ * @param edict Index to the edict.
+ * @param offset Offset to mark as changed. If 0,
+ * the entire edict is marked as changed.
+ * @noreturn
+ * @error Invalid entity or offset out of bounds.
+ */
+native ChangeEdictState(edict, offset = 0);
+
+/**
+ * Peeks into an entity's object data and retrieves the integer value at
+ * the given offset.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param size Number of bytes to read (valid values are 1, 2, or 4).
+ * @return Value at the given memory location.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native GetEntData(entity, offset, size=4);
+
+/**
+ * Peeks into an entity's object data and sets the integer value at
+ * the given offset.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param value Value to set.
+ * @param size Number of bytes to write (valid values are 1, 2, or 4).
+ * @param changeState If true, change will be sent over the network.
+ * @return Value at the given memory location.
+ * @error Invalid entity or offset out of reasonable bounds.
+ * @noreturn
+ */
+native SetEntData(entity, offset, any:value, size=4, bool:changeState=false);
+
+/**
+ * Peeks into an entity's object data and retrieves the float value at
+ * the given offset.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @return Value at the given memory location.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native Float:GetEntDataFloat(entity, offset);
+
+/**
+ * Peeks into an entity's object data and sets the float value at
+ * the given offset.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param value Value to set.
+ * @param changeState If true, change will be sent over the network.
+ * @return Value at the given memory location.
+ * @error Invalid entity or offset out of reasonable bounds.
+ * @noreturn
+ */
+native SetEntDataFloat(entity, offset, Float:value, bool:changeState=false);
+
+/**
+ * This function is deprecated. Use GetEntDataEnt2 instead, for
+ * reasons explained in the notes.
+ *
+ * Note: This function returns 0 on failure, which may be misleading,
+ * as the number 0 is also used for the world entity index.
+ *
+ * Note: This function makes no attempt to validate the returned
+ * entity, and in fact, it could be garbage or completely unexpected.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @return Entity index at the given location, or 0 if none.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+#pragma deprecated Use GetEntDataEnt2() instead.
+native GetEntDataEnt(entity, offset);
+
+/**
+ * This function is deprecated. Use SetEntDataEnt2 instead, for
+ * reasons explained in the notes.
+ *
+ * Note: This function uses 0 as an indicator to unset data, but
+ * 0 is also the world entity index. Thus, a property cannot
+ * be set to the world entity using this native.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param other Entity index to set, or 0 to clear.
+ * @param changeState If true, change will be sent over the network.
+ * @noreturn
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+#pragma deprecated Use SetEntDataEnt2() instead.
+native SetEntDataEnt(entity, offset, other, bool:changeState=false);
+
+/**
+ * Peeks into an entity's object data and retrieves the entity index
+ * at the given offset.
+ *
+ * Note: This will only work on offsets that are stored as "entity
+ * handles" (which usually looks like m_h* in properties). These
+ * are not SourceMod Handles, but internal Source structures.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @return Entity index at the given location. If there is no entity,
+ * or the stored entity is invalid, then -1 is returned.
+ * @error Invalid input entity, or offset out of reasonable bounds.
+ */
+native GetEntDataEnt2(entity, offset);
+
+/**
+ * Peeks into an entity's object data and sets the entity index at the
+ * given offset.
+ *
+ * Note: This will only work on offsets that are stored as "entity
+ * handles" (which usually looks like m_h* in properties). These
+ * are not SourceMod Handles, but internal Source structures.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param other Entity index to set, or -1 to clear.
+ * @param changeState If true, change will be sent over the network.
+ * @noreturn
+ * @error Invalid input entity, or offset out of reasonable bounds.
+ */
+native SetEntDataEnt2(entity, offset, other, bool:changeState=false);
+
+/**
+ * Peeks into an entity's object data and retrieves the vector at the
+ * given offset.
+ * @note Both a Vector and a QAngle are three floats. This is a
+ * convenience function and will work with both types.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param vec Vector buffer to store data in.
+ * @noreturn
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native GetEntDataVector(entity, offset, Float:vec[3]);
+
+/**
+ * Peeks into an entity's object data and sets the vector at the given
+ * offset.
+ * @note Both a Vector and a QAngle are three floats. This is a
+ * convenience function and will work with both types.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param vec Vector to set.
+ * @param changeState If true, change will be sent over the network.
+ * @noreturn
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native SetEntDataVector(entity, offset, const Float:vec[3], bool:changeState=false);
+
+/**
+ * Peeks into an entity's object data and retrieves the string at
+ * the given offset.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param buffer Destination string buffer.
+ * @param maxlen Maximum length of output string buffer.
+ * @return Number of non-null bytes written.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native GetEntDataString(entity, offset, String:buffer[], maxlen);
+
+/**
+ * Peeks into an entity's object data and sets the string at
+ * the given offset.
+ *
+ * @param entity Edict index.
+ * @param offset Offset to use.
+ * @param buffer String to set.
+ * @param maxlen Maximum length of bytes to write.
+ * @param changeState If true, change will be sent over the network.
+ * @return Number of non-null bytes written.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native SetEntDataString(entity, offset, const String:buffer[], maxlen, bool:changeState=false);
+
+/**
+ * @endsection
+ */
+
+/**
+ * Given a ServerClass name, finds a networkable send property offset.
+ * This information is cached for future calls.
+ *
+ * Note, this function may return offsets that do not work!
+ * If a property is nested beneath a parent object, the resulting offset
+ * will be invalid for direct use with data functions. Therefore, you
+ * should use FindSendPropInfo() instead. An example of such a property is
+ * CTFPlayer::DT_LocalPlayer.m_nDisguiseClass on Team Fortress.
+ *
+ * @param cls Classname.
+ * @param prop Property name.
+ * @return An offset, or -1 on failure.
+ */
+native FindSendPropOffs(const String:cls[], const String:prop[]);
+
+/**
+ * Given a ServerClass name, finds a networkable send property offset.
+ * This information is cached for future calls.
+ *
+ * Note: This function will correctly compute nested offsets, unlike
+ * FindSendPropOffs(). YOU SHOULD NOT use this function to self-compute
+ * nested offsets. For example, it is okay to add indexes for arrays,
+ * but not to add DT_LocalPlayer to m_nDisguiseClass.
+ *
+ * @param cls Classname.
+ * @param prop Property name.
+ * @param type Optional parameter to store the type.
+ * @param num_bits Optional parameter to store the number of bits the field
+ * uses, if applicable (otherwise 0 is stored). The number
+ * of bits varies for integers and floats, and is always 0
+ * for strings.
+ * @param local_offset Optional parameter to store the local offset, as
+ * FindSendPropOffs() would return.
+ * @return On success, returns an absolutely computed offset.
+ * If no offset is available, 0 is returned.
+ * If the property is not found, -1 is returned.
+ */
+native FindSendPropInfo(const String:cls[],
+ const String:prop[],
+ &PropFieldType:type=PropFieldType:0,
+ &num_bits=0,
+ &local_offset=0);
+
+/**
+ * Given an entity, finds a datamap property offset.
+ * This information is cached for future calls.
+ *
+ * @param entity Entity index.
+ * @param prop Property name.
+ * @param type Optional parameter to store the type.
+ * @param num_bits Optional parameter to store the number of bits the field
+ * uses. The bit count will either be 1 (for boolean) or
+ * divisible by 8 (including 0 if unknown).
+ * @return An offset, or -1 on failure.
+ */
+native FindDataMapOffs(entity,
+ const String:prop[],
+ &PropFieldType:type=PropFieldType:0,
+ &num_bits=0);
+
+/**
+ * Given an entity, finds a nested datamap property offset.
+ * This information is cached for future calls.
+ *
+ * @param entity Entity index.
+ * @param prop Property name.
+ * @param type Optional parameter to store the type.
+ * @param num_bits Optional parameter to store the number of bits the field
+ * uses. The bit count will either be 1 (for boolean) or
+ * divisible by 8 (including 0 if unknown).
+ * @param local_offset Optional parameter to store the local offset, as
+ * FindDataMapOffs() would return.
+ * @return An offset, or -1 on failure.
+ */
+native FindDataMapInfo(entity,
+ const String:prop[],
+ &PropFieldType:type=PropFieldType:0,
+ &num_bits=0,
+ &local_offset=0);
+
+/**
+ * Wrapper function for finding a send property for a particular entity.
+ *
+ * @param ent Entity index.
+ * @param prop Property name.
+ * @param actual Defaults to false for backwards compatibility.
+ * If true, the newer FindSendPropInfo() function
+ * is used instead.
+ * @return An offset, or -1 on failure.
+ */
+stock GetEntSendPropOffs(ent, const String:prop[], bool:actual=false)
+{
+ decl String:cls[64];
+
+ if (!GetEntityNetClass(ent, cls, sizeof(cls)))
+ {
+ return -1;
+ }
+
+ if (actual)
+ {
+ return FindSendPropInfo(cls, prop);
+ }
+ else
+ {
+ return FindSendPropOffs(cls, prop);
+ }
+}
+
+/**
+ * Retrieves an integer value from an entity's property.
+ *
+ * This function is considered safer and more robust over GetEntData,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param size Number of bytes to write (valid values are 1, 2, or 4).
+ * This value is auto-detected, and the size parameter is
+ * only used as a fallback in case detection fails.
+ * @param element Element # (starting from 0) if property is an array.
+ * @return Value at the given property offset.
+ * @error Invalid entity or property not found.
+ */
+native GetEntProp(entity, PropType:type, const String:prop[], size=4, element=0);
+
+/**
+ * Sets an integer value in an entity's property.
+ *
+ * This function is considered safer and more robust over SetEntData,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param value Value to set.
+ * @param size Number of bytes to write (valid values are 1, 2, or 4).
+ * This value is auto-detected, and the size parameter is
+ * only used as a fallback in case detection fails.
+ * @param element Element # (starting from 0) if property is an array.
+ * @error Invalid entity or offset out of reasonable bounds.
+ * @noreturn
+ */
+native SetEntProp(entity, PropType:type, const String:prop[], any:value, size=4, element=0);
+
+/**
+ * Retrieves a float value from an entity's property.
+ *
+ * This function is considered safer and more robust over GetEntDataFloat,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param element Element # (starting from 0) if property is an array.
+ * @return Value at the given property offset.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native Float:GetEntPropFloat(entity, PropType:type, const String:prop[], element=0);
+
+/**
+ * Sets a float value in an entity's property.
+ *
+ * This function is considered safer and more robust over SetEntDataFloat,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param value Value to set.
+ * @param element Element # (starting from 0) if property is an array.
+ * @noreturn
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native SetEntPropFloat(entity, PropType:type, const String:prop[], Float:value, element=0);
+
+/**
+ * Retrieves an entity index from an entity's property.
+ *
+ * This function is considered safer and more robust over GetEntDataEnt*,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param element Element # (starting from 0) if property is an array.
+ * @return Entity index at the given property.
+ * If there is no entity, or the entity is not valid,
+ * then -1 is returned.
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native GetEntPropEnt(entity, PropType:type, const String:prop[], element=0);
+
+/**
+ * Sets an entity index in an entity's property.
+ *
+ * This function is considered safer and more robust over SetEntDataEnt*,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param other Entity index to set, or -1 to unset.
+ * @param element Element # (starting from 0) if property is an array.
+ * @noreturn
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+native SetEntPropEnt(entity, PropType:type, const String:prop[], other, element=0);
+
+/**
+ * Retrieves a vector of floats from an entity, given a named network property.
+ *
+ * This function is considered safer and more robust over GetEntDataVector,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param vec Vector buffer to store data in.
+ * @param element Element # (starting from 0) if property is an array.
+ * @noreturn
+ * @error Invalid entity, property not found, or property not
+ * actually a vector data type.
+ */
+native GetEntPropVector(entity, PropType:type, const String:prop[], Float:vec[3], element=0);
+
+/**
+ * Sets a vector of floats in an entity, given a named network property.
+ *
+ * This function is considered safer and more robust over SetEntDataVector,
+ * because it performs strict offset checking and typing rules.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @param vec Vector to set.
+ * @param element Element # (starting from 0) if property is an array.
+ * @noreturn
+ * @error Invalid entity, property not found, or property not
+ * actually a vector data type.
+ */
+native SetEntPropVector(entity, PropType:type, const String:prop[], const Float:vec[3], element=0);
+
+/**
+ * Gets a network property as a string.
+ *
+ * @param entity Edict index.
+ * @param type Property type.
+ * @param prop Property to use.
+ * @param buffer Destination string buffer.
+ * @param maxlen Maximum length of output string buffer.
+ * @param element Element # (starting from 0) if property is an array.
+ * @return Number of non-null bytes written.
+ * @error Invalid entity, offset out of reasonable bounds, or property is not a valid string.
+ */
+native GetEntPropString(entity, PropType:type, const String:prop[], String:buffer[], maxlen, element=0);
+
+/**
+ * Sets a network property as a string.
+ *
+ * This cannot set property fields of type PropField_String_T (such as "m_target").
+ * To set such fields, you should use DispatchKeyValue() from SDKTools.
+ *
+ * @param entity Edict index.
+ * @param type Property type.
+ * @param prop Property to use.
+ * @param buffer String to set.
+ * @return Number of non-null bytes written.
+ * @error Invalid entity, offset out of reasonable bounds, or property is not a valid string.
+ */
+native SetEntPropString(entity, PropType:type, const String:prop[], const String:buffer[]);
+
+/**
+ * Retrieves the count of values that an entity property's array can store.
+ *
+ * @param entity Entity/edict index.
+ * @param type Property type.
+ * @param prop Property name.
+ * @return Size of array (in elements) or 1 if property is not an array.
+ * @error Invalid entity or property not found.
+ */
+native GetEntPropArraySize(entity, PropType:type, const String:prop[]);
+
+/**
+ * Copies an array of cells from an entity at a given offset.
+ *
+ * @param entity Entity index.
+ * @param offset Offset to use.
+ * @param array Array to read into.
+ * @param arraySize Number of values to read.
+ * @param dataSize Size of each value in bytes (1, 2, or 4).
+ * @noreturn
+ * @error Invalid entity or offset out of reasonable bounds.
+ */
+stock GetEntDataArray(entity, offset, array[], arraySize, dataSize=4)
+{
+ for (new i=0; i.
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _entity_prop_stocks_included
+ #endinput
+#endif
+#define _entity_prop_stocks_included
+
+enum MoveType
+{
+ MOVETYPE_NONE = 0, /**< never moves */
+ MOVETYPE_ISOMETRIC, /**< For players */
+ MOVETYPE_WALK, /**< Player only - moving on the ground */
+ MOVETYPE_STEP, /**< gravity, special edge handling -- monsters use this */
+ MOVETYPE_FLY, /**< No gravity, but still collides with stuff */
+ MOVETYPE_FLYGRAVITY, /**< flies through the air + is affected by gravity */
+ MOVETYPE_VPHYSICS, /**< uses VPHYSICS for simulation */
+ MOVETYPE_PUSH, /**< no clip to world, push and crush */
+ MOVETYPE_NOCLIP, /**< No gravity, no collisions, still do velocity/avelocity */
+ MOVETYPE_LADDER, /**< Used by players only when going onto a ladder */
+ MOVETYPE_OBSERVER, /**< Observer movement, depends on player's observer mode */
+ MOVETYPE_CUSTOM, /**< Allows the entity to describe its own physics */
+};
+
+enum RenderMode
+{
+ RENDER_NORMAL, /**< src */
+ RENDER_TRANSCOLOR, /**< c*a+dest*(1-a) */
+ RENDER_TRANSTEXTURE, /**< src*a+dest*(1-a) */
+ RENDER_GLOW, /**< src*a+dest -- No Z buffer checks -- Fixed size in screen space */
+ RENDER_TRANSALPHA, /**< src*srca+dest*(1-srca) */
+ RENDER_TRANSADD, /**< src*a+dest */
+ RENDER_ENVIRONMENTAL, /**< not drawn, used for environmental effects */
+ RENDER_TRANSADDFRAMEBLEND, /**< use a fractional frame value to blend between animation frames */
+ RENDER_TRANSALPHAADD, /**< src + dest*(1-a) */
+ RENDER_WORLDGLOW, /**< Same as kRenderGlow but not fixed size in screen space */
+ RENDER_NONE, /**< Don't render. */
+};
+
+enum RenderFx
+{
+ RENDERFX_NONE = 0,
+ RENDERFX_PULSE_SLOW,
+ RENDERFX_PULSE_FAST,
+ RENDERFX_PULSE_SLOW_WIDE,
+ RENDERFX_PULSE_FAST_WIDE,
+ RENDERFX_FADE_SLOW,
+ RENDERFX_FADE_FAST,
+ RENDERFX_SOLID_SLOW,
+ RENDERFX_SOLID_FAST,
+ RENDERFX_STROBE_SLOW,
+ RENDERFX_STROBE_FAST,
+ RENDERFX_STROBE_FASTER,
+ RENDERFX_FLICKER_SLOW,
+ RENDERFX_FLICKER_FAST,
+ RENDERFX_NO_DISSIPATION,
+ RENDERFX_DISTORT, /**< Distort/scale/translate flicker */
+ RENDERFX_HOLOGRAM, /**< kRenderFxDistort + distance fade */
+ RENDERFX_EXPLODE, /**< Scale up really big! */
+ RENDERFX_GLOWSHELL, /**< Glowing Shell */
+ RENDERFX_CLAMP_MIN_SCALE, /**< Keep this sprite from getting very small (SPRITES only!) */
+ RENDERFX_ENV_RAIN, /**< for environmental rendermode, make rain */
+ RENDERFX_ENV_SNOW, /**< " " " , make snow */
+ RENDERFX_SPOTLIGHT, /**< TEST CODE for experimental spotlight */
+ RENDERFX_RAGDOLL, /**< HACKHACK: TEST CODE for signalling death of a ragdoll character */
+ RENDERFX_PULSE_FAST_WIDER,
+ RENDERFX_MAX
+};
+
+// These defines are for client button presses.
+#define IN_ATTACK (1 << 0)
+#define IN_JUMP (1 << 1)
+#define IN_DUCK (1 << 2)
+#define IN_FORWARD (1 << 3)
+#define IN_BACK (1 << 4)
+#define IN_USE (1 << 5)
+#define IN_CANCEL (1 << 6)
+#define IN_LEFT (1 << 7)
+#define IN_RIGHT (1 << 8)
+#define IN_MOVELEFT (1 << 9)
+#define IN_MOVERIGHT (1 << 10)
+#define IN_ATTACK2 (1 << 11)
+#define IN_RUN (1 << 12)
+#define IN_RELOAD (1 << 13)
+#define IN_ALT1 (1 << 14)
+#define IN_ALT2 (1 << 15)
+#define IN_SCORE (1 << 16) /**< Used by client.dll for when scoreboard is held down */
+#define IN_SPEED (1 << 17) /**< Player is holding the speed key */
+#define IN_WALK (1 << 18) /**< Player holding walk key */
+#define IN_ZOOM (1 << 19) /**< Zoom key for HUD zoom */
+#define IN_WEAPON1 (1 << 20) /**< weapon defines these bits */
+#define IN_WEAPON2 (1 << 21) /**< weapon defines these bits */
+#define IN_BULLRUSH (1 << 22)
+#define IN_GRENADE1 (1 << 23) /**< grenade 1 */
+#define IN_GRENADE2 (1 << 24) /**< grenade 2 */
+#define IN_ATTACK3 (1 << 25)
+
+// Note: these are only for use with GetEntityFlags and SetEntityFlags
+// and may not match the game's actual, internal m_fFlags values.
+// PLAYER SPECIFIC FLAGS FIRST BECAUSE WE USE ONLY A FEW BITS OF NETWORK PRECISION
+#define FL_ONGROUND (1 << 0) /**< At rest / on the ground */
+#define FL_DUCKING (1 << 1) /**< Player flag -- Player is fully crouched */
+#define FL_WATERJUMP (1 << 2) /**< player jumping out of water */
+#define FL_ONTRAIN (1 << 3) /**< Player is _controlling_ a train, so movement commands should be ignored on client during prediction. */
+#define FL_INRAIN (1 << 4) /**< Indicates the entity is standing in rain */
+#define FL_FROZEN (1 << 5) /**< Player is frozen for 3rd person camera */
+#define FL_ATCONTROLS (1 << 6) /**< Player can't move, but keeps key inputs for controlling another entity */
+#define FL_CLIENT (1 << 7) /**< Is a player */
+#define FL_FAKECLIENT (1 << 8) /**< Fake client, simulated server side; don't send network messages to them */
+// NOTE if you move things up, make sure to change this value
+#define PLAYER_FLAG_BITS 9
+// NON-PLAYER SPECIFIC (i.e., not used by GameMovement or the client .dll ) -- Can still be applied to players, though
+#define FL_INWATER (1 << 9) /**< In water */
+#define FL_FLY (1 << 10) /**< Changes the SV_Movestep() behavior to not need to be on ground */
+#define FL_SWIM (1 << 11) /**< Changes the SV_Movestep() behavior to not need to be on ground (but stay in water) */
+#define FL_CONVEYOR (1 << 12)
+#define FL_NPC (1 << 13)
+#define FL_GODMODE (1 << 14)
+#define FL_NOTARGET (1 << 15)
+#define FL_AIMTARGET (1 << 16) /**< set if the crosshair needs to aim onto the entity */
+#define FL_PARTIALGROUND (1 << 17) /**< not all corners are valid */
+#define FL_STATICPROP (1 << 18) /**< Eetsa static prop! */
+#define FL_GRAPHED (1 << 19) /**< worldgraph has this ent listed as something that blocks a connection */
+#define FL_GRENADE (1 << 20)
+#define FL_STEPMOVEMENT (1 << 21) /**< Changes the SV_Movestep() behavior to not do any processing */
+#define FL_DONTTOUCH (1 << 22) /**< Doesn't generate touch functions, generates Untouch() for anything it was touching when this flag was set */
+#define FL_BASEVELOCITY (1 << 23) /**< Base velocity has been applied this frame (used to convert base velocity into momentum) */
+#define FL_WORLDBRUSH (1 << 24) /**< Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something) */
+#define FL_OBJECT (1 << 25) /**< Terrible name. This is an object that NPCs should see. Missiles, for example. */
+#define FL_KILLME (1 << 26) /**< This entity is marked for death -- will be freed by game DLL */
+#define FL_ONFIRE (1 << 27) /**< You know... */
+#define FL_DISSOLVING (1 << 28) /**< We're dissolving! */
+#define FL_TRANSRAGDOLL (1 << 29) /**< In the process of turning into a client side ragdoll. */
+#define FL_UNBLOCKABLE_BY_PLAYER (1 << 30) /**< pusher that can't be blocked by the player */
+#define FL_FREEZING (1 << 31) /**< We're becoming frozen! */
+#define FL_EP2V_UNKNOWN1 (1 << 31) /**< Unknown */
+// END entity flag #defines
+
+/**
+ * Get an entity's flags.
+ *
+ * @note The game's actual flags are internally translated by SM
+ * to match the entity flags defined above as the actual values
+ * can differ per engine.
+ *
+ * @param entity Entity index.
+ * @return Entity's flags, see entity flag defines above.
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+native GetEntityFlags(entity);
+
+/**
+ * Sets an entity's flags.
+ *
+ * @note The entity flags as defined above are internally translated by SM
+ * to match the current game's expected value for the flags as
+ * the actual values can differ per engine.
+ *
+ * @param entity Entity index.
+ * @param flags Entity flags, see entity flag defines above.
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+native SetEntityFlags(entity, flags);
+
+
+/**
+ * Gets an entity's movetype.
+ *
+ * @param entity Entity index.
+ * @return Movetype, see enum above.
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock MoveType:GetEntityMoveType(entity)
+{
+ static bool:gotconfig = false;
+ static String:datamap[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_MoveType", datamap, sizeof(datamap));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(datamap, sizeof(datamap), "m_MoveType");
+ }
+
+ gotconfig = true;
+ }
+
+ return MoveType:GetEntProp(entity, Prop_Data, datamap);
+}
+
+/**
+ * Sets an entity's movetype.
+ *
+ * @param entity Entity index.
+ * @param mt Movetype, see enum above.
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock SetEntityMoveType(entity, MoveType:mt)
+{
+ static bool:gotconfig = false;
+ static String:datamap[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_MoveType", datamap, sizeof(datamap));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(datamap, sizeof(datamap), "m_MoveType");
+ }
+
+ gotconfig = true;
+ }
+
+ SetEntProp(entity, Prop_Data, datamap, mt);
+}
+
+/**
+ * Gets an entity's render mode.
+ *
+ * @param entity Entity index.
+ * @return RenderMode value.
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock RenderMode:GetEntityRenderMode(entity)
+{
+ static bool:gotconfig = false;
+ static String:prop[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_nRenderMode", prop, sizeof(prop));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(prop, sizeof(prop), "m_nRenderMode");
+ }
+
+ gotconfig = true;
+ }
+
+ return RenderMode:GetEntProp(entity, Prop_Send, prop, 1);
+}
+
+/**
+ * Sets an entity's render mode.
+ *
+ * @param entity Entity index.
+ * @param mode RenderMode value.
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock SetEntityRenderMode(entity, RenderMode:mode)
+{
+ static bool:gotconfig = false;
+ static String:prop[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_nRenderMode", prop, sizeof(prop));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(prop, sizeof(prop), "m_nRenderMode");
+ }
+
+ gotconfig = true;
+ }
+
+ SetEntProp(entity, Prop_Send, prop, mode, 1);
+}
+
+/**
+ * Gets an entity's render Fx.
+ *
+ * @param entity Entity index.
+ * @return RenderFx value.
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock RenderFx:GetEntityRenderFx(entity)
+{
+ static bool:gotconfig = false;
+ static String:prop[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_nRenderFX", prop, sizeof(prop));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(prop, sizeof(prop), "m_nRenderFX");
+ }
+
+ gotconfig = true;
+ }
+
+ return RenderFx:GetEntProp(entity, Prop_Send, prop, 1);
+}
+
+/**
+ * Sets an entity's render Fx.
+ *
+ * @param entity Entity index.
+ * @param fx RenderFx value.
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock SetEntityRenderFx(entity, RenderFx:fx)
+{
+ static bool:gotconfig = false;
+ static String:prop[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_nRenderFX", prop, sizeof(prop));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(prop, sizeof(prop), "m_nRenderFX");
+ }
+
+ gotconfig = true;
+ }
+
+ SetEntProp(entity, Prop_Send, prop, fx, 1);
+}
+
+/**
+ * Sets an entity's color.
+ *
+ * @param entity Entity index
+ * @param r Amount of red (0-255)
+ * @param g Amount of green (0-255)
+ * @param b Amount of blue (0-255)
+ * @param a Amount of alpha (0-255)
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock SetEntityRenderColor(entity, r=255, g=255, b=255, a=255)
+{
+ static bool:gotconfig = false;
+ static String:prop[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_clrRender", prop, sizeof(prop));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(prop, sizeof(prop), "m_clrRender");
+ }
+
+ gotconfig = true;
+ }
+
+ new offset = GetEntSendPropOffs(entity, prop);
+
+ if (offset <= 0)
+ {
+ ThrowError("SetEntityRenderColor not supported by this mod");
+ }
+
+ SetEntData(entity, offset, r, 1, true);
+ SetEntData(entity, offset + 1, g, 1, true);
+ SetEntData(entity, offset + 2, b, 1, true);
+ SetEntData(entity, offset + 3, a, 1, true);
+}
+
+/**
+ * Gets an entity's gravity.
+ *
+ * @param entity Entity index.
+ * @return Entity's m_flGravity value.
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock Float:GetEntityGravity(entity)
+{
+ static bool:gotconfig = false;
+ static String:datamap[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_flGravity", datamap, sizeof(datamap));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(datamap, sizeof(datamap), "m_flGravity");
+ }
+
+ gotconfig = true;
+ }
+
+ return GetEntPropFloat(entity, Prop_Data, datamap);
+}
+
+/**
+ * Sets an entity's gravity.
+ *
+ * @param entity Entity index.
+ * @param amount Gravity to set (default = 1.0, half = 0.5, double = 2.0).
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock SetEntityGravity(entity, Float:amount)
+{
+ static bool:gotconfig = false;
+ static String:datamap[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_flGravity", datamap, sizeof(datamap));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(datamap, sizeof(datamap), "m_flGravity");
+ }
+
+ gotconfig = true;
+ }
+
+ SetEntPropFloat(entity, Prop_Data, datamap, amount);
+}
+
+/**
+ * Sets an entity's health
+ *
+ * @param entity Entity index.
+ * @param amount Health amount.
+ * @noreturn
+ * @error Invalid entity index, or lack of mod compliance.
+ */
+stock SetEntityHealth(entity, amount)
+{
+ static bool:gotconfig = false;
+ static String:prop[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_iHealth", prop, sizeof(prop));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(prop, sizeof(prop), "m_iHealth");
+ }
+
+ gotconfig = true;
+ }
+
+ decl String:cls[64];
+ new PropFieldType:type;
+ new offset;
+
+ if (!GetEntityNetClass(entity, cls, sizeof(cls)))
+ {
+ ThrowError("SetEntityHealth not supported by this mod: Could not get serverclass name");
+ return;
+ }
+
+ offset = FindSendPropInfo(cls, prop, type);
+
+ if (offset <= 0)
+ {
+ ThrowError("SetEntityHealth not supported by this mod");
+ return;
+ }
+
+ /* Dark Messiah uses a float for the health instead an integer */
+ if (type == PropField_Float)
+ {
+ SetEntDataFloat(entity, offset, float(amount));
+ }
+ else
+ {
+ SetEntProp(entity, Prop_Send, prop, amount);
+ }
+}
+
+/**
+ * Get's a users current pressed buttons
+ *
+ * @param client Client index
+ * @return Bitsum of buttons
+ * @error Invalid client index, client not in game,
+ * or lack of mod compliance.
+ */
+stock GetClientButtons(client)
+{
+ static bool:gotconfig = false;
+ static String:datamap[32];
+
+ if (!gotconfig)
+ {
+ new Handle:gc = LoadGameConfigFile("core.games");
+ new bool:exists = GameConfGetKeyValue(gc, "m_nButtons", datamap, sizeof(datamap));
+ CloseHandle(gc);
+
+ if (!exists)
+ {
+ strcopy(datamap, sizeof(datamap), "m_nButtons");
+ }
+
+ gotconfig = true;
+ }
+
+ return GetEntProp(client, Prop_Data, datamap);
+}
diff --git a/addons/sourcemod/scripting/include/events.inc b/addons/sourcemod/scripting/include/events.inc
new file mode 100644
index 0000000..d7e8f4c
--- /dev/null
+++ b/addons/sourcemod/scripting/include/events.inc
@@ -0,0 +1,257 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _events_included
+ #endinput
+#endif
+#define _events_included
+
+/**
+ * Event hook modes determining how hooking should be handled
+ */
+enum EventHookMode
+{
+ EventHookMode_Pre, /**< Hook callback fired before event is fired */
+ EventHookMode_Post, /**< Hook callback fired after event is fired */
+ EventHookMode_PostNoCopy /**< Hook callback fired after event is fired, but event data won't be copied */
+};
+
+/**
+ * Hook function types for events.
+ */
+funcenum EventHook
+{
+ /**
+ * Called when a game event is fired.
+ *
+ * @param event Handle to event. This could be INVALID_HANDLE if every plugin hooking
+ * this event has set the hook mode EventHookMode_PostNoCopy.
+ * @param name String containing the name of the event.
+ * @param dontBroadcast True if event was not broadcast to clients, false otherwise.
+ * @return Ignored for post hooks. Plugin_Handled will block event if hooked as pre.
+ */
+ Action:public(Handle:event, const String:name[], bool:dontBroadcast),
+ /**
+ * Called when a game event is fired.
+ *
+ * @param event Handle to event. This could be INVALID_HANDLE if every plugin hooking
+ * this event has set the hook mode EventHookMode_PostNoCopy.
+ * @param name String containing the name of the event.
+ * @param dontBroadcast True if event was not broadcast to clients, false otherwise.
+ * @noreturn
+ */
+ public(Handle:event, const String:name[], bool:dontBroadcast),
+};
+
+/**
+ * Creates a hook for when a game event is fired.
+ *
+ * @param name Name of event.
+ * @param callback An EventHook function pointer.
+ * @param mode Optional EventHookMode determining the type of hook.
+ * @noreturn
+ * @error Invalid event name or invalid callback function.
+ */
+native HookEvent(const String:name[], EventHook:callback, EventHookMode:mode=EventHookMode_Post);
+
+/**
+ * Creates a hook for when a game event is fired.
+ *
+ * @param name Name of event.
+ * @param callback An EventHook function pointer.
+ * @param mode Optional EventHookMode determining the type of hook.
+ * @return True if event exists and was hooked successfully, false otherwise.
+ * @error Invalid callback function.
+ */
+native bool:HookEventEx(const String:name[], EventHook:callback, EventHookMode:mode=EventHookMode_Post);
+
+/**
+ * Removes a hook for when a game event is fired.
+ *
+ * @param name Name of event.
+ * @param callback An EventHook function pointer.
+ * @param mode Optional EventHookMode determining the type of hook.
+ * @noreturn
+ * @error Invalid callback function or no active hook for specified event.
+ */
+native UnhookEvent(const String:name[], EventHook:callback, EventHookMode:mode=EventHookMode_Post);
+
+/**
+ * Creates a game event to be fired later.
+ *
+ * The Handle should not be closed via CloseHandle(). It must be closed via
+ * FireEvent() or CancelCreatedEvent().
+ *
+ * @param name Name of event.
+ * @param force If set to true, this forces the event to be created even if it's not being hooked.
+ * Note that this will not force it if the event doesn't exist at all.
+ * @return Handle to event. INVALID_HANDLE is returned if the event doesn't exist or isn't
+ being hooked (unless force is true).
+ */
+native Handle:CreateEvent(const String:name[], bool:force=false);
+
+/**
+ * Fires a game event.
+ *
+ * This function closes the event Handle after completing.
+ *
+ * @param event Handle to the event.
+ * @param dontBroadcast Optional boolean that determines if event should be broadcast to clients.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native FireEvent(Handle:event, bool:dontBroadcast=false);
+
+/**
+ * Cancels a previously created game event that has not been fired.
+ *
+ * @param event Handled to the event.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native CancelCreatedEvent(Handle:event);
+
+/**
+ * Returns the boolean value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @return The boolean value of the specfied event key.
+ * @error Invalid or corrupt Handle.
+ */
+native bool:GetEventBool(Handle:event, const String:key[]);
+
+/**
+ * Sets the boolean value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @param value New boolean value.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetEventBool(Handle:event, const String:key[], bool:value);
+
+/**
+ * Returns the integer value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @return The integer value of the specfied event key.
+ * @error Invalid or corrupt Handle.
+ */
+native GetEventInt(Handle:event, const String:key[]);
+
+/**
+ * Sets the integer value of a game event's key.
+ *
+ * Integer value refers to anything that can be reduced to an integer.
+ * The various size specifiers, such as "byte" and "short" are still
+ * integers, and only refer to how much data will actually be sent
+ * over the network (if applicable).
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @param value New integer value.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetEventInt(Handle:event, const String:key[], value);
+
+/**
+ * Returns the floating point value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @return The floating point value of the specfied event key.
+ * @error Invalid or corrupt Handle.
+ */
+native Float:GetEventFloat(Handle:event, const String:key[]);
+
+/**
+ * Sets the floating point value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @param value New floating point value.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetEventFloat(Handle:event, const String:key[], Float:value);
+
+/**
+ * Retrieves the string value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @param value Buffer to store the value of the specified event key.
+ * @param maxlength Maximum length of string buffer.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native GetEventString(Handle:event, const String:key[], String:value[], maxlength);
+
+/**
+ * Sets the string value of a game event's key.
+ *
+ * @param event Handle to the event.
+ * @param key Name of event key.
+ * @param value New string value.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native SetEventString(Handle:event, const String:key[], const String:value[]);
+
+/**
+ * Retrieves the name of a game event.
+ *
+ * @param event Handle to the event.
+ * @param name Buffer to store the name of the event.
+ * @param maxlength Maximum length of string buffer.
+ * @noreturn
+ * @error Invalid or corrupt Handle.
+ */
+native GetEventName(Handle:event, String:name[], maxlength);
+
+/**
+ * Sets whether an event's broadcasting will be disabled or not.
+ *
+ * This has no effect on events Handles that are not from HookEvent
+ * or HookEventEx callbacks.
+ *
+ * @param event Handle to an event from an event hook.
+ * @param dontBroadcast True to disable broadcasting, false otherwise.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native SetEventBroadcast(Handle:event, bool:dontBroadcast);
+
diff --git a/addons/sourcemod/scripting/include/files.inc b/addons/sourcemod/scripting/include/files.inc
new file mode 100644
index 0000000..f353deb
--- /dev/null
+++ b/addons/sourcemod/scripting/include/files.inc
@@ -0,0 +1,411 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _files_included
+ #endinput
+#endif
+#define _files_included
+
+/**
+ * @global All paths in SourceMod natives are relative to the mod folder
+ * unless otherwise noted.
+ *
+ * Most functions in SourceMod (at least, ones that deal with direct
+ * file manipulation) will support an alternate path specification.
+ *
+ * If the path starts with the string "file://" and the PathType is
+ * not relative, then the "file://" portion is stripped off, and the
+ * rest of the path is used without any modification (except for
+ * correcting slashes). This can be used to override the path
+ * builder to supply alternate absolute paths. Examples:
+ *
+ * file://C:/Temp/file.txt
+ * file:///tmp/file.txt
+ */
+
+/**
+ * File inode types.
+ */
+enum FileType
+{
+ FileType_Unknown = 0, /* Unknown file type (device/socket) */
+ FileType_Directory = 1, /* File is a directory */
+ FileType_File = 2, /* File is a file */
+};
+
+/**
+ * File time modes.
+ */
+enum FileTimeMode
+{
+ FileTime_LastAccess = 0, /* Last access (does not work on FAT) */
+ FileTime_Created = 1, /* Creation (does not work on FAT) */
+ FileTime_LastChange = 2, /* Last modification */
+};
+
+#define PLATFORM_MAX_PATH 256 /**< Maximum path length. */
+
+#define SEEK_SET 0 /**< Seek from start. */
+#define SEEK_CUR 1 /**< Seek from current position. */
+#define SEEK_END 2 /**< Seek from end position. */
+
+/**
+ * Path types.
+ */
+enum PathType
+{
+ Path_SM, /**< SourceMod root folder */
+};
+
+/**
+ * Builds a path relative to the SourceMod folder. This should be used instead of
+ * directly referencing addons/sourcemod, in case users change the name of their
+ * folder layout.
+ *
+ * @param type Type of path to build as the base.
+ * @param buffer Buffer to store the path.
+ * @param maxlength Maximum length of buffer.
+ * @param fmt Format string.
+ * @param ... Format arguments.
+ * @return Number of bytes written to buffer (not including null terminator).
+ */
+native BuildPath(PathType:type, String:buffer[], maxlength, const String:fmt[], any:...);
+
+/**
+ * Opens a directory/folder for contents enumeration.
+ *
+ * @note Directories are closed with CloseHandle().
+ * @note Directories Handles can be cloned.
+ * @note OpenDirectory() supports the "file://" notation.
+ *
+ * @param path Path to open.
+ * @return A Handle to the directory, INVALID_HANDLE on open error.
+ */
+native Handle:OpenDirectory(const String:path[]);
+
+/**
+ * Reads the current directory entry as a local filename, then moves to the next file.
+ *
+ * @note Contents of buffers are undefined when returning false.
+ * @note Both the '.' and '..' automatic directory entries will be retrieved for Windows and Linux.
+ *
+ * @param dir Handle to a directory.
+ * @param buffer String buffer to hold directory name.
+ * @param maxlength Maximum size of string buffer.
+ * @param type Optional variable to store the file type.
+ * @return True on success, false if there are no more files to read.
+ * @error Invalid or corrupt Handle.
+ */
+native bool:ReadDirEntry(Handle:dir, String:buffer[], maxlength, &FileType:type=FileType_Unknown);
+
+/**
+ * Opens a file.
+ *
+ * @note Files are closed with CloseHandle().
+ * @note File Handles can be cloned.
+ * @note OpenFile() supports the "file://" notation.
+ *
+ * @param file File to open.
+ * @param mode Open mode.
+ * @return A Handle to the file, INVALID_HANDLE on open error.
+ */
+native Handle:OpenFile(const String:file[], const String:mode[]);
+
+/**
+ * Deletes a file.
+ *
+ * @param path Path of the file to delete.
+ * @return True on success, false otherwise.
+ */
+native bool:DeleteFile(const String:path[]);
+
+/**
+ * Reads a line from a text file.
+ *
+ * @param hndl Handle to the file.
+ * @param buffer String buffer to hold the line.
+ * @param maxlength Maximum size of string buffer.
+ * @return True on success, false otherwise.
+ */
+native bool:ReadFileLine(Handle:hndl, String:buffer[], maxlength);
+
+/**
+ * Reads binary data from a file.
+ *
+ * @param hndl Handle to the file.
+ * @param items Array to store each item read.
+ * @param num_items Number of items to read into the array.
+ * @param size Size of each element, in bytes, to be read.
+ * Valid sizes are 1, 2, or 4.
+ * @return Number of elements read, or -1 on error.
+ */
+native ReadFile(Handle:hndl, items[], num_items, size);
+
+/**
+ * Reads a UTF8 or ANSI string from a file.
+ *
+ * @param hndl Handle to the file.
+ * @param buffer Buffer to store the string.
+ * @param max_size Maximum size of the string buffer.
+ * @param read_count If -1, reads until a null terminator is encountered in
+ * the file. Otherwise, read_count bytes are read
+ * into the buffer provided. In this case the buffer
+ * is not explicitly null terminated, and the buffer
+ * will contain any null terminators read from the file.
+ * @return Number of characters written to the buffer, or -1
+ * if an error was encountered.
+ * @error Invalid Handle, or read_count > max_size.
+ */
+native ReadFileString(Handle:hndl, String:buffer[], max_size, read_count=-1);
+
+/**
+ * Writes binary data to a file.
+ *
+ * @param hndl Handle to the file.
+ * @param items Array of items to write. The data is read directly.
+ * That is, in 1 or 2-byte mode, the lower byte(s) in
+ * each cell are used directly, rather than performing
+ * any casts from a 4-byte number to a smaller number.
+ * @param num_items Number of items in the array.
+ * @param size Size of each item in the array in bytes.
+ * Valid sizes are 1, 2, or 4.
+ * @return True on success, false on error.
+ * @error Invalid Handle.
+ */
+native bool:WriteFile(Handle:hndl, const items[], num_items, size);
+
+/**
+ * Writes a binary string to a file.
+ *
+ * @param hndl Handle to th efile.
+ * @param buffer String to write.
+ * @param term True to append NUL terminator, false otherwise.
+ * @return True on success, false on error.
+ * @error Invalid Handle.
+ */
+native bool:WriteFileString(Handle:hndl, const String:buffer[], bool:term);
+
+/**
+ * Writes a line of text to a text file. A newline is automatically appended.
+ *
+ * @param hndl Handle to the file.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @return True on success, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:WriteFileLine(Handle:hndl, const String:format[], any:...);
+
+/**
+ * Reads a single binary cell from a file.
+ *
+ * @param hndl Handle to the file.
+ * @param data Variable to store the data read.
+ * @param size Size of the data to read in bytes. Valid
+ * sizes are 1, 2, or 4 bytes.
+ * @return Number of elements read (max 1), or -1 on error.
+ * @error Invalid Handle.
+ */
+stock ReadFileCell(Handle:hndl, &data, size)
+{
+ new array[1], ret;
+
+ if ((ret = ReadFile(hndl, array, 1, size)) == 1)
+ {
+ data = array[0];
+ }
+
+ return ret;
+}
+
+/**
+ * Writes a single binary cell to a file.
+ *
+ * @param hndl Handle to the file.
+ * @param data Cell to write to the file.
+ * @param size Size of the data to read in bytes. Valid
+ * sizes are 1, 2, or 4 bytes. If the size
+ * is less than 4 bytes, the data is truncated
+ * rather than casted. That is, only the lower
+ * bits will be read.
+ * @return True on success, false on error.
+ * @error Invalid Handle.
+ */
+stock bool:WriteFileCell(Handle:hndl, data, size)
+{
+ new array[1];
+
+ array[0] = data;
+
+ return WriteFile(hndl, array, 1, size);
+}
+
+/**
+ * Tests if the end of file has been reached.
+ *
+ * @param file Handle to the file.
+ * @return True if end of file has been reached, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:IsEndOfFile(Handle:file);
+
+/**
+ * Sets the file position indicator.
+ *
+ * @param file Handle to the file.
+ * @param position Position relative to what is specified in whence.
+ * @param where SEEK_ constant value of where to see from.
+ * @return True on success, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:FileSeek(Handle:file, position, where);
+
+/**
+ * Get current position in the file.
+ *
+ * @param file Handle to the file.
+ * @return Value for the file position indicator.
+ * @error Invalid Handle.
+ */
+native FilePosition(Handle:file);
+
+/**
+ * Checks if a file exists.
+ *
+ * @param path Path to the file.
+ * @param use_valve_fs If true, the Valve file system will be used instead.
+ * This can be used to find files existing in any of
+ * the GAME search paths, rather than solely files
+ * existing directly in the gamedir.
+ * @return True if the file exists, false otherwise.
+ */
+native bool:FileExists(const String:path[], bool:use_valve_fs=false);
+
+/**
+ * Renames a file.
+ *
+ * @param newpath New path to the file.
+ * @param oldpath Path to the existing file.
+ * @return True on success, false otherwise.
+ */
+native bool:RenameFile(const String:newpath[], const String:oldpath[]);
+
+/**
+ * Checks if a directory exists.
+ *
+ * @param path Path to the directory.
+ * @return True if the directory exists, false otherwise.
+ */
+native bool:DirExists(const String:path[]);
+
+/**
+ * Get the file size in bytes.
+ *
+ * @param path Path to the file.
+ * @param use_valve_fs If true, the Valve file system will be used instead.
+ * This can be used to find files existing in any of
+ * the GAME search paths, rather than solely files
+ * existing directly in the gamedir.
+ * @return File size in bytes, -1 if file not found.
+ */
+native FileSize(const String:path[], bool:use_valve_fs=false);
+
+/**
+ * Flushes a file's buffered output; any buffered output
+ * is immediately written to the file.
+ *
+ * @param file Handle to the file.
+ * @return True on success, false on failure.
+ */
+native FlushFile(Handle:file);
+
+/**
+ * Removes a directory.
+ * @note On most Operating Systems you cannot remove a directory which has files inside it.
+ *
+ * @param path Path to the directory.
+ * @return True on success, false otherwise.
+ */
+native bool:RemoveDir(const String:path[]);
+
+#define FPERM_U_READ 0x0100 /* User can read. */
+#define FPERM_U_WRITE 0x0080 /* User can write. */
+#define FPERM_U_EXEC 0x0040 /* User can exec. */
+#define FPERM_G_READ 0x0020 /* Group can read. */
+#define FPERM_G_WRITE 0x0010 /* Group can write. */
+#define FPERM_G_EXEC 0x0008 /* Group can exec. */
+#define FPERM_O_READ 0x0004 /* Anyone can read. */
+#define FPERM_O_WRITE 0x0002 /* Anyone can write. */
+#define FPERM_O_EXEC 0x0001 /* Anyone can exec. */
+
+/**
+ * Creates a directory.
+ *
+ * @param path Path to create.
+ * @param mode Permissions (default is o=rx,g=rx,u=rwx). Note that folders must have
+ * the execute bit set on Linux. On Windows, the mode is ignored.
+ */
+native bool:CreateDirectory(const String:path[], mode);
+
+/**
+ * Returns a file timestamp as a unix timestamp.
+ *
+ * @param file File name.
+ * @param tmode Time mode.
+ * @return Time value, or -1 on failure.
+ */
+native GetFileTime(const String:file[], FileTimeMode:tmode);
+
+/**
+ * Same as LogToFile(), except uses an open file Handle. The file must
+ * be opened in text appending mode.
+ *
+ * @param hndl Handle to the file.
+ * @param message Message format.
+ * @param ... Message format parameters.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native LogToOpenFile(Handle:hndl, const String:message[], any:...);
+
+/**
+ * Same as LogToFileEx(), except uses an open file Handle. The file must
+ * be opened in text appending mode.
+ *
+ * @param hndl Handle to the file.
+ * @param message Message format.
+ * @param ... Message format parameters.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native LogToOpenFileEx(Handle:hndl, const String:message[], any:...);
+
diff --git a/addons/sourcemod/scripting/include/float.inc b/addons/sourcemod/scripting/include/float.inc
new file mode 100644
index 0000000..1282158
--- /dev/null
+++ b/addons/sourcemod/scripting/include/float.inc
@@ -0,0 +1,437 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _float_included
+ #endinput
+#endif
+#define _float_included
+
+/**
+ * Converts an integer into a floating point value.
+ *
+ * @param value Integer to convert.
+ * @return Floating point value.
+ */
+native Float:float(value);
+
+/**
+ * Multiplies two floats together.
+ *
+ * @param oper1 First value.
+ * @param oper2 Second value.
+ * @return oper1*oper2.
+ */
+native Float:FloatMul(Float:oper1, Float:oper2);
+
+/**
+ * Divides the dividend by the divisor.
+ *
+ * @param dividend First value.
+ * @param divisor Second value.
+ * @return dividend/divisor.
+ */
+native Float:FloatDiv(Float:dividend, Float:divisor);
+
+/**
+ * Adds two floats together.
+ *
+ * @param oper1 First value.
+ * @param oper2 Second value.
+ * @return oper1+oper2.
+ */
+native Float:FloatAdd(Float:oper1, Float:oper2);
+
+/**
+ * Subtracts oper2 from oper1.
+ *
+ * @param oper1 First value.
+ * @param oper2 Second value.
+ * @return oper1-oper2.
+ */
+native Float:FloatSub(Float:oper1, Float:oper2);
+
+/**
+ * Returns the decimal part of a float.
+ *
+ * @param value Input value.
+ * @return Decimal part.
+ */
+native Float:FloatFraction(Float:value);
+
+/**
+ * Rounds a float to the closest integer to zero.
+ *
+ * @param value Input value to be rounded.
+ * @return Rounded value.
+ */
+native RoundToZero(Float:value);
+
+/**
+ * Rounds a float to the next highest integer value.
+ *
+ * @param value Input value to be rounded.
+ * @return Rounded value.
+ */
+native RoundToCeil(Float:value);
+
+/**
+ * Rounds a float to the next lowest integer value.
+ *
+ * @param value Input value to be rounded.
+ * @return Rounded value.
+ */
+native RoundToFloor(Float:value);
+
+/**
+ * Standard IEEE rounding.
+ *
+ * @param value Input value to be rounded.
+ * @return Rounded value.
+ */
+native RoundToNearest(Float:value);
+
+/**
+ * Compares two floats.
+ *
+ * @param fOne First value.
+ * @param fTwo Second value.
+ * @return Returns 1 if the first argument is greater than the second argument.
+ * Returns -1 if the first argument is smaller than the second argument.
+ * Returns 0 if both arguments are equal.
+ */
+native FloatCompare(Float:fOne, Float:fTwo);
+
+/**
+ * Returns the square root of the input value, equivalent to floatpower(value, 0.5).
+ *
+ * @param value Input value.
+ * @return Square root of the value.
+ */
+native Float:SquareRoot(Float:value);
+
+/**
+ * Returns the value raised to the power of the exponent.
+ *
+ * @param value Value to be raised.
+ * @param exponent Value to raise the base.
+ * @return value^exponent.
+ */
+native Float:Pow(Float:value, Float:exponent);
+
+/**
+ * Returns the value of raising the input by e.
+ *
+ * @param value Input value.
+ * @return exp(value).
+ */
+native Float:Exponential(Float:value);
+
+/**
+ * Returns the logarithm of any base specified.
+ *
+ * @param value Input value.
+ * @param base Logarithm base to use, default is 10.
+ * @return log(value)/log(base).
+ */
+native Float:Logarithm(Float:value, Float:base=10.0);
+
+/**
+ * Returns the sine of the argument.
+ *
+ * @param value Input value in radians.
+ * @return sin(value).
+ */
+native Float:Sine(Float:value);
+
+/**
+ * Returns the cosine of the argument.
+ *
+ * @param value Input value in radians.
+ * @return cos(value).
+ */
+native Float:Cosine(Float:value);
+
+/**
+ * Returns the tangent of the argument.
+ *
+ * @param value Input value in radians.
+ * @return tan(value).
+ */
+native Float:Tangent(Float:value);
+
+/**
+ * Returns an absolute value.
+ *
+ * @param value Input value.
+ * @return Absolute value of the input.
+ */
+native Float:FloatAbs(Float:value);
+
+/**
+ * Returns the arctangent of the input value.
+ *
+ * @param angle Input value.
+ * @return atan(value) in radians.
+ */
+native Float:ArcTangent(Float:angle);
+
+/**
+ * Returns the arccosine of the input value.
+ *
+ * @param angle Input value.
+ * @return acos(value) in radians.
+ */
+native Float:ArcCosine(Float:angle);
+
+/**
+ * Returns the arcsine of the input value.
+ *
+ * @param angle Input value.
+ * @return asin(value) in radians.
+ */
+native Float:ArcSine(Float:angle);
+
+/**
+ * Returns the arctangent2 of the input values.
+ *
+ * @param x Horizontal value.
+ * @param y Vertical value.
+ * @return atan2(value) in radians.
+ */
+native Float:ArcTangent2(Float:x, Float:y);
+
+/**
+ * Rounds a floating point number using the "round to nearest" algorithm.
+ *
+ * @param value Floating point value to round.
+ * @return The value rounded to the nearest integer.
+ */
+stock RoundFloat(Float:value)
+{
+ return RoundToNearest(value);
+}
+
+/**
+ * User defined operators.
+ *
+ */
+#pragma rational Float
+
+native bool:__FLOAT_GT__(Float:a, Float:b);
+native bool:__FLOAT_GE__(Float:a, Float:b);
+native bool:__FLOAT_LT__(Float:a, Float:b);
+native bool:__FLOAT_LE__(Float:a, Float:b);
+native bool:__FLOAT_EQ__(Float:a, Float:b);
+native bool:__FLOAT_NE__(Float:a, Float:b);
+native bool:__FLOAT_NOT__(Float:a);
+
+native Float:operator*(Float:oper1, Float:oper2) = FloatMul;
+native Float:operator/(Float:oper1, Float:oper2) = FloatDiv;
+native Float:operator+(Float:oper1, Float:oper2) = FloatAdd;
+native Float:operator-(Float:oper1, Float:oper2) = FloatSub;
+native bool:operator!(Float:oper1) = __FLOAT_NOT__;
+native bool:operator>(Float:oper1, Float:oper2) = __FLOAT_GT__;
+native bool:operator>=(Float:oper1, Float:oper2) = __FLOAT_GE__;
+native bool:operator<(Float:oper1, Float:oper2) = __FLOAT_LT__;
+native bool:operator<=(Float:oper1, Float:oper2) = __FLOAT_LE__;
+native bool:operator!=(Float:oper1, Float:oper2) = __FLOAT_NE__;
+native bool:operator==(Float:oper1, Float:oper2) = __FLOAT_EQ__;
+
+stock Float:operator++(Float:oper)
+{
+ return oper+1.0;
+}
+
+stock Float:operator--(Float:oper)
+{
+ return oper-1.0;
+}
+
+stock Float:operator-(Float:oper)
+{
+ return oper^Float:cellmin; /* IEEE values are sign/magnitude */
+}
+
+stock Float:operator*(Float:oper1, oper2)
+{
+ return FloatMul(oper1, float(oper2)); /* "*" is commutative */
+}
+
+stock Float:operator/(Float:oper1, oper2)
+{
+ return FloatDiv(oper1, float(oper2));
+}
+
+stock Float:operator/(oper1, Float:oper2)
+{
+ return FloatDiv(float(oper1), oper2);
+}
+
+stock Float:operator+(Float:oper1, oper2)
+{
+ return FloatAdd(oper1, float(oper2)); /* "+" is commutative */
+}
+
+stock Float:operator-(Float:oper1, oper2)
+{
+ return FloatSub(oper1, float(oper2));
+}
+
+stock Float:operator-(oper1, Float:oper2)
+{
+ return FloatSub(float(oper1), oper2);
+}
+
+stock bool:operator==(Float:oper1, oper2)
+{
+ return __FLOAT_EQ__(oper1, float(oper2));
+}
+
+stock bool:operator!=(Float:oper1, oper2)
+{
+ return __FLOAT_NE__(oper1, float(oper2));
+}
+
+stock bool:operator>(Float:oper1, oper2)
+{
+ return __FLOAT_GT__(oper1, float(oper2));
+}
+
+stock bool:operator>(oper1, Float:oper2)
+{
+ return __FLOAT_GT__(float(oper1), oper2);
+}
+
+stock bool:operator>=(Float:oper1, oper2)
+{
+ return __FLOAT_GE__(oper1, float(oper2));
+}
+
+stock bool:operator>=(oper1, Float:oper2)
+{
+ return __FLOAT_GE__(float(oper1), oper2);
+}
+
+stock bool:operator<(Float:oper1, oper2)
+{
+ return __FLOAT_LT__(oper1, float(oper2));
+}
+
+stock bool:operator<(oper1, Float:oper2)
+{
+ return __FLOAT_LT__(float(oper1), oper2);
+}
+
+stock bool:operator<=(Float:oper1, oper2)
+{
+ return __FLOAT_LE__(oper1, float(oper2));
+}
+
+stock bool:operator<=(oper1, Float:oper2)
+{
+ return __FLOAT_LE__(float(oper1), oper2);
+}
+
+/**
+ * Forbidden operators.
+ *
+ */
+forward operator%(Float:oper1, Float:oper2);
+forward operator%(Float:oper1, oper2);
+forward operator%(oper1, Float:oper2);
+
+#define FLOAT_PI 3.1415926535897932384626433832795
+
+/**
+ * Converts degrees to radians.
+ *
+ * @param angle Degrees.
+ * @return Radians.
+ */
+stock Float:DegToRad(Float:angle)
+{
+ return (angle*FLOAT_PI)/180;
+}
+
+/**
+ * Converts degrees to radians.
+ *
+ * @param angle Radians.
+ * @return Degrees.
+ */
+stock Float:RadToDeg(Float:angle)
+{
+ return (angle*180)/FLOAT_PI;
+}
+
+/**
+ * Returns a random integer in the range [0, 2^31-1].
+ *
+ * Note: Uniform random number streams are seeded automatically per-plugin.
+ *
+ * @return Random integer.
+ */
+native GetURandomInt();
+
+/**
+ * Returns a uniform random float in the range [0, 1).
+ *
+ * Note: Uniform random number streams are seeded automatically per-plugin.
+ *
+ * @return Uniform random floating-point number.
+ */
+native Float:GetURandomFloat();
+
+/**
+ * Seeds a plugin's uniform random number stream. This is done automatically,
+ * so normally it is totally unnecessary to call this.
+ *
+ * @param seeds Array of numbers to use as seeding data.
+ * @param numSeeds Number of seeds in the seeds array.
+ * @noreturn
+ */
+native SetURandomSeed(const seeds[], numSeeds);
+
+/**
+ * Seeds a plugin's uniform random number stream. This is done automatically,
+ * so normally it is totally unnecessary to call this.
+ *
+ * @param seed Single seed value.
+ * @noreturn
+ */
+stock SetURandomSeedSimple(seed)
+{
+ new seeds[1];
+ seeds[0] = seed;
+ SetURandomSeed(seeds, 1);
+}
+
diff --git a/addons/sourcemod/scripting/include/functions.inc b/addons/sourcemod/scripting/include/functions.inc
new file mode 100644
index 0000000..105f1d2
--- /dev/null
+++ b/addons/sourcemod/scripting/include/functions.inc
@@ -0,0 +1,511 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _functions_included
+ #endinput
+#endif
+#define _functions_included
+
+#define SP_PARAMFLAG_BYREF (1<<0) /**< Internal use only. */
+
+/**
+ * Describes the various ways to pass parameters to functions or forwards.
+ */
+enum ParamType
+{
+ Param_Any = 0, /**< Any data type can be pushed */
+ Param_Cell = (1<<1), /**< Only basic cells can be pushed */
+ Param_Float = (2<<1), /**< Only floats can be pushed */
+ Param_String = (3<<1)|SP_PARAMFLAG_BYREF, /**< Only strings can be pushed */
+ Param_Array = (4<<1)|SP_PARAMFLAG_BYREF, /**< Only arrays can be pushed */
+ Param_VarArgs = (5<<1), /**< Same as "..." in plugins, anything can be pushed, but it will always be byref */
+ Param_CellByRef = (1<<1)|SP_PARAMFLAG_BYREF, /**< Only a cell by reference can be pushed */
+ Param_FloatByRef = (2<<1)|SP_PARAMFLAG_BYREF /**< Only a float by reference can be pushed */
+};
+
+/**
+ * Defines how a forward iterates through plugin functions.
+ */
+enum ExecType
+{
+ ET_Ignore = 0, /**< Ignore all return values, return 0 */
+ ET_Single = 1, /**< Only return the last exec, ignore all others */
+ ET_Event = 2, /**< Acts as an event with the Actions defined in core.inc, no mid-Stops allowed, returns highest */
+ ET_Hook = 3 /**< Acts as a hook with the Actions defined in core.inc, mid-Stops allowed, returns highest */
+};
+
+/**
+ * @section Flags that are used with Call_PushArrayEx() and Call_PushStringEx()
+ */
+
+#define SM_PARAM_COPYBACK (1<<0) /**< Copy an array/reference back after call */
+
+#define SM_PARAM_STRING_UTF8 (1<<0) /**< String should be UTF-8 handled */
+#define SM_PARAM_STRING_COPY (1<<1) /**< String should be copied into the plugin */
+#define SM_PARAM_STRING_BINARY (1<<2) /**< Treat the string as a binary string */
+
+/**
+ * @endsection
+ */
+
+/**
+ * @section Error codes
+ */
+#define SP_ERROR_NONE 0 /**< No error occurred */
+#define SP_ERROR_FILE_FORMAT 1 /**< File format unrecognized */
+#define SP_ERROR_DECOMPRESSOR 2 /**< A decompressor was not found */
+#define SP_ERROR_HEAPLOW 3 /**< Not enough space left on the heap */
+#define SP_ERROR_PARAM 4 /**< Invalid parameter or parameter type */
+#define SP_ERROR_INVALID_ADDRESS 5 /**< A memory address was not valid */
+#define SP_ERROR_NOT_FOUND 6 /**< The object in question was not found */
+#define SP_ERROR_INDEX 7 /**< Invalid index parameter */
+#define SP_ERROR_STACKLOW 8 /**< Nnot enough space left on the stack */
+#define SP_ERROR_NOTDEBUGGING 9 /**< Debug mode was not on or debug section not found */
+#define SP_ERROR_INVALID_INSTRUCTION 10 /**< Invalid instruction was encountered */
+#define SP_ERROR_MEMACCESS 11 /**< Invalid memory access */
+#define SP_ERROR_STACKMIN 12 /**< Stack went beyond its minimum value */
+#define SP_ERROR_HEAPMIN 13 /**< Heap went beyond its minimum value */
+#define SP_ERROR_DIVIDE_BY_ZERO 14 /**< Division by zero */
+#define SP_ERROR_ARRAY_BOUNDS 15 /**< Array index is out of bounds */
+#define SP_ERROR_INSTRUCTION_PARAM 16 /**< Instruction had an invalid parameter */
+#define SP_ERROR_STACKLEAK 17 /**< A native leaked an item on the stack */
+#define SP_ERROR_HEAPLEAK 18 /**< A native leaked an item on the heap */
+#define SP_ERROR_ARRAY_TOO_BIG 19 /**< A dynamic array is too big */
+#define SP_ERROR_TRACKER_BOUNDS 20 /**< Tracker stack is out of bounds */
+#define SP_ERROR_INVALID_NATIVE 21 /**< Native was pending or invalid */
+#define SP_ERROR_PARAMS_MAX 22 /**< Maximum number of parameters reached */
+#define SP_ERROR_NATIVE 23 /**< Error originates from a native */
+#define SP_ERROR_NOT_RUNNABLE 24 /**< Function or plugin is not runnable */
+#define SP_ERROR_ABORTED 25 /**< Function call was aborted */
+
+/**
+ * @endsection
+ */
+
+/**
+ * Gets a function id from a function name.
+ *
+ * @param plugin Handle of the plugin that contains the function.
+ Pass INVALID_HANDLE to search in the calling plugin.
+ * @param name Name of the function.
+ * @return Function id or INVALID_FUNCTION if not found.
+ * @error Invalid or corrupt plugin handle.
+ */
+native Function:GetFunctionByName(Handle:plugin, const String:name[]);
+
+/**
+ * Creates a global forward.
+ *
+ * @note The name used to create the forward is used as its public function in all target plugins.
+ * @note This is ideal for global, static forwards that are never changed.
+ * @note Global forwards cannot be cloned.
+ * @note Use CloseHandle() to destroy these.
+ *
+ * @param name Name of public function to use in forward.
+ * @param type Execution type to be used.
+ * @param ... Variable number of parameter types (up to 32).
+ * @return Handle to new global forward.
+ * @error More than 32 paramater types passed.
+ */
+native Handle:CreateGlobalForward(const String:name[], ExecType:type, ParamType:...);
+
+/**
+ * Creates a private forward.
+ *
+ * @note No functions are automatically added. Use AddToForward() to do this.
+ * @note Private forwards can be cloned.
+ * @note Use CloseHandle() to destroy these.
+ *
+ * @param type Execution type to be used.
+ * @param ... Variable number of parameter types (up to 32).
+ * @return Handle to new private forward.
+ * @error More than 32 paramater types passed.
+ */
+native Handle:CreateForward(ExecType:type, ParamType:...);
+
+/**
+ * Returns the number of functions in a global or private forward's call list.
+ *
+ * @param fwd Handle to global or private forward.
+ * @return Number of functions in forward.
+ * @error Invalid or corrupt forward handle.
+ */
+native GetForwardFunctionCount(Handle:fwd);
+
+/**
+ * Adds a function to a private forward's call list.
+ *
+ * @note Cannot be used during an incompleted call.
+ *
+ * @param fwd Handle to private forward.
+ * @param plugin Handle of the plugin that contains the function.
+ * Pass INVALID_HANDLE to specify the calling plugin.
+ * @param func Function to add to forward.
+ * @return True on success, false otherwise.
+ * @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function.
+ */
+native bool:AddToForward(Handle:fwd, Handle:plugin, Function:func);
+
+/**
+ * Removes a function from a private forward's call list.
+ *
+ * @note Only removes one instance.
+ * @note Functions will be removed automatically if their parent plugin is unloaded.
+ *
+ * @param fwd Handle to private forward.
+ * @param plugin Handle of the plugin that contains the function.
+ * Pass INVALID_HANDLE to specify the calling plugin.
+ * @param func Function to remove from forward.
+ * @return True on success, false otherwise.
+ * @error Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function.
+ */
+native bool:RemoveFromForward(Handle:fwd, Handle:plugin, Function:func);
+
+/**
+ * Removes all instances of a plugin from a private forward's call list.
+ *
+ * @note Functions will be removed automatically if their parent plugin is unloaded.
+ *
+ * @param fwd Handle to private forward.
+ * @param plugin Handle of the plugin to remove instances of.
+ * Pass INVALID_HANDLE to specify the calling plugin.
+ * @return Number of functions removed from forward.
+ * @error Invalid or corrupt private forward handle or invalid or corrupt plugin handle.
+ */
+native RemoveAllFromForward(Handle:fwd, Handle:plugin);
+
+/**
+ * Starts a call to functions in a forward's call list.
+ *
+ * @note Cannot be used during an incompleted call.
+ *
+ * @param fwd Handle to global or private forward.
+ * @noreturn
+ * @error Invalid or corrupt forward handle or called before another call has completed.
+ */
+native Call_StartForward(Handle:fwd);
+
+/**
+ * Starts a call to a function.
+ *
+ * @note Cannot be used during an incompleted call.
+ *
+ * @param plugin Handle of the plugin that contains the function.
+ * Pass INVALID_HANDLE to specify the calling plugin.
+ * @param func Function to call.
+ * @noreturn
+ * @error Invalid or corrupt plugin handle, invalid function, or called before another call has completed.
+ */
+native Call_StartFunction(Handle:plugin, Function:func);
+
+/**
+ * Pushes a cell onto the current call.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value Cell value to push.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushCell(any:value);
+
+/**
+ * Pushes a cell by reference onto the current call.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value Cell reference to push.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushCellRef(&any:value);
+
+/**
+ * Pushes a float onto the current call.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value Floating point value to push.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushFloat(Float:value);
+
+/**
+ * Pushes a float by reference onto the current call.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value Floating point reference to push.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushFloatRef(&Float:value);
+
+/**
+ * Pushes an array onto the current call.
+ *
+ * @note Changes to array are not copied back to caller. Use PushArrayEx() to do this.
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value Array to push.
+ * @param size Size of array.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushArray(const any:value[], size);
+
+/**
+ * Pushes an array onto the current call.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value Array to push.
+ * @param size Size of array.
+ * @param cpflags Whether or not changes should be copied back to the input array.
+ * See SP_PARAM_* constants for details.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushArrayEx(any:value[], size, cpflags);
+
+/**
+ * Pushes a string onto the current call.
+ *
+ * @note Changes to string are not copied back to caller. Use PushStringEx() to do this.
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value String to push.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushString(const String:value[]);
+
+/**
+ * Pushes a string onto the current call.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param value String to push.
+ * @param length Length of string buffer.
+ * @param szflags Flags determining how string should be handled.
+ * See SP_PARAM_STRING_* constants for details.
+ * The default (0) is to push ASCII.
+ * @param cpflags Whether or not changes should be copied back to the input array.
+ * See SP_PARAM_* constants for details.
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_PushStringEx(String:value[], length, szflags, cpflags);
+
+/**
+ * Completes a call to a function or forward's call list.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @param result Return value of function or forward's call list.
+ * @return SP_ERROR_NONE on success, any other integer on failure.
+ * @error Called before a call has been started.
+ */
+native Call_Finish(&any:result=0);
+
+/**
+ * Cancels a call to a function or forward's call list.
+ *
+ * @note Cannot be used before a call has been started.
+ *
+ * @noreturn
+ * @error Called before a call has been started.
+ */
+native Call_Cancel();
+
+/**
+ * Defines a native function.
+ *
+ * It is not necessary to validate the parameter count
+ *
+ * @param plugin Handle of the calling plugin.
+ * @param numParams Number of parameters passed to the native.
+ * @return Value for the native call to return.
+ */
+functag public NativeCall(Handle:plugin, numParams);
+
+/**
+ * Creates a dynamic native. This should only be called in AskPluginLoad(), or
+ * else you risk not having your native shared with other plugins.
+ *
+ * @param name Name of the dynamic native; must be unique amongst
+ * all other registered dynamic natives.
+ * @param func Function to use as the dynamic native.
+ * @noreturn
+ */
+native CreateNative(const String:name[], NativeCall:func);
+
+/**
+ * Throws an error in the calling plugin of a native, instead of your own plugin.
+ *
+ * @param error Error code to use.
+ * @param fmt Error message format.
+ * @param ... Format arguments.
+ */
+native ThrowNativeError(error, const String:fmt[], any:...);
+
+/**
+ * Retrieves the string length from a native parameter string. This is useful
+ * fetching the entire string using dynamic arrays.
+ * @note If this function succeeds, Get/SetNativeString will also succeed.
+ *
+ * @param param Parameter number, starting from 1.
+ * @param length Stores the length of the string.
+ * @return SP_ERROR_NONE on success, any other integer on failure.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native GetNativeStringLength(param, &length);
+
+/**
+ * Retrieves a string from a native parameter.
+ * @note Output conditions are undefined on failure.
+ *
+ * @param param Parameter number, starting from 1.
+ * @param buffer Buffer to store the string in.
+ * @param maxlength Maximum length of the buffer.
+ * @param bytes Optionally store the number of bytes written.
+ * @return SP_ERROR_NONE on success, any other integer on failure.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native GetNativeString(param, String:buffer[], maxlength, &bytes=0);
+
+/**
+ * Sets a string in a native parameter.
+ * @note Output conditions are undefined on failure.
+ *
+ * @param param Parameter number, starting from 1.
+ * @param source Source string to use.
+ * @param maxlength Maximum number of bytes to write.
+ * @param utf8 If false, string will not be written
+ * with UTF8 safety.
+ * @param bytes Optionally store the number of bytes written.
+ * @return SP_ERROR_NONE on success, any other integer on failure.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native SetNativeString(param, const String:source[], maxlength, bool:utf8=true, &bytes=0);
+
+/**
+ * Gets a cell from a native parameter.
+ *
+ * @param param Parameter number, starting from 1.
+ * @return Cell value at the parameter number.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native any:GetNativeCell(param);
+
+/**
+ * Gets a cell from a native parameter, by reference.
+ *
+ * @param param Parameter number, starting from 1.
+ * @return Cell value at the parameter number.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native any:GetNativeCellRef(param);
+
+/**
+ * Sets a cell from a native parameter, by reference.
+ *
+ * @param param Parameter number, starting from 1.
+ * @param value Cell value at the parameter number to set by reference.
+ * @noreturn
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native SetNativeCellRef(param, any:value);
+
+/**
+ * Gets an array from a native parameter (always by reference).
+ *
+ * @param param Parameter number, starting from 1.
+ * @param local Local array to copy into.
+ * @param size Maximum size of local array.
+ * @return SP_ERROR_NONE on success, anything else on failure.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native GetNativeArray(param, any:local[], size);
+
+/**
+ * Copies a local array into a native parameter array (always by reference).
+ *
+ * @param param Parameter number, starting from 1.
+ * @param local Local array to copy from.
+ * @param size Size of the local array to copy.
+ * @return SP_ERROR_NONE on success, anything else on failure.
+ * @error Invalid parameter number or calling from a non-native function.
+ */
+native SetNativeArray(param, const any:local[], size);
+
+/**
+ * Formats a string using parameters from a native.
+ *
+ * @note All parameter indexes start at 1.
+ * @note If the input and output buffers overlap, the contents
+ * of the output buffer at the end is undefined.
+ *
+ * @param out_param Output parameter number to write to. If 0, out_string is used.
+ * @param fmt_param Format parameter number. If 0, fmt_string is used.
+ * @param vararg_param First variable parameter number.
+ * @param out_len Output string buffer maximum length (always required).
+ * @param written Optionally stores the number of bytes written.
+ * @param out_string Output string buffer to use if out_param is not used.
+ * @param fmt_string Format string to use if fmt_param is not used.
+ * @return SP_ERROR_NONE on success, anything else on failure.
+ */
+native FormatNativeString(out_param,
+ fmt_param,
+ vararg_param,
+ out_len,
+ &written=0,
+ String:out_string[]="",
+ const String:fmt_string[]="");
+
+/**
+ * Defines a RequestFrame Callback.
+ *
+ * @param data Data passed to the RequestFrame native.
+ * @noreturn
+ */
+functag public RequestFrameCallback(any:data);
+
+/**
+ * Creates a single use Next Frame hook.
+ *
+ * @param Function Function to call on the next frame.
+ * @param data Value to be passed on the invocation of the Function.
+ * @noreturn
+ */
+native RequestFrame(RequestFrameCallback:Function, any:data=0);
diff --git a/addons/sourcemod/scripting/include/geoip.inc b/addons/sourcemod/scripting/include/geoip.inc
new file mode 100644
index 0000000..3df697e
--- /dev/null
+++ b/addons/sourcemod/scripting/include/geoip.inc
@@ -0,0 +1,102 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _geoip_included
+ #endinput
+#endif
+#define _geoip_included
+
+#include
+
+/**
+ * @section IP addresses can contain ports, the ports will be stripped out.
+ */
+
+/**
+ * Gets the two character country code from an IP address. (US, CA, etc)
+ *
+ * @param ip Ip to determine the country code.
+ * @param ccode Destination string buffer to store the code.
+ * @return True on success, false if no country found.
+ */
+native bool:GeoipCode2(const String:ip[], String:ccode[3]);
+
+/**
+ * Gets the three character country code from an IP address. (USA, CAN, etc)
+ *
+ * @param ip Ip to determine the country code.
+ * @param ccode Destination string buffer to store the code.
+ * @return True on success, false if no country found.
+ */
+native bool:GeoipCode3(const String:ip[], String:ccode[4]);
+
+/**
+ * Gets the full country name. (max length of output string is 45)
+ *
+ * @param ip Ip to determine the country code.
+ * @param name Destination string buffer to store the country name.
+ * @param maxlength Maximum length of output string buffer.
+ * @return True on success, false if no country found.
+ */
+native bool:GeoipCountry(const String:ip[], String:name[], maxlength);
+
+/**
+ * @endsection
+ */
+
+/**
+ * Do not edit below this line!
+ */
+public Extension:__ext_geoip =
+{
+ name = "GeoIP",
+ file = "geoip.ext",
+#if defined AUTOLOAD_EXTENSIONS
+ autoload = 1,
+#else
+ autoload = 0,
+#endif
+#if defined REQUIRE_EXTENSIONS
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+#if !defined REQUIRE_EXTENSIONS
+public __ext_geoip_SetNTVOptional()
+{
+ MarkNativeAsOptional("GeoipCode2");
+ MarkNativeAsOptional("GeoipCode3");
+ MarkNativeAsOptional("GeoipCountry");
+}
+#endif
diff --git a/addons/sourcemod/scripting/include/gifts.inc b/addons/sourcemod/scripting/include/gifts.inc
new file mode 100644
index 0000000..253582a
--- /dev/null
+++ b/addons/sourcemod/scripting/include/gifts.inc
@@ -0,0 +1,47 @@
+#if defined _gifts_included
+ #endinput
+#endif
+#define _gifts_included
+
+public SharedPlugin:__pl_gifts =
+{
+ name = "[ANY] Gifts",
+ file = "gifts.smx",
+#if defined REQUIRE_PLUGIN
+ required = 1
+#else
+ required = 0
+#endif
+};
+
+#if !defined REQUIRE_PLUGIN
+public __pl_gifts_SetNTVOptional()
+{
+ MarkNativeAsOptional("Gifts_RegisterPlugin");
+ MarkNativeAsOptional("Gifts_RemovePlugin");
+ MarkNativeAsOptional("Gifts_SetClientCondition");
+ MarkNativeAsOptional("Gifts_GetClientCondition");
+ MarkNativeAsOptional("Gifts_SpawnGift");
+}
+#endif
+
+enum GiftConditions
+{
+ Condition_None = 0,
+ Condition_InCondition,
+ Condition_InConditionCanPickUp
+}
+
+/**
+ * Registers a listener with the gifts plugin.
+ *
+ * @param callback The callback function
+ * @return True if plugin was successfully registered.
+ */
+native Gifts_RegisterPlugin(Function:callback);
+native Gifts_RemovePlugin();
+native Gifts_SetClientCondition(client, GiftConditions:clientState);
+native Gifts_GetClientCondition(client);
+native Gifts_SpawnGift(Function:callback, const String:model[], Float:lifetime, Float:position[3], data, owner=0);
+
+forward Gifts_OnGiftSpawned(entity);
\ No newline at end of file
diff --git a/addons/sourcemod/scripting/include/halflife.inc b/addons/sourcemod/scripting/include/halflife.inc
new file mode 100644
index 0000000..c734e90
--- /dev/null
+++ b/addons/sourcemod/scripting/include/halflife.inc
@@ -0,0 +1,625 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _halflife_included
+ #endinput
+#endif
+#define _halflife_included
+
+#define SOURCE_SDK_UNKNOWN 0 /**< Could not determine the engine version */
+#define SOURCE_SDK_ORIGINAL 10 /**< Original Source engine (still used by "The Ship") */
+#define SOURCE_SDK_DARKMESSIAH 15 /**< Modified version of original engine used by Dark Messiah (no SDK) */
+#define SOURCE_SDK_EPISODE1 20 /**< SDK+Engine released after Episode 1 */
+#define SOURCE_SDK_EPISODE2 30 /**< SDK+Engine released after Episode 2/Orange Box */
+#define SOURCE_SDK_BLOODYGOODTIME 32 /**< Modified version of ep2 engine used by Bloody Good Time (no SDK) */
+#define SOURCE_SDK_EYE 33 /**< Modified version of ep2 engine used by E.Y.E Divine Cybermancy (no SDK) */
+#define SOURCE_SDK_CSS 34 /**< Sometime-older version of Source 2009 SDK+Engine, used for Counter-Strike: Source */
+#define SOURCE_SDK_EPISODE2VALVE 35 /**< SDK+Engine released after Episode 2/Orange Box, "Source 2009" or "Source MP" */
+#define SOURCE_SDK_LEFT4DEAD 40 /**< Engine released after Left 4 Dead (no SDK yet) */
+#define SOURCE_SDK_LEFT4DEAD2 50 /**< Engine released after Left 4 Dead 2 (no SDK yet) */
+#define SOURCE_SDK_ALIENSWARM 60 /**< SDK+Engine released after Alien Swarm */
+#define SOURCE_SDK_CSGO 80 /**< Engine released after CS:GO (no SDK yet) */
+#define SOURCE_SDK_DOTA 90 /**< Engine released after Dota 2 (no SDK) */
+
+#define MOTDPANEL_TYPE_TEXT 0 /**< Treat msg as plain text */
+#define MOTDPANEL_TYPE_INDEX 1 /**< Msg is auto determined by the engine */
+#define MOTDPANEL_TYPE_URL 2 /**< Treat msg as an URL link */
+#define MOTDPANEL_TYPE_FILE 3 /**< Treat msg as a filename to be openned */
+
+enum DialogType
+{
+ DialogType_Msg = 0, /**< just an on screen message */
+ DialogType_Menu, /**< an options menu */
+ DialogType_Text, /**< a richtext dialog */
+ DialogType_Entry, /**< an entry box */
+ DialogType_AskConnect /**< ask the client to connect to a specified IP */
+};
+
+enum EngineVersion
+{
+ Engine_Unknown, /**< Could not determine the engine version */
+ Engine_Original, /**< Original Source Engine (used by The Ship) */
+ Engine_SourceSDK2006, /**< Episode 1 Source Engine (second major SDK) */
+ Engine_SourceSDK2007, /**< Orange Box Source Engine (third major SDK) */
+ Engine_Left4Dead, /**< Left 4 Dead */
+ Engine_DarkMessiah, /**< Dark Messiah Multiplayer (based on original engine) */
+ Engine_Left4Dead2 = 7, /**< Left 4 Dead 2 */
+ Engine_AlienSwarm, /**< Alien Swarm (and Alien Swarm SDK) */
+ Engine_BloodyGoodTime, /**< Bloody Good Time */
+ Engine_EYE, /**< E.Y.E Divine Cybermancy */
+ Engine_Portal2, /**< Portal 2 */
+ Engine_CSGO, /**< Counter-Strike: Global Offensive */
+ Engine_CSS, /**< Counter-Strike: Source */
+ Engine_DOTA, /**< Dota 2 */
+ Engine_HL2DM, /**< Half-Life 2 Deathmatch */
+ Engine_DODS, /**< Day of Defeat: Source */
+ Engine_TF2, /**< Team Fortress 2 */
+ Engine_NuclearDawn, /**< Nuclear Dawn */
+ Engine_SDK2013, /**< Source SDK 2013 */
+ Engine_Blade, /**< Blade Symphony */
+ Engine_Insurgency, /**< Insurgency (2013 Retail version)*/
+ Engine_Contagion, /**< Contagion */
+};
+
+#define INVALID_ENT_REFERENCE 0xFFFFFFFF
+
+/**
+ * Logs a generic message to the HL2 logs.
+ *
+ * @param format String format.
+ * @param ... Format arguments.
+ * @noreturn
+ */
+native LogToGame(const String:format[], any:...);
+
+/**
+ * Sets the seed value for the global Half-Life 2 Random Stream.
+ *
+ * @param seed Seed value.
+ * @noreturn
+ */
+native SetRandomSeed(seed);
+
+/**
+ * Returns a random floating point number from the Half-Life 2 Random Stream.
+ *
+ * @param fMin Minimum random bound.
+ * @param fMax Maximum random bound.
+ * @return A random number between (inclusive) fMin and fMax.
+ */
+native Float:GetRandomFloat(Float:fMin=0.0, Float:fMax=1.0);
+
+/**
+ * Returns a random number from the Half-Life 2 Random Stream.
+ *
+ * @param nmin Minimum random bound.
+ * @param nmax Maximum random bound.
+ * @return A random number between (inclusive) nmin and nmax.
+ */
+native GetRandomInt(nmin, nmax);
+
+/**
+ * Returns whether a map is valid or not.
+ *
+ * @param map Map name, excluding .bsp extension.
+ * @return True if valid, false otherwise.
+ */
+native bool:IsMapValid(const String:map[]);
+
+/**
+ * Returns whether the server is dedicated.
+ *
+ * @return True if dedicated, false otherwise.
+ */
+native bool:IsDedicatedServer();
+
+/**
+ * Returns a high-precision time value for profiling the engine.
+ *
+ * @return A floating point time value.
+ */
+native Float:GetEngineTime();
+
+/**
+ * Returns the game time based on the game tick.
+ *
+ * @return Game tick time.
+ */
+native Float:GetGameTime();
+
+/**
+ * Returns the game's internal tick count.
+ *
+ * @return Game tick count.
+ */
+native GetGameTickCount();
+
+/**
+ * Returns the game description from the mod.
+ *
+ * @param buffer Buffer to store the description.
+ * @param maxlength Maximum size of the buffer.
+ * @param original If true, retrieves the original game description,
+ * ignoring any potential hooks from plugins.
+ * @return Number of bytes written to the buffer (UTF-8 safe).
+ */
+native GetGameDescription(String:buffer[], maxlength, bool:original=false);
+
+/**
+ * Returns the name of the game's directory.
+ *
+ * @param buffer Buffer to store the directory name.
+ * @param maxlength Maximum size of the buffer.
+ *
+ * return Number of bytes written to the buffer (UTF-8 safe).
+ */
+native GetGameFolderName(String:buffer[], maxlength);
+
+/**
+ * Returns the current map name.
+ *
+ * @param buffer Buffer to store map name.
+ * @param maxlength Maximum length of buffer.
+ * @return Number of bytes written (UTF-8 safe).
+ */
+native GetCurrentMap(String:buffer[], maxlength);
+
+/**
+ * Precaches a given model.
+ *
+ * @param model Name of the model to precache.
+ * @param preload If preload is true the file will be precached before level startup.
+ * @return Returns the model index, 0 for error.
+ */
+native PrecacheModel(const String:model[], bool:preload=false);
+
+/**
+ * Precaches a given sentence file.
+ *
+ * @param file Name of the sentence file to precache.
+ * @param preload If preload is true the file will be precached before level startup.
+ * @return Returns a sentence file index.
+ */
+native PrecacheSentenceFile(const String:file[], bool:preload=false);
+
+/**
+ * Precaches a given decal.
+ *
+ * @param decal Name of the decal to precache.
+ * @param preload If preload is true the file will be precached before level startup.
+ * @return Returns a decal index.
+ */
+native PrecacheDecal(const String:decal[], bool:preload=false);
+
+/**
+ * Precaches a given generic file.
+ *
+ * @param generic Name of the generic file to precache.
+ * @param preload If preload is true the file will be precached before level startup.
+ * @return Returns a generic file index.
+ */
+native PrecacheGeneric(const String:generic[], bool:preload=false);
+
+/**
+ * Returns if a given model is precached.
+ *
+ * @param model Name of the model to check.
+ * @return True if precached, false otherwise.
+ */
+native bool:IsModelPrecached(const String:model[]);
+
+/**
+ * Returns if a given decal is precached.
+ *
+ * @param decal Name of the decal to check.
+ * @return True if precached, false otherwise.
+ */
+native bool:IsDecalPrecached(const String:decal[]);
+
+/**
+ * Returns if a given generic file is precached.
+ *
+ * @param generic Name of the generic file to check.
+ * @return True if precached, false otherwise.
+ */
+native bool:IsGenericPrecached(const String:generic[]);
+
+/**
+ * Precaches a given sound.
+ *
+ * @param sound Name of the sound to precache.
+ * @param preload If preload is true the file will be precached before level startup.
+ * @return True if successfully precached, false otherwise.
+ */
+native bool:PrecacheSound(const String:sound[], bool:preload=false);
+
+/**
+ * Returns if a given sound is precached.
+ *
+ * @param sound Name of the sound to check.
+ * @return True if precached, false otherwise.
+ */
+native bool:IsSoundPrecached(const String:sound[]);
+
+/**
+ * Creates different types of ingame messages.
+ *
+ * @param client Index of the client.
+ * @param kv KeyValues handle to set the menu keys and options. (Check iserverplugin.h for more information).
+ * @param type Message type to display ingame.
+ * @noreturn
+ * @error Invalid client index, or client not connected.
+ */
+native CreateDialog(client, Handle:kv, DialogType:type);
+
+/**
+ * Guesses the SDK version a mod was compiled against. If nothing
+ * specific is known about the game, the engine version is used instead.
+ *
+ * The return values are guaranteed to increase chronologically (that is,
+ * a later release will have a higher value).
+ *
+ * @return SOURCE_SDK version code.
+ */
+#pragma deprecated See GetEngineVersion()
+native GuessSDKVersion();
+
+/**
+ * Gets the engine version that the currently-loaded SM core was compiled against.
+ *
+ * The engine version values are not guaranteed to be in any particular order,
+ * and should only be compared by (in)equality.
+ *
+ * @return An EngineVersion value.
+ */
+native EngineVersion:GetEngineVersion();
+
+/**
+ * Prints a message to a specific client in the chat area.
+ *
+ * @param client Client index.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error If the client is not connected an error will be thrown.
+ */
+native PrintToChat(client, const String:format[], any:...);
+
+/**
+ * Prints a message to all clients in the chat area.
+ *
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+stock PrintToChatAll(const String:format[], any:...)
+{
+ decl String:buffer[192];
+
+ for (new i = 1; i <= MaxClients; i++)
+ {
+ if (IsClientInGame(i))
+ {
+ SetGlobalTransTarget(i);
+ VFormat(buffer, sizeof(buffer), format, 2);
+ PrintToChat(i, "%s", buffer);
+ }
+ }
+}
+
+/**
+ * Prints a message to a specific client in the center of the screen.
+ *
+ * @param client Client index.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error If the client is not connected an error will be thrown.
+ */
+native PrintCenterText(client, const String:format[], any:...);
+
+/**
+ * Prints a message to all clients in the center of the screen.
+ *
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+stock PrintCenterTextAll(const String:format[], any:...)
+{
+ decl String:buffer[192];
+
+ for (new i = 1; i <= MaxClients; i++)
+ {
+ if (IsClientInGame(i))
+ {
+ SetGlobalTransTarget(i);
+ VFormat(buffer, sizeof(buffer), format, 2);
+ PrintCenterText(i, "%s", buffer);
+ }
+ }
+}
+
+/**
+ * Prints a message to a specific client with a hint box.
+ *
+ * @param client Client index.
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ * @error If the client is not connected an error will be thrown.
+ */
+native PrintHintText(client, const String:format[], any:...);
+
+/**
+ * Prints a message to all clients with a hint box.
+ *
+ * @param format Formatting rules.
+ * @param ... Variable number of format parameters.
+ * @noreturn
+ */
+stock PrintHintTextToAll(const String:format[], any:...)
+{
+ decl String:buffer[192];
+
+ for (new i = 1; i <= MaxClients; i++)
+ {
+ if (IsClientInGame(i))
+ {
+ SetGlobalTransTarget(i);
+ VFormat(buffer, sizeof(buffer), format, 2);
+ PrintHintText(i, "%s", buffer);
+ }
+ }
+}
+
+/**
+ * Shows a VGUI panel to a specific client.
+ *
+ * @param client Client index.
+ * @param name Panel type name (Check viewport_panel_names.h to see a list of
+ * some panel names).
+ * @param Kv KeyValues handle with all the data for the panel setup (Depends
+ * on the panel type and may be unused).
+ * @param show True to show the panel, or false to remove it from the client screen.
+ * @noreturn
+ * @error If the client is not connected an error will be thrown.
+ */
+native ShowVGUIPanel(client, const String:name[], Handle:Kv=INVALID_HANDLE, bool:show=true);
+
+/**
+ * Creates a HUD synchronization object. This object is used to automatically assign and
+ * re-use channels for a set of messages.
+ *
+ * The HUD has a hardcoded number of channels (usually 6) for displaying
+ * text. You can use any channel for any area of the screen. Text on
+ * different channels can overlap, but text on the same channel will
+ * erase the old text first. This overlapping and overwriting gets problematic.
+ *
+ * A HUD synchronization object automatically selects channels for you based on
+ * the following heuristics:
+ * - If channel X was last used by the object, and hasn't been modified again,
+ * channel X gets re-used.
+ * - Otherwise, a new channel is chosen based on the least-recently-used channel.
+ *
+ * This ensures that if you display text on a sync object, that the previous text
+ * displayed on it will always be cleared first. This is because your new text
+ * will either overwrite the old text on the same channel, or because another
+ * channel has already erased your text.
+ *
+ * Note that messages can still overlap if they are on different synchronization
+ * objects, or they are displayed to manual channels.
+ *
+ * These are particularly useful for displaying repeating or refreshing HUD text, in
+ * addition to displaying multiple message sets in one area of the screen (for example,
+ * center-say messages that may pop up randomly that you don't want to overlap each
+ * other).
+ *
+ * @return New HUD synchronization object.
+ * The Handle can be closed with CloseHandle().
+ * If HUD text is not supported on this mod, then
+ * INVALID_HANDLE is returned.
+ */
+native Handle:CreateHudSynchronizer();
+
+/**
+ * Sets the HUD parameters for drawing text. These parameters are stored
+ * globally, although nothing other than this function and SetHudTextParamsEx
+ * modify them.
+ *
+ * You must call this function before drawing text. If you are drawing
+ * text to multiple clients, you can set the parameters once, since
+ * they won't be modified. However, as soon as you pass control back
+ * to other plugins, you must reset the parameters next time you draw.
+ *
+ * @param x x coordinate, from 0 to 1. -1.0 is the center.
+ * @param y y coordinate, from 0 to 1. -1.0 is the center.
+ * @param holdTime Number of seconds to hold the text.
+ * @param r Red color value.
+ * @param g Green color value.
+ * @param b Blue color value.
+ * @param a Alpha transparency value.
+ * @param effect 0/1 causes the text to fade in and fade out.
+ * 2 causes the text to flash[?].
+ * @param fxTime Duration of chosen effect (may not apply to all effects).
+ * @param fadeIn Number of seconds to spend fading in.
+ * @param fadeOut Number of seconds to spend fading out.
+ * @noreturn
+ */
+native SetHudTextParams(Float:x, Float:y, Float:holdTime, r, g, b, a, effect = 0,
+ Float:fxTime=6.0, Float:fadeIn=0.1, Float:fadeOut=0.2);
+
+/**
+ * Sets the HUD parameters for drawing text. These parameters are stored
+ * globally, although nothing other than this function and SetHudTextParams
+ * modify them.
+ *
+ * This is the same as SetHudTextParams(), except it lets you set the alternate
+ * color for when effects require it.
+ *
+ * @param x x coordinate, from 0 to 1. -1.0 is the center.
+ * @param y y coordinate, from 0 to 1. -1.0 is the center.
+ * @param holdTime Number of seconds to hold the text.
+ * @param color1 First color set, array values being [red, green, blue, alpha]
+ * @param color2 Second color set, array values being [red, green, blue, alpha]
+ * @param effect 0/1 causes the text to fade in and fade out.
+ * 2 causes the text to flash[?].
+ * @param fxTime Duration of chosen effect (may not apply to all effects).
+ * @param fadeIn Number of seconds to spend fading in.
+ * @param fadeOut Number of seconds to spend fading out.
+ * @noreturn
+ */
+native SetHudTextParamsEx(Float:x, Float:y, Float:holdTime, color1[4],
+ color2[4]={255,255,255,0}, effect = 0, Float:fxTime=6.0,
+ Float:fadeIn=0.1, Float:fadeOut=0.2);
+
+/**
+ * Shows a synchronized HUD message to a client.
+ *
+ * As of this writing, only TF, HL2MP, and SourceForts support HUD Text.
+ *
+ * @param client Client index to send the message to.
+ * @param sync Synchronization object.
+ * @param message Message text or formatting rules.
+ * @param ... Message formatting parameters.
+ * @return -1 on failure, anything else on success.
+ * This function fails if the mod does not support it.
+ * @error Client not in-game, or sync object not valid.
+ */
+native ShowSyncHudText(client, Handle:sync, const String:message[], any:...);
+
+/**
+ * Clears the text on a synchronized HUD channel.
+ *
+ * This is not the same as sending "" because it guarantees that it won't
+ * overwrite text on another channel. For example, consider the scenario:
+ *
+ * 1. Your synchronized message goes to channel 3.
+ * 2. Someone else's non-synchronized message goes to channel 3.
+ *
+ * If you were to simply send "" on your synchronized message,
+ * then someone else's text could be overwritten.
+ *
+ * @param client Client index to send the message to.
+ * @param sync Synchronization object.
+ * @noreturn
+ * @error Client not in-game, or sync object not valid.
+ */
+native ClearSyncHud(client, Handle:sync);
+
+/**
+ * Shows a HUD message to a client on the given channel.
+ *
+ * As of this writing, only TF, HL2MP, and SourceForts support HUD Text.
+ *
+ * @param client Client index to send the message to.
+ * @param channel A channel number.
+ * If -1, then a channel will automatically be selected
+ * based on the least-recently-used channel. If the
+ * channel is any other number, it will be modulo'd with
+ * the channel count to get a final channel number.
+ * @param message Message text or formatting rules.
+ * @param ... Message formatting parameters.
+ * @return -1 on failure (lack of mod support).
+ * Any other return value is the channel number that was
+ * used to render the text.
+ */
+native ShowHudText(client, channel, const String:message[], any:...);
+
+/**
+ * Shows a MOTD panel to a specific client.
+ *
+ * @param client Client index.
+ * @param title Title of the panel (printed on the top border of the window).
+ * @param msg Contents of the panel, it can be treated as an url, filename or plain text
+ * depending on the type parameter (WARNING: msg has to be 192 bytes maximum!)
+ * @param type Determines the way to treat the message body of the panel.
+ * @noreturn
+ * @error If the client is not connected an error will be thrown.
+ */
+stock ShowMOTDPanel(client, const String:title[], const String:msg[], type=MOTDPANEL_TYPE_INDEX)
+{
+ decl String:num[3];
+ new Handle:Kv = CreateKeyValues("data");
+ IntToString(type, num, sizeof(num));
+
+ KvSetString(Kv, "title", title);
+ KvSetString(Kv, "type", num);
+ KvSetString(Kv, "msg", msg);
+ ShowVGUIPanel(client, "info", Kv);
+ CloseHandle(Kv);
+}
+
+/**
+ * Displays a panel asking the client to connect to a specified IP.
+ *
+ * @param client Client index.
+ * @param time Duration to hold the panel on the client's screen.
+ * @param ip Destination IP.
+ * @param password Password to connect to the destination IP. The client will be able to see this.
+ * @noreturn
+ */
+stock DisplayAskConnectBox(client, Float:time, const String:ip[], const String:password[] = "")
+{
+ decl String:destination[288];
+ FormatEx(destination, sizeof(destination), "%s/%s", ip, password);
+ new Handle:Kv = CreateKeyValues("data");
+ KvSetFloat(Kv, "time", time);
+ KvSetString(Kv, "title", destination);
+ CreateDialog(client, Kv, DialogType_AskConnect);
+ CloseHandle(Kv);
+}
+
+/**
+ * Converts an entity index into a serial encoded entity reference.
+ *
+ * @param entity Entity index.
+ * @return Entity reference.
+ */
+native EntIndexToEntRef(entity);
+
+/**
+ * Retrieves the entity index from a reference.
+ *
+ * @param ref Entity reference.
+ * @return Entity index.
+ */
+native EntRefToEntIndex(ref);
+
+/**
+ * Converts a reference into a backwards compatible version.
+ *
+ * @param ref Entity reference.
+ * @return Bcompat reference.
+ */
+native MakeCompatEntRef(ref);
+
diff --git a/addons/sourcemod/scripting/include/handles.inc b/addons/sourcemod/scripting/include/handles.inc
new file mode 100644
index 0000000..053ad6f
--- /dev/null
+++ b/addons/sourcemod/scripting/include/handles.inc
@@ -0,0 +1,96 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _handles_included
+ #endinput
+#endif
+#define _handles_included
+
+/**
+ * Handle helper macros.
+ */
+enum Handle
+{
+ INVALID_HANDLE = 0,
+};
+
+
+/**
+ * Closes a Handle. If the handle has multiple copies open,
+ * it is not destroyed unless all copies are closed.
+ *
+ * @note Closing a Handle has a different meaning for each Handle type. Make
+ * sure you read the documentation on whatever provided the Handle.
+ *
+ * @param hndl Handle to close.
+ * @return True if successful, false if not closeable.
+ * @error Invalid handles will cause a run time error.
+ */
+native bool:CloseHandle(Handle:hndl);
+
+/**
+ * Clones a Handle. When passing handles in between plugins, caching handles
+ * can result in accidental invalidation when one plugin releases the Handle, or is its owner
+ * is unloaded from memory. To prevent this, the Handle may be "cloned" with a new owner.
+ *
+ * @note Usually, you will be cloning Handles for other plugins. This means that if you clone
+ * the Handle without specifying the new owner, it will assume the identity of your original calling
+ * plugin, which is not very useful. You should either specify that the receiving plugin should
+ * clone the handle on its own, or you should explicitly clone the Handle using the receiving plugin's
+ * identity Handle.
+ *
+ * @param hndl Handle to clone/duplicate.
+ * @param plugin Optional Handle to another plugin to mark as the new owner.
+ * If no owner is passed, the owner becomes the calling plugin.
+ * @return Handle on success, INVALID_HANDLE if not cloneable.
+ * @error Invalid handles will cause a run time error.
+ */
+native Handle:CloneHandle(Handle:hndl, Handle:plugin=INVALID_HANDLE);
+
+/**
+ * Do not use this function. Returns if a Handle and its contents
+ * are readable, whereas INVALID_HANDLE only checks for the absence
+ * of a Handle.
+ *
+ * This function is intended only for tests where the validity of a
+ * Handle can absolutely not be known.
+ *
+ * Do not use this to check the return values of functions, or to
+ * check if timers should be closed (except in very rare cases).
+ * This function is for very specific usage and using it for general
+ * purpose routines can and will hide very subtle bugs.
+ *
+ * @param hndl Handle to test for validity.
+ * @return True if handle is valid, false otherwise.
+ */
+#pragma deprecated Do not use this function.
+native bool:IsValidHandle(Handle:hndl);
diff --git a/addons/sourcemod/scripting/include/helpers.inc b/addons/sourcemod/scripting/include/helpers.inc
new file mode 100644
index 0000000..3b70165
--- /dev/null
+++ b/addons/sourcemod/scripting/include/helpers.inc
@@ -0,0 +1,293 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _helpers_included
+ #endinput
+#endif
+#define _helpers_included
+
+/**
+ * Formats a user's info as log text. This is usually not needed because
+ * %L can be used to auto-format client information into a string.
+ *
+ * @param client Client index.
+ * @param buffer Buffer for text.
+ * @param maxlength Maximum length of text.
+ */
+stock FormatUserLogText(client, String:buffer[], maxlength)
+{
+ decl String:auth[32];
+ decl String:name[40];
+
+ new userid = GetClientUserId(client);
+ if (!GetClientAuthString(client, auth, sizeof(auth)))
+ {
+ strcopy(auth, sizeof(auth), "UNKNOWN");
+ }
+ if (!GetClientName(client, name, sizeof(name)))
+ {
+ strcopy(name, sizeof(name), "UNKNOWN");
+ }
+
+ /** Currently, no team stuff ... */
+
+ Format(buffer, maxlength, "\"%s<%d><%s><>\"", name, userid, auth);
+}
+
+/**
+ * Returns plugin handle from plugin filename.
+ *
+ * @param filename Filename of the plugin to search for.
+ * @return Handle to plugin if found, INVALID_HANDLE otherwise.
+ */
+stock Handle:FindPluginByFile(const String:filename[])
+{
+ decl String:buffer[256];
+
+ new Handle:iter = GetPluginIterator();
+ new Handle:pl;
+
+ while (MorePlugins(iter))
+ {
+ pl = ReadPlugin(iter);
+
+ GetPluginFilename(pl, buffer, sizeof(buffer));
+ if (strcmp(buffer, filename, false) == 0)
+ {
+ CloseHandle(iter);
+ return pl;
+ }
+ }
+
+ CloseHandle(iter);
+
+ return INVALID_HANDLE;
+}
+
+/**
+ * @deprecated Use FindTarget() or ProcessTargetString().
+ */
+#pragma deprecated Use FindTarget() or ProcessTargetString()
+stock SearchForClients(const String:pattern[], clients[], maxClients)
+{
+ new total = 0;
+
+ if (maxClients == 0)
+ {
+ return 0;
+ }
+
+ if (pattern[0] == '#')
+ {
+ new input = StringToInt(pattern[1]);
+ if (!input)
+ {
+ decl String:name[65]
+ for (new i=1; i<=MaxClients; i++)
+ {
+ if (!IsClientInGame(i))
+ {
+ continue;
+ }
+ GetClientName(i, name, sizeof(name));
+ if (strcmp(name, pattern, false) == 0)
+ {
+ clients[0] = i;
+ return 1;
+ }
+ }
+ } else {
+ new client = GetClientOfUserId(input);
+ if (client)
+ {
+ clients[0] = client;
+ return 1;
+ }
+ }
+ }
+
+ decl String:name[65]
+ for (new i=1; i<=MaxClients; i++)
+ {
+ if (!IsClientInGame(i))
+ {
+ continue;
+ }
+ GetClientName(i, name, sizeof(name));
+ if (StrContains(name, pattern, false) != -1)
+ {
+ clients[total++] = i;
+ if (total >= maxClients)
+ {
+ break;
+ }
+ }
+ }
+
+ return total;
+}
+
+/**
+ * Wraps ProcessTargetString() and handles producing error messages for
+ * bad targets.
+ *
+ * @param client Client who issued command
+ * @param target Client's target argument
+ * @param nobots Optional. Set to true if bots should NOT be targetted
+ * @param immunity Optional. Set to false to ignore target immunity.
+ * @return Index of target client, or -1 on error.
+ */
+stock FindTarget(client, const String:target[], bool:nobots = false, bool:immunity = true)
+{
+ decl String:target_name[MAX_TARGET_LENGTH];
+ decl target_list[1], target_count, bool:tn_is_ml;
+
+ new flags = COMMAND_FILTER_NO_MULTI;
+ if (nobots)
+ {
+ flags |= COMMAND_FILTER_NO_BOTS;
+ }
+ if (!immunity)
+ {
+ flags |= COMMAND_FILTER_NO_IMMUNITY;
+ }
+
+ if ((target_count = ProcessTargetString(
+ target,
+ client,
+ target_list,
+ 1,
+ flags,
+ target_name,
+ sizeof(target_name),
+ tn_is_ml)) > 0)
+ {
+ return target_list[0];
+ }
+ else
+ {
+ ReplyToTargetError(client, target_count);
+ return -1;
+ }
+}
+
+/**
+ * This function is no longer supported. It has been replaced with ReadMapList(),
+ * which uses a more unified caching and configuration mechanism. This function also
+ * has a bug where if the cvar contents changes, the fileTime change won't be recognized.
+ *
+ * Loads a specified array with maps. The maps will be either loaded from mapcyclefile, or if supplied
+ * a cvar containing a file name. If the file in the cvar is bad, it will use mapcyclefile. The fileTime
+ * parameter is used to store a timestamp of the file. If specified, the file will only be reloaded if it
+ * has changed.
+ *
+ * @param array Valid array handle, should be created with CreateArray(33) or larger.
+ * @param fileTime Variable containing the "last changed" time of the file. Used to avoid needless reloading.
+ * @param fileCvar CVAR set to the file to be loaded. Optional.
+ * @return Number of maps loaded or 0 if in error.
+ */
+#pragma deprecated Use ReadMapList() instead.
+ stock LoadMaps(Handle:array, &fileTime = 0, Handle:fileCvar = INVALID_HANDLE)
+ {
+ decl String:mapPath[256], String:mapFile[64];
+ new bool:fileFound = false;
+
+ if (fileCvar != INVALID_HANDLE)
+ {
+ GetConVarString(fileCvar, mapFile, 64);
+ BuildPath(Path_SM, mapPath, sizeof(mapPath), mapFile);
+ fileFound = FileExists(mapPath);
+ }
+
+ if (!fileFound)
+ {
+ new Handle:mapCycleFile = FindConVar("mapcyclefile");
+ GetConVarString(mapCycleFile, mapPath, sizeof(mapPath));
+ fileFound = FileExists(mapPath);
+ }
+
+ if (!fileFound)
+ {
+ LogError("Failed to find a file to load maps from. No maps loaded.");
+ ClearArray(array);
+
+ return 0;
+ }
+
+ // If the file hasn't changed, there's no reason to reload
+ // all of the maps.
+ new newTime = GetFileTime(mapPath, FileTime_LastChange);
+ if (fileTime == newTime)
+ {
+ return GetArraySize(array);
+ }
+
+ fileTime = newTime;
+
+ ClearArray(array);
+
+ new Handle:file = OpenFile(mapPath, "rt");
+ if (file == INVALID_HANDLE)
+ {
+ LogError("Could not open file: %s", mapPath);
+
+ return 0;
+ }
+
+ LogMessage("Loading maps from file: %s", mapPath);
+
+ decl String:buffer[64], len;
+ while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
+ {
+ TrimString(buffer);
+
+ if ((len = StrContains(buffer, ".bsp", false)) != -1)
+ {
+ buffer[len] = '\0';
+ }
+
+ if (buffer[0] == '\0' || !IsValidConVarChar(buffer[0]) || !IsMapValid(buffer))
+ {
+ continue;
+ }
+
+ if (FindStringInArray(array, buffer) != -1)
+ {
+ continue;
+ }
+
+ PushArrayString(array, buffer);
+ }
+
+ CloseHandle(file);
+ return GetArraySize(array);
+}
diff --git a/addons/sourcemod/scripting/include/hidetrails.inc b/addons/sourcemod/scripting/include/hidetrails.inc
new file mode 100644
index 0000000..f4e1af2
--- /dev/null
+++ b/addons/sourcemod/scripting/include/hidetrails.inc
@@ -0,0 +1,25 @@
+#if defined _hidetrails_included
+ #endinput
+#endif
+#define _hidetrails_included
+
+ native HideTrails_ShouldHide(client);
+
+/**
+Shared plugin information
+**/
+public SharedPlugin:_pl_hidetrails =
+{
+ name = "hidetrails",
+ file = "hidetrails.smx",
+#if defined REQUIRE_PLUGIN
+ required = 1
+#else
+ required = 0
+#endif
+};
+
+public _pl_hidetrails_SetNTVOptional()
+{
+ MarkNativeAsOptional("HideTrails_ShouldHide");
+}
\ No newline at end of file
diff --git a/addons/sourcemod/scripting/include/keyvalues.inc b/addons/sourcemod/scripting/include/keyvalues.inc
new file mode 100644
index 0000000..51f6580
--- /dev/null
+++ b/addons/sourcemod/scripting/include/keyvalues.inc
@@ -0,0 +1,429 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _keyvalues_included
+ #endinput
+#endif
+#define _keyvalues_included
+
+/**
+ * KeyValue data value types
+ */
+enum KvDataTypes
+{
+ KvData_None = 0, /**< Type could not be identified, or no type */
+ KvData_String, /**< String value */
+ KvData_Int, /**< Integer value */
+ KvData_Float, /**< Floating point value */
+ KvData_Ptr, /**< Pointer value (sometimes called "long") */
+ KvData_WString, /**< Wide string value */
+ KvData_Color, /**< Color value */
+ KvData_UInt64, /**< Large integer value */
+ /* --- */
+ KvData_NUMTYPES,
+};
+
+/**
+ * Creates a new KeyValues structure. The Handle must always be closed.
+ *
+ * @param name Name of the root section.
+ * @param firstKey If non-empty, specifies the first key value.
+ * @param firstValue If firstKey is non-empty, specifies the first key's value.
+ * @return A Handle to a new KeyValues structure.
+ */
+native Handle:CreateKeyValues(const String:name[], const String:firstKey[]="", const String:firstValue[]="");
+
+/**
+ * Sets a string value of a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param value String value.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetString(Handle:kv, const String:key[], const String:value[]);
+
+/**
+ * Sets an integer value of a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param value Value number.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetNum(Handle:kv, const String:key[], value);
+
+/**
+ * Sets a large integer value of a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param value Large integer value (0=High bits, 1=Low bits)
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetUInt64(Handle:kv, const String:key[], const value[2]);
+
+/**
+ * Sets a floating point value of a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param value Floating point value.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetFloat(Handle:kv, const String:key[], Float:value);
+
+/**
+ * Sets a set of color values of a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param r Red value.
+ * @param g Green value.
+ * @param b Blue value.
+ * @param a Alpha value.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetColor(Handle:kv, const String:key[], r, g, b, a=0);
+
+/**
+ * Sets a vector value of a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param vec Vector value.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetVector(Handle:kv, const String:key[], const Float:vec[3]);
+
+/**
+ * Retrieves a string value from a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param value Buffer to store key value in.
+ * @param maxlength Maximum length of the value buffer.
+ * @param defvalue Optional default value to use if the key is not found.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvGetString(Handle:kv, const String:key[], String:value[], maxlength, const String:defvalue[]="");
+
+/**
+ * Retrieves an integer value from a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param defvalue Optional default value to use if the key is not found.
+ * @return Integer value of the key.
+ * @error Invalid Handle.
+ */
+native KvGetNum(Handle:kv, const String:key[], defvalue=0);
+
+/**
+ * Retrieves a floating point value from a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param defvalue Optional default value to use if the key is not found.
+ * @return Floating point value of the key.
+ * @error Invalid Handle.
+ */
+native Float:KvGetFloat(Handle:kv, const String:key[], Float:defvalue=0.0);
+
+/**
+ * Retrieves a set of color values from a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param r Red value, set by reference.
+ * @param g Green value, set by reference.
+ * @param b Blue value, set by reference.
+ * @param a Alpha value, set by reference.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvGetColor(Handle:kv, const String:key[], &r, &g, &b, &a);
+
+/**
+ * Retrieves a large integer value from a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param value Array to represent the large integer.
+ * @param defvalue Optional default value to use if the key is not found.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvGetUInt64(Handle:kv, const String:key[], value[2], defvalue[2]={0,0});
+
+/**
+ * Retrieves a vector value from a KeyValues key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key, or NULL_STRING.
+ * @param vec Destination vector to store the value in.
+ * @param defvalue Optional default value to use if the key is not found.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvGetVector(Handle:kv, const String:key[], Float:vec[3], const Float:defvalue[3]={0.0, 0.0, 0.0});
+
+/**
+ * Sets the current position in the KeyValues tree to the given key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key.
+ * @param create If true, and the key does not exist, it will be created.
+ * @return True if the key exists, false if it does not and was not created.
+ */
+native bool:KvJumpToKey(Handle:kv, const String:key[], bool:create=false);
+
+/**
+ * Sets the current position in the KeyValues tree to the given key.
+ *
+ * @param kv KeyValues Handle.
+ * @param id KeyValues id.
+ * @return True if the key exists, false if it does not.
+ */
+native bool:KvJumpToKeySymbol(Handle:kv, id);
+
+/**
+ * Sets the current position in the KeyValues tree to the first sub key.
+ * This native adds to the internal traversal stack.
+ *
+ * @param kv KeyValues Handle.
+ * @param keyOnly If false, non-keys will be traversed (values).
+ * @return True on success, false if there was no first sub key.
+ * @error Invalid Handle.
+ */
+native bool:KvGotoFirstSubKey(Handle:kv, bool:keyOnly=true);
+
+/**
+ * Sets the current position in the KeyValues tree to the next sub key.
+ * This native does NOT add to the internal traversal stack, and thus
+ * KvGoBack() is not needed for each successive call to this function.
+ *
+ * @param kv KeyValues Handle.
+ * @param keyOnly If false, non-keys will be traversed (values).
+ * @return True on success, false if there was no next sub key.
+ * @error Invalid Handle.
+ */
+native bool:KvGotoNextKey(Handle:kv, bool:keyOnly=true);
+
+/**
+ * Saves the current position in the traversal stack onto the traversal
+ * stack. This can be useful if you wish to use KvGotoNextKey() and
+ * have the previous key saved for backwards traversal.
+ *
+ * @param kv KeyValues Handle.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSavePosition(Handle:kv);
+
+/**
+ * Removes the given key from the current position.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Name of the key.
+ * @return True on success, false if key did not exist.
+ * @error Invalid Handle.
+ */
+native bool:KvDeleteKey(Handle:kv, const String:key[]);
+
+/**
+ * Removes the current sub-key and attempts to set the position
+ * to the sub-key after the removed one. If no such sub-key exists,
+ * the position will be the parent key in the traversal stack.
+ * Given the sub-key having position "N" in the traversal stack, the
+ * removal will always take place from position "N-1."
+ *
+ * @param kv KeyValues Handle.
+ * @return 1 if removal succeeded and there was another key.
+ * 0 if the current node was not contained in the
+ * previous node, or no previous node exists.
+ * -1 if removal succeeded and there were no more keys,
+ * thus the state is as if KvGoBack() was called.
+ * @error Invalid Handle.
+ */
+native KvDeleteThis(Handle:kv);
+
+/**
+ * Jumps back to the previous position. Returns false if there are no
+ * previous positions (i.e., at the root node). This should be called
+ * once for each successful Jump call, in order to return to the top node.
+ * This function pops one node off the internal traversal stack.
+ *
+ * @param kv KeyValues Handle.
+ * @return True on success, false if there is no higher node.
+ * @error Invalid Handle.
+ */
+native bool:KvGoBack(Handle:kv);
+
+/**
+ * Sets the position back to the top node, emptying the entire node
+ * traversal history. This can be used instead of looping KvGoBack()
+ * if recursive iteration is not important.
+ *
+ * @param kv KeyValues Handle.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvRewind(Handle:kv);
+
+/**
+ * Retrieves the current section name.
+ *
+ * @param kv KeyValues Handle.
+ * @param section Buffer to store the section name.
+ * @param maxlength Maximum length of the name buffer.
+ * @return True on success, false on failure.
+ * @error Invalid Handle.
+ */
+native bool:KvGetSectionName(Handle:kv, String:section[], maxlength);
+
+/**
+ * Sets the current section name.
+ *
+ * @param kv KeyValues Handle.
+ * @param section Section name.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetSectionName(Handle:kv, const String:section[]);
+
+/**
+ * Returns the data type at a key.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Key name.
+ * @return KvDataType value of the key.
+ * @error Invalid Handle.
+ */
+native KvDataTypes:KvGetDataType(Handle:kv, const String:key[]);
+
+/**
+ * Converts a KeyValues tree to a file. The tree is dumped
+ * from the current position.
+ *
+ * @param kv KeyValues Handle.
+ * @param file File to dump write to.
+ * @return True on success, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:KeyValuesToFile(Handle:kv, const String:file[]);
+
+/**
+ * Converts a file to a KeyValues tree. The file is read into
+ * the current position of the tree.
+ *
+ * @param kv KeyValues Handle.
+ * @param file File to read from.
+ * @return True on success, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:FileToKeyValues(Handle:kv, const String:file[]);
+
+/**
+ * Sets whether or not the KeyValues parser will read escape sequences.
+ * For example, \n would be read as a literal newline. This defaults
+ * to false for new KeyValues structures.
+ *
+ * @param kv KeyValues Handle.
+ * @param useEscapes Whether or not to read escape sequences.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvSetEscapeSequences(Handle:kv, bool:useEscapes);
+
+/**
+ * Returns the position in the jump stack; I.e. the number of calls
+ * required for KvGoBack to return to the root node. If at the root node,
+ * 0 is returned.
+ *
+ * @param kv KeyValues Handle.
+ * @return Number of non-root nodes in the jump stack.
+ * @error Invalid Handle.
+ */
+native KvNodesInStack(Handle:kv);
+
+/**
+ * Makes a new copy of all subkeys in the origin KeyValues to
+ * the destination KeyValues.
+ * NOTE: All KeyValues are processed from the current location not the root one.
+ *
+ * @param origin Origin KeyValues Handle.
+ * @param dest Destination KeyValues Handle.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native KvCopySubkeys(Handle:origin, Handle:dest);
+
+/**
+ * Finds a KeyValues name by id.
+ *
+ * @param kv KeyValues Handle.
+ * @param id KeyValues id.
+ * @param name Buffer to store the name.
+ * @param maxlength Maximum length of the value buffer.
+ * @return True on success, false if id not found.
+ * @error Invalid Handle.
+ */
+native bool:KvFindKeyById(Handle:kv, id, String:name[], maxlength);
+
+/**
+ * Finds a KeyValues id inside a KeyValues tree.
+ *
+ * @param kv KeyValues Handle.
+ * @param key Key name.
+ * @param id Id of the found KeyValue.
+ * @return True on success, false if key not found.
+ * @error Invalid Handle.
+ */
+native bool:KvGetNameSymbol(Handle:kv, const String:key[], &id);
+
+/**
+ * Retrieves the current section id.
+ *
+ * @param kv KeyValues Handle.
+ * @param id Id of the current section.
+ * @return True on success, false on failure.
+ * @error Invalid Handle.
+ */
+native bool:KvGetSectionSymbol(Handle:kv, &id);
diff --git a/addons/sourcemod/scripting/include/lang.inc b/addons/sourcemod/scripting/include/lang.inc
new file mode 100644
index 0000000..6ff4464
--- /dev/null
+++ b/addons/sourcemod/scripting/include/lang.inc
@@ -0,0 +1,121 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _lang_included
+ #endinput
+#endif
+#define _lang_included
+
+#define LANG_SERVER 0 /**< Translate using the server's language */
+
+/**
+ * Loads a translation file for the plugin calling this native.
+ * If no extension is specified, .txt is assumed.
+ *
+ * @param file Translation file.
+ * @noreturn
+ */
+native LoadTranslations(const String:file[]);
+
+/**
+ * Sets the global language target. This is useful for creating functions
+ * that will be compatible with the %t format specifier. Note that invalid
+ * indexes can be specified but the error will occur during translation,
+ * not during this function call.
+ *
+ * @param client Client index or LANG_SERVER.
+ * @noreturn
+ */
+native SetGlobalTransTarget(client);
+
+/**
+ * Retrieves the language number of a client.
+ * Currently this simply returns the server language index.
+ *
+ * @param client Client index.
+ * @return Language number client is using.
+ * @error Invalid client index or client not connected.
+ */
+native GetClientLanguage(client);
+
+/**
+ * Retrieves the server's language.
+ *
+ * @return Language number server is using.
+ */
+native GetServerLanguage();
+
+/**
+ * Returns the number of languages known in languages.cfg.
+ *
+ * @return Language count.
+ */
+native GetLanguageCount();
+
+/**
+ * Retrieves info about a given language number.
+ *
+ * @param language Language number.
+ * @param code Language code buffer (2-3 characters usually).
+ * @param codeLen Maximum length of the language code buffer.
+ * @param name Language name buffer.
+ * @param nameLen Maximum length of the language name buffer.
+ * @noreturn
+ * @error Invalid language number.
+ */
+native GetLanguageInfo(language, String:code[]="", codeLen=0, String:name[]="", nameLen=0);
+
+/**
+ * Sets the language number of a client.
+ *
+ * @param client Client index.
+ * @param language Language number.
+ * @noreturn
+ * @error Invalid client index or client not connected.
+ */
+native SetClientLanguage(client, language);
+
+/**
+ * Retrieves the language number from a language code.
+ *
+ * @param code Language code (2-3 characters usually).
+ * @return Language number. -1 if not found.
+ */
+native GetLanguageByCode(const String:code[]);
+
+/**
+ * Retrieves the language number from a language name.
+ *
+ * @param name Language name (case insensitive).
+ * @return Language number. -1 if not found.
+ */
+native GetLanguageByName(const String:name[]);
diff --git a/addons/sourcemod/scripting/include/logging.inc b/addons/sourcemod/scripting/include/logging.inc
new file mode 100644
index 0000000..4269b22
--- /dev/null
+++ b/addons/sourcemod/scripting/include/logging.inc
@@ -0,0 +1,142 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _sm_logging_included
+ #endinput
+#endif
+#define _sm_logging_included
+
+/**
+ * Logs a plugin message to the SourceMod logs. The log message will be
+ * prefixed by the plugin's logtag (filename).
+ *
+ * @param format String format.
+ * @param ... Format arguments.
+ * @noreturn
+ */
+native LogMessage(const String:format[], any:...);
+
+/**
+ * Logs a message to any file. The log message will be in the normal
+ * SourceMod format, with the plugin logtag prepended.
+ *
+ * @param file File to write the log message in.
+ * @param format String format.
+ * @param ... Format arguments.
+ * @noreturn
+ * @error File could not be opened/written.
+ */
+native LogToFile(const String:file[], const String:format[], any:...);
+
+/**
+ * Same as LogToFile(), except no plugin logtag is prepended.
+ *
+ * @param file File to write the log message in.
+ * @param format String format.
+ * @param ... Format arguments.
+ * @noreturn
+ * @error File could not be opened/written.
+ */
+native LogToFileEx(const String:file[], const String:format[], any:...);
+
+/**
+ * Logs an action from a command or event whereby interception and routing may
+ * be important. This is intended to be a logging version of ShowActivity().
+ *
+ * @param client Client performing the action, 0 for server, or -1 if not
+ * applicable.
+ * @param target Client being targetted, or -1 if not applicable.
+ * @param message Message format.
+ * @param ... Message formatting parameters.
+ * @noreturn
+ */
+native LogAction(client, target, const String:message[], any:...);
+
+/**
+ * Logs a plugin error message to the SourceMod logs.
+ *
+ * @param format String format.
+ * @param ... Format arguments.
+ * @noreturn
+ */
+native LogError(const String:format[], any:...);
+
+/**
+ * Called when an action is going to be logged.
+ *
+ * @param source Handle to the object logging the action, or INVALID_HANDLE
+ * if Core is logging the action.
+ * @param ident Type of object logging the action (plugin, ext, or core).
+ * @param client Client the action is from; 0 for server, -1 if not applicable.
+ * @param target Client the action is targetting, or -1 if not applicable.
+ * @param message Message that is being logged.
+ * @return Plugin_Continue will cause Core to defaulty log the message.
+ * Plugin_Handled will stop Core from logging the message.
+ * Plugin_Stop is the same as Handled, but prevents any other
+ * plugins from handling the message.
+ */
+forward Action:OnLogAction(Handle:source,
+ Identity:ident,
+ client,
+ target,
+ const String:message[]);
+
+/**
+ * Called when a game log message is received.
+ *
+ * Any Log*() functions called within this callback will not recursively
+ * pass through. That is, they will log directly, bypassing this callback.
+ *
+ * Note that this does not capture log messages from the engine. It only
+ * captures log messages being sent from the game/mod itself.
+ *
+ * @param message Message contents.
+ * @return Plugin_Handled or Plugin_Stop will prevent the message
+ * from being written to the log file.
+ */
+functag public Action:GameLogHook(const String:message[]);
+
+/**
+ * Adds a game log hook.
+ *
+ * @param hook Hook function.
+ * @noreturn
+ */
+native AddGameLogHook(GameLogHook:hook);
+
+/**
+ * Removes a game log hook.
+ *
+ * @param hook Hook function.
+ * @noreturn
+ */
+native RemoveGameLogHook(GameLogHook:hook);
diff --git a/addons/sourcemod/scripting/include/mapchooser.inc b/addons/sourcemod/scripting/include/mapchooser.inc
new file mode 100644
index 0000000..0e9e73c
--- /dev/null
+++ b/addons/sourcemod/scripting/include/mapchooser.inc
@@ -0,0 +1,132 @@
+#if defined _mapchooser_included_
+ #endinput
+#endif
+#define _mapchooser_included_
+
+enum NominateResult
+{
+ Nominate_Added, /** The map was added to the nominate list */
+ Nominate_Replaced, /** A clients existing nomination was replaced */
+ Nominate_AlreadyInVote, /** Specified map was already in the vote */
+ Nominate_InvalidMap, /** Mapname specifed wasn't a valid map */
+ Nominate_VoteFull, /** This will only occur if force was set to false */
+};
+
+enum MapChange
+{
+ MapChange_Instant, /** Change map as soon as the voting results have come in */
+ MapChange_RoundEnd, /** Change map at the end of the round */
+ MapChange_MapEnd, /** Change the sm_nextmap cvar */
+};
+
+/**
+ * Attempt to add a map to the mapchooser map list.
+ *
+ * @param map Map to add.
+ * @param force Should we force the map in even if it requires overwriting an existing nomination?
+ * @param owner Client index of the nominater. If the client disconnects the nomination will be removed. Use 0 for constant nominations
+ * @return Nominate Result of the outcome
+ */
+native NominateResult:NominateMap(const String:map[], bool:force, owner);
+
+/**
+ * Attempt to remove a map from the mapchooser map list.
+ *
+ * @param map Map to remove.
+ * @return True if the nomination was found and removed, or false if the nomination was not found.
+ */
+native bool:RemoveNominationByMap(const String:map[]);
+
+/**
+ * Attempt to remove a map from the mapchooser map list.
+ *
+ * @param owner Client index of the nominater.
+ * @return True if the nomination was found and removed, or false if the nomination was not found.
+ */
+native bool:RemoveNominationByOwner(owner);
+
+/**
+ * Gets the current list of excluded maps.
+ *
+ * @param array An ADT array handle to add the map strings to.
+ * @noreturn
+ */
+native GetExcludeMapList(Handle:array);
+
+/**
+ * Gets the current list of nominated maps.
+ *
+ * @param maparray An ADT array handle to add the map strings to.
+ * @param ownerarray An optional ADT array handle to add the nominator client indexes to.
+ * @noreturn
+ */
+native GetNominatedMapList(Handle:maparray, Handle:ownerarray = INVALID_HANDLE);
+
+/**
+ * Checks if MapChooser will allow a vote
+ *
+ * @return True if a vote can be held, or false if mapchooser is already holding a vote.
+ */
+native bool:CanMapChooserStartVote();
+
+/**
+ * Initiates a MapChooser map vote
+ *
+ * Note: If no input array is specified mapchooser will use its internal list. This includes
+ * any nominations and excluded maps (as per mapchoosers convars).
+ *
+ * @param when MapChange consant of when the resulting mapchange should occur.
+ * @param inputarray ADT array list of maps to add to the vote.
+ */
+native InitiateMapChooserVote(MapChange:when, Handle:inputarray=INVALID_HANDLE);
+
+/**
+ * Checks if MapChooser's end of map vote has completed.
+ *
+ * @return True if complete, false otherwise.
+ */
+native bool:HasEndOfMapVoteFinished();
+
+/**
+ * Checks if MapChooser is set to run an end of map vote.
+ *
+ * @return True if enabled, false otherwise.
+ */
+native bool:EndOfMapVoteEnabled();
+
+/**
+ * Called when mapchooser removes a nomination from its list.
+ * Nominations cleared on map start will not trigger this forward
+ */
+forward OnNominationRemoved(const String:map[], owner);
+
+/**
+ * Called when mapchooser starts a Map Vote.
+ */
+forward OnMapVoteStarted();
+
+
+public SharedPlugin:__pl_mapchooser =
+{
+ name = "mapchooser",
+ file = "mapchooser.smx",
+#if defined REQUIRE_PLUGIN
+ required = 1,
+#else
+ required = 0,
+#endif
+};
+
+public __pl_mapchooser_SetNTVOptional()
+{
+ MarkNativeAsOptional("NominateMap");
+ MarkNativeAsOptional("RemoveNominationByMap");
+ MarkNativeAsOptional("RemoveNominationByOwner");
+ MarkNativeAsOptional("GetExcludeMapList");
+ MarkNativeAsOptional("GetNominatedMapList");
+ MarkNativeAsOptional("CanMapChooserStartVote");
+ MarkNativeAsOptional("InitiateMapChooserVote");
+ MarkNativeAsOptional("HasEndOfMapVoteFinished");
+ MarkNativeAsOptional("EndOfMapVoteEnabled");
+}
+
diff --git a/addons/sourcemod/scripting/include/menus.inc b/addons/sourcemod/scripting/include/menus.inc
new file mode 100644
index 0000000..fa6cbac
--- /dev/null
+++ b/addons/sourcemod/scripting/include/menus.inc
@@ -0,0 +1,827 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _menus_included
+ #endinput
+#endif
+#define _menus_included
+
+/**
+ * Low-level drawing style of the menu.
+ */
+enum MenuStyle
+{
+ MenuStyle_Default = 0, /**< The "default" menu style for the mod */
+ MenuStyle_Valve = 1, /**< The Valve provided menu style (Used on HL2DM) */
+ MenuStyle_Radio = 2, /**< The simpler menu style commonly used on CS:S */
+};
+
+/**
+ * Different actions for the menu "pump" callback
+ */
+enum MenuAction
+{
+ MenuAction_Start = (1<<0), /**< A menu has been started (nothing passed) */
+ MenuAction_Display = (1<<1), /**< A menu is about to be displayed (param1=client, param2=MenuPanel Handle) */
+ MenuAction_Select = (1<<2), /**< An item was selected (param1=client, param2=item) */
+ MenuAction_Cancel = (1<<3), /**< The menu was cancelled (param1=client, param2=reason) */
+ MenuAction_End = (1<<4), /**< A menu display has fully ended.
+ param1 is the MenuEnd reason, and if it's MenuEnd_Cancelled, then
+ param2 is the MenuCancel reason from MenuAction_Cancel.
+ */
+ MenuAction_VoteEnd = (1<<5), /**< (VOTE ONLY): A vote sequence has succeeded (param1=chosen item)
+ This is not called if SetVoteResultCallback has been used on the menu. */
+ MenuAction_VoteStart = (1<<6), /**< (VOTE ONLY): A vote sequence has started (nothing passed) */
+ MenuAction_VoteCancel = (1<<7), /**< (VOTE ONLY): A vote sequence has been cancelled (param1=reason) */
+ MenuAction_DrawItem = (1<<8), /**< An item is being drawn; return the new style (param1=client, param2=item) */
+ MenuAction_DisplayItem = (1<<9),/**< Item text is being drawn to the display (param1=client, param2=item)
+ To change the text, use RedrawMenuItem().
+ If you do so, return its return value. Otherwise, return 0.
+ */
+};
+
+/** Default menu actions */
+#define MENU_ACTIONS_DEFAULT MenuAction_Select|MenuAction_Cancel|MenuAction_End
+/** All menu actions */
+#define MENU_ACTIONS_ALL MenuAction:0xFFFFFFFF
+
+#define MENU_NO_PAGINATION 0 /**< Menu should not be paginated (10 items max) */
+#define MENU_TIME_FOREVER 0 /**< Menu should be displayed as long as possible */
+
+#define ITEMDRAW_DEFAULT (0) /**< Item should be drawn normally */
+#define ITEMDRAW_DISABLED (1<<0) /**< Item is drawn but not selectable */
+#define ITEMDRAW_RAWLINE (1<<1) /**< Item should be a raw line, without a slot */
+#define ITEMDRAW_NOTEXT (1<<2) /**< No text should be drawn */
+#define ITEMDRAW_SPACER (1<<3) /**< Item should be drawn as a spacer, if possible */
+#define ITEMDRAW_IGNORE ((1<<1)|(1<<2)) /**< Item should be completely ignored (rawline + notext) */
+#define ITEMDRAW_CONTROL (1<<4) /**< Item is control text (back/next/exit) */
+
+#define MENUFLAG_BUTTON_EXIT (1<<0) /**< Menu has an "exit" button (default if paginated) */
+#define MENUFLAG_BUTTON_EXITBACK (1<<1) /**< Menu has an "exit back" button */
+#define MENUFLAG_NO_SOUND (1<<2) /**< Menu will not have any select sounds */
+#define MENUFLAG_BUTTON_NOVOTE (1<<3) /**< Menu has a "No Vote" button at slot 1 */
+
+#define VOTEINFO_CLIENT_INDEX 0 /**< Client index */
+#define VOTEINFO_CLIENT_ITEM 1 /**< Item the client selected, or -1 for none */
+#define VOTEINFO_ITEM_INDEX 0 /**< Item index */
+#define VOTEINFO_ITEM_VOTES 1 /**< Number of votes for the item */
+
+#define VOTEFLAG_NO_REVOTES (1<<0) /**< Players cannot change their votes */
+
+/**
+ * Reasons a menu can be cancelled (MenuAction_Cancel).
+ */
+enum
+{
+ MenuCancel_Disconnected = -1, /**< Client dropped from the server */
+ MenuCancel_Interrupted = -2, /**< Client was interrupted with another menu */
+ MenuCancel_Exit = -3, /**< Client exited via "exit" */
+ MenuCancel_NoDisplay = -4, /**< Menu could not be displayed to the client */
+ MenuCancel_Timeout = -5, /**< Menu timed out */
+ MenuCancel_ExitBack = -6, /**< Client selected "exit back" on a paginated menu */
+};
+
+/**
+ * Reasons a vote can be cancelled (MenuAction_VoteCancel).
+ */
+enum
+{
+ VoteCancel_Generic = -1, /**< Vote was generically cancelled. */
+ VoteCancel_NoVotes = -2, /**< Vote did not receive any votes. */
+};
+
+/**
+ * Reasons a menu ended (MenuAction_End).
+ */
+enum
+{
+ MenuEnd_Selected = 0, /**< Menu item was selected */
+ MenuEnd_VotingDone = -1, /**< Voting finished */
+ MenuEnd_VotingCancelled = -2, /**< Voting was cancelled */
+ MenuEnd_Cancelled = -3, /**< Menu was cancelled (reason in param2) */
+ MenuEnd_Exit = -4, /**< Menu was cleanly exited via "exit" */
+ MenuEnd_ExitBack = -5, /**< Menu was cleanly exited via "back" */
+};
+
+/**
+ * Describes a menu's source
+ */
+enum MenuSource
+{
+ MenuSource_None = 0, /**< No menu is being displayed */
+ MenuSource_External = 1, /**< External menu */
+ MenuSource_Normal = 2, /**< A basic menu is being displayed */
+ MenuSource_RawPanel = 3, /**< A display is active, but it is not tied to a menu */
+};
+
+/**
+ * Called when a menu action is completed.
+ *
+ * @param menu The menu being acted upon.
+ * @param action The action of the menu.
+ * @param param1 First action parameter (usually the client).
+ * @param param2 Second action parameter (usually the item).
+ * @noreturn
+ */
+functag public MenuHandler(Handle:menu, MenuAction:action, param1, param2);
+
+/**
+ * Creates a new, empty menu using the default style.
+ *
+ * @param handler Function which will receive menu actions.
+ * @param actions Optionally set which actions to receive. Select,
+ * Cancel, and End will always be received regardless
+ * of whether they are set or not. They are also
+ * the only default actions.
+ * @return A new menu Handle.
+ */
+native Handle:CreateMenu(MenuHandler:handler, MenuAction:actions=MENU_ACTIONS_DEFAULT);
+
+/**
+ * Displays a menu to a client.
+ *
+ * @param menu Menu Handle.
+ * @param client Client index.
+ * @param time Maximum time to leave menu on the screen.
+ * @return True on success, false on failure.
+ * @error Invalid Handle or client not in game.
+ */
+native bool:DisplayMenu(Handle:menu, client, time);
+
+/**
+ * Displays a menu to a client, starting from the given item.
+ *
+ * @param menu Menu Handle.
+ * @param client Client index.
+ * @param first_item First item to begin drawing from.
+ * @param time Maximum time to leave menu on the screen.
+ * @return True on success, false on failure.
+ * @error Invalid Handle or client not in game.
+ */
+native bool:DisplayMenuAtItem(Handle:menu, client, first_item, time);
+
+/**
+ * Appends a new item to the end of a menu.
+ *
+ * @param menu Menu Handle.
+ * @param info Item information string.
+ * @param display Default item display string.
+ * @param style Drawing style flags. Anything other than DEFAULT or
+ * DISABLED will be completely ignored when paginating.
+ * @return True on success, false on failure.
+ * @error Invalid Handle or item limit reached.
+ */
+native AddMenuItem(Handle:menu,
+ const String:info[],
+ const String:display[],
+ style=ITEMDRAW_DEFAULT);
+
+/**
+ * Inserts an item into the menu before a certain position; the new item will
+ * be at the given position and all next items pushed forward.
+ *
+ * @param menu Menu Handle.
+ * @param position Position, starting from 0.
+ * @param info Item information string.
+ * @param display Default item display string.
+ * @param style Drawing style flags. Anything other than DEFAULT or
+ * DISABLED will be completely ignored when paginating.
+ * @return True on success, false on failure.
+ * @error Invalid Handle or menu position.
+ */
+native bool:InsertMenuItem(Handle:menu,
+ position,
+ const String:info[],
+ const String:display[],
+ style=ITEMDRAW_DEFAULT);
+
+/**
+ * Removes an item from the menu.
+ *
+ * @param menu Menu Handle.
+ * @param position Position, starting from 0.
+ * @return True on success, false on failure.
+ * @error Invalid Handle or menu position.
+ */
+native bool:RemoveMenuItem(Handle:menu, position);
+
+/**
+ * Removes all items from a menu.
+ *
+ * @param menu Menu Handle.
+ * @noreturn
+ * @error Invalid Handle or menu position.
+ */
+native RemoveAllMenuItems(Handle:menu);
+
+/**
+ * Retrieves information about a menu item.
+ *
+ * @param menu Menu Handle.
+ * @param position Position, starting from 0.
+ * @param infoBuf Info buffer.
+ * @param infoBufLen Maximum length of the info buffer.
+ * @param style By-reference variable to store drawing flags.
+ * @param dispBuf Display buffer.
+ * @param dispBufLen Maximum length of the display buffer.
+ * @return True on success, false if position is invalid.
+ * @error Invalid Handle.
+ */
+native bool:GetMenuItem(Handle:menu,
+ position,
+ String:infoBuf[],
+ infoBufLen,
+ &style=0,
+ String:dispBuf[]="",
+ dispBufLen=0);
+
+/**
+ * Returns the first item on the page of a currently selected menu.
+ *
+ * This is only valid inside a MenuAction_Select callback.
+ *
+ * @return First item number on the page the client was viewing
+ * before selecting the item in the callback. This can
+ * be used to re-display the menu from the original
+ * position.
+ * @error Not called from inside a MenuAction_Select callback.
+ */
+native GetMenuSelectionPosition();
+
+/**
+ * Returns the number of items in a menu.
+ *
+ * @param menu Menu Handle.
+ * @return Number of items in the menu.
+ * @error Invalid Handle.
+ */
+native GetMenuItemCount(Handle:menu);
+
+/**
+ * Sets whether the menu should be paginated or not.
+ *
+ * If itemsPerPage is MENU_NO_PAGINATION, and the exit button flag is set,
+ * then the exit button flag is removed. It can be re-applied if desired.
+ *
+ * @param menu Handle to the menu.
+ * @param itemsPerPage Number of items per page, or MENU_NO_PAGINATION.
+ * @return True on success, false if pagination is too high or
+ * low.
+ * @error Invalid Handle.
+ */
+native bool:SetMenuPagination(Handle:menu, itemsPerPage);
+
+/**
+ * Returns a menu's pagination setting.
+ *
+ * @param menu Handle to the menu.
+ * @return Pagination setting.
+ * @error Invalid Handle.
+ */
+native GetMenuPagination(Handle:menu);
+
+/**
+ * Returns a menu's MenuStyle Handle. The Handle
+ * is global and cannot be freed.
+ *
+ * @param menu Handle to the menu.
+ * @return Handle to the menu's draw style.
+ * @error Invalid Handle.
+ */
+native Handle:GetMenuStyle(Handle:menu);
+
+/**
+ * Sets the menu's default title/instruction message.
+ *
+ * @param menu Menu Handle.
+ * @param fmt Message string format
+ * @param ... Message string arguments.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native SetMenuTitle(Handle:menu, const String:fmt[], any:...);
+
+/**
+ * Returns the text of a menu's title.
+ *
+ * @param menu Menu Handle.
+ * @param buffer Buffer to store title.
+ * @param maxlength Maximum length of the buffer.
+ * @return Number of bytes written.
+ * @error Invalid Handle/
+ */
+native GetMenuTitle(Handle:menu, String:buffer[], maxlength);
+
+/**
+ * Creates a raw MenuPanel based off the menu's style.
+ * The Handle must be freed with CloseHandle().
+ *
+ * @param menu Menu Handle.
+ * @return A new MenuPanel Handle.
+ * @error Invalid Handle.
+ */
+native Handle:CreatePanelFromMenu(Handle:menu);
+
+/**
+ * Returns whether or not the menu has an exit button.
+ * By default, menus have an exit button.
+ *
+ * @param menu Menu Handle.
+ * @return True if the menu has an exit button; false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:GetMenuExitButton(Handle:menu);
+
+/**
+ * Sets whether or not the menu has an exit button. By default, paginated menus
+ * have an exit button.
+ *
+ * If a menu's pagination is changed to MENU_NO_PAGINATION, and the pagination
+ * was previously a different value, then the Exit button status is changed to
+ * false. It must be explicitly re-enabled afterwards.
+ *
+ * If a non-paginated menu has an exit button, then at most 9 items will be
+ * displayed.
+ *
+ * @param menu Menu Handle.
+ * @param button True to enable the button, false to remove it.
+ * @return True if allowed; false on failure.
+ * @error Invalid Handle.
+ */
+native bool:SetMenuExitButton(Handle:menu, bool:button);
+
+/**
+ * Returns whether or not the menu has an "exit back" button. By default,
+ * menus do not have an exit back button.
+ *
+ * Exit Back buttons appear as "Back" on page 1 of paginated menus and have
+ * functionality defined by the user in MenuEnd_ExitBack.
+ *
+ * @param menu Menu Handle.
+ * @return True if the menu has an exit back button; false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:GetMenuExitBackButton(Handle:menu);
+
+/**
+ * Sets whether or not the menu has an "exit back" button. By default, menus
+ * do not have an exit back button.
+ *
+ * Exit Back buttons appear as "Back" on page 1 of paginated menus and have
+ * functionality defined by the user in MenuEnd_ExitBack.
+ *
+ * @param menu Menu Handle.
+ * @param button True to enable the button, false to remove it.
+ * @error Invalid Handle.
+ */
+native SetMenuExitBackButton(Handle:menu, bool:button);
+
+/**
+ * Sets whether or not the menu has a "no vote" button in slot 1.
+ * By default, menus do not have a no vote button.
+ *
+ * @param menu Menu Handle.
+ * @param button True to enable the button, false to remove it.
+ * @return True if allowed; false on failure.
+ * @error Invalid Handle.
+ */
+native bool:SetMenuNoVoteButton(Handle:menu, bool:button);
+
+/**
+ * Cancels a menu from displaying on all clients. While the
+ * cancellation is in progress, this menu cannot be re-displayed
+ * to any clients.
+ *
+ * The menu may still exist on the client's screen after this command.
+ * This simply verifies that the menu is not being used anywhere.
+ *
+ * If any vote is in progress on a menu, it will be cancelled.
+ *
+ * @param menu Menu Handle.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native CancelMenu(Handle:menu);
+
+/**
+ * Retrieves a menu's option flags.
+ *
+ * @param menu Menu Handle.
+ * @return A bitstring of MENUFLAG bits.
+ * @error Invalid Handle.
+ */
+native GetMenuOptionFlags(Handle:menu);
+
+/**
+ * Sets a menu's option flags.
+ *
+ * If a certain bit is not supported, it will be stripped before being set.
+ * See SetMenuExitButton() for information on Exit buttons.
+ * See SetMenuExitBackButton() for information on Exit Back buttons.
+ *
+ * @param menu Menu Handle.
+ * @param flags A new bitstring of MENUFLAG bits.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native SetMenuOptionFlags(Handle:menu, flags);
+
+/**
+ * Returns whether a vote is in progress.
+ *
+ * @param menu Deprecated; no longer used.
+ * @return True if a vote is in progress, false otherwise.
+ */
+native bool:IsVoteInProgress(Handle:menu=INVALID_HANDLE);
+
+/**
+ * Cancels the vote in progress.
+ *
+ * @noreturn
+ * @error If no vote is in progress.
+ */
+native CancelVote();
+
+/**
+ * Broadcasts a menu to a list of clients. The most selected item will be
+ * returned through MenuAction_End. On a tie, a random item will be returned
+ * from a list of the tied items.
+ *
+ * Note that MenuAction_VoteEnd and MenuAction_VoteStart are both
+ * default callbacks and do not need to be enabled.
+ *
+ * @param menu Menu Handle.
+ * @param clients Array of clients to broadcast to.
+ * @param numClients Number of clients in the array.
+ * @param time Maximum time to leave menu on the screen.
+ * @param flags Optional voting flags.
+ * @return True on success, false if this menu already has a vote session
+ * in progress.
+ * @error Invalid Handle, or a vote is already in progress.
+ */
+native bool:VoteMenu(Handle:menu, clients[], numClients, time, flags=0);
+
+/**
+ * Sends a vote menu to all clients. See VoteMenu() for more information.
+ *
+ * @param menu Menu Handle.
+ * @param time Maximum time to leave menu on the screen.
+ * @param flags Optional voting flags.
+ * @return True on success, false if this menu already has a vote session
+ * in progress.
+ * @error Invalid Handle.
+ */
+stock bool:VoteMenuToAll(Handle:menu, time, flags=0)
+{
+ new total;
+ decl players[MaxClients];
+
+ for (new i=1; i<=MaxClients; i++)
+ {
+ if (!IsClientInGame(i) || IsFakeClient(i))
+ {
+ continue;
+ }
+ players[total++] = i;
+ }
+
+ return VoteMenu(menu, players, total, time, flags);
+}
+/**
+ * Callback for when a vote has ended and results are available.
+ *
+ * @param menu The menu being voted on.
+ * @param num_votes Number of votes tallied in total.
+ * @param num_clients Number of clients who could vote.
+ * @param client_info Array of clients. Use VOTEINFO_CLIENT_ defines.
+ * @param num_items Number of unique items that were selected.
+ * @param item_info Array of items, sorted by count. Use VOTEINFO_ITEM
+ * defines.
+ * @noreturn
+ */
+functag public VoteHandler(Handle:menu,
+ num_votes,
+ num_clients,
+ const client_info[][2],
+ num_items,
+ const item_info[][2]);
+
+/**
+ * Sets an advanced vote handling callback. If this callback is set,
+ * MenuAction_VoteEnd will not be called.
+ *
+ * @param menu Menu Handle.
+ * @param callback Callback function.
+ * @noreturn
+ * @error Invalid Handle or callback.
+ */
+native SetVoteResultCallback(Handle:menu, VoteHandler:callback);
+
+/**
+ * Returns the number of seconds you should "wait" before displaying
+ * a publicly invocable menu. This number is the time remaining until
+ * (last_vote + sm_vote_delay).
+ *
+ * @return Number of seconds to wait, or 0 for none.
+ */
+native CheckVoteDelay();
+
+/**
+ * Returns whether a client is in the pool of clients allowed
+ * to participate in the current vote. This is determined by
+ * the client list passed to VoteMenu().
+ *
+ * @param client Client index.
+ * @return True if client is allowed to vote, false otherwise.
+ * @error If no vote is in progress or client index is invalid.
+ */
+native bool:IsClientInVotePool(client);
+
+/**
+ * Redraws the current vote menu to a client in the voting pool.
+ *
+ * @param client Client index.
+ * @param revotes True to allow revotes, false otherwise.
+ * @return True on success, false if the client is in the vote pool
+ * but cannot vote again.
+ * @error No vote in progress, client is not in the voting pool,
+ * or client index is invalid.
+ */
+native bool:RedrawClientVoteMenu(client, bool:revotes=true);
+
+/**
+ * Returns a style's global Handle.
+ *
+ * @param style Menu Style.
+ * @return A Handle, or INVALID_HANDLE if not found or unusable.
+ */
+native Handle:GetMenuStyleHandle(MenuStyle:style);
+
+/**
+ * Creates a MenuPanel from a MenuStyle. Panels are used for drawing raw
+ * menus without any extra helper functions. The Handle must be closed
+ * with CloseHandle().
+ *
+ * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style.
+ * @return A new MenuPanel Handle.
+ * @error Invalid Handle other than INVALID_HANDLE.
+ */
+native Handle:CreatePanel(Handle:hStyle=INVALID_HANDLE);
+
+/**
+ * Creates a Menu from a MenuStyle. The Handle must be closed with
+ * CloseHandle().
+ *
+ * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style.
+ * @param handler Function which will receive menu actions.
+ * @param actions Optionally set which actions to receive. Select,
+ * Cancel, and End will always be received regardless
+ * of whether they are set or not. They are also
+ * the only default actions.
+ * @return A new menu Handle.
+ * @error Invalid Handle other than INVALID_HANDLE.
+ */
+native Handle:CreateMenuEx(Handle:hStyle=INVALID_HANDLE, MenuHandler:handler, MenuAction:actions=MENU_ACTIONS_DEFAULT);
+
+/**
+ * Returns whether a client is viewing a menu.
+ *
+ * @param client Client index.
+ * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style.
+ * @return A MenuSource value.
+ * @error Invalid Handle other than INVALID_HANDLE.
+ */
+native MenuSource:GetClientMenu(client, Handle:hStyle=INVALID_HANDLE);
+
+/**
+ * Cancels a menu on a client. This will only affect non-external menus.
+ *
+ * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style.
+ * @param client Client index.
+ * @param autoIgnore If true, no menus can be re-drawn on the client during
+ * the cancellation process.
+ * @return True if a menu was cancelled, false otherwise.
+ */
+native bool:CancelClientMenu(client, bool:autoIgnore=false, Handle:hStyle=INVALID_HANDLE);
+
+/**
+ * Returns a style's maximum items per page.
+ *
+ * @param hStyle MenuStyle Handle, or INVALID_HANDLE to use the default style.
+ * @return Maximum items per page.
+ * @error Invalid Handle other than INVALID_HANDLE.
+ */
+native GetMaxPageItems(Handle:hStyle=INVALID_HANDLE);
+
+/**
+ * Returns a MenuPanel's parent style.
+ *
+ * @param panel A MenuPanel Handle.
+ * @return The MenuStyle Handle that created the panel.
+ * @error Invalid Handle.
+ */
+native Handle:GetPanelStyle(Handle:panel);
+
+/**
+ * Sets the panel's title.
+ *
+ * @param panel A MenuPanel Handle.
+ * @param text Text to set as the title.
+ * @param onlyIfEmpty If true, the title will only be set if no title is set.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native Handle:SetPanelTitle(Handle:panel, const String:text[], bool:onlyIfEmpty=false);
+
+/**
+ * Draws an item on a panel. If the item takes up a slot, the position
+ * is returned.
+ *
+ * @param panel A MenuPanel Handle.
+ * @param text Display text to use. If not a raw line,
+ * the style may automatically add color markup.
+ * No numbering or newlines are needed.
+ * @param style ITEMDRAW style flags.
+ * @return A slot position, or 0 if item was a rawline or could not be drawn.
+ * @error Invalid Handle.
+ */
+native DrawPanelItem(Handle:panel, const String:text[], style=ITEMDRAW_DEFAULT);
+
+/**
+ * Draws a raw line of text on a panel, without any markup other than a newline.
+ *
+ * @param panel A MenuPanel Handle, or INVALID_HANDLE if inside a
+ * MenuAction_DisplayItem callback.
+ * @param text Display text to use.
+ * @return True on success, false if raw lines are not supported.
+ * @error Invalid Handle.
+ */
+native DrawPanelText(Handle:panel, const String:text[]);
+
+/**
+ * Returns whether or not the given drawing flags are supported by
+ * the menu style.
+ *
+ * @param panel A MenuPanel Handle.
+ * @param style ITEMDRAW style flags.
+ * @return True if item is drawable, false otherwise.
+ * @error Invalid Handle.
+ */
+native CanPanelDrawFlags(Handle:panel, style);
+
+/**
+ * Sets the selectable key map of a panel. This is not supported by
+ * all styles (only by Radio, as of this writing).
+ *
+ * @param panel A MenuPanel Handle.
+ * @param keys An integer where each bit N allows key
+ * N+1 to be selected. If no keys are selectable,
+ * then key 0 (bit 9) is automatically set.
+ * @return True if supported, false otherwise.
+ */
+native bool:SetPanelKeys(Handle:panel, keys);
+
+/**
+ * Sends a panel to a client. Unlike full menus, the handler
+ * function will only receive the following actions, both of
+ * which will have INVALID_HANDLE for a menu, and the client
+ * as param1.
+ *
+ * MenuAction_Select (param2 will be the key pressed)
+ * MenuAction_Cancel (param2 will be the reason)
+ *
+ * Also, if the menu fails to display, no callbacks will be called.
+ *
+ * @param panel A MenuPanel Handle.
+ * @param client A client to draw to.
+ * @param handler The MenuHandler function to catch actions with.
+ * @param time Time to hold the menu for.
+ * @return True on success, false on failure.
+ * @error Invalid Handle.
+ */
+native bool:SendPanelToClient(Handle:panel, client, MenuHandler:handler, time);
+
+/**
+ * @brief Returns the amount of text the menu can still hold. If this is
+ * limit is reached or overflowed, the text is silently truncated.
+ *
+ * Radio menus: Currently 511 characters (512 bytes).
+ * Valve menus: Currently -1 (no meaning).
+ *
+ * @param panel A MenuPanel Handle.
+ * @return Number of characters that the menu can still hold,
+ * or -1 if there is no known limit.
+ * @error Invalid Handle.
+ */
+native GetPanelTextRemaining(Handle:panel);
+
+/**
+ * @brief Returns the current key position.
+ *
+ * @param panel A MenuPanel Handle.
+ * @return Current key position starting at 1.
+ * @error Invalid Handle.
+ */
+native GetPanelCurrentKey(Handle:panel);
+
+/**
+ * @brief Sets the next key position. This cannot be used
+ * to traverse backwards.
+ *
+ * @param panel A MenuPanel Handle.
+ * @param key Key that is greater or equal to
+ * GetPanelCurrentKey().
+ * @return True on success, false otherwise.
+ * @error Invalid Handle.
+ */
+native bool:SetPanelCurrentKey(Handle:panel, key);
+
+/**
+ * @brief Redraws menu text from inside a MenuAction_DisplayItem callback.
+ *
+ * @param text Menu text to draw.
+ * @return Item position; must be returned via the callback.
+ */
+native RedrawMenuItem(const String:text[]);
+
+/**
+ * This function is provided for legacy code only. Some older plugins may use
+ * network messages instead of the panel API. This function wraps the panel
+ * API for eased portability into the SourceMod menu system.
+ *
+ * This function is only usable with the Radio Menu style. You do not need to
+ * split up your menu into multiple packets; SourceMod will break the string
+ * up internally.
+ *
+ * @param client Client index.
+ * @param str Full menu string as would be passed over the network.
+ * @param time Time to hold the menu for.
+ * @param keys Selectable key bitstring.
+ * @param handler Optional handler function, with the same rules as
+ * SendPanelToClient().
+ * @return True on success, false on failure.
+ * @error Invalid client index, or radio menus not supported.
+ */
+native bool:InternalShowMenu(client, const String:str[], time, keys=-1, MenuHandler:handler=MenuHandler:-1);
+
+/**
+ * Retrieves voting information from MenuAction_VoteEnd.
+ *
+ * @param param2 Second parameter of MenuAction_VoteEnd.
+ * @param winningVotes Number of votes received by the winning option.
+ * @param totalVotes Number of total votes received.
+ * @noreturn
+ */
+stock GetMenuVoteInfo(param2, &winningVotes, &totalVotes)
+{
+ winningVotes = param2 & 0xFFFF;
+ totalVotes = param2 >> 16;
+}
+
+/**
+ * Quick stock to determine whether voting is allowed. This doesn't let you
+ * fine-tune a reason for not voting, so it's not recommended for lazily
+ * telling clients that voting isn't allowed.
+ *
+ * @return True if voting is allowed, false if voting is in progress
+ * or the cooldown is active.
+ */
+stock bool:IsNewVoteAllowed()
+{
+ if (IsVoteInProgress() || CheckVoteDelay() != 0)
+ {
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/addons/sourcemod/scripting/include/nextmap.inc b/addons/sourcemod/scripting/include/nextmap.inc
new file mode 100644
index 0000000..af539f7
--- /dev/null
+++ b/addons/sourcemod/scripting/include/nextmap.inc
@@ -0,0 +1,84 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _nextmap_included_
+ #endinput
+#endif
+#define _nextmap_included_
+
+/**
+ * Sets SourceMod's internal nextmap.
+ * Equivalent to changing sm_nextmap but with an added validity check.
+ *
+ * @param map Next map to set.
+ * @return True if the nextmap was set, false if map was invalid.
+ */
+native bool:SetNextMap(const String:map[]);
+
+/**
+ * Returns SourceMod's internal nextmap.
+ *
+ * @param map Buffer to store the nextmap name.
+ * @param maxlen Maximum length of the map buffer.
+ * @return True if a Map was found and copied, false if no nextmap is set (map will be unchanged).
+ */
+native bool:GetNextMap(String:map[], maxlen);
+
+/**
+ * Changes the current map and records the reason for the change with maphistory
+ *
+ * @param map Map to change to.
+ * @param reason Reason for change.
+ * @noreturn
+ */
+native ForceChangeLevel(const String:map[], const String:reason[]);
+
+/**
+ * Gets the current number of maps in the map history
+ *
+ * @return Number of maps.
+ */
+native GetMapHistorySize();
+
+/**
+ * Retrieves a map from the map history list.
+ *
+ * @param item Item number. Must be 0 or greater and less than GetMapHistorySize().
+ * @param map Buffer to store the map name.
+ * @param mapLen Length of map buffer.
+ * @param reason Buffer to store the change reason.
+ * @param reasonLen Length of the reason buffer.
+ * @param startTime Time the map started.
+ * @noreturn
+ * @error Invalid item number.
+ */
+native GetMapHistory(item, String:map[], mapLen, String:reason[], reasonLen, &startTime);
\ No newline at end of file
diff --git a/addons/sourcemod/scripting/include/profiler.inc b/addons/sourcemod/scripting/include/profiler.inc
new file mode 100644
index 0000000..68f1ca7
--- /dev/null
+++ b/addons/sourcemod/scripting/include/profiler.inc
@@ -0,0 +1,77 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _profiler_included
+ #endinput
+#endif
+#define _profiler_included
+
+/**
+ * ONLY AVAILABLE ON WINDOWS RIGHT NOW K.
+ */
+
+/**
+ * Creates a new profile object. The Handle must be freed
+ * using CloseHandle().
+ *
+ * @return Handle to the profiler object.
+ */
+native Handle:CreateProfiler();
+
+/**
+ * Starts profiling.
+ *
+ * @param prof Profiling object.
+ * @noreturn
+ * @error Invalid Handle.
+ */
+native StartProfiling(Handle:prof);
+
+/**
+ * Stops profiling.
+ *
+ * @param prof Profiling object.
+ * @noreturn
+ * @error Invalid Handle or profiling was never started.
+ */
+native StopProfiling(Handle:prof);
+
+/**
+ * Returns the amount of high-precision time in seconds
+ * that passed during the profiler's last start/stop
+ * cycle.
+ *
+ * @param prof Profiling object.
+ * @return Time elapsed in seconds.
+ * @error Invalid Handle.
+ */
+native Float:GetProfilerTime(Handle:prof);
diff --git a/addons/sourcemod/scripting/include/protobuf.inc b/addons/sourcemod/scripting/include/protobuf.inc
new file mode 100644
index 0000000..56f0bd9
--- /dev/null
+++ b/addons/sourcemod/scripting/include/protobuf.inc
@@ -0,0 +1,368 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2013 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _protobuf_included
+#endinput
+#endif
+#define _protobuf_included
+
+#define PB_FIELD_NOT_REPEATED -1
+
+/**
+ * Reads an int32, uint32, sint32, fixed32, sfixed32, or enum value from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param index Index into repeated field.
+ * @return Integer value read.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbReadInt(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads a float or downcasted double from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param index Index into repeated field.
+ * @return Float value read.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native Float:PbReadFloat(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads a bool from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param index Index into repeated field.
+ * @return Boolean value read.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native bool:PbReadBool(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads a string from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param buffer Destination string buffer.
+ * @param maxlength Maximum length of output string buffer.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbReadString(Handle:pb, const String:field[], String:buffer[], maxlength, index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads an RGBA color value from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param buffer Destination color buffer.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbReadColor(Handle:pb, const String:field[], buffer[4], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads an XYZ angle value from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param buffer Destination angle buffer.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbReadAngle(Handle:pb, const String:field[], Float:buffer[3], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads an XYZ vector value from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param buffer Destination vector buffer.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbReadVector(Handle:pb, const String:field[], Float:buffer[3], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Reads an XY vector value from a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param buffer Destination vector buffer.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbReadVector2D(Handle:pb, const String:field[], Float:buffer[2], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Gets the number of elements in a repeated field of a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @return Number of elements in the field.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbGetRepeatedFieldCount(Handle:pb, const String:field[]);
+
+/**
+ * Sets an int32, uint32, sint32, fixed32, sfixed32, or enum value on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value Integer value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetInt(Handle:pb, const String:field[], value, index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets a float or double on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value Float value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetFloat(Handle:pb, const String:field[], Float:value, index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets a bool on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value Boolean value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetBool(Handle:pb, const String:field[], bool:value, index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets a string on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value String value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetString(Handle:pb, const String:field[], const String:value[], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets an RGBA color on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param color Color value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetColor(Handle:pb, const String:field[], const color[4], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets an XYZ angle on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param angle Angle value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetAngle(Handle:pb, const String:field[], const Float:angle[3], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets an XYZ vector on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param vec Vector value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetVector(Handle:pb, const String:field[], const Float:vec[3], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Sets an XY vector on a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param vec Vector value to set.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbSetVector2D(Handle:pb, const String:field[], const Float:vec[2], index=PB_FIELD_NOT_REPEATED);
+
+/**
+ * Add an int32, uint32, sint32, fixed32, sfixed32, or enum value to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value Integer value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddInt(Handle:pb, const String:field[], value);
+
+/**
+ * Add a float or double to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value Float value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddFloat(Handle:pb, const String:field[], Float:value);
+
+/**
+ * Add a bool to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value Boolean value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddBool(Handle:pb, const String:field[], bool:value);
+
+/**
+ * Add a string to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param value String value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddString(Handle:pb, const String:field[], const String:value[]);
+
+/**
+ * Add an RGBA color to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param color Color value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddColor(Handle:pb, const String:field[], const color[4]);
+
+/**
+ * Add an XYZ angle to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param angle Angle value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddAngle(Handle:pb, const String:field[], const Float:angle[3]);
+
+/**
+ * Add an XYZ vector to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param vec Vector value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddVector(Handle:pb, const String:field[], const Float:vec[3]);
+
+/**
+ * Add an XY vector to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param vec Vector value to add.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbAddVector2D(Handle:pb, const String:field[], const Float:vec[2]);
+
+/**
+ * Removes a value by index from a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param index Index into repeated field.
+ * @noreturn
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native PbRemoveRepeatedFieldValue(Handle:pb, const String:field[], index);
+
+/**
+ * Retrieve a handle to an embedded protobuf message in a protobuf message.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @return protobuf handle to embedded message.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native Handle:PbReadMessage(Handle:pb, const String:field[]);
+
+/**
+ * Retrieve a handle to an embedded protobuf message in a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @param index Index in the repeated field.
+ * @return protobuf handle to embedded message.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native Handle:PbReadRepeatedMessage(Handle:pb, const String:field[], index);
+
+/**
+ * Adds an embedded protobuf message to a protobuf message repeated field.
+ *
+ * @param pb protobuf handle.
+ * @param field Field name.
+ * @return protobuf handle to added, embedded message.
+ * @error Invalid or incorrect Handle, non-existent field, or incorrect field type.
+ */
+native Handle:PbAddMessage(Handle:pb, const String:field[]);
diff --git a/addons/sourcemod/scripting/include/regex.inc b/addons/sourcemod/scripting/include/regex.inc
new file mode 100644
index 0000000..555c4a3
--- /dev/null
+++ b/addons/sourcemod/scripting/include/regex.inc
@@ -0,0 +1,186 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _regex_included
+ #endinput
+#endif
+#define _regex_included
+
+/**
+ * @section Flags for compiling regex expressions. These come directly from the
+ * pcre library and can be used in MatchRegex and CompileRegex.
+ */
+#define PCRE_CASELESS 0x00000001 /* Ignore Case */
+#define PCRE_MULTILINE 0x00000002 /* Multilines (affects ^ and $ so that they match the start/end of a line rather than matching the start/end of the string). */
+#define PCRE_DOTALL 0x00000004 /* Single line (affects . so that it matches any character, even new line characters). */
+#define PCRE_EXTENDED 0x00000008 /* Pattern extension (ignore whitespace and # comments). */
+#define PCRE_ANCHORED 0x00000010 /* Force pattern anchoring. */
+#define PCRE_DOLLAR_ENDONLY 0x00000020 /* $ not to match newline at end. */
+#define PCRE_UNGREEDY 0x00000200 /* Invert greediness of quantifiers */
+#define PCRE_NOTEMPTY 0x00000400 /* An empty string is not a valid match. */
+#define PCRE_UTF8 0x00000800 /* Use UTF-8 Chars */
+#define PCRE_NO_UTF8_CHECK 0x00002000 /* Do not check the pattern for UTF-8 validity (only relevant if PCRE_UTF8 is set) */
+#define PCRE_UCP 0x20000000 /* Use Unicode properties for \ed, \ew, etc. */
+
+
+/**
+ * Regex expression error codes.
+ */
+enum RegexError
+{
+ REGEX_ERROR_NONE = 0, /* No error */
+ REGEX_ERROR_NOMATCH = -1, /* No match was found */
+ REGEX_ERROR_NULL = -2,
+ REGEX_ERROR_BADOPTION = -3,
+ REGEX_ERROR_BADMAGIC = -4,
+ REGEX_ERROR_UNKNOWN_OPCODE = -5,
+ REGEX_ERROR_NOMEMORY = -6,
+ REGEX_ERROR_NOSUBSTRING = -7,
+ REGEX_ERROR_MATCHLIMIT = -8,
+ REGEX_ERROR_CALLOUT = -9, /* Never used by PCRE itself */
+ REGEX_ERROR_BADUTF8 = -10,
+ REGEX_ERROR_BADUTF8_OFFSET = -11,
+ REGEX_ERROR_PARTIAL = -12,
+ REGEX_ERROR_BADPARTIAL = -13,
+ REGEX_ERROR_INTERNAL = -14,
+ REGEX_ERROR_BADCOUNT = -15,
+ REGEX_ERROR_DFA_UITEM = -16,
+ REGEX_ERROR_DFA_UCOND = -17,
+ REGEX_ERROR_DFA_UMLIMIT = -18,
+ REGEX_ERROR_DFA_WSSIZE = -19,
+ REGEX_ERROR_DFA_RECURSE = -20,
+ REGEX_ERROR_RECURSIONLIMIT = -21,
+ REGEX_ERROR_NULLWSLIMIT = -22, /* No longer actually used */
+ REGEX_ERROR_BADNEWLINE = -23,
+ REGEX_ERROR_BADOFFSET = -24,
+ REGEX_ERROR_SHORTUTF8 = -25,
+ REGEX_ERROR_RECURSELOOP = -26,
+ REGEX_ERROR_JIT_STACKLIMIT = -27,
+ REGEX_ERROR_BADMODE = -28,
+ REGEX_ERROR_BADENDIANNESS = -29,
+ REGEX_ERROR_DFA_BADRESTART = -30,
+ REGEX_ERROR_JIT_BADOPTION = -31,
+ REGEX_ERROR_BADLENGTH = -32,
+};
+
+/**
+ * Precompile a regular expression. Use this if you intend on using the
+ * same expression multiple times. Pass the regex handle returned here to
+ * MatchRegex to check for matches.
+ *
+ * @param pattern The regular expression pattern.
+ * @param flags General flags for the regular expression.
+ * @param error Error message encountered, if applicable.
+ * @param maxLen Maximum string length of the error buffer.
+ * @param errcode Regex type error code encountered, if applicable.
+ * @return Valid regex handle on success, INVALID_HANDLE on failure.
+ */
+native Handle:CompileRegex(const String:pattern[], flags = 0, String:error[]="", maxLen = 0, &RegexError:errcode = REGEX_ERROR_NONE);
+
+/**
+ * Matches a string against a pre-compiled regular expression pattern.
+ *
+ * @param str The string to check.
+ * @param regex Regex Handle from CompileRegex()
+ * @param ret Error code, if applicable.
+ * @return Number of substrings found or -1 on failure.
+ *
+ * @note Use the regex handle passed to this function to extract
+ * matches with GetRegexSubString().
+ */
+native MatchRegex(Handle:regex, const String:str[], &RegexError:ret = REGEX_ERROR_NONE);
+
+/**
+ * Returns a matched substring from a regex handle.
+ * Substring ids start at 0 and end at substrings-1, where substrings is the number returned
+ * by MatchRegex
+ *
+ * @param regex The regex handle to extract data from.
+ * @param str_id The index of the expression to get - starts at 0, and ends at substrings - 1.
+ * @param buffer The buffer to set to the matching substring.
+ * @param maxlen The maximum string length of the buffer.
+ * @return True if a substring was found, False on fail/error
+ */
+native bool:GetRegexSubString(Handle:regex, str_id, String:buffer[], maxlen);
+
+/**
+ * Matches a string against a regular expression pattern.
+ *
+ * @note If you intend on using the same regular expression pattern
+ * multiple times, consider using CompileRegex and MatchRegex
+ * instead of making this function reparse the expression each time.
+ *
+ * @param str The string to check.
+ * @param pattern The regular expression pattern.
+ * @param flags General flags for the regular expression.
+ * @param error Error message, if applicable.
+ * @param maxLen Maximum length of the error buffer.
+ * @return Number of substrings found or -1 on failure.
+ */
+stock SimpleRegexMatch(const String:str[], const String:pattern[], flags = 0, String:error[]="", maxLen = 0)
+{
+ new Handle:regex = CompileRegex(pattern, flags, error, maxLen);
+
+ if (regex == INVALID_HANDLE)
+ {
+ return -1;
+ }
+
+ new substrings = MatchRegex(regex, str);
+
+ CloseHandle(regex);
+
+ return substrings;
+}
+
+/**
+ * @endsection
+ */
+
+/**
+ * Do not edit below this line!
+ */
+public Extension:__ext_regex =
+{
+ name = "Regex Extension",
+ file = "regex.ext",
+#if defined AUTOLOAD_EXTENSIONS
+ autoload = 1,
+#else
+ autoload = 0,
+#endif
+#if defined REQUIRE_EXTENSIONS
+ required = 1,
+#else
+ required = 0,
+#endif
+};
diff --git a/addons/sourcemod/scripting/include/saxtonhale.inc b/addons/sourcemod/scripting/include/saxtonhale.inc
new file mode 100644
index 0000000..ca06348
--- /dev/null
+++ b/addons/sourcemod/scripting/include/saxtonhale.inc
@@ -0,0 +1,137 @@
+#if defined _VSH_included
+ #endinput
+#endif
+#define _VSH_included
+
+/**
+ * Will VSH be played on the current map?
+ * Use this check in OnMapStart() or OnPluginStart(),
+ * since VSH_IsSaxtonHaleModeEnabled() returns 0 before the 1st round.
+ *
+ * @return 1 if it's a VSH map, 0 otherwise.
+ */
+native bool:VSH_IsSaxtonHaleModeMap();
+
+/**
+ *
+ * @return True if VSH is enabled, false otherwise.
+ */
+native bool:VSH_IsSaxtonHaleModeEnabled();
+
+/**
+ * Returns the userid of the current Hale.
+ *
+ * @return Userid of current Hale/boss (-1 if invalid/doesn't exist).
+ */
+native VSH_GetSaxtonHaleUserId();
+
+/**
+ * Current team number for the boss.
+ *
+ * @return Hale's team number (as in the TFTeam enum)
+ */
+native VSH_GetSaxtonHaleTeam();
+
+/**
+ * Current special
+ *
+ * @return 0 - Saxton Hale
+ * 1 - Vagineer
+ * 2 - HHH
+ * 4 - CBS
+ */
+native VSH_GetSpecialRoundIndex();
+
+/**
+ * Hale's current health.
+ *
+ * @return An integer representing Hale's health.
+ */
+native VSH_GetSaxtonHaleHealth();
+
+/**
+ * Hale's initial health.
+ *
+ * @return An integer representing Hale's max/initial health.
+ */
+native VSH_GetSaxtonHaleHealthMax();
+
+/**
+ * Damage dealt by a client.
+ *
+ * @param client Client index.
+ * @return Damage dealt by the client for the current round.
+ */
+native VSH_GetClientDamage(client);
+
+/**
+ * The current round state for VSH.
+ *
+ * @return -1 - VSH is disabled
+ * 0 - VSH preround freeze
+ * 1 - VSH during round
+ * 2 - VSH after round end
+ */
+native VSH_GetRoundState();
+
+/**
+ * When Hale attempts to superjump/teleport.
+ *
+ * @param bSuperDuper Boolean for whether the jump is a superjump.
+ * @return Change bSuperDuper and return Plugin_Changed to change it. Plugin_Stop or Plugin_Handled to stop the jump.
+ */
+forward Action:VSH_OnDoJump(&bool:bSuperDuper);
+
+/**
+ * When Hale attemps to use rage.
+ *
+ * @param RageDist Distance that the boss's rage reaches.
+ * @return Plugin_Stop or Plugin_Handled will prevent rage, change RageDist and return Plugin_Changed to change the distance.
+ */
+forward Action:VSH_OnDoRage(&Float:RageDist);
+
+/**
+ * When Hale uses the weighdown.
+ *
+ * @return Plugin_Stop/Plugin_Handled will prevent Weighdown
+ */
+forward Action:VSH_OnDoWeighdown();
+
+/**
+ * Called at the start of each round, when the music begins to play (even if the round has no music).
+ * Also called each time the music is set to start up again in the loop.
+ *
+ * @param sound Sound that is being played for music. Change it and return Plugin_Changed to change.
+ * Set to "" for silence that does not stop the forward firing every