Updated FastDL

Updated FastDL

--
-- Copyright (C) 2017 DBot
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--

Files = {
    'materials/gui/pped_icon.png'
    'materials/gui/ppm2/emotes/anger.png'
    'materials/gui/ppm2/emotes/angry_tongue.png'
    'materials/gui/ppm2/emotes/big_grin.png'
    'materials/gui/ppm2/emotes/cat.png'
    'materials/gui/ppm2/emotes/sad.png'
    'materials/gui/ppm2/emotes/scrunch.png'
    'materials/gui/ppm2/emotes/sorry.png'
    'materials/gui/ppm2/emotes/tongue.png'
    'materials/gui/ppm2/emotes/wink_left.png'
    'materials/gui/ppm2/emotes/wink_right.png'
    'materials/models/ppm/base/body.vmt'
    'materials/models/ppm/base/body.vtf'
    'materials/models/ppm/base/bodyf.vmt'
    'materials/models/ppm/base/bodym.vmt'
    'materials/models/ppm/base/bodym.vtf'
    'materials/models/ppm/base/cmark.vmt'
    'materials/models/ppm/base/eyeball_l.vtf'
    'materials/models/ppm/base/eyeball_r.vtf'
    'materials/models/ppm/base/eyelashes.vmt'
    'materials/models/ppm/base/eyelashes.vtf'
    'materials/models/ppm/base/eye_l.vmt'
    'materials/models/ppm/base/eye_r.vmt'
    'materials/models/ppm/base/face/black.vtf'
    'materials/models/ppm/base/face/gray.vtf'
    'materials/models/ppm/base/face/p_base.vtf'
    'materials/models/ppm/base/face/p_base_r.vtf'
    'materials/models/ppm/base/face/p_bnbn.vtf'
    'materials/models/ppm/base/face/p_bnbn_r.vtf'
    'materials/models/ppm/base/face/p_drp.vtf'
    'materials/models/ppm/base/face/p_gold.vtf'
    'materials/models/ppm/base/face/p_green.vtf'
    'materials/models/ppm/base/face/p_green_r.vtf'
    'materials/models/ppm/base/face/p_luna.vtf'
    'materials/models/ppm/base/face/p_luna_r.vtf'
    'materials/models/ppm/base/face/p_purple.vtf'
    'materials/models/ppm/base/face/p_purple2.vtf'
    'materials/models/ppm/base/face/p_purple2_r.vtf'
    'materials/models/ppm/base/face/p_purple_r.vtf'
    'materials/models/ppm/base/face/p_rd.vtf'
    'materials/models/ppm/base/face/p_rd_r.vtf'
    'materials/models/ppm/base/face/p_tangelo.vtf'
    'materials/models/ppm/base/face/p_tangelo_r.vtf'
    'materials/models/ppm/base/face/tc00.vmt'
    'materials/models/ppm/base/face/tc01.vmt'
    'materials/models/ppm/base/face/tc02.vmt'
    'materials/models/ppm/base/face/tc03.vmt'
    'materials/models/ppm/base/face/tc04.vmt'
    'materials/models/ppm/base/face/tc05.vmt'
    'materials/models/ppm/base/face/tc06.vmt'
    'materials/models/ppm/base/face/tc07.vmt'
    'materials/models/ppm/base/face/tc08.vmt'
    'materials/models/ppm/base/face/tc09.vmt'
    'materials/models/ppm/base/face/white.vtf'
    'materials/models/ppm/base/hair_color_1.vmt'
    'materials/models/ppm/base/hair_color_2.vmt'
    'materials/models/ppm/base/horn.vmt'
    'materials/models/ppm/base/horn.vtf'
    'materials/models/ppm/base/mouth.vmt'
    'materials/models/ppm/base/mouth.vtf'
    'materials/models/ppm/base/pupil_l.vtf'
    'materials/models/ppm/base/pupil_r.vtf'
    'materials/models/ppm/base/render/bodyf.vmt'
    'materials/models/ppm/base/render/bodym.vmt'
    'materials/models/ppm/base/render/body_alpha_vsm.vtf'
    'materials/models/ppm/base/render/body_n.vtf'
    'materials/models/ppm/base/render/clothes_sbs_full.vmt'
    'materials/models/ppm/base/render/clothes_sbs_full.vtf'
    'materials/models/ppm/base/render/clothes_wbs.vmt'
    'materials/models/ppm/base/render/clothes_wbs.vtf'
    'materials/models/ppm/base/render/clothes_wbs_full.vmt'
    'materials/models/ppm/base/render/clothes_wbs_full.vtf'
    'materials/models/ppm/base/render/clothes_wbs_full_n.vtf'
    'materials/models/ppm/base/render/clothes_wbs_light.vtf'
    'materials/models/ppm/base/render/clothes_wbs_light_n.vtf'
    'materials/models/ppm/base/render/cmark.vmt'
    'materials/models/ppm/base/render/horn.vmt'
    'materials/models/ppm/base/render/leg_grad1.vmt'
    'materials/models/ppm/base/render/leg_grad1.vtf'
    'materials/models/ppm/base/render/wings.vmt'
    'materials/models/ppm/base/tail_color_1.vmt'
    'materials/models/ppm/base/tail_color_2.vmt'
    'materials/models/ppm/base/teeth.vmt'
    'materials/models/ppm/base/teeth.vtf'
    'materials/models/ppm/base/tongue.vmt'
    'materials/models/ppm/base/tongue.vtf'
    'materials/models/ppm/base/wings.vmt'
    'materials/models/ppm/base/wings.vtf'
    'materials/models/ppm/base/wing_bat.vmt'
    'materials/models/ppm/base/wing_bat.vtf'
    'materials/models/ppm/base/wing_bat_skin.vmt'
    'materials/models/ppm/base/wing_bat_skin.vtf'
    'materials/models/ppm/cmarks/8ball.vmt'
    'materials/models/ppm/cmarks/8ball.vtf'
    'materials/models/ppm/cmarks/alarm.vmt'
    'materials/models/ppm/cmarks/alarm.vtf'
    'materials/models/ppm/cmarks/anarchy.vmt'
    'materials/models/ppm/cmarks/anarchy.vtf'
    'materials/models/ppm/cmarks/applej.vmt'
    'materials/models/ppm/cmarks/applej.vtf'
    'materials/models/ppm/cmarks/applem.vmt'
    'materials/models/ppm/cmarks/applem.vtf'
    'materials/models/ppm/cmarks/battery.vmt'
    'materials/models/ppm/cmarks/battery.vtf'
    'materials/models/ppm/cmarks/beer.vmt'
    'materials/models/ppm/cmarks/beer.vtf'
    'materials/models/ppm/cmarks/berryglass.vmt'
    'materials/models/ppm/cmarks/berryglass.vtf'
    'materials/models/ppm/cmarks/binaryfile.vmt'
    'materials/models/ppm/cmarks/binaryfile.vtf'
    'materials/models/ppm/cmarks/bits.vmt'
    'materials/models/ppm/cmarks/bits.vtf'
    'materials/models/ppm/cmarks/bon_bon.vmt'
    'materials/models/ppm/cmarks/bon_bon.vtf'
    'materials/models/ppm/cmarks/bulb.vmt'
    'materials/models/ppm/cmarks/bulb.vtf'
    'materials/models/ppm/cmarks/camera.vmt'
    'materials/models/ppm/cmarks/camera.vtf'
    'materials/models/ppm/cmarks/carrots.vmt'
    'materials/models/ppm/cmarks/carrots.vtf'
    'materials/models/ppm/cmarks/celestia.vmt'
    'materials/models/ppm/cmarks/celestia.vtf'
    'materials/models/ppm/cmarks/checkered.vmt'
    'materials/models/ppm/cmarks/checkered.vtf'
    'materials/models/ppm/cmarks/cloudy.vmt'
    'materials/models/ppm/cmarks/cloudy.vtf'
    'materials/models/ppm/cmarks/cube.vmt'
    'materials/models/ppm/cmarks/cube.vtf'
    'materials/models/ppm/cmarks/custom01.vmt'
    'materials/models/ppm/cmarks/custom01.vtf'
    'materials/models/ppm/cmarks/custom02.vmt'
    'materials/models/ppm/cmarks/custom02.vtf'
    'materials/models/ppm/cmarks/dawsome.vmt'
    'materials/models/ppm/cmarks/dawsome.vtf'
    'materials/models/ppm/cmarks/deathscythe.vmt'
    'materials/models/ppm/cmarks/deathscythe.vtf'
    'materials/models/ppm/cmarks/derpy.vmt'
    'materials/models/ppm/cmarks/derpy.vtf'
    'materials/models/ppm/cmarks/deskfan.vmt'
    'materials/models/ppm/cmarks/deskfan.vtf'
    'materials/models/ppm/cmarks/dice.vmt'
    'materials/models/ppm/cmarks/dice.vtf'
    'materials/models/ppm/cmarks/firezap.vmt'
    'materials/models/ppm/cmarks/firezap.vtf'
    'materials/models/ppm/cmarks/flames.vmt'
    'materials/models/ppm/cmarks/flames.vtf'
    'materials/models/ppm/cmarks/floppydisk.vmt'
    'materials/models/ppm/cmarks/floppydisk.vtf'
    'materials/models/ppm/cmarks/fluttershy.vmt'
    'materials/models/ppm/cmarks/fluttershy.vtf'
    'materials/models/ppm/cmarks/fruits.vmt'
    'materials/models/ppm/cmarks/fruits.vtf'
    'materials/models/ppm/cmarks/greentree.vmt'
    'materials/models/ppm/cmarks/greentree.vtf'
    'materials/models/ppm/cmarks/island.vmt'
    'materials/models/ppm/cmarks/island.vtf'
    'materials/models/ppm/cmarks/lightningstone.vmt'
    'materials/models/ppm/cmarks/lightningstone.vtf'
    'materials/models/ppm/cmarks/lumps.vmt'
    'materials/models/ppm/cmarks/lumps.vtf'
    'materials/models/ppm/cmarks/lyra.vmt'
    'materials/models/ppm/cmarks/lyra.vtf'
    'materials/models/ppm/cmarks/magichat.vmt'
    'materials/models/ppm/cmarks/magichat.vtf'
    'materials/models/ppm/cmarks/magichat02.vmt'
    'materials/models/ppm/cmarks/magichat02.vtf'
    'materials/models/ppm/cmarks/magnifier.vmt'
    'materials/models/ppm/cmarks/magnifier.vtf'
    'materials/models/ppm/cmarks/microphone.vmt'
    'materials/models/ppm/cmarks/microphone.vtf'
    'materials/models/ppm/cmarks/mine.vmt'
    'materials/models/ppm/cmarks/mine.vtf'
    'materials/models/ppm/cmarks/mirror.vmt'
    'materials/models/ppm/cmarks/mirror.vtf'
    'materials/models/ppm/cmarks/myon.vmt'
    'materials/models/ppm/cmarks/myon.vtf'
    'materials/models/ppm/cmarks/note.vmt'
    'materials/models/ppm/cmarks/note.vtf'
    'materials/models/ppm/cmarks/octavia.vmt'
    'materials/models/ppm/cmarks/octavia.vtf'
    'materials/models/ppm/cmarks/padlock.vmt'
    'materials/models/ppm/cmarks/padlock.vtf'
    'materials/models/ppm/cmarks/palette.vmt'
    'materials/models/ppm/cmarks/palette.vtf'
    'materials/models/ppm/cmarks/palette02.vmt'
    'materials/models/ppm/cmarks/palette02.vtf'
    'materials/models/ppm/cmarks/palette03.vmt'
    'materials/models/ppm/cmarks/palette03.vtf'
    'materials/models/ppm/cmarks/pankk.vmt'
    'materials/models/ppm/cmarks/pankk.vtf'
    'materials/models/ppm/cmarks/partiallycloudy.vmt'
    'materials/models/ppm/cmarks/partiallycloudy.vtf'
    'materials/models/ppm/cmarks/pinkie_pie.vmt'
    'materials/models/ppm/cmarks/pinkie_pie.vtf'
    'materials/models/ppm/cmarks/rainbow_dash.vmt'
    'materials/models/ppm/cmarks/rainbow_dash.vtf'
    'materials/models/ppm/cmarks/rarity.vmt'
    'materials/models/ppm/cmarks/rarity.vtf'
    'materials/models/ppm/cmarks/record.vmt'
    'materials/models/ppm/cmarks/record.vtf'
    'materials/models/ppm/cmarks/roadsign.vmt'
    'materials/models/ppm/cmarks/roadsign.vtf'
    'materials/models/ppm/cmarks/rosen.vmt'
    'materials/models/ppm/cmarks/rosen.vtf'
    'materials/models/ppm/cmarks/seasons.vmt'
    'materials/models/ppm/cmarks/seasons.vtf'
    'materials/models/ppm/cmarks/sflowers.vmt'
    'materials/models/ppm/cmarks/sflowers.vtf'
    'materials/models/ppm/cmarks/shoop.vmt'
    'materials/models/ppm/cmarks/shoop.vtf'
    'materials/models/ppm/cmarks/smiley.vmt'
    'materials/models/ppm/cmarks/smiley.vtf'
    'materials/models/ppm/cmarks/star.vmt'
    'materials/models/ppm/cmarks/star.vtf'
    'materials/models/ppm/cmarks/stoppedwatch.vmt'
    'materials/models/ppm/cmarks/stoppedwatch.vtf'
    'materials/models/ppm/cmarks/storm.vmt'
    'materials/models/ppm/cmarks/storm.vtf'
    'materials/models/ppm/cmarks/suit.vmt'
    'materials/models/ppm/cmarks/suit.vtf'
    'materials/models/ppm/cmarks/surfboard.vmt'
    'materials/models/ppm/cmarks/surfboard.vtf'
    'materials/models/ppm/cmarks/surfboard02.vmt'
    'materials/models/ppm/cmarks/surfboard02.vtf'
    'materials/models/ppm/cmarks/thunderstorm.vmt'
    'materials/models/ppm/cmarks/thunderstorm.vtf'
    'materials/models/ppm/cmarks/time.vmt'
    'materials/models/ppm/cmarks/time.vtf'
    'materials/models/ppm/cmarks/time2.vmt'
    'materials/models/ppm/cmarks/time2.vtf'
    'materials/models/ppm/cmarks/trixie.vmt'
    'materials/models/ppm/cmarks/trixie.vtf'
    'materials/models/ppm/cmarks/twilight.vmt'
    'materials/models/ppm/cmarks/twilight.vtf'
    'materials/models/ppm/cmarks/twistedclock.vmt'
    'materials/models/ppm/cmarks/twistedclock.vtf'
    'materials/models/ppm/cmarks/ussr.vmt'
    'materials/models/ppm/cmarks/ussr.vtf'
    'materials/models/ppm/cmarks/vault.vmt'
    'materials/models/ppm/cmarks/vault.vtf'
    'materials/models/ppm/cmarks/waters.vmt'
    'materials/models/ppm/cmarks/waters.vtf'
    'materials/models/ppm/cmarks/weegee.vmt'
    'materials/models/ppm/cmarks/weegee.vtf'
    'materials/models/ppm/cmarks/weer.vmt'
    'materials/models/ppm/cmarks/weer.vtf'
    'materials/models/ppm/cmarks/zecora.vmt'
    'materials/models/ppm/cmarks/zecora.vtf'
    'materials/models/ppm/partrender/body_freckles.png'
    'materials/models/ppm/partrender/body_headmask1.png'
    'materials/models/ppm/partrender/body_headstripes1.png'
    'materials/models/ppm/partrender/body_hooves1.png'
    'materials/models/ppm/partrender/body_hooves1_crit.png'
    'materials/models/ppm/partrender/body_hooves2.png'
    'materials/models/ppm/partrender/body_hooves2_crit.png'
    'materials/models/ppm/partrender/body_leggrad1.png'
    'materials/models/ppm/partrender/body_lines1.png'
    'materials/models/ppm/partrender/body_spots1.png'
    'materials/models/ppm/partrender/body_stripes1.png'
    'materials/models/ppm/partrender/dnmane_10_mask0.png'
    'materials/models/ppm/partrender/dnmane_10_mask1.png'
    'materials/models/ppm/partrender/dnmane_10_mask2.png'
    'materials/models/ppm/partrender/dnmane_11_mask0.png'
    'materials/models/ppm/partrender/dnmane_11_mask1.png'
    'materials/models/ppm/partrender/dnmane_12_mask0.png'
    'materials/models/ppm/partrender/dnmane_5_mask0.png'
    'materials/models/ppm/partrender/dnmane_8_mask0.png'
    'materials/models/ppm/partrender/dnmane_8_mask1.png'
    'materials/models/ppm/partrender/dnmane_9_mask0.png'
    'materials/models/ppm/partrender/dnmane_9_mask1.png'
    'materials/models/ppm/partrender/eye_effect.png'
    'materials/models/ppm/partrender/eye_grad.png'
    'materials/models/ppm/partrender/eye_line_l1.png'
    'materials/models/ppm/partrender/eye_line_l2.png'
    'materials/models/ppm/partrender/eye_line_r1.png'
    'materials/models/ppm/partrender/eye_line_r2.png'
    'materials/models/ppm/partrender/eye_oval.png'
    'materials/models/ppm/partrender/eye_oval_aperture.png'
    'materials/models/ppm/partrender/eye_reflection.png'
    'materials/models/ppm/partrender/null.png'
    'materials/models/ppm/partrender/null.vtf'
    'materials/models/ppm/partrender/tail_10_mask0.png'
    'materials/models/ppm/partrender/tail_11_mask0.png'
    'materials/models/ppm/partrender/tail_11_mask1.png'
    'materials/models/ppm/partrender/tail_11_mask2.png'
    'materials/models/ppm/partrender/tail_12_mask0.png'
    'materials/models/ppm/partrender/tail_12_mask1.png'
    'materials/models/ppm/partrender/tail_13_mask0.png'
    'materials/models/ppm/partrender/tail_14_mask0.png'
    'materials/models/ppm/partrender/tail_5_mask0.png'
    'materials/models/ppm/partrender/tail_8_mask0.png'
    'materials/models/ppm/partrender/tail_8_mask1.png'
    'materials/models/ppm/partrender/tail_8_mask2.png'
    'materials/models/ppm/partrender/tail_8_mask3.png'
    'materials/models/ppm/partrender/tail_8_mask4.png'
    'materials/models/ppm/partrender/upmane_10_mask0.png'
    'materials/models/ppm/partrender/upmane_11_mask0.png'
    'materials/models/ppm/partrender/upmane_11_mask1.png'
    'materials/models/ppm/partrender/upmane_11_mask2.png'
    'materials/models/ppm/partrender/upmane_12_mask0.png'
    'materials/models/ppm/partrender/upmane_13_mask0.png'
    'materials/models/ppm/partrender/upmane_14_mask0.png'
    'materials/models/ppm/partrender/upmane_15_mask0.png'
    'materials/models/ppm/partrender/upmane_5_mask0.png'
    'materials/models/ppm/partrender/upmane_6_mask0.png'
    'materials/models/ppm/partrender/upmane_8_mask0.png'
    'materials/models/ppm/partrender/upmane_8_mask1.png'
    'materials/models/ppm/partrender/upmane_9_mask0.png'
    'materials/models/ppm/partrender/upmane_9_mask1.png'
    'materials/models/ppm/partrender/upmane_9_mask2.png'
    'materials/models/ppm/texclothes/clothes_royalguard.png'
    'materials/models/ppm/texclothes/clothes_sbs_full.png'
    'materials/models/ppm/texclothes/clothes_sbs_light.png'
    'materials/models/ppm/texclothes/clothes_wbs_full.png'
    'materials/models/ppm/texclothes/clothes_wbs_light.png'
    'materials/models/ppm/texclothes/pony_socks.png'
    'materials/models/props_pony/ppm/ppm_socks/socks_lightwarp.vtf'
    'materials/models/props_pony/ppm/ppm_socks/socks_striped.vmt'
    'materials/models/props_pony/ppm/ppm_socks/socks_striped.vtf'
    'models/cppm/player_default_base.dx80.vtx'
    'models/cppm/player_default_base.dx90.vtx'
    'models/cppm/player_default_base.mdl'
    'models/cppm/player_default_base.phy'
    'models/cppm/player_default_base.sw.vtx'
    'models/cppm/player_default_base.vvd'
    'models/cppm/player_default_base_nj.dx80.vtx'
    'models/cppm/player_default_base_nj.dx90.vtx'
    'models/cppm/player_default_base_nj.mdl'
    'models/cppm/player_default_base_nj.phy'
    'models/cppm/player_default_base_nj.sw.vtx'
    'models/cppm/player_default_base_nj.vvd'
    'models/cppm/player_default_base_ragdoll.dx80.vtx'
    'models/cppm/player_default_base_ragdoll.dx90.vtx'
    'models/cppm/player_default_base_ragdoll.mdl'
    'models/cppm/player_default_base_ragdoll.phy'
    'models/cppm/player_default_base_ragdoll.sw.vtx'
    'models/cppm/player_default_base_ragdoll.vvd'
    'models/cppm/pony_anims.mdl'
    'models/cppm/pony_arms.dx80.vtx'
    'models/cppm/pony_arms.dx90.vtx'
    'models/cppm/pony_arms.mdl'
    'models/cppm/pony_arms.sw.vtx'
    'models/cppm/pony_arms.vvd'
    'models/ppm/hair/ppm_manesetlower01.dx80.vtx'
    'models/ppm/hair/ppm_manesetlower01.dx90.vtx'
    'models/ppm/hair/ppm_manesetlower01.mdl'
    'models/ppm/hair/ppm_manesetlower01.sw.vtx'
    'models/ppm/hair/ppm_manesetlower01.vvd'
    'models/ppm/hair/ppm_manesetupper01.dx80.vtx'
    'models/ppm/hair/ppm_manesetupper01.dx90.vtx'
    'models/ppm/hair/ppm_manesetupper01.mdl'
    'models/ppm/hair/ppm_manesetupper01.sw.vtx'
    'models/ppm/hair/ppm_manesetupper01.vvd'
    'models/ppm/hair/ppm_tailset01.dx80.vtx'
    'models/ppm/hair/ppm_tailset01.dx90.vtx'
    'models/ppm/hair/ppm_tailset01.mdl'
    'models/ppm/hair/ppm_tailset01.sw.vtx'
    'models/ppm/hair/ppm_tailset01.vvd'
    'models/ppm/player_default_base.dx80.vtx'
    'models/ppm/player_default_base.dx90.vtx'
    'models/ppm/player_default_base.mdl'
    'models/ppm/player_default_base.phy'
    'models/ppm/player_default_base.sw.vtx'
    'models/ppm/player_default_base.vvd'
    'models/ppm/player_default_base_new.dx80.vtx'
    'models/ppm/player_default_base_new.dx90.vtx'
    'models/ppm/player_default_base_new.mdl'
    'models/ppm/player_default_base_new.phy'
    'models/ppm/player_default_base_new.sw.vtx'
    'models/ppm/player_default_base_new.vvd'
    'models/ppm/player_default_base_nj.dx80.vtx'
    'models/ppm/player_default_base_nj.dx90.vtx'
    'models/ppm/player_default_base_nj.mdl'
    'models/ppm/player_default_base_nj.phy'
    'models/ppm/player_default_base_nj.sw.vtx'
    'models/ppm/player_default_base_nj.vvd'
    'models/ppm/player_default_base_ragdoll.dx80.vtx'
    'models/ppm/player_default_base_ragdoll.dx90.vtx'
    'models/ppm/player_default_base_ragdoll.mdl'
    'models/ppm/player_default_base_ragdoll.phy'
    'models/ppm/player_default_base_ragdoll.sw.vtx'
    'models/ppm/player_default_base_ragdoll.vvd'
    'models/ppm/pony_anims.mdl'
    'models/ppm/pony_high_anims.mdl'
    'models/ppm/pony_high_anims.phy'
    'models/props_pony/ppm/cosmetics/ppm_socks.dx80.vtx'
    'models/props_pony/ppm/cosmetics/ppm_socks.dx90.vtx'
    'models/props_pony/ppm/cosmetics/ppm_socks.mdl'
    'models/props_pony/ppm/cosmetics/ppm_socks.sw.vtx'
    'models/props_pony/ppm/cosmetics/ppm_socks.vvd'
}

resource.AddSingleFile(fil) for fil in *Files

--
-- Copyright (C) 2017 DBot
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--

Files = {
    'models/cppm/player_default_base.dx80.vtx'
    'models/cppm/player_default_base.dx90.vtx'
    'models/cppm/player_default_base.mdl'
    'models/cppm/player_default_base.phy'
    'models/cppm/player_default_base.sw.vtx'
    'models/cppm/player_default_base.vvd'
    'models/cppm/player_default_base_nj.dx80.vtx'
    'models/cppm/player_default_base_nj.dx90.vtx'
    'models/cppm/player_default_base_nj.mdl'
    'models/cppm/player_default_base_nj.phy'
    'models/cppm/player_default_base_nj.sw.vtx'
    'models/cppm/player_default_base_nj.vvd'
    'models/cppm/player_default_base_ragdoll.dx80.vtx'
    'models/cppm/player_default_base_ragdoll.dx90.vtx'
    'models/cppm/player_default_base_ragdoll.mdl'
    'models/cppm/player_default_base_ragdoll.phy'
    'models/cppm/player_default_base_ragdoll.sw.vtx'
    'models/cppm/player_default_base_ragdoll.vvd'
    'models/cppm/pony_anims.mdl'
    'models/cppm/pony_arms.dx80.vtx'
    'models/cppm/pony_arms.dx90.vtx'
    'models/cppm/pony_arms.mdl'
    'models/cppm/pony_arms.sw.vtx'
    'models/cppm/pony_arms.vvd'
    'models/ppm/hair/ppm_manesetlower01.dx80.vtx'
    'models/ppm/hair/ppm_manesetlower01.dx90.vtx'
    'models/ppm/hair/ppm_manesetlower01.mdl'
    'models/ppm/hair/ppm_manesetlower01.sw.vtx'
    'models/ppm/hair/ppm_manesetlower01.vvd'
    'models/ppm/hair/ppm_manesetupper01.dx80.vtx'
    'models/ppm/hair/ppm_manesetupper01.dx90.vtx'
    'models/ppm/hair/ppm_manesetupper01.mdl'
    'models/ppm/hair/ppm_manesetupper01.sw.vtx'
    'models/ppm/hair/ppm_manesetupper01.vvd'
    'models/ppm/hair/ppm_tailset01.dx80.vtx'
    'models/ppm/hair/ppm_tailset01.dx90.vtx'
    'models/ppm/hair/ppm_tailset01.mdl'
    'models/ppm/hair/ppm_tailset01.sw.vtx'
    'models/ppm/hair/ppm_tailset01.vvd'
    'models/ppm/player_default_base.dx80.vtx'
    'models/ppm/player_default_base.dx90.vtx'
    'models/ppm/player_default_base.mdl'
    'models/ppm/player_default_base.phy'
    'models/ppm/player_default_base.sw.vtx'
    'models/ppm/player_default_base.vvd'
    'models/ppm/player_default_base_new.dx80.vtx'
    'models/ppm/player_default_base_new.dx90.vtx'
    'models/ppm/player_default_base_new.mdl'
    'models/ppm/player_default_base_new.phy'
    'models/ppm/player_default_base_new.sw.vtx'
    'models/ppm/player_default_base_new.vvd'
    'models/ppm/player_default_base_nj.dx80.vtx'
    'models/ppm/player_default_base_nj.dx90.vtx'
    'models/ppm/player_default_base_nj.mdl'
    'models/ppm/player_default_base_nj.phy'
    'models/ppm/player_default_base_nj.sw.vtx'
    'models/ppm/player_default_base_nj.vvd'
    'models/ppm/player_default_base_ragdoll.dx80.vtx'
    'models/ppm/player_default_base_ragdoll.dx90.vtx'
    'models/ppm/player_default_base_ragdoll.mdl'
    'models/ppm/player_default_base_ragdoll.phy'
    'models/ppm/player_default_base_ragdoll.sw.vtx'
    'models/ppm/player_default_base_ragdoll.vvd'
    'models/ppm/pony_anims.mdl'
    'models/ppm/pony_high_anims.mdl'
    'models/ppm/pony_high_anims.phy'
    'models/props_pony/ppm/cosmetics/ppm_socks.dx80.vtx'
    'models/props_pony/ppm/cosmetics/ppm_socks.dx90.vtx'
    'models/props_pony/ppm/cosmetics/ppm_socks.mdl'
    'models/props_pony/ppm/cosmetics/ppm_socks.sw.vtx'
    'models/props_pony/ppm/cosmetics/ppm_socks.vvd'
    'materials/gui/pped_icon.png'
    'materials/gui/ppm2/emotes/anger.png'
    'materials/gui/ppm2/emotes/angry_tongue.png'
    'materials/gui/ppm2/emotes/big_grin.png'
    'materials/gui/ppm2/emotes/cat.png'
    'materials/gui/ppm2/emotes/sad.png'
    'materials/gui/ppm2/emotes/scrunch.png'
    'materials/gui/ppm2/emotes/sorry.png'
    'materials/gui/ppm2/emotes/tongue.png'
    'materials/gui/ppm2/emotes/wink_left.png'
    'materials/gui/ppm2/emotes/wink_right.png'
    'materials/models/ppm/base/body.vmt'
    'materials/models/ppm/base/body.vtf'
    'materials/models/ppm/base/bodyf.vmt'
    'materials/models/ppm/base/bodym.vmt'
    'materials/models/ppm/base/bodym.vtf'
    'materials/models/ppm/base/cmark.vmt'
    'materials/models/ppm/base/eyeball_l.vtf'
    'materials/models/ppm/base/eyeball_r.vtf'
    'materials/models/ppm/base/eyelashes.vmt'
    'materials/models/ppm/base/eyelashes.vtf'
    'materials/models/ppm/base/eye_l.vmt'
    'materials/models/ppm/base/eye_r.vmt'
    'materials/models/ppm/base/face/black.vtf'
    'materials/models/ppm/base/face/gray.vtf'
    'materials/models/ppm/base/face/p_base.vtf'
    'materials/models/ppm/base/face/p_base_r.vtf'
    'materials/models/ppm/base/face/p_bnbn.vtf'
    'materials/models/ppm/base/face/p_bnbn_r.vtf'
    'materials/models/ppm/base/face/p_drp.vtf'
    'materials/models/ppm/base/face/p_gold.vtf'
    'materials/models/ppm/base/face/p_green.vtf'
    'materials/models/ppm/base/face/p_green_r.vtf'
    'materials/models/ppm/base/face/p_luna.vtf'
    'materials/models/ppm/base/face/p_luna_r.vtf'
    'materials/models/ppm/base/face/p_purple.vtf'
    'materials/models/ppm/base/face/p_purple2.vtf'
    'materials/models/ppm/base/face/p_purple2_r.vtf'
    'materials/models/ppm/base/face/p_purple_r.vtf'
    'materials/models/ppm/base/face/p_rd.vtf'
    'materials/models/ppm/base/face/p_rd_r.vtf'
    'materials/models/ppm/base/face/p_tangelo.vtf'
    'materials/models/ppm/base/face/p_tangelo_r.vtf'
    'materials/models/ppm/base/face/tc00.vmt'
    'materials/models/ppm/base/face/tc01.vmt'
    'materials/models/ppm/base/face/tc02.vmt'
    'materials/models/ppm/base/face/tc03.vmt'
    'materials/models/ppm/base/face/tc04.vmt'
    'materials/models/ppm/base/face/tc05.vmt'
    'materials/models/ppm/base/face/tc06.vmt'
    'materials/models/ppm/base/face/tc07.vmt'
    'materials/models/ppm/base/face/tc08.vmt'
    'materials/models/ppm/base/face/tc09.vmt'
    'materials/models/ppm/base/face/white.vtf'
    'materials/models/ppm/base/hair_color_1.vmt'
    'materials/models/ppm/base/hair_color_2.vmt'
    'materials/models/ppm/base/horn.vmt'
    'materials/models/ppm/base/horn.vtf'
    'materials/models/ppm/base/mouth.vmt'
    'materials/models/ppm/base/mouth.vtf'
    'materials/models/ppm/base/pupil_l.vtf'
    'materials/models/ppm/base/pupil_r.vtf'
    'materials/models/ppm/base/render/bodyf.vmt'
    'materials/models/ppm/base/render/bodym.vmt'
    'materials/models/ppm/base/render/body_alpha_vsm.vtf'
    'materials/models/ppm/base/render/body_n.vtf'
    'materials/models/ppm/base/render/clothes_sbs_full.vmt'
    'materials/models/ppm/base/render/clothes_sbs_full.vtf'
    'materials/models/ppm/base/render/clothes_wbs.vmt'
    'materials/models/ppm/base/render/clothes_wbs.vtf'
    'materials/models/ppm/base/render/clothes_wbs_full.vmt'
    'materials/models/ppm/base/render/clothes_wbs_full.vtf'
    'materials/models/ppm/base/render/clothes_wbs_full_n.vtf'
    'materials/models/ppm/base/render/clothes_wbs_light.vtf'
    'materials/models/ppm/base/render/clothes_wbs_light_n.vtf'
    'materials/models/ppm/base/render/cmark.vmt'
    'materials/models/ppm/base/render/horn.vmt'
    'materials/models/ppm/base/render/leg_grad1.vmt'
    'materials/models/ppm/base/render/leg_grad1.vtf'
    'materials/models/ppm/base/render/wings.vmt'
    'materials/models/ppm/base/tail_color_1.vmt'
    'materials/models/ppm/base/tail_color_2.vmt'
    'materials/models/ppm/base/teeth.vmt'
    'materials/models/ppm/base/teeth.vtf'
    'materials/models/ppm/base/tongue.vmt'
    'materials/models/ppm/base/tongue.vtf'
    'materials/models/ppm/base/wings.vmt'
    'materials/models/ppm/base/wings.vtf'
    'materials/models/ppm/cmarks/8ball.vmt'
    'materials/models/ppm/cmarks/8ball.vtf'
    'materials/models/ppm/cmarks/alarm.vmt'
    'materials/models/ppm/cmarks/alarm.vtf'
    'materials/models/ppm/cmarks/anarchy.vmt'
    'materials/models/ppm/cmarks/anarchy.vtf'
    'materials/models/ppm/cmarks/applej.vmt'
    'materials/models/ppm/cmarks/applej.vtf'
    'materials/models/ppm/cmarks/applem.vmt'
    'materials/models/ppm/cmarks/applem.vtf'
    'materials/models/ppm/cmarks/battery.vmt'
    'materials/models/ppm/cmarks/battery.vtf'
    'materials/models/ppm/cmarks/beer.vmt'
    'materials/models/ppm/cmarks/beer.vtf'
    'materials/models/ppm/cmarks/berryglass.vmt'
    'materials/models/ppm/cmarks/berryglass.vtf'
    'materials/models/ppm/cmarks/binaryfile.vmt'
    'materials/models/ppm/cmarks/binaryfile.vtf'
    'materials/models/ppm/cmarks/bits.vmt'
    'materials/models/ppm/cmarks/bits.vtf'
    'materials/models/ppm/cmarks/bon_bon.vmt'
    'materials/models/ppm/cmarks/bon_bon.vtf'
    'materials/models/ppm/cmarks/bulb.vmt'
    'materials/models/ppm/cmarks/bulb.vtf'
    'materials/models/ppm/cmarks/camera.vmt'
    'materials/models/ppm/cmarks/camera.vtf'
    'materials/models/ppm/cmarks/carrots.vmt'
    'materials/models/ppm/cmarks/carrots.vtf'
    'materials/models/ppm/cmarks/celestia.vmt'
    'materials/models/ppm/cmarks/celestia.vtf'
    'materials/models/ppm/cmarks/checkered.vmt'
    'materials/models/ppm/cmarks/checkered.vtf'
    'materials/models/ppm/cmarks/cloudy.vmt'
    'materials/models/ppm/cmarks/cloudy.vtf'
    'materials/models/ppm/cmarks/cube.vmt'
    'materials/models/ppm/cmarks/cube.vtf'
    'materials/models/ppm/cmarks/custom01.vmt'
    'materials/models/ppm/cmarks/custom01.vtf'
    'materials/models/ppm/cmarks/custom02.vmt'
    'materials/models/ppm/cmarks/custom02.vtf'
    'materials/models/ppm/cmarks/dawsome.vmt'
    'materials/models/ppm/cmarks/dawsome.vtf'
    'materials/models/ppm/cmarks/deathscythe.vmt'
    'materials/models/ppm/cmarks/deathscythe.vtf'
    'materials/models/ppm/cmarks/derpy.vmt'
    'materials/models/ppm/cmarks/derpy.vtf'
    'materials/models/ppm/cmarks/deskfan.vmt'
    'materials/models/ppm/cmarks/deskfan.vtf'
    'materials/models/ppm/cmarks/dice.vmt'
    'materials/models/ppm/cmarks/dice.vtf'
    'materials/models/ppm/cmarks/firezap.vmt'
    'materials/models/ppm/cmarks/firezap.vtf'
    'materials/models/ppm/cmarks/flames.vmt'
    'materials/models/ppm/cmarks/flames.vtf'
    'materials/models/ppm/cmarks/floppydisk.vmt'
    'materials/models/ppm/cmarks/floppydisk.vtf'
    'materials/models/ppm/cmarks/fluttershy.vmt'
    'materials/models/ppm/cmarks/fluttershy.vtf'
    'materials/models/ppm/cmarks/fruits.vmt'
    'materials/models/ppm/cmarks/fruits.vtf'
    'materials/models/ppm/cmarks/greentree.vmt'
    'materials/models/ppm/cmarks/greentree.vtf'
    'materials/models/ppm/cmarks/island.vmt'
    'materials/models/ppm/cmarks/island.vtf'
    'materials/models/ppm/cmarks/lightningstone.vmt'
    'materials/models/ppm/cmarks/lightningstone.vtf'
    'materials/models/ppm/cmarks/lumps.vmt'
    'materials/models/ppm/cmarks/lumps.vtf'
    'materials/models/ppm/cmarks/lyra.vmt'
    'materials/models/ppm/cmarks/lyra.vtf'
    'materials/models/ppm/cmarks/magichat.vmt'
    'materials/models/ppm/cmarks/magichat.vtf'
    'materials/models/ppm/cmarks/magichat02.vmt'
    'materials/models/ppm/cmarks/magichat02.vtf'
    'materials/models/ppm/cmarks/magnifier.vmt'
    'materials/models/ppm/cmarks/magnifier.vtf'
    'materials/models/ppm/cmarks/microphone.vmt'
    'materials/models/ppm/cmarks/microphone.vtf'
    'materials/models/ppm/cmarks/mine.vmt'
    'materials/models/ppm/cmarks/mine.vtf'
    'materials/models/ppm/cmarks/mirror.vmt'
    'materials/models/ppm/cmarks/mirror.vtf'
    'materials/models/ppm/cmarks/myon.vmt'
    'materials/models/ppm/cmarks/myon.vtf'
    'materials/models/ppm/cmarks/note.vmt'
    'materials/models/ppm/cmarks/note.vtf'
    'materials/models/ppm/cmarks/octavia.vmt'
    'materials/models/ppm/cmarks/octavia.vtf'
    'materials/models/ppm/cmarks/padlock.vmt'
    'materials/models/ppm/cmarks/padlock.vtf'
    'materials/models/ppm/cmarks/palette.vmt'
    'materials/models/ppm/cmarks/palette.vtf'
    'materials/models/ppm/cmarks/palette02.vmt'
    'materials/models/ppm/cmarks/palette02.vtf'
    'materials/models/ppm/cmarks/palette03.vmt'
    'materials/models/ppm/cmarks/palette03.vtf'
    'materials/models/ppm/cmarks/pankk.vmt'
    'materials/models/ppm/cmarks/pankk.vtf'
    'materials/models/ppm/cmarks/partiallycloudy.vmt'
    'materials/models/ppm/cmarks/partiallycloudy.vtf'
    'materials/models/ppm/cmarks/pinkie_pie.vmt'
    'materials/models/ppm/cmarks/pinkie_pie.vtf'
    'materials/models/ppm/cmarks/rainbow_dash.vmt'
    'materials/models/ppm/cmarks/rainbow_dash.vtf'
    'materials/models/ppm/cmarks/rarity.vmt'
    'materials/models/ppm/cmarks/rarity.vtf'
    'materials/models/ppm/cmarks/record.vmt'
    'materials/models/ppm/cmarks/record.vtf'
    'materials/models/ppm/cmarks/roadsign.vmt'
    'materials/models/ppm/cmarks/roadsign.vtf'
    'materials/models/ppm/cmarks/rosen.vmt'
    'materials/models/ppm/cmarks/rosen.vtf'
    'materials/models/ppm/cmarks/seasons.vmt'
    'materials/models/ppm/cmarks/seasons.vtf'
    'materials/models/ppm/cmarks/sflowers.vmt'
    'materials/models/ppm/cmarks/sflowers.vtf'
    'materials/models/ppm/cmarks/shoop.vmt'
    'materials/models/ppm/cmarks/shoop.vtf'
    'materials/models/ppm/cmarks/smiley.vmt'
    'materials/models/ppm/cmarks/smiley.vtf'
    'materials/models/ppm/cmarks/star.vmt'
    'materials/models/ppm/cmarks/star.vtf'
    'materials/models/ppm/cmarks/stoppedwatch.vmt'
    'materials/models/ppm/cmarks/stoppedwatch.vtf'
    'materials/models/ppm/cmarks/storm.vmt'
    'materials/models/ppm/cmarks/storm.vtf'
    'materials/models/ppm/cmarks/suit.vmt'
    'materials/models/ppm/cmarks/suit.vtf'
    'materials/models/ppm/cmarks/surfboard.vmt'
    'materials/models/ppm/cmarks/surfboard.vtf'
    'materials/models/ppm/cmarks/surfboard02.vmt'
    'materials/models/ppm/cmarks/surfboard02.vtf'
    'materials/models/ppm/cmarks/thunderstorm.vmt'
    'materials/models/ppm/cmarks/thunderstorm.vtf'
    'materials/models/ppm/cmarks/time.vmt'
    'materials/models/ppm/cmarks/time.vtf'
    'materials/models/ppm/cmarks/time2.vmt'
    'materials/models/ppm/cmarks/time2.vtf'
    'materials/models/ppm/cmarks/trixie.vmt'
    'materials/models/ppm/cmarks/trixie.vtf'
    'materials/models/ppm/cmarks/twilight.vmt'
    'materials/models/ppm/cmarks/twilight.vtf'
    'materials/models/ppm/cmarks/twistedclock.vmt'
    'materials/models/ppm/cmarks/twistedclock.vtf'
    'materials/models/ppm/cmarks/ussr.vmt'
    'materials/models/ppm/cmarks/ussr.vtf'
    'materials/models/ppm/cmarks/vault.vmt'
    'materials/models/ppm/cmarks/vault.vtf'
    'materials/models/ppm/cmarks/waters.vmt'
    'materials/models/ppm/cmarks/waters.vtf'
    'materials/models/ppm/cmarks/weegee.vmt'
    'materials/models/ppm/cmarks/weegee.vtf'
    'materials/models/ppm/cmarks/weer.vmt'
    'materials/models/ppm/cmarks/weer.vtf'
    'materials/models/ppm/cmarks/zecora.vmt'
    'materials/models/ppm/cmarks/zecora.vtf'
    'materials/models/ppm/partrender/body_freckles.png'
    'materials/models/ppm/partrender/body_headmask1.png'
    'materials/models/ppm/partrender/body_headstripes1.png'
    'materials/models/ppm/partrender/body_hooves1.png'
    'materials/models/ppm/partrender/body_hooves1_crit.png'
    'materials/models/ppm/partrender/body_hooves2.png'
    'materials/models/ppm/partrender/body_hooves2_crit.png'
    'materials/models/ppm/partrender/body_leggrad1.png'
    'materials/models/ppm/partrender/body_lines1.png'
    'materials/models/ppm/partrender/body_spots1.png'
    'materials/models/ppm/partrender/body_stripes1.png'
    'materials/models/ppm/partrender/dnmane_10_mask0.png'
    'materials/models/ppm/partrender/dnmane_10_mask1.png'
    'materials/models/ppm/partrender/dnmane_10_mask2.png'
    'materials/models/ppm/partrender/dnmane_11_mask0.png'
    'materials/models/ppm/partrender/dnmane_11_mask1.png'
    'materials/models/ppm/partrender/dnmane_12_mask0.png'
    'materials/models/ppm/partrender/dnmane_5_mask0.png'
    'materials/models/ppm/partrender/dnmane_8_mask0.png'
    'materials/models/ppm/partrender/dnmane_8_mask1.png'
    'materials/models/ppm/partrender/dnmane_9_mask0.png'
    'materials/models/ppm/partrender/dnmane_9_mask1.png'
    'materials/models/ppm/partrender/eye_effect.png'
    'materials/models/ppm/partrender/eye_grad.png'
    'materials/models/ppm/partrender/eye_line_l1.png'
    'materials/models/ppm/partrender/eye_line_l2.png'
    'materials/models/ppm/partrender/eye_line_r1.png'
    'materials/models/ppm/partrender/eye_line_r2.png'
    'materials/models/ppm/partrender/eye_oval.png'
    'materials/models/ppm/partrender/eye_oval_aperture.png'
    'materials/models/ppm/partrender/eye_reflection.png'
    'materials/models/ppm/partrender/null.png'
    'materials/models/ppm/partrender/null.vtf'
    'materials/models/ppm/partrender/tail_10_mask0.png'
    'materials/models/ppm/partrender/tail_11_mask0.png'
    'materials/models/ppm/partrender/tail_11_mask1.png'
    'materials/models/ppm/partrender/tail_11_mask2.png'
    'materials/models/ppm/partrender/tail_12_mask0.png'
    'materials/models/ppm/partrender/tail_12_mask1.png'
    'materials/models/ppm/partrender/tail_13_mask0.png'
    'materials/models/ppm/partrender/tail_14_mask0.png'
    'materials/models/ppm/partrender/tail_5_mask0.png'
    'materials/models/ppm/partrender/tail_8_mask0.png'
    'materials/models/ppm/partrender/tail_8_mask1.png'
    'materials/models/ppm/partrender/tail_8_mask2.png'
    'materials/models/ppm/partrender/tail_8_mask3.png'
    'materials/models/ppm/partrender/tail_8_mask4.png'
    'materials/models/ppm/partrender/upmane_10_mask0.png'
    'materials/models/ppm/partrender/upmane_11_mask0.png'
    'materials/models/ppm/partrender/upmane_11_mask1.png'
    'materials/models/ppm/partrender/upmane_11_mask2.png'
    'materials/models/ppm/partrender/upmane_12_mask0.png'
    'materials/models/ppm/partrender/upmane_13_mask0.png'
    'materials/models/ppm/partrender/upmane_14_mask0.png'
    'materials/models/ppm/partrender/upmane_15_mask0.png'
    'materials/models/ppm/partrender/upmane_5_mask0.png'
    'materials/models/ppm/partrender/upmane_6_mask0.png'
    'materials/models/ppm/partrender/upmane_8_mask0.png'
    'materials/models/ppm/partrender/upmane_8_mask1.png'
    'materials/models/ppm/partrender/upmane_9_mask0.png'
    'materials/models/ppm/partrender/upmane_9_mask1.png'
    'materials/models/ppm/partrender/upmane_9_mask2.png'
    'materials/models/ppm/texclothes/clothes_royalguard.png'
    'materials/models/ppm/texclothes/clothes_sbs_full.png'
    'materials/models/ppm/texclothes/clothes_sbs_light.png'
    'materials/models/ppm/texclothes/clothes_wbs_full.png'
    'materials/models/ppm/texclothes/clothes_wbs_light.png'
    'materials/models/ppm/texclothes/pony_socks.png'
    'materials/models/props_pony/ppm/ppm_socks/socks_lightwarp.vtf'
    'materials/models/props_pony/ppm/ppm_socks/socks_striped.vmt'
    'materials/models/props_pony/ppm/ppm_socks/socks_striped.vtf'
}

resource.AddSingleFile(fil) for fil in *Files


fixed unnamed task

fixed unnamed task

-- moonraker
-- simple build system. so simple you probably shouldn't use it
-- look at example .moonraker
-- to do anything sufficiently useful you'll need luafilesystem
moonscript = require "moonscript"

tasks = {} -- each task
descs = {} -- descriptions of each task
done  = {} -- tasks already executed
multi = {} -- tasks that can be executed multiple times
requires = {} -- each task's required tasks

default   = nil -- default task
nextdesc  = nil -- description to assign to next defined task
nextmulti = nil -- whether the next defined task is able to execute multiple times
tmpname = os.tmpname! -- temporary file for output

-- functions available to moonraker
environment =
  task: (taskt, block) ->
    name = nil
    for k, v in pairs taskt
      name = k -- task name is the only element in the table
      requires[k] = v unless type(v) == "function"
      tasks[k] = v if type(v) == "function"
      descs[k] = nextdesc -- set our description

    tasks[name] = block if block
    multi[name] = nextmulti if nextmulti
    nextdesc, nextmulti = nil, nil
  desc: (name) ->
    nextdesc = name
  multiple: ->
    nextmulti = true
  default: (name) ->
    assert(not default, "Already set default task: #{default}")
    default = name

-- transforms unknown access to os execution
setmetatable environment, __index: (t, k) ->
  (x) =>
    os.execute("#{k} #{x or @} > #{tmpname}")
    result = [l for l in io.lines(tmpname)]
    table.concat(result, "\n")

doTask = (name) ->
  return if not multi[name] and done[name] -- task already executed
  unless tasks[name]
    return print("No task: " .. name)
  task = tasks[name]
  if requires[name]
    if type(requires[name]) == "table"
      for item in *requires[name]
        doTask(item) if type(item) == "string"
    else
      doTask(requires[name])
  safe, res = pcall(task, environment)
  if safe
    print res if res
    done[name] = true
  else
    print "Error in task: #{name}\n #{res}"

help = "\tUsage: moonraker file (default: .moonraker) task (optional)"

doFile = ->
  start = os.clock()
  filepath = arg[2] and arg[1] or ".moonraker"
  if filepath\match("%-h.*") --anything matching -h* must be a request for help
    print help
    return
  mrfile = table.concat([l for l in io.lines(filepath)], "\n")
  --try to load moonraker
  mrfunc = assert(moonscript.loadstring(mrfile))
  setfenv(mrfunc, environment)
  safe, errors = pcall(mrfunc)
  task = arg[1] and arg[2] or arg[1] or default
  if safe
    doTask(task)
  --always remove the temporary file
  os.remove(tmpname)
  -- print errors in moonraker file
  if errors
    print errors
  elapsed = os.clock() - start
  print(("Completed %s in %0.2fs.")\format(task, elapsed))

--public
{ main: doFile }

-- moonraker
-- simple build system, so simple you probably shouldn't use it
-- look at example .moonraker
-- unfortunately to do anything you'll need luafilesystem

moonscript = require "moonscript"

tasks = {} -- each task
descs = {} -- descriptions of each task
done  = {} -- tasks already executed
multi = {} -- tasks that can be executed multiple times
requires = {} -- each task's required tasks

default   = nil -- default task
nextdesc  = nil -- description to assign to next defined task
nextmulti = nil -- whether the next defined task is able to execute multiple times
tmpname = os.tmpname! -- temporary file for output

-- functions available to moonraker
environment =
  task: (taskt, block) ->
    name = nil
    for k, v in pairs taskt
      name = k -- task name is the only element in the table
      requires[k] = v unless type(v) == "function"
      tasks[k] = v if type(v) == "function"
      descs[k] = nextdesc -- set our description

    tasks[name] = block if block
    multi[name] = nextmulti if nextmulti
    nextdesc, nextmulti = nil, nil
  desc: (name) ->
    nextdesc = name
  multiple: ->
    nextmulti = true
  default: (name) ->
    assert(not default, "Already set default task: #{default}")
    default = name

-- transforms unknown access to os execution
setmetatable environment, __index: (t, k) ->
  if rawget(t, k) or _G[k]
    rawget(t, k) or _G[k]
  else
    (x) =>
      os.execute("#{k} #{x or @} > #{tmpname}")
      result = [l for l in io.lines(tmpname)]
      table.concat(result, "\n")

doTask = (name) ->
  return if not multi[name] and done[name] -- task already executed
  task = tasks[name]
  if requires[name]
    if type(requires[name]) == "table"
      for item in *requires[name]
        doTask(item) if type(item) == "string"
    else
      doTask(requires[name])
  safe, res = pcall(task, environment)
  if safe
    print res if res
    done[name] = true
  else
    print "Error in task: #{name}\n #{res}"

help = [[ Usage: moonraker file (default: .moonraker) task (optional)]]

doFile = ->
  filepath = arg[2] and arg[1] or ".moonraker"
  if filepath\match("%-h.*")
    print help
    return
  mrfile = table.concat([l for l in io.lines(filepath)], "\n")
  --try to compile moonraker
  mrfunc = assert(moonscript.loadstring(mrfile))
  setfenv(mrfunc, environment)
  safe, errors = pcall(mrfunc)
  if safe
    doTask(arg[1] and arg[2] or arg[1] or default)
  --always remove the temporary file
  os.remove(tmpname)
  -- print errors in moonraker file
  if errors
    print errors

--public
{ main: -> doFile! }


meep >~<

meep >~<

-- Copyright (C) 2017-2018 DBot

-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at

--     http://www.apache.org/licenses/LICENSE-2.0

-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

-- editor stuffs

gui.ppm2.editor.eyes.separate = 'Getrennte Einstellungen für Augen verwenden'
gui.ppm2.editor.eyes.url = 'Augen URL Textur'
gui.ppm2.editor.eyes.url_desc = 'Bei Verwendung der Augen URL Textur; Die folgenden Optionen haben keine Auswirkung'

gui.ppm2.editor.eyes.lightwarp_desc = 'Lightwarp wirkt nur auf EyeRefract Augen'
gui.ppm2.editor.eyes.lightwarp = "Lightwarp"
gui.ppm2.editor.eyes.desc1 = "Lightwarp textur URL eingabe\nEs muss 256x16 sein!"
gui.ppm2.editor.eyes.desc2 = "Glanzstärke\nDieser Parameter erhöht die Stärke der Echtzeitreflexionen auf das Auge\nUm Änderungen zu sehen, setze ppm2_cl_reflections convar auf 1\nAndere Spieler würden Reflexionen nur sehen, wenn ppm2_cl_reflections auf 1 gesetzt ist\n0 - ist matt; 1 - ist spiegelnd"

for {tprefix, prefix} in *{{'def', ''}, {'left', 'Links '}, {'right', 'Rechts '}}
	gui.ppm2.editor.eyes[tprefix].lightwarp.shader = "#{prefix}EyeRefract Shader verwenden"
	gui.ppm2.editor.eyes[tprefix].lightwarp.cornera = "#{prefix}Eye Cornea diffus verwenden"
	gui.ppm2.editor.eyes[tprefix].lightwarp.glossiness = "#{prefix}Glanz"

	gui.ppm2.editor.eyes[tprefix].type = "#{prefix}Augentyp"
	gui.ppm2.editor.eyes[tprefix].reflection_type = "#{prefix}Augenreflexion typ"
	gui.ppm2.editor.eyes[tprefix].lines = "#{prefix}Augenlinien"
	gui.ppm2.editor.eyes[tprefix].derp = "#{prefix}Derp Augen"
	gui.ppm2.editor.eyes[tprefix].derp_strength = "#{prefix}Derp Augen Stärke"
	gui.ppm2.editor.eyes[tprefix].iris_size = "#{prefix}Augengröße"

	gui.ppm2.editor.eyes[tprefix].points_inside = "#{prefix}Augenlinien innen"
	gui.ppm2.editor.eyes[tprefix].width = "#{prefix}Augenbreite"
	gui.ppm2.editor.eyes[tprefix].height = "#{prefix}Augenhöhe"

	gui.ppm2.editor.eyes[tprefix].pupil.width = "#{prefix}Pupillenbreite"
	gui.ppm2.editor.eyes[tprefix].pupil.height = "#{prefix}Pupillenhöhe"
	gui.ppm2.editor.eyes[tprefix].pupil.size = "#{prefix}Pupillengröße"

	gui.ppm2.editor.eyes[tprefix].pupil.shift_x = "#{prefix}Pupillen Verschiebung X"
	gui.ppm2.editor.eyes[tprefix].pupil.shift_y = "#{prefix}Pupillen Verschiebung Y"
	gui.ppm2.editor.eyes[tprefix].pupil.rotation = "#{prefix}Augenrotation"

	gui.ppm2.editor.eyes[tprefix].background = "#{prefix}Augenhintergrund"
	gui.ppm2.editor.eyes[tprefix].pupil_size = "#{prefix}Pupille"
	gui.ppm2.editor.eyes[tprefix].top_iris = "#{prefix}Obere Augeniris"
	gui.ppm2.editor.eyes[tprefix].bottom_iris = "#{prefix}Untere Augeniris"
	gui.ppm2.editor.eyes[tprefix].line1 = "#{prefix}Augenlinie 1"
	gui.ppm2.editor.eyes[tprefix].line2 = "#{prefix}Augenlinie 2"
	gui.ppm2.editor.eyes[tprefix].reflection = "#{prefix}Augenreflexionseffekt"
	gui.ppm2.editor.eyes[tprefix].effect = "#{prefix}Augeneffekt"

gui.ppm2.editor.generic.title = 'PPM/2 Pony Editor'
gui.ppm2.editor.generic.title_file = '%q - PPM/2 Pony Editor'
gui.ppm2.editor.generic.title_file_unsaved = '%q* - PPM/2 Pony Editor (ungespeicherte Änderungen!)'

gui.ppm2.editor.generic.yes = 'Yas!'
gui.ppm2.editor.generic.no = 'Noh!'
gui.ppm2.editor.generic.ohno = 'Onoh!'
gui.ppm2.editor.generic.okay = 'Okai ;w;'
gui.ppm2.editor.generic.datavalue = '%s\nDatenwert: %q'
gui.ppm2.editor.generic.url = '%s\n\nLink geht zu: %s'
gui.ppm2.editor.generic.url_field = 'URL Feld'
gui.ppm2.editor.generic.spoiler = 'Geheimnisvoller Spoiler'

gui.ppm2.editor.generic.restart.needed = 'Neustart des Editors erforderlich'
gui.ppm2.editor.generic.restart.text = 'Sie sollten den Editor neu starten, um die Änderung zu übernehmen.\nJetzt neu starten?\nNicht gespeicherte Daten gehen verloren!'
gui.ppm2.editor.generic.fullbright = 'Volle Helligkeit'
gui.ppm2.editor.generic.wtf = 'Aus irgendeinem Grund hat Dein Player kein NetworkedPonyData. - Nichts zu bearbeiten!\nVersuche ppm2_reload in Deine Konsole einzugeben und versuche es erneut, den Editor zu öffnen.'

gui.ppm2.editor.io.random.title = 'Randomisieren!'
gui.ppm2.editor.io.newfile.title = 'Neue Datei'
gui.ppm2.editor.io.newfile.confirm = 'Willst Du wirklich eine neue Datei erstellen?'
gui.ppm2.editor.io.newfile.toptext = 'Zurücksetzen'
gui.ppm2.editor.io.delete.confirm = 'Willst Du Datei wirklich löschen?\nEs wird für immer weg sein.!\n(eine lange Zeit!)'
gui.ppm2.editor.io.delete.title = 'Wirklich löschen?'

gui.ppm2.editor.io.filename = 'Dateiname'
gui.ppm2.editor.io.hint = 'Datei per Doppelklick öffnen'
gui.ppm2.editor.io.reload = 'Dateiliste neu laden'
gui.ppm2.editor.io.failed = 'Import fehlgeschlagen.'

gui.ppm2.editor.io.warn.oldfile = '!!! Es kann funktionieren oder auch nicht. Du wirst zerquetscht werden.'
gui.ppm2.editor.io.warn.text = "Derzeit hast du deine Änderungen nicht angegeben.\nWillst Du wirklich eine andere Datei öffnen?"
gui.ppm2.editor.io.warn.header = 'Nicht gespeicherte Änderungen!'
gui.ppm2.editor.io.save.button = 'Speichern'
gui.ppm2.editor.io.save.text = 'Dateiname ohne ppm2/ und .dat eingeben\nTipp: Um als Autoload zu speichern, schreibe "_current" (ohne ") ein.'
gui.ppm2.editor.io.wear = 'Änderungen übernehmen (Anziehen)'

gui.ppm2.editor.seq.standing = 'Stehen'
gui.ppm2.editor.seq.move = 'Bewegend'
gui.ppm2.editor.seq.walk = 'Gehen'
gui.ppm2.editor.seq.sit = 'Sitzen'
gui.ppm2.editor.seq.swim = 'Schwimmen'
gui.ppm2.editor.seq.run = 'Laufen'
gui.ppm2.editor.seq.duckwalk = 'Ducken gehen'
gui.ppm2.editor.seq.duck = 'Ducken'
gui.ppm2.editor.seq.jump = 'Springen'

gui.ppm2.editor.misc.race = 'Rasse'
gui.ppm2.editor.misc.weight = 'Gewicht'
gui.ppm2.editor.misc.size = 'Pony Größe'
gui.ppm2.editor.misc.hide_weapons = 'Waffen verstecken'
gui.ppm2.editor.misc.chest = 'Männliche Brust'
gui.ppm2.editor.misc.gender = 'Geschlecht'
gui.ppm2.editor.misc.wings = 'Flügel Typ'
gui.ppm2.editor.misc.flexes = 'Flex steuerung'
gui.ppm2.editor.misc.no_flexes2 = 'Kein Flex beim neuen Modell'
gui.ppm2.editor.misc.no_flexes_desc = 'Du kannst jeden Flex Zustandsregler separat deaktivieren.\nSo können diese Flexe mit Addons von Drittanbietern (wie PAC3) modifiziert werden.'

gui.ppm2.editor.misc.hide_pac3 = 'Entitys ausblenden wenn PAC3 Entity verwendet wird'
gui.ppm2.editor.misc.hide_mane = 'Mähne ausblenden wenn PAC3 Entity verwendet wird'
gui.ppm2.editor.misc.hide_tail = 'Schweif ausblenden wenn PAC3 Entity verwendet wird'
gui.ppm2.editor.misc.hide_socks = 'Socken ausblenden wenn PAC3 Entity verwendet wird'

gui.ppm2.editor.tabs.main = 'Allgemeines'
gui.ppm2.editor.tabs.files = 'Dateien'
gui.ppm2.editor.tabs.old_files = 'Alte Dateien'
gui.ppm2.editor.tabs.cutiemark = 'Schönheitsfleck'
gui.ppm2.editor.tabs.head = 'Kopfanatomie'
gui.ppm2.editor.tabs.eyes = 'Augen'
gui.ppm2.editor.tabs.face = 'Gesicht'
gui.ppm2.editor.tabs.mouth = 'Mund'
gui.ppm2.editor.tabs.left_eye = 'Linkes Auge'
gui.ppm2.editor.tabs.right_eye = 'Rechtes Auge'
gui.ppm2.editor.tabs.mane_horn = 'Mähne und Horn'
gui.ppm2.editor.tabs.mane = 'Mähne'
gui.ppm2.editor.tabs.details = 'Details'
gui.ppm2.editor.tabs.url_details = 'URL Details'
gui.ppm2.editor.tabs.url_separated_details = 'URL Getrennte Details'
gui.ppm2.editor.tabs.ears = 'Ohren'
gui.ppm2.editor.tabs.horn = 'Ohren'
gui.ppm2.editor.tabs.back = 'Rücken'
gui.ppm2.editor.tabs.wings = 'Flügel'
gui.ppm2.editor.tabs.left = 'Links'
gui.ppm2.editor.tabs.right = 'Rechts'
gui.ppm2.editor.tabs.neck = 'Hals'
gui.ppm2.editor.tabs.body = 'Pony Körper'
gui.ppm2.editor.tabs.tattoos = 'Tätowierungen'
gui.ppm2.editor.tabs.tail = 'Schweif'
gui.ppm2.editor.tabs.hooves = 'Huf Anatomie'
gui.ppm2.editor.tabs.bottom_hoof = 'Huf unten'
gui.ppm2.editor.tabs.legs = 'Beine'
gui.ppm2.editor.tabs.socks = 'Socken'
gui.ppm2.editor.tabs.newsocks = 'Neue Socken'
gui.ppm2.editor.tabs.about = 'Über PPM/2'

gui.ppm2.editor.old_tabs.mane_tail = 'Mähne und Schweif'
gui.ppm2.editor.old_tabs.wings_and_horn_details = 'Flügel und Horn details'
gui.ppm2.editor.old_tabs.wings_and_horn = 'Flügel und Horn'
gui.ppm2.editor.old_tabs.body_details = 'Körper details'
gui.ppm2.editor.old_tabs.mane_tail_detals = 'Mähne und Schweif URL details'

gui.ppm2.editor.cutiemark.display = 'Schönheitsfleck anzeigen'
gui.ppm2.editor.cutiemark.type = 'Schönheitsfleck typ'
gui.ppm2.editor.cutiemark.size = 'Schönheitsfleck größe'
gui.ppm2.editor.cutiemark.color = 'Schönheitsfleck farbe'
gui.ppm2.editor.cutiemark.input = 'Schönheitsfleck URL bild Eingabefeld\nSollte PNG oder JPEG sein (funktioniert wie bei\nPAC3 URL texture)'

gui.ppm2.editor.face.eyelashes = 'Wimpern'
gui.ppm2.editor.face.eyelashes_color = 'Wimpern Farbe'
gui.ppm2.editor.face.eyebrows_color = 'Augenbrauen Farbe'
gui.ppm2.editor.face.new_muzzle = 'Neue Schnauze für das männliche Modell nutzen'

gui.ppm2.editor.face.nose = 'Nasenfarbe'
gui.ppm2.editor.face.lips = 'Lippen Farbe'
gui.ppm2.editor.face.eyelashes_separate_phong = 'Separate Wimpern Phong'
gui.ppm2.editor.face.eyebrows_glow = 'Leuchtende Augenbrauen'
gui.ppm2.editor.face.eyebrows_glow_strength = 'Augenbrauen leuchten Stärke'
gui.ppm2.editor.face.inherit.lips = 'Erbe Lippen Farbe vom Körper'
gui.ppm2.editor.face.inherit.nose = 'Erbe Nasen Farbe vom Körper'

gui.ppm2.editor.mouth.fangs = 'Fangzähne'
gui.ppm2.editor.mouth.alt_fangs = 'Alternative Fangzähne'
gui.ppm2.editor.mouth.claw = 'Klauenzähne'

gui.ppm2.editor.mouth.teeth = 'Zahnfarbe'
gui.ppm2.editor.mouth.mouth = 'Mundfarbe'
gui.ppm2.editor.mouth.tongue = 'Zungenfarbe'

gui.ppm2.editor.mane.type = 'Mähne Typ'
gui.ppm2.editor.mane.phong = 'Trenne Mähne phong Einstellungen vom Körper'
gui.ppm2.editor.mane.phong_sep = 'Trenne obere und untere Mähnenfarbe'
gui.ppm2.editor.mane.up.phong = 'Obere Mähne Phong Einstellungen'
gui.ppm2.editor.mane.down.phong = 'Untere Mähne Phong Einstellungen'
gui.ppm2.editor.mane.newnotice = 'Die nächsten Optionen wirken sich nur auf das neue Modell aus'

for i = 1, 2
	gui.ppm2.editor.mane['color' .. i] = "Mähnefarbe #{i}"
	gui.ppm2.editor.mane.up['color' .. i] = "Obere Mähnefarbe #{i}"
	gui.ppm2.editor.mane.down['color' .. i] = "Untere Mähnefarbe #{i}"

for i = 1, 6
	gui.ppm2.editor.mane['detail_color' .. i] = "Mähne Detail Farbe #{i}"
	gui.ppm2.editor.mane.up['detail_color' .. i] = "Obere Mähnefarbe #{i}"
	gui.ppm2.editor.mane.down['detail_color' .. i] = "Untere Mähnefarbe #{i}"

	gui.ppm2.editor.url_mane['desc' .. i] = "Mähne URL Detail #{i} Eingabefeld"
	gui.ppm2.editor.url_mane['color' .. i] = "Mähne URL detail farbe #{i}"

	gui.ppm2.editor.url_mane.sep.up['desc' .. i] = "Obere Mähne URL Detail #{i} Eingabefeld"
	gui.ppm2.editor.url_mane.sep.up['color' .. i] = "Obere Mähne URL detail farbe #{i}"

	gui.ppm2.editor.url_mane.sep.down['desc' .. i] = "Untere Mähne URL Detail #{i} Eingabefeld"
	gui.ppm2.editor.url_mane.sep.down['color' .. i] = "Untere Mähne URL detail farbe #{i}"

gui.ppm2.editor.ears.bat = 'Bat pony Ohren'
gui.ppm2.editor.ears.size = 'Ohrengröße'

gui.ppm2.editor.horn.detail_color = 'Horn Detailfarbe'
gui.ppm2.editor.horn.glowing_detail = 'Horn leuchten Detail'
gui.ppm2.editor.horn.glow_strength = 'Horn leuchten Stärke'
gui.ppm2.editor.horn.separate_color = 'Trenne Horn farbe vom Körper'
gui.ppm2.editor.horn.color = 'Horn farbe'
gui.ppm2.editor.horn.magic = 'Horn magie farbe'
gui.ppm2.editor.horn.separate_magic_color = 'Trenne magie farbe vom Augen farbe'
gui.ppm2.editor.horn.separate = 'Trenne Horn farbe vom Körper'
gui.ppm2.editor.horn.separate_phong = 'Trenne Horn phong Einstellungen vom Körper'

for i = 1, 3
	gui.ppm2.editor.horn.detail['desc' .. i] = "Horn URL detail #{i}"
	gui.ppm2.editor.horn.detail['color' .. i] = "URL Detail farbe #{i}"

gui.ppm2.editor.wings.separate_color = 'Trenne Flügel farbe vom Körper'
gui.ppm2.editor.wings.color = 'Flügel farbe'
gui.ppm2.editor.wings.separate = 'Trenne Flügel farbe vom Körper'
gui.ppm2.editor.wings.separate_phong = 'Trenne Flügel phong Einstellungen vom Körper'
gui.ppm2.editor.wings.bat_color = 'Bat Flügel farbe'
gui.ppm2.editor.wings.bat_skin_color = 'Bat Flügel Haut farbe'

gui.ppm2.editor.wings.normal = 'Normale Flügel'
gui.ppm2.editor.wings.bat = 'Bat Flügel'
gui.ppm2.editor.wings.bat_skin = 'Bat Flügel Haut'

gui.ppm2.editor.wings.left.size = 'Linker Flügel Größe'
gui.ppm2.editor.wings.left.fwd = 'Linker Flügel Vorwärts'
gui.ppm2.editor.wings.left.up = 'Linker Flügel Hoch'
gui.ppm2.editor.wings.left.inside = 'Linker Flügel Innen'

gui.ppm2.editor.wings.right.size = 'Rechter Flügel Größe'
gui.ppm2.editor.wings.right.fwd = 'Rechter Flügel Vorwärts'
gui.ppm2.editor.wings.right.up = 'Rechter Flügel Hoch'
gui.ppm2.editor.wings.right.inside = 'Rechter Flügel Innen'

for i = 1, 3
	gui.ppm2.editor.wings.details.def['detail' .. i] = "Flügel URL detail #{i}"
	gui.ppm2.editor.wings.details.def['color' .. i] = "URL Detail farbe #{i}"
	gui.ppm2.editor.wings.details.bat['detail' .. i] = "Bat Flügel URL detail #{i}"
	gui.ppm2.editor.wings.details.bat['color' .. i] = "Bat Flügel URL Detail farbe #{i}"
	gui.ppm2.editor.wings.details.batskin['detail' .. i] = "Bat Flügel Haut URL detail #{i}"
	gui.ppm2.editor.wings.details.batskin['color' .. i] = "Bat Flügel Haut URL Detail farbe #{i}"

gui.ppm2.editor.neck.height = 'Halshöhe'

gui.ppm2.editor.body.suit = 'Körperanzug'
gui.ppm2.editor.body.color = 'Korper farbe'
gui.ppm2.editor.body.spine_length = 'Rückenlänge'
gui.ppm2.editor.body.url_desc = 'Körper detail URL Bild Eingabefeld\nSollte PNG oder JPEG sein (funktioniert wie bei\nPAC3 URL textur)'

for i = 1, PPM2.MAX_BODY_DETAILS
	gui.ppm2.editor.body.detail['desc' .. i] = "Detail #{i}"
	gui.ppm2.editor.body.detail['color' .. i] = "Detail farbe #{i}"
	gui.ppm2.editor.body.detail['glow' .. i] = "Detail #{i} leuchtet"
	gui.ppm2.editor.body.detail['glow_strength' .. i] = "Detail #{i} leuchtkraft"

	gui.ppm2.editor.body.detail.url['desc' .. i] = "Detail #{i}"
	gui.ppm2.editor.body.detail.url['color' .. i] = "Detail farbe #{i}"

gui.ppm2.editor.tattoo.edit_keyboard = 'Bearbeiten mit der Tastatur'
gui.ppm2.editor.tattoo.type = 'Typ'
gui.ppm2.editor.tattoo.over = 'Tattoo über Körperdetails'
gui.ppm2.editor.tattoo.glow = 'Tattoo leuchtet'
gui.ppm2.editor.tattoo.glow_strength = 'Tattoo leuchtkraft'
gui.ppm2.editor.tattoo.color = 'Farbe der Tätowierung'

gui.ppm2.editor.tattoo.tweak.rotate = 'Rotation'
gui.ppm2.editor.tattoo.tweak.x = 'X Position'
gui.ppm2.editor.tattoo.tweak.y = 'Y Position'
gui.ppm2.editor.tattoo.tweak.width = 'Breite Skalierung'
gui.ppm2.editor.tattoo.tweak.height = 'Länge Skalierung'

for i = 1, PPM2.MAX_TATTOOS
	gui.ppm2.editor.tattoo['layer' .. i] = "Tattooschicht #{i}"

gui.ppm2.editor.tail.type = 'Schweif typ'
gui.ppm2.editor.tail.size = 'Schweif größe'
gui.ppm2.editor.tail.separate = 'Trenne Schweif phong Einstellungen vom Körper'

for i = 1, 2
	gui.ppm2.editor.tail['color' .. i] = 'Schweif farbe ' .. i

for i = 1, 6
	gui.ppm2.editor.tail['detail' .. i] = "Schweif detail farbe #{i}"
	gui.ppm2.editor.tail.url['detail' .. i] = "Schweif URL detail #{i}"
	gui.ppm2.editor.tail.url['color' .. i] = "Schweif URL detail #{i}"

gui.ppm2.editor.hoof.fluffers = 'Huf flausch'

gui.ppm2.editor.legs.height = 'Bein höhe'
gui.ppm2.editor.legs.socks.simple = 'Socken (einfache Textur)'
gui.ppm2.editor.legs.socks.model = 'Socken (als Modell)'
gui.ppm2.editor.legs.socks.color = 'Socken Modell Farbe'
gui.ppm2.editor.legs.socks.texture = 'Socken Textur'
gui.ppm2.editor.legs.socks.url_texture = 'Socken URL textur'

for i = 1, 6
	gui.ppm2.editor.legs.socks['color' .. i] = 'Socken detail farbe ' .. i

gui.ppm2.editor.legs.newsocks.model = 'Socken (als neues Modell)'

for i = 1, 3
	gui.ppm2.editor.legs.newsocks['color' .. i] = 'Neue Socken Farbe ' .. i

gui.ppm2.editor.legs.newsocks.url = 'Neue Socken URL textur'

-- shared editor stuffs

gui.ppm2.editor.tattoo.help = "Um den Bearbeitungsmodus zu verlassen, drücke Escape oder klicke irgendwo mit der Maus
Um das Tattoo zu bewegen, verwende WASD
Um höher/niedriger zu skalieren, verwende die Hoch/Runter Pfeiltasten
Um breiter/kleiner zu skalieren, verwende die Rechts/Links Pfeiltasten
Um links/rechts zu Drehen, verwende die Q/E Tasten"

for name, data in pairs PPM2.PonyDataRegistry
	gui.ppm2.editor.reset[data.getFunc\lower()] = 'Zurücksetzen ' .. data.getFunc

gui.ppm2.editor.phong.info = 'Mehr Infos über Phong im Wiki'
gui.ppm2.editor.phong.exponent = 'Phong Exponent - wie stark die reflektierende Eigenschaft\nvon der Ponyhaut ist\nSetze den Wert nahe Null, um dem Roboterlook zu bekommen\nPonyhaut'
gui.ppm2.editor.phong.exponent_text = 'Phong Exponent'
gui.ppm2.editor.phong.boost.title = 'Phong Verstärkung - multipliziert spiegelnde Kartenreflexionen'
gui.ppm2.editor.phong.boost.boost = 'Phong Verstärkung'
gui.ppm2.editor.phong.tint.title = 'Tönung Farbe - welche Farben reflektieren Spiegelkarte\nWeiß - Reflektiert alle Farben\n(Im weißen Raum - weiße Spiegelkarte)'
gui.ppm2.editor.phong.tint.tint = 'Tönung Farbe - welche Farben reflektieren Spiegelkarte\nWeiß - Reflektiert alle Farben\n(Im weißen Raum - weiße Spiegelkarte)'
gui.ppm2.editor.phong.frensel.front.title = 'Phong Front - Fresnel 0 Grad Reflexionswinkel Multiplikator'
gui.ppm2.editor.phong.frensel.front.front = 'Phong Front'
gui.ppm2.editor.phong.frensel.middle.title = 'Phong Mitte - Fresnel 45 Grad Reflexionswinkel Multiplikator'
gui.ppm2.editor.phong.frensel.middle.front = 'Phong Mitte'
gui.ppm2.editor.phong.frensel.sliding.title = 'Phong Gleitend - Fresnel 45 Grad Reflexionswinkel Multiplikator'
gui.ppm2.editor.phong.frensel.sliding.front = 'Phong Gleitend'
gui.ppm2.editor.phong.lightwarp = 'Lightwarp'
gui.ppm2.editor.phong.url_lightwarp = 'Lightwarp textur URL eingabe\nEs muss 256x16 sein!'
gui.ppm2.editor.phong.bumpmap = 'Bumpmap URL eingabe'

gui.ppm2.editor.info.discord = "Trete DBot's Discord bei!"
gui.ppm2.editor.info.ponyscape = "PPM/2 ist ein Ponyscape projekt"
gui.ppm2.editor.info.creator = "PPM/2 wurde von DBot erstellt und entwickelt"
gui.ppm2.editor.info.newmodels = "Neue Modelle wurden von Durpy erstellt"
gui.ppm2.editor.info.cppmmodels = "CPPM Modelle (einschließlich Ponyhände) gehören zu UnkN', 'http://steamcommunity.com/profiles/76561198084938735"
gui.ppm2.editor.info.oldmodels = "Alte Modelle gehören zu Scentus und den anderen."
gui.ppm2.editor.info.bugs = "Einen Fehler gefunden? Melde es hier!"
gui.ppm2.editor.info.sources = "Quellen findest du hier"
gui.ppm2.editor.info.githubsources = "Oder im GitHub mirror"
gui.ppm2.editor.info.thanks = "Besonderer Dank geht an alle, die kritisiert,\ngeholfen und PPM/2 getestet haben!"

-- other stuff

info.ppm2.fly.pegasus = 'Du musst eine Pegasus oder ein Alicorn sein, um zu fliegen!'
info.ppm2.fly.cannot = 'Du kannst nicht %s im Augenblick.'

gui.ppm2.emotes.sad = 'Traurig'
gui.ppm2.emotes.wild = 'Wild'
gui.ppm2.emotes.grin = 'Grinsen'
gui.ppm2.emotes.angry = 'Wütend'
gui.ppm2.emotes.tongue = ':P'
gui.ppm2.emotes.angrytongue = '>:P'
gui.ppm2.emotes.pff = 'Pffff!'
gui.ppm2.emotes.kitty = ':3'
gui.ppm2.emotes.owo = 'oWo'
gui.ppm2.emotes.ugh = 'Uuugh'
gui.ppm2.emotes.lips = 'Lippen lecken'
gui.ppm2.emotes.scrunch = 'Scrunch'
gui.ppm2.emotes.sorry = 'Entschuldigend'
gui.ppm2.emotes.wink = 'Zwinkern'
gui.ppm2.emotes.right_wink = 'Rechts Zwinkern'
gui.ppm2.emotes.licking = 'Lecken'
gui.ppm2.emotes.suggestive_lips = 'Anzüglich Lippen Lecken'
gui.ppm2.emotes.suggestive_no_tongue = 'Anzüglich ohne Zunge'
gui.ppm2.emotes.gulp = 'Schlucken'
gui.ppm2.emotes.blah = 'Blah blah blah'
gui.ppm2.emotes.happi = 'Glücklich'
gui.ppm2.emotes.happi_grin = 'Glückliches Grinsen'
gui.ppm2.emotes.duck = 'ENTE'
gui.ppm2.emotes.ducks = 'ENTEN WAHNSINN'
gui.ppm2.emotes.quack = 'QUACK'
gui.ppm2.emotes.suggestive = 'Anzüglich mit Zunge'

message.ppm2.emotes.invalid = 'Keine Emotion mit ID: %s'

gui.ppm2.editor.intro.text = "Grüße meinen neuen.... Robochirurgen für Ponys! Es erlaubt Dir....\n" ..
	"hmmm... ein Pony zu werden, und ja, dieser Prozess ist UNUMKEHRBAR! Aber mach dir keine Sorgen,\n" ..
	"Du verlierst keine deiner Gehirnzellen, in und nach der Operation, weil wir die Operation sehr schonend durchführen...\n\n" ..
	"Eigentlich habe ich keine Ahnung, du biologisches Wesen! Seine mechanischen Hände werden dich in die engsten Umarmungen hüllen, die du je bekommen hast!\n" ..
	"Und, bitte, sterbe nicht in diesen Prozess, denn dies würde dazu führen DAS ERLÖSCHEN DEINER LEBENSLANGEN GARANTIE... und Du wirst kein Pony sein!\n" ..
	"----\n\n\n" ..
	"Vorsicht: Nehme den Robochirurgen nicht auseinander.\nLege deine Hände/Hufe nicht in bewegliche Teile des Robochirurgen.\n" ..
	"Schalte es während des Betriebs nicht aus..\nVersuche nicht sich seinen Taten zu widersetzen.\n" ..
	"Sei immer sanft mit den Robochirurgen.\n" ..
	"Schlage Robochirurgen nie auf sein Interface.\n" ..
	"DBot's DLibCo übernimmt keine Verantwortung für Schäden, die durch falsche Verwendung von Robochirurgen entstehen.\n" ..
	"Die Garantie erlischt, wenn der Benutzer stirbt.\n" ..
	"Keine Rückerstattung."
gui.ppm2.editor.intro.title = 'Willkommen hier, Mensch!'
gui.ppm2.editor.intro.okay = "Ok, ich werde diese Lizenz sowieso nie lesen."

-- Copyright (C) 2017-2018 DBot

-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at

--     http://www.apache.org/licenses/LICENSE-2.0

-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

-- editor stuffs

gui.ppm2.editor.eyes.separate = 'Getrennte Einstellungen für Augen verwenden'
gui.ppm2.editor.eyes.url = 'Augen URL Textur'
gui.ppm2.editor.eyes.url_desc = 'Bei Verwendung der Augen URL Textur; Die folgenden Optionen haben keine Auswirkung'

gui.ppm2.editor.eyes.lightwarp_desc = 'Lightwarp wirkt nur auf EyeRefract Augen'
gui.ppm2.editor.eyes.lightwarp = "Lightwarp"
gui.ppm2.editor.eyes.desc1 = "Lightwarp textur URL eingabe\nEs muss 256x16 sein!"
gui.ppm2.editor.eyes.desc2 = "Glanzstärke\nDieser Parameter erhöht die Stärke der Echtzeitreflexionen auf das Auge\nUm Änderungen zu sehen, setze ppm2_cl_reflections convar auf 1\nAndere Spieler würden Reflexionen nur sehen, wenn ppm2_cl_reflections auf 1 gesetzt ist\n0 - ist matt; 1 - ist spiegelnd"

for {tprefix, prefix} in *{{'def', ''}, {'left', 'Links '}, {'right', 'Rechts '}}
	gui.ppm2.editor.eyes[tprefix].lightwarp.shader = "#{prefix}EyeRefract Shader verwenden"
	gui.ppm2.editor.eyes[tprefix].lightwarp.cornera = "#{prefix}Eye Cornea diffus verwenden"
	gui.ppm2.editor.eyes[tprefix].lightwarp.glossiness = "#{prefix}Glanz"

	gui.ppm2.editor.eyes[tprefix].type = "#{prefix}Augentyp"
	gui.ppm2.editor.eyes[tprefix].reflection_type = "#{prefix}Augenreflexion typ"
	gui.ppm2.editor.eyes[tprefix].lines = "#{prefix}Augenlinien"
	gui.ppm2.editor.eyes[tprefix].derp = "#{prefix}Derp Augen"
	gui.ppm2.editor.eyes[tprefix].derp_strength = "#{prefix}Derp Augen Stärke"
	gui.ppm2.editor.eyes[tprefix].iris_size = "#{prefix}Augengröße"

	gui.ppm2.editor.eyes[tprefix].points_inside = "#{prefix}Augenlinien innen"
	gui.ppm2.editor.eyes[tprefix].width = "#{prefix}Augenbreite"
	gui.ppm2.editor.eyes[tprefix].height = "#{prefix}Augenhöhe"

	gui.ppm2.editor.eyes[tprefix].pupil.width = "#{prefix}Pupillenbreite"
	gui.ppm2.editor.eyes[tprefix].pupil.height = "#{prefix}Pupillenhöhe"
	gui.ppm2.editor.eyes[tprefix].pupil.size = "#{prefix}Pupillengröße"

	gui.ppm2.editor.eyes[tprefix].pupil.shift_x = "#{prefix}Pupillen Verschiebung X"
	gui.ppm2.editor.eyes[tprefix].pupil.shift_y = "#{prefix}Pupillen Verschiebung Y"
	gui.ppm2.editor.eyes[tprefix].pupil.rotation = "#{prefix}Augenrotation"

	gui.ppm2.editor.eyes[tprefix].background = "#{prefix}Augenhintergrund"
	gui.ppm2.editor.eyes[tprefix].pupil_size = "#{prefix}Pupille"
	gui.ppm2.editor.eyes[tprefix].top_iris = "#{prefix}Obere Augeniris"
	gui.ppm2.editor.eyes[tprefix].bottom_iris = "#{prefix}Untere Augeniris"
	gui.ppm2.editor.eyes[tprefix].line1 = "#{prefix}Augenlinie 1"
	gui.ppm2.editor.eyes[tprefix].line2 = "#{prefix}Augenlinie 2"
	gui.ppm2.editor.eyes[tprefix].reflection = "#{prefix}Augenreflexionseffekt"
	gui.ppm2.editor.eyes[tprefix].effect = "#{prefix}Augeneffekt"

gui.ppm2.editor.generic.title = 'PPM/2 Pony Editor'
gui.ppm2.editor.generic.title_file = '%q - PPM/2 Pony Editor'
gui.ppm2.editor.generic.title_file_unsaved = '%q* - PPM/2 Pony Editor (ungespeicherte Änderungen!)'

gui.ppm2.editor.generic.yes = 'Yas!'
gui.ppm2.editor.generic.no = 'Noh!'
gui.ppm2.editor.generic.ohno = 'Onoh!'
gui.ppm2.editor.generic.okay = 'Okai ;w;'
gui.ppm2.editor.generic.datavalue = '%s\nDatenwert: %q'
gui.ppm2.editor.generic.url = '%s\n\nLink geht zu: %s'
gui.ppm2.editor.generic.url_field = 'URL Feld'
gui.ppm2.editor.generic.spoiler = 'Geheimnisvoller Spoiler'

gui.ppm2.editor.generic.restart.needed = 'Neustart des Editors erforderlich'
gui.ppm2.editor.generic.restart.text = 'Sie sollten den Editor neu starten, um die Änderung zu übernehmen.\nJetzt neu starten?\nNicht gespeicherte Daten gehen verloren!'
gui.ppm2.editor.generic.fullbright = 'Volle Helligkeit'
gui.ppm2.editor.generic.wtf = 'Aus irgendeinem Grund hat Dein Player kein NetworkedPonyData. - Nichts zu bearbeiten!\nVersuche ppm2_reload in Deine Konsole einzugeben und versuche es erneut, den Editor zu öffnen.'

gui.ppm2.editor.io.random.title = 'Randomisieren!'
gui.ppm2.editor.io.newfile.title = 'Neue Datei'
gui.ppm2.editor.io.newfile.confirm = 'Willst Du wirklich eine neue Datei erstellen?'
gui.ppm2.editor.io.newfile.toptext = 'Zurücksetzen'
gui.ppm2.editor.io.delete.confirm = 'Willst Du Datei wirklich löschen?\nEs wird für immer weg sein.!\n(eine lange Zeit!)'
gui.ppm2.editor.io.delete.title = 'Wirklich löschen?'

gui.ppm2.editor.io.filename = 'Dateiname'
gui.ppm2.editor.io.hint = 'Datei per Doppelklick öffnen'
gui.ppm2.editor.io.reload = 'Dateiliste neu laden'
gui.ppm2.editor.io.failed = 'Import fehlgeschlagen.'

gui.ppm2.editor.io.warn.oldfile = '!!! Es kann funktionieren oder auch nicht. Du wirst zerquetscht werden.'
gui.ppm2.editor.io.warn.text = "Derzeit hast du deine Änderungen nicht angegeben.\nWillst Du wirklich eine andere Datei öffnen?"
gui.ppm2.editor.io.warn.header = 'Nicht gespeicherte Änderungen!'
gui.ppm2.editor.io.save.button = 'Speichern'
gui.ppm2.editor.io.save.text = 'Dateiname ohne ppm2/ und .dat eingeben\nTipp: Um als Autoload zu speichern, schreibe "_current" (ohne ") ein.'
gui.ppm2.editor.io.wear = 'Änderungen übernehmen (Anziehen)'

gui.ppm2.editor.seq.standing = 'Stehen'
gui.ppm2.editor.seq.move = 'Bewegend'
gui.ppm2.editor.seq.walk = 'Gehen'
gui.ppm2.editor.seq.sit = 'Sitzen'
gui.ppm2.editor.seq.swim = 'Schwimmen'
gui.ppm2.editor.seq.run = 'Laufen'
gui.ppm2.editor.seq.duckwalk = 'Ducken gehen'
gui.ppm2.editor.seq.duck = 'Ducken'
gui.ppm2.editor.seq.jump = 'Springen'

gui.ppm2.editor.misc.race = 'Rasse'
gui.ppm2.editor.misc.weight = 'Gewicht'
gui.ppm2.editor.misc.size = 'Pony Größe'
gui.ppm2.editor.misc.hide_weapons = 'Waffen verstecken'
gui.ppm2.editor.misc.chest = 'Männliche Brust'
gui.ppm2.editor.misc.gender = 'Geschlecht'
gui.ppm2.editor.misc.wings = 'Flügel Typ'
gui.ppm2.editor.misc.flexes = 'Flex steuerung'
gui.ppm2.editor.misc.no_flexes2 = 'Kein Flex beim neuen Modell'
gui.ppm2.editor.misc.no_flexes_desc = 'Du kannst jeden Flex Zustandsregler separat deaktivieren.\nSo können diese Flexe mit Addons von Drittanbietern (wie PAC3) modifiziert werden.'

gui.ppm2.editor.misc.hide_pac3 = 'Entitys ausblenden wenn PAC3 Entity verwendet wird'
gui.ppm2.editor.misc.hide_mane = 'Mähne ausblenden wenn PAC3 Entity verwendet wird'
gui.ppm2.editor.misc.hide_tail = 'Schweif ausblenden wenn PAC3 Entity verwendet wird'
gui.ppm2.editor.misc.hide_socks = 'Socken ausblenden wenn PAC3 Entity verwendet wird'

gui.ppm2.editor.tabs.main = 'Allgemeines'
gui.ppm2.editor.tabs.files = 'Dateien'
gui.ppm2.editor.tabs.old_files = 'Alte Dateien'
gui.ppm2.editor.tabs.cutiemark = 'Schönheitsfleck'
gui.ppm2.editor.tabs.head = 'Kopfanatomie'
gui.ppm2.editor.tabs.eyes = 'Augen'
gui.ppm2.editor.tabs.face = 'Gesicht'
gui.ppm2.editor.tabs.mouth = 'Mund'
gui.ppm2.editor.tabs.left_eye = 'Linkes Auge'
gui.ppm2.editor.tabs.right_eye = 'Rechtes Auge'
gui.ppm2.editor.tabs.mane_horn = 'Mähne und Horn'
gui.ppm2.editor.tabs.mane = 'Mähne'
gui.ppm2.editor.tabs.details = 'Details'
gui.ppm2.editor.tabs.url_details = 'URL Details'
gui.ppm2.editor.tabs.url_separated_details = 'URL Getrennte Details'
gui.ppm2.editor.tabs.ears = 'Ohren'
gui.ppm2.editor.tabs.horn = 'Ohren'
gui.ppm2.editor.tabs.back = 'Rücken'
gui.ppm2.editor.tabs.wings = 'Flügel'
gui.ppm2.editor.tabs.left = 'Links'
gui.ppm2.editor.tabs.right = 'Rechts'
gui.ppm2.editor.tabs.neck = 'Hals'
gui.ppm2.editor.tabs.body = 'Pony Körper'
gui.ppm2.editor.tabs.tattoos = 'Tätowierungen'
gui.ppm2.editor.tabs.tail = 'Schweif'
gui.ppm2.editor.tabs.hooves = 'Huf Anatomie'
gui.ppm2.editor.tabs.bottom_hoof = 'Huf unten'
gui.ppm2.editor.tabs.legs = 'Beine'
gui.ppm2.editor.tabs.socks = 'Socken'
gui.ppm2.editor.tabs.newsocks = 'Neue Socken'
gui.ppm2.editor.tabs.about = 'Über PPM/2'

gui.ppm2.editor.old_tabs.mane_tail = 'Mähne und Schweif'
gui.ppm2.editor.old_tabs.wings_and_horn_details = 'Flügel und Horn details'
gui.ppm2.editor.old_tabs.wings_and_horn = 'Flügel und Horn'
gui.ppm2.editor.old_tabs.body_details = 'Körper details'
gui.ppm2.editor.old_tabs.mane_tail_detals = 'Mähne und Schweif URL details'

gui.ppm2.editor.cutiemark.display = 'Schönheitsfleck anzeigen'
gui.ppm2.editor.cutiemark.type = 'Schönheitsfleck typ'
gui.ppm2.editor.cutiemark.size = 'Schönheitsfleck größe'
gui.ppm2.editor.cutiemark.color = 'Schönheitsfleck farbe'
gui.ppm2.editor.cutiemark.input = 'Schönheitsfleck URL bild Eingabefeld\nSollte PNG oder JPEG sein (funktioniert wie bei\nPAC3 URL texture)'

gui.ppm2.editor.face.eyelashes = 'Wimpern'
gui.ppm2.editor.face.eyelashes_color = 'Wimpern Farbe'
gui.ppm2.editor.face.eyebrows_color = 'Augenbrauen Farbe'
gui.ppm2.editor.face.new_muzzle = 'Neue Schnauze für das männliche Modell nutzen'

gui.ppm2.editor.face.nose = 'Nasenfarbe'
gui.ppm2.editor.face.lips = 'Lippen Farbe'
gui.ppm2.editor.face.eyelashes_separate_phong = 'Separate Wimpern Phong'
gui.ppm2.editor.face.eyebrows_glow = 'Leuchtende Augenbrauen'
gui.ppm2.editor.face.eyebrows_glow_strength = 'Augenbrauen leuchten Stärke'
gui.ppm2.editor.face.inherit.lips = 'Erbe Lippen Farbe vom Körper'
gui.ppm2.editor.face.inherit.nose = 'Erbe Nasen Farbe vom Körper'

gui.ppm2.editor.mouth.fangs = 'Fangzähne'
gui.ppm2.editor.mouth.alt_fangs = 'Alternative Fangzähne'
gui.ppm2.editor.mouth.claw = 'Klauenzähne'

gui.ppm2.editor.mouth.teeth = 'Zahnfarbe'
gui.ppm2.editor.mouth.mouth = 'Mundfarbe'
gui.ppm2.editor.mouth.tongue = 'Zungenfarbe'

gui.ppm2.editor.mane.type = 'Mähne Typ'
gui.ppm2.editor.mane.phong = 'Trenne Mähne phong Einstellungen vom Körper'
gui.ppm2.editor.mane.phong_sep = 'Trenne obere und untere Mähnenfarbe'
gui.ppm2.editor.mane.up.phong = 'Obere Mähne Phong Einstellungen'
gui.ppm2.editor.mane.down.phong = 'Untere Mähne Phong Einstellungen'
gui.ppm2.editor.mane.newnotice = 'Die nächsten Optionen wirken sich nur auf das neue Modell aus'

for i = 1, 2
	gui.ppm2.editor.mane['color' .. i] = "Mähnefarbe #{i}"
	gui.ppm2.editor.mane.up['color' .. i] = "Obere Mähnefarbe #{i}"
	gui.ppm2.editor.mane.down['color' .. i] = "Untere Mähnefarbe #{i}"

for i = 1, 6
	gui.ppm2.editor.mane['detail_color' .. i] = "Mähne Detail Farbe #{i}"
	gui.ppm2.editor.mane.up['detail_color' .. i] = "Obere Mähnefarbe #{i}"
	gui.ppm2.editor.mane.down['detail_color' .. i] = "Untere Mähnefarbe #{i}"

	gui.ppm2.editor.url_mane['desc' .. i] = "Mähne URL Detail #{i} Eingabefeld"
	gui.ppm2.editor.url_mane['color' .. i] = "Mähne URL detail farbe #{i}"

	gui.ppm2.editor.url_mane.sep.up['desc' .. i] = "Obere Mähne URL Detail #{i} Eingabefeld"
	gui.ppm2.editor.url_mane.sep.up['color' .. i] = "Obere Mähne URL detail farbe #{i}"

	gui.ppm2.editor.url_mane.sep.down['desc' .. i] = "Untere Mähne URL Detail #{i} Eingabefeld"
	gui.ppm2.editor.url_mane.sep.down['color' .. i] = "Untere Mähne URL detail farbe #{i}"

gui.ppm2.editor.ears.bat = 'Bat pony Ohren'
gui.ppm2.editor.ears.size = 'Ohrengröße'

gui.ppm2.editor.horn.detail_color = 'Horn Detailfarbe'
gui.ppm2.editor.horn.glowing_detail = 'Horn leuchten Detail'
gui.ppm2.editor.horn.glow_strength = 'Horn leuchten Stärke'
gui.ppm2.editor.horn.separate_color = 'Trenne Horn farbe vom Körper'
gui.ppm2.editor.horn.color = 'Horn farbe'
gui.ppm2.editor.horn.magic = 'Horn magie farbe'
gui.ppm2.editor.horn.separate_magic_color = 'Trenne magie farbe vom Augen farbe'
gui.ppm2.editor.horn.separate = 'Trenne Horn farbe vom Körper'
gui.ppm2.editor.horn.separate_phong = 'Trenne Horn phong Einstellungen vom Körper'

for i = 1, 3
	gui.ppm2.editor.horn.detail['desc' .. i] = "Horn URL detail #{i}"
	gui.ppm2.editor.horn.detail['color' .. i] = "URL Detail farbe #{i}"

gui.ppm2.editor.wings.separate_color = 'Trenne Flügel farbe vom Körper'
gui.ppm2.editor.wings.color = 'Flügel farbe'
gui.ppm2.editor.wings.separate = 'Trenne Flügel farbe vom Körper'
gui.ppm2.editor.wings.separate_phong = 'Trenne Flügel phong Einstellungen vom Körper'
gui.ppm2.editor.wings.bat_color = 'Bat Flügel farbe'
gui.ppm2.editor.wings.bat_skin_color = 'Bat Flügel Haut farbe'

gui.ppm2.editor.wings.normal = 'Normale Flügel'
gui.ppm2.editor.wings.bat = 'Bat Flügel'
gui.ppm2.editor.wings.bat_skin = 'Bat Flügel Haut'

gui.ppm2.editor.wings.left.size = 'Linker Flügel Größe'
gui.ppm2.editor.wings.left.fwd = 'Linker Flügel Vorwärts'
gui.ppm2.editor.wings.left.up = 'Linker Flügel Hoch'
gui.ppm2.editor.wings.left.inside = 'Linker Flügel Innen'

gui.ppm2.editor.wings.right.size = 'Rechter Flügel Größe'
gui.ppm2.editor.wings.right.fwd = 'Rechter Flügel Vorwärts'
gui.ppm2.editor.wings.right.up = 'Rechter Flügel Hoch'
gui.ppm2.editor.wings.right.inside = 'Rechter Flügel Innen'

for i = 1, 3
	gui.ppm2.editor.wings.details.def['detail' .. i] = "Flügel URL detail #{i}"
	gui.ppm2.editor.wings.details.def['color' .. i] = "URL Detail farbe #{i}"
	gui.ppm2.editor.wings.details.bat['detail' .. i] = "Bat Flügel URL detail #{i}"
	gui.ppm2.editor.wings.details.bat['color' .. i] = "Bat Flügel URL Detail farbe #{i}"
	gui.ppm2.editor.wings.details.batskin['detail' .. i] = "Bat Flügel Haut URL detail #{i}"
	gui.ppm2.editor.wings.details.batskin['color' .. i] = "Bat Flügel Haut URL Detail farbe #{i}"

gui.ppm2.editor.neck.height = 'Halshöhe'

gui.ppm2.editor.body.suit = 'Körperanzug'
gui.ppm2.editor.body.color = 'Korper farbe'
gui.ppm2.editor.body.spine_length = 'Rückenlänge'
gui.ppm2.editor.body.url_desc = 'Körper detail URL Bild Eingabefeld\nSollte PNG oder JPEG sein (funktioniert wie bei\nPAC3 URL textur)'

for i = 1, PPM2.MAX_BODY_DETAILS
	gui.ppm2.editor.body.detail['desc' .. i] = "Detail #{i}"
	gui.ppm2.editor.body.detail['color' .. i] = "Detail farbe #{i}"
	gui.ppm2.editor.body.detail['glow' .. i] = "Detail #{i} leuchtet"
	gui.ppm2.editor.body.detail['glow_strength' .. i] = "Detail #{i} leuchtkraft"

	gui.ppm2.editor.body.detail.url['desc' .. i] = "Detail #{i}"
	gui.ppm2.editor.body.detail.url['color' .. i] = "Detail farbe #{i}"

gui.ppm2.editor.tattoo.edit_keyboard = 'Bearbeiten mit der Tastatur'
gui.ppm2.editor.tattoo.type = 'Typ'
gui.ppm2.editor.tattoo.over = 'Tattoo über Körperdetails'
gui.ppm2.editor.tattoo.glow = 'Tattoo leuchtet'
gui.ppm2.editor.tattoo.glow_strength = 'Tattoo leuchtkraft'
gui.ppm2.editor.tattoo.color = 'Farbe der Tätowierung'

gui.ppm2.editor.tattoo.tweak.rotate = 'Rotation'
gui.ppm2.editor.tattoo.tweak.x = 'X Position'
gui.ppm2.editor.tattoo.tweak.y = 'Y Position'
gui.ppm2.editor.tattoo.tweak.width = 'Breite Skalierung'
gui.ppm2.editor.tattoo.tweak.height = 'Länge Skalierung'

for i = 1, PPM2.MAX_TATTOOS
	gui.ppm2.editor.tattoo['layer' .. i] = "Tattooschicht #{i}"

gui.ppm2.editor.tail.type = 'Schweif typ'
gui.ppm2.editor.tail.size = 'Schweif größe'
gui.ppm2.editor.tail.separate = 'Trenne Schweif phong Einstellungen vom Körper'

for i = 1, 2
	gui.ppm2.editor.tail['color' .. i] = 'Schweif farbe ' .. i

for i = 1, 6
	gui.ppm2.editor.tail['detail' .. i] = "Schweif detail farbe #{i}"
	gui.ppm2.editor.tail.url['detail' .. i] = "Schweif URL detail #{i}"
	gui.ppm2.editor.tail.url['color' .. i] = "Schweif URL detail #{i}"

gui.ppm2.editor.hoof.fluffers = 'Huf flausch'

gui.ppm2.editor.legs.height = 'Bein höhe'
gui.ppm2.editor.legs.socks.simple = 'Socken (einfache Textur)'
gui.ppm2.editor.legs.socks.model = 'Socken (als Modell)'
gui.ppm2.editor.legs.socks.color = 'Socken Modell Farbe'
gui.ppm2.editor.legs.socks.texture = 'Socken Textur'
gui.ppm2.editor.legs.socks.url_texture = 'Socken URL textur'

for i = 1, 6
	gui.ppm2.editor.legs.socks['color' .. i] = 'Socken detail farbe ' .. i

gui.ppm2.editor.legs.newsocks.model = 'Socken (als neues Modell)'

for i = 1, 3
	gui.ppm2.editor.legs.newsocks['color' .. i] = 'Neue Socken Farbe ' .. i

gui.ppm2.editor.legs.newsocks.url = 'Neue Socken URL textur'

-- shared editor stuffs

gui.ppm2.editor.tattoo.help = "Um den Bearbeitungsmodus zu verlassen, drücke Escape oder klicke irgendwo mit der Maus
Um das Tattoo zu bewegen, verwende WASD
Um höher/niedriger zu skalieren, verwende die Hoch/Runter Pfeiltasten
Um breiter/kleiner zu skalieren, verwende die Rechts/Links Pfeiltasten
Um links/rechts zu Drehen, verwende die Q/E Tasten"

for name, data in pairs PPM2.PonyDataRegistry
	gui.ppm2.editor.reset[data.getFunc\lower()] = 'Zurücksetzen ' .. data.getFunc

gui.ppm2.editor.phong.info = 'Mehr Infos über Phong im Wiki'
gui.ppm2.editor.phong.exponent = 'Phong Exponent - wie stark die reflektierende Eigenschaft\nvon der Ponyhaut ist\nSetze den Wert nahe Null, um dem Roboterlook zu bekommen\nPonyhaut'
gui.ppm2.editor.phong.exponent_text = 'Phong Exponent'
gui.ppm2.editor.phong.boost.title = 'Phong Verstärkung - multipliziert spiegelnde Kartenreflexionen'
gui.ppm2.editor.phong.boost.boost = 'Phong Verstärkung'
gui.ppm2.editor.phong.tint.title = 'Tint color - what colors does reflect specular map\nWhite - Reflects all colors\n(In white room - white specular map)'
gui.ppm2.editor.phong.tint.tint = 'Tint color - what colors does reflect specular map\nWhite - Reflects all colors\n(In white room - white specular map)'
gui.ppm2.editor.phong.frensel.front.title = 'Phong Front - Fresnel 0 Grad ReflexionswinkelMultiplikator'
gui.ppm2.editor.phong.frensel.front.front = 'Phong Front'
gui.ppm2.editor.phong.frensel.middle.title = 'Phong Mitte - FFresnel 45 Grad ReflexionswinkelMultiplikator'
gui.ppm2.editor.phong.frensel.middle.front = 'Phong Mitte'
gui.ppm2.editor.phong.frensel.sliding.title = 'Phong Gleitend - Fresnel 45 Grad ReflexionswinkelMultiplikator'
gui.ppm2.editor.phong.frensel.sliding.front = 'Phong Gleitend'
gui.ppm2.editor.phong.lightwarp = 'Lightwarp'
gui.ppm2.editor.phong.url_lightwarp = 'Lightwarp textur URL eingabe\nEs muss 256x16 sein!'
gui.ppm2.editor.phong.bumpmap = 'Bumpmap URL eingabe'

gui.ppm2.editor.info.discord = "Trete DBot's Discord bei!"
gui.ppm2.editor.info.ponyscape = "PPM/2 ist ein Ponyscape projekt"
gui.ppm2.editor.info.creator = "PPM/2 wurde von DBot erstellt und entwickelt"
gui.ppm2.editor.info.newmodels = "Neue Modelle wurden von Durpy erstellt"
gui.ppm2.editor.info.cppmmodels = "CPPM Modelle (einschließlich Ponyhände) gehören zu UnkN', 'http://steamcommunity.com/profiles/76561198084938735"
gui.ppm2.editor.info.oldmodels = "Alte Modelle gehören zu Scentus und den anderen."
gui.ppm2.editor.info.bugs = "Einen Fehler gefunden? Melde es hier!"
gui.ppm2.editor.info.sources = "Quellen findest du hier"
gui.ppm2.editor.info.githubsources = "Oder im GitHub mirror"
gui.ppm2.editor.info.thanks = "Besonderer Dank geht an alle, die kritisiert,\ngeholfen und PPM/2 getestet haben!"

-- other stuff

info.ppm2.fly.pegasus = 'Du musst eine Pegasus oder ein Alicorn sein, um zu fliegen!'
info.ppm2.fly.cannot = 'Du kannst nicht %s im Augenblick.'

gui.ppm2.emotes.sad = 'Traurig'
gui.ppm2.emotes.wild = 'Wild'
gui.ppm2.emotes.grin = 'Grinsen'
gui.ppm2.emotes.angry = 'Wütend'
gui.ppm2.emotes.tongue = ':P'
gui.ppm2.emotes.angrytongue = '>:P'
gui.ppm2.emotes.pff = 'Pffff!'
gui.ppm2.emotes.kitty = ':3'
gui.ppm2.emotes.owo = 'oWo'
gui.ppm2.emotes.ugh = 'Uuugh'
gui.ppm2.emotes.lips = 'Lippen lecken'
gui.ppm2.emotes.scrunch = 'Scrunch'
gui.ppm2.emotes.sorry = 'Entschuldigend'
gui.ppm2.emotes.wink = 'Zwinkern'
gui.ppm2.emotes.right_wink = 'Rechts Zwinkern'
gui.ppm2.emotes.licking = 'Lecken'
gui.ppm2.emotes.suggestive_lips = 'Anzüglich Lippen Lecken'
gui.ppm2.emotes.suggestive_no_tongue = 'Anzüglich ohne Zunge'
gui.ppm2.emotes.gulp = 'Schlucken'
gui.ppm2.emotes.blah = 'Blah blah blah'
gui.ppm2.emotes.happi = 'Glücklich'
gui.ppm2.emotes.happi_grin = 'Glückliches Grinsen'
gui.ppm2.emotes.duck = 'ENTE'
gui.ppm2.emotes.ducks = 'ENTEN WAHNSINN'
gui.ppm2.emotes.quack = 'QUACK'
gui.ppm2.emotes.suggestive = 'Anzüglich mit Zunge'

message.ppm2.emotes.invalid = 'Keine Emotion mit ID: %s'

gui.ppm2.editor.intro.text = "Grüße meinen neuen.... Robochirurgen für Ponys! Es erlaubt Ihnen....\n" ..
	"hmmm... ein Pony zu werden, und ja, dieser Prozess ist UNUMKEHRBAR! Aber mach dir keine Sorgen,\n" ..
	"Du verlierst keine deiner Gehirnzellen, in und nach der Operation, weil wir die Operation sehr schonend durchführen...\n\n" ..
	"Eigentlich habe ich keine Ahnung, du biologisches Wesen! Seine mechanischen Hände werden dich in die engsten Umarmungen hüllen, die du je bekommen hast!\n" ..
	"Und, bitte, sterbe nicht in diesen Prozess, denn dies würde dazu führen DAS ERLÖSCHEN DEINER LEBENSLANGEN GARANTIE... und Du wirst kein Pony sein!\n" ..
	"----\n\n\n" ..
	"Vorsicht: Nehme den Robochirurgen nicht auseinander.\nLege deine Hände/Hufe nicht in bewegliche Teile des Robochirurgen.\n" ..
	"Schalte es während des Betriebs nicht aus..\nVersuche nicht sich seinen Taten zu widersetzen.\n" ..
	"Seie immer sanft mit Robochirurgen.\n" ..
	"Schlage Robochirurgen nie auf sein Interface.\n" ..
	"DBot's DLibCo übernimmt keine Verantwortung für Schäden, die durch falsche Verwendung von Robochirurgen entstehen.\n" ..
	"Die Garantie erlischt, wenn der Benutzer stirbt.\n" ..
	"Keine Rückerstattung."
gui.ppm2.editor.intro.title = 'Willkommen hier, Mensch!'
gui.ppm2.editor.intro.okay = "Ok, ich werde diese Lizenz sowieso nie lesen."


init super class router

init super class router

log = require "log"
Router = require "router"

class App extends Router
  order: {
    'custom'
    'notFound'
  }

  new: =>
    super()
    table.foreach @order, (k, v) ->
      middleware = require "middleware"
      @use '/', middleware[v]

return App()

log = require "log"
Router = require "router"

class App extends Router
  order: {
    'custom'
    'notFound'
  }

  new: =>
    table.foreach @order, (k, v) ->
      middleware = require "middleware"
      @use '/', middleware[v]

return App()


Yolo kraj prijava opet

Yolo kraj prijava opet

config = require 'lapis.config'
secrets = require 'secrets'

config {'development', 'development-perftest'}, ->
    mysql ->
        host '127.0.0.1'
        user 'csweek'
        password 'csweek'
        database 'csweek'

    smtp_server 'mail.csnedelja.mg.edu.rs'
    smtp_port 587
    smtp_username secrets.mail_user
    smtp_password secrets.mail_password
    smtp_from 'MG Nedelja informatike - prijave <prijave@csnedelja.mg.edu.rs>'
    smtp_from_newsletter 'MG Nedelja informatike - newsletter <newsletter@csnedelja.mg.edu.rs>'

    port 8080
    num_workers 1
    code_cache 'off'
    pid_file 'nginx.pid'
    log_file 'logs/error.log'
    log_level 'debug'
    listen_address '127.0.0.1'
    secret 'this is not so secret!'
    content_prefix '../content/'
    filesize_limit 6 * 15 * 1024 * 1024 + 1024
    single_file_limit 15 * 1024 * 1024

    disable_email_confirmation true
    security_new_user_url 'http://127.0.0.1:19222/new_user'
    security_map_app_id_url 'http://127.0.0.1:19222/map_app_id'

    email_cooldown 20
    uploads_dir 'uploads'
    applications_enabled false

config {'production', 'production-perftest' }, ->
    mysql ->
        host '127.0.0.1'
        user secrets.mysql_user
        password secrets.mysql_password
        database secrets.mysql_db

    smtp_server 'mail.csnedelja.mg.edu.rs'
    smtp_port 587
    smtp_username secrets.mail_user
    smtp_password secrets.mail_password
    smtp_from 'MG Nedelja informatike - prijave <prijave@csnedelja.mg.edu.rs>'
    smtp_from_newsletter 'MG Nedelja informatike - newsletter <newsletter@csnedelja.mg.edu.rs>'

    port 8989
    num_workers 1
    code_cache 'on'
    pid_file '/var/run/nginx/nginx.pid'
    log_file '/var/log/nginx/error.log'
    log_level 'info'
    listen_address '127.0.0.1'
    secret secrets.app_secret
    content_prefix 'content/'
    filesize_limit 6 * 15 * 1024 * 1024 + 1024
    single_file_limit 15 * 1024 * 1024

    disable_email_confirmation true
    security_new_user_url 'http://10.131.29.36:19222/new_user'
    security_map_app_id_url 'http://10.131.29.36:19222/map_app_id'

    email_cooldown 30 * 60
    uploads_dir 'uploads'
    applications_enabled false

config {'development-perftest', 'production-perftest'}, ->
    code_cache 'on'
    measure_performance -> true

config = require 'lapis.config'
secrets = require 'secrets'

config {'development', 'development-perftest'}, ->
    mysql ->
        host '127.0.0.1'
        user 'csweek'
        password 'csweek'
        database 'csweek'

    smtp_server 'mail.csnedelja.mg.edu.rs'
    smtp_port 587
    smtp_username secrets.mail_user
    smtp_password secrets.mail_password
    smtp_from 'MG Nedelja informatike - prijave <prijave@csnedelja.mg.edu.rs>'
    smtp_from_newsletter 'MG Nedelja informatike - newsletter <newsletter@csnedelja.mg.edu.rs>'

    port 8080
    num_workers 1
    code_cache 'off'
    pid_file 'nginx.pid'
    log_file 'logs/error.log'
    log_level 'debug'
    listen_address '127.0.0.1'
    secret 'this is not so secret!'
    content_prefix '../content/'
    filesize_limit 6 * 15 * 1024 * 1024 + 1024
    single_file_limit 15 * 1024 * 1024

    disable_email_confirmation true
    security_new_user_url 'http://127.0.0.1:19222/new_user'
    security_map_app_id_url 'http://127.0.0.1:19222/map_app_id'

    email_cooldown 20
    uploads_dir 'uploads'
    applications_enabled false

config {'production', 'production-perftest' }, ->
    mysql ->
        host '127.0.0.1'
        user secrets.mysql_user
        password secrets.mysql_password
        database secrets.mysql_db

    smtp_server 'mail.csnedelja.mg.edu.rs'
    smtp_port 587
    smtp_username secrets.mail_user
    smtp_password secrets.mail_password
    smtp_from 'MG Nedelja informatike - prijave <prijave@csnedelja.mg.edu.rs>'
    smtp_from_newsletter 'MG Nedelja informatike - newsletter <newsletter@csnedelja.mg.edu.rs>'

    port 8989
    num_workers 1
    code_cache 'on'
    pid_file '/var/run/nginx/nginx.pid'
    log_file '/var/log/nginx/error.log'
    log_level 'info'
    listen_address '127.0.0.1'
    secret secrets.app_secret
    content_prefix 'content/'
    filesize_limit 6 * 15 * 1024 * 1024 + 1024
    single_file_limit 15 * 1024 * 1024

    disable_email_confirmation true
    security_new_user_url 'http://10.131.29.36:19222/new_user'
    security_map_app_id_url 'http://10.131.29.36:19222/map_app_id'

    email_cooldown 30 * 60
    uploads_dir 'uploads'
    applications_enabled true

config {'development-perftest', 'production-perftest'}, ->
    code_cache 'on'
    measure_performance -> true