Поправки и исправления в локализацию от 1С v1046

Тема в разделе "Игровое редактирование", создана пользователем Arionwt1997, 15 ноя 2012.

  1. Flame

    Flame -Заслуженый кодер форума-

    Так
    Видимо при загрузке игры выполненные достижения в случае стим версии считываются с сервака, а в случае пиратки берутся из stats.bin, как и перки
    (тогда заодно сразу понятны stats.bin'ы с открытыми скинами, а я то думал - как эт сделали )) )

    Весь экшн идёт в классе KFGui.KFAchievementsList
    Текст ачивки берётся из KFStatsAndAchievements.Achievements[Index].Description, а название из
    KFStatsAndAchievements.Achievements[Index].DisplayName
    Так, а значения этих переменных мы получаем из нативной функции Engine.SteamStatsAndAchievementsBase.GetAchievementDescription
    То есть либо из dll, либо "с сервера"/"из stats.bin"
    Так что да - перевести не получится скорее всего
     
  2. Nytte-maere

    Nytte-maere Guest

    Так, я может щас тупака дам, но ТВИ же не выпускают статс бин для пиратчиков с новыми ачивками? :biggrin:
    Следовательно, вряд ли второе. Из статы берется только сама стата и всё. А текст по логике в другом месте должен быть
     
  3. Flame

    Flame -Заслуженый кодер форума-

    я уже поправил свой пост
    я уже больше склонен думать, что из нового Engine.dll берётся базовая инфа
    а в Stats.bin сохраняется только результат кача

    хотя с другой стороны
    почему тогда у меня на пиратке вообще нет описаний достижений... (Engine.dll то точно в норме)
    и как-то неправильно, мне кажется, пихать в dll такую инфу и ещё на многих языках...
     
  4. Bezumie

    Bezumie Photoshop

    я отстал от жизни :D


    Малая часть того что я смог открыть в нормальном виде в dll что ты указал:

    [​IMG]
     
  5. Flame

    Flame -Заслуженый кодер форума-

    ну если описание там хранится, то точно не прямым текстом ))
     
  6. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Вообщето это просто имена функций. Ты там больше ничего не увидишь.
     
  7. Arionwt1997

    Arionwt1997 Соучастник

    Да, все находится в DLL, а его изменение грозит бананом от VAC, dll и стим сильно взаимосвязаны, а на пиратке стоит эмуль. Так что ачивки переводят только "любимые" 1С. Кстати, возможно будут задержки с обновлениями перевода, просто я взялся за фиксинг русификации Торчлайт 2, от все того же пресловутого 1С
     
  8. Dr_Killjoy

    Dr_Killjoy Заблокированные

    // Returns the displayable information set in the SteamWork's Database
    native final function GetAchievementDescription(string SteamName, out string DisplayName, out string Description);

    Судя по всему, тут уже не файлы локализации надо править, а сам эмулятор. Возможно конечно они уже сделали считывание ачивок из stats.bin, нужно на пиратке посмотреть как ачивы выглядят.
     
  9. Bezumie

    Bezumie Photoshop

    Ух.. много букв там
     
  10. Flame

    Flame -Заслуженый кодер форума-

    так
    поставил на старый клиент (1037 вроде) новый эмулятор и скопировал новый stats.bin
    количество достижений осталось прежним 185 (сейчас 200)

    впрочем я сейчас подумал...
    это ничего не значит ))
    в KFGui.KFAchievementsList отрисовывается этот список и вся информация о количестве берётся из класса ROEngine.KFSteamStatsAndAchievements (а случае 1037 патча количество равно 185)
    так что может быть они и есть эти ачивки, но в список заносятся только первые 185 )

    ладно
    потом ещё покопаюсь )

    впрочем в Stats.bin описание и название ачивок точно не хранится
    достаточно его удалить - при старте возникнет новый 0 размера
    значит видимо dll, и я не думаю, что это steamclient.dll
    поизучаю dllки под дизассемблером, заодно и
    GetAchievementDescription изучу
    (хотя по-моему мы давно не по теме уже )) )
     
  11. Bezumie

    Bezumie Photoshop

    Уже поинтереснее. Жаль текст скопировать не могу, не выходит что-то, сфоткал то что влезло )

    [​IMG]
     
  12. Flame

    Flame -Заслуженый кодер форума-

    ну ты скопировал кусок этого класса )
    там нет описаний и названий
    там есть список ачивок и их кодовых (внутренних) названий

    Achievements(0)=(SteamName="WinWestLondonNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_0',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(1)=(SteamName="WinManorNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_1',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(2)=(SteamName="WinFarmNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_2',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(3)=(SteamName="WinOfficesNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_3',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(4)=(SteamName="WinBioticsLabNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_4',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(5)=(SteamName="WinAllMapsNormal",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_5',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(6)=(SteamName="WinWestLondonHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_6',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(7)=(SteamName="WinManorHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_7',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(8)=(SteamName="WinFarmHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_8',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(9)=(SteamName="WinOfficesHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_9',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(10)=(SteamName="WinBioticsLabHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_10',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(11)=(SteamName="WinAllMapsHard",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_11',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(12)=(SteamName="WinWestLondonSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_12',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(13)=(SteamName="WinManorSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_13',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(14)=(SteamName="WinFarmSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_14',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(15)=(SteamName="WinOfficesSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_15',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(16)=(SteamName="WinBioticsLabSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_16',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(17)=(SteamName="WinAllMapsSuicidal",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_17',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(18)=(SteamName="KillXEnemies",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloorHUD.Achievements.Achievement_18',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(19)=(SteamName="KillXEnemies2",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloorHUD.Achievements.Achievement_19',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(20)=(SteamName="KillXEnemies3",bShowProgress=1,ProgressDenominator=10000,Icon=Texture'KillingFloorHUD.Achievements.Achievement_20',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(21)=(SteamName="KillXBloats",bShowProgress=1,ProgressDenominator=200,Icon=Texture'KillingFloorHUD.Achievements.Achievement_21',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(22)=(SteamName="KillXSirens",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloorHUD.Achievements.Achievement_22',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(23)=(SteamName="KillXStalkersWithExplosives",bShowProgress=1,ProgressDenominator=20,Icon=Texture'KillingFloorHUD.Achievements.Achievement_23',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(24)=(SteamName="KillXEnemiesWithFireAxe",Icon=Texture'KillingFloorHUD.Achievements.Achievement_24',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(25)=(SteamName="KillXScrakesWithChainsaw",Icon=Texture'KillingFloorHUD.Achievements.Achievement_25',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(26)=(SteamName="KillXBurningEnemiesWithCrossbow",bShowProgress=1,ProgressDenominator=25,Icon=Texture'KillingFloorHUD.Achievements.Achievement_26',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(27)=(SteamName="KillXEnemiesFeedingOnCorpses",bShowProgress=1,ProgressDenominator=10,Icon=Texture'KillingFloorHUD.Achievements.Achievement_27',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(28)=(SteamName="KillXEnemiesWithGrenade",Icon=Texture'KillingFloorHUD.Achievements.Achievement_28',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(29)=(SteamName="Kill4EnemiesWithHuntingShotgunShot",Icon=Texture'KillingFloorHUD.Achievements.Achievement_29',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(30)=(SteamName="KillEnemyUsingBloatAcid",Icon=Texture'KillingFloorHUD.Achievements.Achievement_30',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(31)=(SteamName="KillFleshpoundWithMelee",Icon=Texture'KillingFloorHUD.Achievements.Achievement_31',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(32)=(SteamName="MedicKillXEnemiesWithKnife",Icon=Texture'KillingFloorHUD.Achievements.Achievement_32',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(33)=(SteamName="TurnXEnemiesIntoGiblets",bShowProgress=1,ProgressDenominator=500,Icon=Texture'KillingFloorHUD.Achievements.Achievement_33',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(34)=(SteamName="TurnXFleshpoundsIntoGiblets",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_34',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(35)=(SteamName="HealSelfXTimes",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloorHUD.Achievements.Achievement_35',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(36)=(SteamName="OnlySurvivorXWaves",bShowProgress=1,ProgressDenominator=10,Icon=Texture'KillingFloorHUD.Achievements.Achievement_36',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(37)=(SteamName="DonateXCashToTeammates",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloorHUD.Achievements.Achievement_37',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(38)=(SteamName="AcquireXMinutesOfZedTime",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_38',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(39)=(SteamName="MaxOutAllPerks",bShowProgress=1,ProgressDenominator=7,Icon=Texture'KillingFloorHUD.Achievements.Achievement_39',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(40)=(SteamName="KillPatriarchBeforeHeHeals",Icon=Texture'KillingFloorHUD.Achievements.Achievement_40',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(41)=(SteamName="KillPatriarchWithLAW",Icon=Texture'KillingFloorHUD.Achievements.Achievement_41',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(42)=(SteamName="DefeatPatriarchOnSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_42',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(43)=(SteamName="WinFoundryNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_44',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(44)=(SteamName="WinFoundryHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_45',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(45)=(SteamName="WinFoundrySuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_46',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(46)=(SteamName="WinAsylumNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_47',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(47)=(SteamName="WinAsylumHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_48',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(48)=(SteamName="WinAsylumSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_49',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(49)=(SteamName="WinWyreNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_50',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(50)=(SteamName="WinWyreHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_51',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(51)=(SteamName="WinWyreSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_52',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(52)=(SteamName="WinAll3SummerMapsNormal",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_53',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(53)=(SteamName="WinAll3SummerMapsHard",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_54',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(54)=(SteamName="WinAll3SummerMapsSuicidal",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_55',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(55)=(SteamName="Kill1000EnemiesWithPipebomb",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_56',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(56)=(SteamName="KillHuskWithFlamethrower",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_57',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(57)=(SteamName="KillPatriarchOnlyCrossbows",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_58',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(58)=(SteamName="Gib500ZedsWithM79",bShowProgress=1,ProgressDenominator=500,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_59',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(59)=(SteamName="LaserSightedEBRHeadshots25InARow",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_60',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(60)=(SteamName="Kill1000ZedsWithSCAR",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_62',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(61)=(SteamName="Heal200TeammatesWithMP7",bShowProgress=1,ProgressDenominator=200,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_63',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(62)=(SteamName="Kill100FleshpoundsWithAA12",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_64',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(63)=(SteamName="Kill20CrawlersKilledInAir",bShowProgress=1,ProgressDenominator=20,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_65',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(64)=(SteamName="Obliterate10ZedsWithPipebomb",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_61',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(65)=(SteamName="WinWestLondonHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_65',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(66)=(SteamName="WinManorHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_66',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(67)=(SteamName="WinFarmHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_67',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(68)=(SteamName="WinOfficesHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_68',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(69)=(SteamName="WinBioticsLabHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_69',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(70)=(SteamName="WinFoundryHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_70',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(71)=(SteamName="WinAsylumHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_71',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(72)=(SteamName="WinWyreHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_72',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(73)=(SteamName="WinBiohazardNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_73',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(74)=(SteamName="WinBiohazardHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_74',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(75)=(SteamName="WinBiohazardSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_75',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(76)=(SteamName="WinBiohazardHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_76',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(77)=(SteamName="WinCrashNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_77',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(78)=(SteamName="WinCrashHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_78',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(79)=(SteamName="WinCrashSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_79',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(80)=(SteamName="WinCrashHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_80',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(81)=(SteamName="WinDepartedNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_81',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(82)=(SteamName="WinDepartedHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_82',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(83)=(SteamName="WinDepartedSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_83',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(84)=(SteamName="WinDepartedHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_84',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(85)=(SteamName="WinFilthsCrossNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_85',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(86)=(SteamName="WinFilthsCrossHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_86',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(87)=(SteamName="WinFilthsCrossSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_87',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(88)=(SteamName="WinFilthsCrossHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_88',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(89)=(SteamName="WinHospitalHorrorsNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_89',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(90)=(SteamName="WinHospitalHorrorsHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_90',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(91)=(SteamName="WinHospitalHorrorsSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_91',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(92)=(SteamName="WinHospitalHorrorsHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_92',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(93)=(SteamName="WinIcebreakerNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_93',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(94)=(SteamName="WinIcebreakerHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_94',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(95)=(SteamName="WinIcebreakerSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_95',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(96)=(SteamName="WinIcebreakerHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_96',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(97)=(SteamName="WinMountainPassNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_97',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(98)=(SteamName="WinMountainPassHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_98',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(99)=(SteamName="WinMountainPassSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_99',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(100)=(SteamName="WinMountainPassHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_100',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(101)=(SteamName="WinSuburbiaNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_101',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(102)=(SteamName="WinSuburbiaHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_102',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(103)=(SteamName="WinSuburbiaSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_103',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(104)=(SteamName="WinSuburbiaHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_104',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(105)=(SteamName="WinWaterworksNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_105',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(106)=(SteamName="WinWaterworksHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_106',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(107)=(SteamName="WinWaterworksSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_107',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(108)=(SteamName="WinWaterworksHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_108',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(109)=(SteamName="CompleteNewAchievementsNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_109',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(110)=(SteamName="CompleteNewAchievementsHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_110',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(111)=(SteamName="CompleteNewAchievementsSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_111',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(112)=(SteamName="CompleteNewAchievementsHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_112',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(113)=(SteamName="Get1000BurnDamageWithMac10",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_113',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(114)=(SteamName="WinSantasEvilLairNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_114',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(115)=(SteamName="WinSantasEvilLairHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_115',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(116)=(SteamName="WinSantasEvilLairSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_116',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(117)=(SteamName="WinSantasEvilLairHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_117',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(118)=(SteamName="KillChristmasPatriarch",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_118',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(119)=(SteamName="KnifeChristmasFleshpound",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_119',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(120)=(SteamName="MeleeKill2ChristmasGorefastFromBack",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_120',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(121)=(SteamName="KillChristmasScrakeWithFire",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_121',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(122)=(SteamName="Kill3ChristmasBloatsWithBullpup",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_122',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(123)=(SteamName="Kill20ChristmasClots",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_123',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(124)=(SteamName="KillChristmasCrawlerWithXBow",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_124',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(125)=(SteamName="KillChristmasSirenWithLawImpact",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_125',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(126)=(SteamName="Kill3ChristmasStalkersWithLAR",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_126',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(127)=(SteamName="KillChristmasHuskWithPistol",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_127',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(128)=(SteamName="MeleeKill3ChristmasZedsInOneSlomo",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_128',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(129)=(SteamName="Drop3Tier3WeaponsForOthersChristmas",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_129',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(130)=(SteamName="ChristmasVomitLive10Seconds",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_130',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(131)=(SteamName="Unlock10ofChristmasAchievements",bShowProgress=1,ProgressDenominator=11,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_131',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(132)=(SteamName="Achievement132",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_132',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(133)=(SteamName="Achievement133",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_133',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(134)=(SteamName="Achievement134",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_134',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(135)=(SteamName="Achievement135",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_135',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(136)=(SteamName="Achievement136",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_136',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(137)=(SteamName="Achievement137",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_137',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(138)=(SteamName="WinSideshowNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_138',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(139)=(SteamName="WinSideshowHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_139',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(140)=(SteamName="WinSideshowSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_140',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(141)=(SteamName="WinSideshowHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_141',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(142)=(SteamName="KillSideshowPatriarch",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_142',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(143)=(SteamName="KillSideshowGorefastWithMelee",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_143',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(144)=(SteamName="Kill2SideshowStalkerWithBackstab",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_144',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(145)=(SteamName="Kill5SideshowCrawlersWithBullpup",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_145',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(146)=(SteamName="Kill5SideshowBloats",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_146',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(147)=(SteamName="KillSideshowScrakeWithCrossbow",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_147',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(148)=(SteamName="KillSideshowHuskWithLAW",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_148',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(149)=(SteamName="Kill3SideshowClotsWithLAR",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_149',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(150)=(SteamName="KillSideshowFleshpoundWithPistol",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_150',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(151)=(SteamName="Drop5Tier2WeaponsOneWaveSideshow",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_151',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(152)=(SteamName="SurviveSideshowSirenScreamPlus10Sec",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_152',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(153)=(SteamName="MeleeKill4SideshowZedsInOneSlomo",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_153',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(154)=(SteamName="Kill10SideshowClotsWithFireWeapon",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_154',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(155)=(SteamName="Unlock10ofSideshowAchievements",bShowProgress=1,ProgressDenominator=11,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_155',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(156)=(SteamName="KillHalloweenPatriarchInBedlam",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_156',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(157)=(SteamName="DecapBurningHalloweenZedInBedlam",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_157',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(158)=(SteamName="Kill250HalloweenZedsInBedlam",bShowProgress=1,ProgressDenominator=250,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_158',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(159)=(SteamName="WinBedlamHardHalloween",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_159',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(160)=(SteamName="Kill25HalloweenScrakesInBedlam",bShowProgress=1,ProgressDenominator=25,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_160',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(161)=(SteamName="Kill5HalloweenZedsWithoutReload",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_161',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(162)=(SteamName="Unlock6ofHalloweenAchievements",bShowProgress=1,ProgressDenominator=6,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_162',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(163)=(SteamName="Kill15XMasHusksWithHuskCannon",bShowProgress=1,ProgressDenominator=15,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_163',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(164)=(SteamName="KillXMasPatriarchWithClaymoreDecap",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_164',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(165)=(SteamName="Kill1XMasZedWithFullM4Clip",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_165',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(166)=(SteamName="KillXMasScrakeWithDirectM203Nade",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_166',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(167)=(SteamName="Heal3000PointsWithMP5DuringXMas",bShowProgress=1,ProgressDenominator=3000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_167',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(168)=(SteamName="Kill12XMasZedsWith1BenelliClip",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_168',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(169)=(SteamName="KillXMasZedWithEveryRevolverShot",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_169',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(170)=(SteamName="HoldAll3DualiesDuringXMas",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_170',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(171)=(SteamName="WinIceCaveNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_171',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(172)=(SteamName="WinIceCaveHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_172',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(173)=(SteamName="WinIceCaveSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_173',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(174)=(SteamName="WinIceCaveHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_174',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(175)=(SteamName="KillSelectXMasZedsOnSingleMap",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_175',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(176)=(SteamName="Kill12ClotsWithOneMagWithMK23",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_176',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(177)=(SteamName="KillZedThatHurtPlayerWithM7A3",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_177',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(178)=(SteamName="KillOneOfEachZedsWithKSG",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_178',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(179)=(SteamName="KillZedWithSA80AndFNFal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_179',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(180)=(SteamName="Kill2ScrakesOneBulletWithBarret",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_180',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(181)=(SteamName="WinHellrideNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_181',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(182)=(SteamName="WinHellrideHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_182',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(183)=(SteamName="WinHellrideSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_183',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(184)=(SteamName="WinHellrideHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_184',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(185)=(SteamName="Kill6ZedWithoutReloadingMKB42",ProgressDenominator=6,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_185',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(186)=(SteamName="Kill4StalkersNailgun",ProgressDenominator=4,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_186',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(187)=(SteamName="HealAllPlayersWith1MedicNade",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_187',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(188)=(SteamName="Set200ZedOnFireInHillbilly",bShowProgress=1,ProgressDenominator=200,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_188',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(189)=(SteamName="WinHillbillyNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_189',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(190)=(SteamName="WinHillbillyHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_190',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(191)=(SteamName="WinHillbillySuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_191',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(192)=(SteamName="WinHillbillyHell",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_192',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(193)=(SteamName="Complete6ReaperAchievements",bShowProgress=1,ProgressDenominator=7,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_193',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(194)=(SteamName="Destroy25GnomesInHillbilly",ProgressDenominator=25,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_194',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(195)=(SteamName="Kill1000HillbillyZeds",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_195',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(196)=(SteamName="Kill15HillbillyCrawlersThomOrMKB",ProgressDenominator=15,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_196',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(197)=(SteamName="Kill1Hillbilly1HuskAndZedIn1Shot",ProgressDenominator=2,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_197',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(198)=(SteamName="Kill5HillbillyZedsIn10SecsSythOrAxe",ProgressDenominator=5,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_198',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements(199)=(SteamName="Set3HillbillyGorefastsOnFire",ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_199',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    SteamNameStat(0)="DamageHealed"
    SteamNameStat(1)="WeldingPoints"
    SteamNameStat(2)="ShotgunDamage"
    SteamNameStat(3)="HeadshotKills"
    SteamNameStat(4)="StalkerKills"
    SteamNameStat(5)="BullpupDamage"
    SteamNameStat(6)="MeleeDamage"
    SteamNameStat(7)="FlameThrowerDamage"
    SteamNameStat(8)="SelfHeals"
    SteamNameStat(9)="SoleSurvivorWaves"
    SteamNameStat(10)="CashDonated"
    SteamNameStat(11)="FeedingKills"
    SteamNameStat(12)="BurningCrossbowKills"
    SteamNameStat(13)="GibbedFleshpounds"
    SteamNameStat(14)="StalkersKilledWithExplosives"
    SteamNameStat(15)="GibbedEnemies"
    SteamNameStat(16)="SirensKilledWithExplosives"
    SteamNameStat(17)="BloatKills"
    SteamNameStat(18)="TotalZedTime"
    SteamNameStat(19)="SirenKills"
    SteamNameStat(20)="Kills"
    SteamNameStat(21)="ExplosivesDamage"
    SteamNameStat(22)="DemolitionsPipebombKills"
    SteamNameStat(23)="EnemiesGibbedWithM79"
    SteamNameStat(24)="EnemiesKilledWithSCAR"
    SteamNameStat(25)="TeammatesHealedWithMP7"
    SteamNameStat(26)="FleshpoundsKilledWithAA12"
    SteamNameStat(27)="CrawlersKilledInMidair"
    SteamNameStat(28)="Mac10BurnDamage"
    SteamNameStat(29)="DroppedTier3Weapons"
    SteamNameStat(30)="HalloweenKills"
    SteamNameStat(31)="HalloweenScrakeKills"
    SteamNameStat(32)="XMasHusksKilledWithHuskCannon"
    SteamNameStat(33)="XMasPointsHealedWithMP5"
    SteamNameStat(41)="EnemiesKilledWithFNFal"
    SteamNameStat(42)="EnemiesKilledWithBullpup"
    SteamNameStat(43)="ZedSetFireWithTrenchOnHillbilly"
    SteamNameStat(44)="ZedKilledDuringHillbilly"
    SteamNameStat(45)="HillbillyAchievementsCompleted"
    SteamNameAchievement(0)="WinWestLondonNormal"
    SteamNameAchievement(1)="WinManorNormal"
    SteamNameAchievement(2)="WinFarmNormal"
    SteamNameAchievement(3)="WinOfficesNormal"
    SteamNameAchievement(4)="WinBioticsLabNormal"
    SteamNameAchievement(5)="WinAllMapsNormal"
    SteamNameAchievement(6)="WinWestLondonHard"
    SteamNameAchievement(7)="WinManorHard"
    SteamNameAchievement(8)="WinFarmHard"
    SteamNameAchievement(9)="WinOfficesHard"
    SteamNameAchievement(10)="WinBioticsLabHard"
    SteamNameAchievement(11)="WinAllMapsHard"
    SteamNameAchievement(12)="WinWestLondonSuicidal"
    SteamNameAchievement(13)="WinManorSuicidal"
    SteamNameAchievement(14)="WinFarmSuicidal"
    SteamNameAchievement(15)="WinOfficesSuicidal"
    SteamNameAchievement(16)="WinBioticsLabSuicidal"
    SteamNameAchievement(17)="WinAllMapsSuicidal"
    SteamNameAchievement(18)="KillXEnemies"
    SteamNameAchievement(19)="KillXEnemies2"
    SteamNameAchievement(20)="KillXEnemies3"
    SteamNameAchievement(21)="KillXBloats"
    SteamNameAchievement(22)="KillXSirens"
    SteamNameAchievement(23)="KillXStalkersWithExplosives"
    SteamNameAchievement(24)="KillXEnemiesWithFireAxe"
    SteamNameAchievement(25)="KillXScrakesWithChainsaw"
    SteamNameAchievement(26)="KillXBurningEnemiesWithCrossbow"
    SteamNameAchievement(27)="KillXEnemiesFeedingOnCorpses"
    SteamNameAchievement(28)="KillXEnemiesWithGrenade"
    SteamNameAchievement(29)="Kill4EnemiesWithHuntingShotgunShot"
    SteamNameAchievement(30)="KillEnemyUsingBloatAcid"
    SteamNameAchievement(31)="KillFleshpoundWithMelee"
    SteamNameAchievement(32)="MedicKillXEnemiesWithKnife"
    SteamNameAchievement(33)="TurnXEnemiesIntoGiblets"
    SteamNameAchievement(34)="TurnXFleshpoundsIntoGiblets"
    SteamNameAchievement(35)="HealSelfXTimes"
    SteamNameAchievement(36)="OnlySurvivorXWaves"
    SteamNameAchievement(37)="DonateXCashToTeammates"
    SteamNameAchievement(38)="AcquireXMinutesOfZedTime"
    SteamNameAchievement(39)="MaxOutAllPerks"
    SteamNameAchievement(40)="KillPatriarchBeforeHeHeals"
    SteamNameAchievement(41)="KillPatriarchWithLAW"
    SteamNameAchievement(42)="DefeatPatriarchOnSuicidal"
    SteamNameAchievement(43)="WinFoundryNormal"
    SteamNameAchievement(44)="WinFoundryHard"
    SteamNameAchievement(45)="WinFoundrySuicidal"
    SteamNameAchievement(46)="WinAsylumNormal"
    SteamNameAchievement(47)="WinAsylumHard"
    SteamNameAchievement(48)="WinAsylumSuicidal"
    SteamNameAchievement(49)="WinWyreNormal"
    SteamNameAchievement(50)="WinWyreHard"
    SteamNameAchievement(51)="WinWyreSuicidal"
    SteamNameAchievement(52)="WinAll3SummerMapsNormal"
    SteamNameAchievement(53)="WinAll3SummerMapsHard"
    SteamNameAchievement(54)="WinAll3SummerMapsSuicidal"
    SteamNameAchievement(55)="Kill1000EnemiesWithPipebomb"
    SteamNameAchievement(56)="KillHuskWithFlamethrower"
    SteamNameAchievement(57)="KillPatriarchOnlyCrossbows"
    SteamNameAchievement(58)="Gib500ZedsWithM79"
    SteamNameAchievement(59)="LaserSightedEBRHeadshots25InARow"
    SteamNameAchievement(60)="Kill1000ZedsWithSCAR"
    SteamNameAchievement(61)="Heal200TeammatesWithMP7"
    SteamNameAchievement(62)="Kill100FleshpoundsWithAA12"
    SteamNameAchievement(63)="Kill20CrawlersKilledInAir"
    SteamNameAchievement(64)="Obliterate10ZedsWithPipebomb"
    SteamNameAchievement(65)="WinWestLondonHell"
    SteamNameAchievement(66)="WinManorHell"
    SteamNameAchievement(67)="WinFarmHell"
    SteamNameAchievement(68)="WinOfficesHell"
    SteamNameAchievement(69)="WinBioticsLabHell"
    SteamNameAchievement(70)="WinFoundryHell"
    SteamNameAchievement(71)="WinAsylumHell"
    SteamNameAchievement(72)="WinWyreHell"
    SteamNameAchievement(73)="WinBiohazardNormal"
    SteamNameAchievement(74)="WinBiohazardHard"
    SteamNameAchievement(75)="WinBiohazardSuicidal"
    SteamNameAchievement(76)="WinBiohazardHell"
    SteamNameAchievement(77)="WinCrashNormal"
    SteamNameAchievement(78)="WinCrashHard"
    SteamNameAchievement(79)="WinCrashSuicidal"
    SteamNameAchievement(80)="WinCrashHell"
    SteamNameAchievement(81)="WinDepartedNormal"
    SteamNameAchievement(82)="WinDepartedHard"
    SteamNameAchievement(83)="WinDepartedSuicidal"
    SteamNameAchievement(84)="WinDepartedHell"
    SteamNameAchievement(85)="WinFilthsCrossNormal"
    SteamNameAchievement(86)="WinFilthsCrossHard"
    SteamNameAchievement(87)="WinFilthsCrossSuicidal"
    SteamNameAchievement(88)="WinFilthsCrossHell"
    SteamNameAchievement(89)="WinHospitalHorrorsNormal"
    SteamNameAchievement(90)="WinHospitalHorrorsHard"
    SteamNameAchievement(91)="WinHospitalHorrorsSuicidal"
    SteamNameAchievement(92)="WinHospitalHorrorsHell"
    SteamNameAchievement(93)="WinIcebreakerNormal"
    SteamNameAchievement(94)="WinIcebreakerHard"
    SteamNameAchievement(95)="WinIcebreakerSuicidal"
    SteamNameAchievement(96)="WinIcebreakerHell"
    SteamNameAchievement(97)="WinMountainPassNormal"
    SteamNameAchievement(98)="WinMountainPassHard"
    SteamNameAchievement(99)="WinMountainPassSuicidal"
    SteamNameAchievement(100)="WinMountainPassHell"
    SteamNameAchievement(101)="WinSuburbiaNormal"
    SteamNameAchievement(102)="WinSuburbiaHard"
    SteamNameAchievement(103)="WinSuburbiaSuicidal"
    SteamNameAchievement(104)="WinSuburbiaHell"
    SteamNameAchievement(105)="WinWaterworksNormal"
    SteamNameAchievement(106)="WinWaterworksHard"
    SteamNameAchievement(107)="WinWaterworksSuicidal"
    SteamNameAchievement(108)="WinWaterworksHell"
    SteamNameAchievement(109)="CompleteNewAchievementsNormal"
    SteamNameAchievement(110)="CompleteNewAchievementsHard"
    SteamNameAchievement(111)="CompleteNewAchievementsSuicidal"
    SteamNameAchievement(112)="CompleteNewAchievementsHell"
    SteamNameAchievement(113)="Get1000BurnDamageWithMac10"
    SteamNameAchievement(114)="WinSantasEvilLairNormal"
    SteamNameAchievement(115)="WinSantasEvilLairHard"
    SteamNameAchievement(116)="WinSantasEvilLairSuicidal"
    SteamNameAchievement(117)="WinSantasEvilLairHell"
    SteamNameAchievement(118)="KillChristmasPatriarch"
    SteamNameAchievement(119)="KnifeChristmasFleshpound"
    SteamNameAchievement(120)="MeleeKill2ChristmasGorefastFromBack"
    SteamNameAchievement(121)="KillChristmasScrakeWithFire"
    SteamNameAchievement(122)="Kill3ChristmasBloatsWithBullpup"
    SteamNameAchievement(123)="Kill20ChristmasClots"
    SteamNameAchievement(124)="KillChristmasCrawlerWithXBow"
    SteamNameAchievement(125)="KillChristmasSirenWithLawImpact"
    SteamNameAchievement(126)="Kill3ChristmasStalkersWithLAR"
    SteamNameAchievement(127)="KillChristmasHuskWithPistol"
    SteamNameAchievement(128)="MeleeKill3ChristmasZedsInOneSlomo"
    SteamNameAchievement(129)="Drop3Tier3WeaponsForOthersChristmas"
    SteamNameAchievement(130)="ChristmasVomitLive10Seconds"
    SteamNameAchievement(131)="Unlock10ofChristmasAchievements"
    SteamNameAchievement(132)="Achievement132"
    SteamNameAchievement(133)="Achievement133"
    SteamNameAchievement(134)="Achievement134"
    SteamNameAchievement(135)="Achievement135"
    SteamNameAchievement(136)="Achievement136"
    SteamNameAchievement(137)="Achievement137"
    SteamNameAchievement(138)="WinSideshowNormal"
    SteamNameAchievement(139)="WinSideshowHard"
    SteamNameAchievement(140)="WinSideshowSuicidal"
    SteamNameAchievement(141)="WinSideshowHell"
    SteamNameAchievement(142)="KillSideshowPatriarch"
    SteamNameAchievement(143)="KillSideshowGorefastWithMelee"
    SteamNameAchievement(144)="Kill2SideshowStalkerWithBackstab"
    SteamNameAchievement(145)="Kill5SideshowCrawlersWithBullpup"
    SteamNameAchievement(146)="Kill5SideshowBloats"
    SteamNameAchievement(147)="KillSideshowScrakeWithCrossbow"
    SteamNameAchievement(148)="KillSideshowHuskWithLAW"
    SteamNameAchievement(149)="Kill3SideshowClotsWithLAR"
    SteamNameAchievement(150)="KillSideshowFleshpoundWithPistol"
    SteamNameAchievement(151)="Drop5Tier2WeaponsOneWaveSideshow"
    SteamNameAchievement(152)="SurviveSideshowSirenScreamPlus10Sec"
    SteamNameAchievement(153)="MeleeKill4SideshowZedsInOneSlomo"
    SteamNameAchievement(154)="Kill10SideshowClotsWithFireWeapon"
    SteamNameAchievement(155)="Unlock10ofSideshowAchievements"
    SteamNameAchievement(156)="KillHalloweenPatriarchInBedlam"
    SteamNameAchievement(157)="DecapBurningHalloweenZedInBedlam"
    SteamNameAchievement(158)="Kill250HalloweenZedsInBedlam"
    SteamNameAchievement(159)="WinBedlamHardHalloween"
    SteamNameAchievement(160)="Kill25HalloweenScrakesInBedlam"
    SteamNameAchievement(161)="Kill5HalloweenZedsWithoutReload"
    SteamNameAchievement(162)="Unlock6ofHalloweenAchievements"
    SteamNameAchievement(163)="Kill15XMasHusksWithHuskCannon"
    SteamNameAchievement(164)="KillXMasPatriarchWithClaymoreDecap"
    SteamNameAchievement(165)="Kill1XMasZedWithFullM4Clip"
    SteamNameAchievement(166)="KillXMasScrakeWithDirectM203Nade"
    SteamNameAchievement(167)="Heal3000PointsWithMP5DuringXMas"
    SteamNameAchievement(168)="Kill12XMasZedsWith1BenelliClip"
    SteamNameAchievement(169)="KillXMasZedWithEveryRevolverShot"
    SteamNameAchievement(170)="HoldAll3DualiesDuringXMas"
    SteamNameAchievement(171)="WinIceCaveNormal"
    SteamNameAchievement(172)="WinIceCaveHard"
    SteamNameAchievement(173)="WinIceCaveSuicidal"
    SteamNameAchievement(174)="WinIceCaveHell"
    SteamNameAchievement(175)="KillSelectXMasZedsOnSingleMap"
    SteamNameAchievement(176)="Kill12ClotsWithOneMagWithMK23"
    SteamNameAchievement(177)="KillZedThatHurtPlayerWithM7A3"
    SteamNameAchievement(178)="KillOneOfEachZedsWithKSG"
    SteamNameAchievement(179)="KillZedWithSA80AndFNFal"
    SteamNameAchievement(180)="Kill2ScrakesOneBulletWithBarret "
    SteamNameAchievement(181)="WinHellrideNormal"
    SteamNameAchievement(182)="WinHellrideHard"
    SteamNameAchievement(183)="WinHellrideSuicidal"
    SteamNameAchievement(184)="WinHellrideHell"
    SteamNameAchievement(185)="Kill6ZedWithoutReloadingMKB42"
    SteamNameAchievement(186)="Kill4StalkersNailgun"
    SteamNameAchievement(187)="HealAllPlayersWith1MedicNade"
    SteamNameAchievement(188)="Set200ZedOnFireInHillbilly"
    SteamNameAchievement(189)="WinHillbillyNormal"
    SteamNameAchievement(190)="WinHillbillyHard"
    SteamNameAchievement(191)="WinHillbillySuicidal"
    SteamNameAchievement(192)="WinHillbillyHell"
    SteamNameAchievement(193)="Complete6ReaperAchievements"
    SteamNameAchievement(194)="Destroy25GnomesInHillbilly"
    SteamNameAchievement(195)="Kill1000HillbillyZeds"
    SteamNameAchievement(196)="Kill15HillbillyCrawlersThomOrMKB"
    SteamNameAchievement(197)="Kill1Hillbilly1HuskAndZedIn1Shot"
    SteamNameAchievement(198)="Kill5HillbillyZedsIn10SecsSythOrAxe"
    SteamNameAchievement(199)="Set3HillbillyGorefastsOnFire"
     
  13. Bezumie

    Bezumie Photoshop

    Скопировал всё :blink:

    class KFSteamStatsAndAchievements extends SteamStatsAndAchievementsBase
    native;

    //=============================================================================
    // Stats
    //=============================================================================
    const KFSTAT_DamageHealed = 0;
    const KFSTAT_WeldingPoints = 1;
    const KFSTAT_ShotgunDamage = 2;
    const KFSTAT_HeadshotKills = 3;
    const KFSTAT_StalkerKills = 4;
    const KFSTAT_BullpupDamage = 5;
    const KFSTAT_MeleeDamage = 6;
    const KFSTAT_FlameThrowerDamage = 7;
    const KFSTAT_SelfHeals = 8;
    const KFSTAT_SoleSurvivorWaves = 9;
    const KFSTAT_CashDonated = 10;
    const KFSTAT_FeedingKills = 11;
    const KFSTAT_BurningCrossbowKills = 12;
    const KFSTAT_GibbedFleshpounds = 13;
    const KFSTAT_StalkersKilledWithExplosives = 14;
    const KFSTAT_GibbedEnemies = 15;
    const KFSTAT_SirensKilledWithExplosives = 16;
    const KFSTAT_BloatKills = 17;
    const KFSTAT_TotalZedTime = 18;
    const KFSTAT_SirenKills = 19;
    const KFSTAT_Kills = 20;
    const KFSTAT_ExplosivesDamage = 21;
    const KFSTAT_DemolitionsPipebombKills = 22;
    const KFSTAT_EnemiesGibbedWithM79 = 23;
    const KFSTAT_EnemiesKilledWithSCAR = 24;
    const KFSTAT_TeammatesHealedWithMP7 = 25;
    const KFSTAT_FleshpoundsKilledWithAA12 = 26;
    const KFSTAT_CrawlersKilledInMidair = 27;

    // Perk Stats
    var const SteamStatInt DamageHealedStat;
    var int SavedDamageHealedStat;
    var const SteamStatInt WeldingPointsStat;
    var int SavedWeldingPointsStat;
    var const SteamStatInt ShotgunDamageStat;
    var int SavedShotgunDamageStat;
    var const SteamStatInt HeadshotKillsStat;
    var int SavedHeadshotKillsStat;
    var const SteamStatInt StalkerKillsStat;
    var int SavedStalkerKillsStat;
    var const SteamStatInt BullpupDamageStat;
    var int SavedBullpupDamageStat;
    var const SteamStatInt MeleeDamageStat;
    var int SavedMeleeDamageStat;
    var const SteamStatInt FlameThrowerDamageStat;
    var int SavedFlameThrowerDamageStat;
    var const SteamStatInt ExplosivesDamageStat;
    var int SavedExplosivesDamageStat;

    // Single Wave Stats
    var const SteamStatInt FireAxeKills;
    var const SteamStatInt ChainsawKills;
    var const SteamStatInt MedicKnifeKills;

    // One Off Counting Stats
    var const SteamStatInt HuntingShotgunKills;
    var const SteamStatInt LaserSightedEBRHeadshots;

    // Misc Stats
    var const SteamStatInt SelfHealsStat;
    var int SavedSelfHealsStat;
    var const SteamStatInt SoleSurvivorWavesStat;
    var int SavedSoleSurvivorWavesStat;
    var const SteamStatInt CashDonatedStat;
    var int SavedCashDonatedStat;
    var const SteamStatInt FeedingKillsStat;
    var int SavedFeedingKillsStat;
    var const SteamStatInt BurningCrossbowKillsStat;
    var int SavedBurningCrossbowKillsStat;
    var const SteamStatInt GibbedFleshpoundsStat;
    var int SavedGibbedFleshpoundsStat;
    var const SteamStatInt StalkersKilledWithExplosivesStat;
    var int SavedStalkersKilledWithExplosivesStat;
    var const SteamStatInt GibbedEnemiesStat;
    var int SavedGibbedEnemiesStat;
    var const SteamStatInt SirensKilledWithExplosivesStat;
    var int SavedSirensKilledWithExplosivesStat;
    var const SteamStatInt BloatKillsStat;
    var int SavedBloatKillsStat;
    var const SteamStatFloat TotalZedTimeStat;
    var float SavedTotalZedTimeStat;
    var const SteamStatInt SirenKillsStat;
    var int SavedSirenKillsStat;
    var const SteamStatInt KillsStat;
    var int SavedKillsStat;
    var const SteamStatInt DemolitionsPipebombKillsStat;
    var int SavedDemolitionsPipebombKillsStat;
    var const SteamStatInt EnemiesGibbedWithM79;
    var int SavedEnemiesGibbedWithM79;
    var const SteamStatInt EnemiesKilledWithSCAR;
    var int SavedEnemiesKilledWithSCAR;
    var const SteamStatInt TeammatesHealedWithMP7;
    var int SavedTeammatesHealedWithMP7;
    var const SteamStatInt FleshpoundsKilledWithAA12;
    var int SavedFleshpoundsKilledWithAA12;
    var const SteamStatInt CrawlersKilledInMidair;
    var int SavedCrawlersKilledInMidair;

    //=============================================================================
    // Achievements
    //=============================================================================
    const KFACHIEVEMENT_WinWestLondonNormal = 0;
    const KFACHIEVEMENT_WinManorNormal = 1;
    const KFACHIEVEMENT_WinFarmNormal = 2;
    const KFACHIEVEMENT_WinOfficesNormal = 3;
    const KFACHIEVEMENT_WinBioticsLabNormal = 4;
    const KFACHIEVEMENT_WinAllMapsNormal = 5;
    const KFACHIEVEMENT_WinWestLondonHard = 6;
    const KFACHIEVEMENT_WinManorHard = 7;
    const KFACHIEVEMENT_WinFarmHard = 8;
    const KFACHIEVEMENT_WinOfficesHard = 9;
    const KFACHIEVEMENT_WinBioticsLabHard = 10;
    const KFACHIEVEMENT_WinAllMapsHard = 11;
    const KFACHIEVEMENT_WinWestLondonSuicidal = 12;
    const KFACHIEVEMENT_WinManorSuicidal = 13;
    const KFACHIEVEMENT_WinFarmSuicidal = 14;
    const KFACHIEVEMENT_WinOfficesSuicidal = 15;
    const KFACHIEVEMENT_WinBioticsLabSuicidal = 16;
    const KFACHIEVEMENT_WinAllMapsSuicidal = 17;
    const KFACHIEVEMENT_KillXEnemies = 18;
    const KFACHIEVEMENT_KillXEnemies2 = 19;
    const KFACHIEVEMENT_KillXEnemies3 = 20;
    const KFACHIEVEMENT_KillXBloats = 21;
    const KFACHIEVEMENT_KillXSirens = 22;
    const KFACHIEVEMENT_KillXStalkersWithExplosives = 23;
    const KFACHIEVEMENT_KillXEnemiesWithFireAxe = 24; // Single Wave
    const KFACHIEVEMENT_KillXScrakesWithChainsaw = 25; // Single Wave
    const KFACHIEVEMENT_KillXBurningEnemiesWithCrossbow = 26;
    const KFACHIEVEMENT_KillXEnemiesFeedingOnCorpses = 27;
    const KFACHIEVEMENT_KillXEnemiesWithGrenade = 28;
    const KFACHIEVEMENT_Kill4EnemiesWithHuntingShotgunShot = 29;
    const KFACHIEVEMENT_KillEnemyUsingBloatAcid = 30;
    const KFACHIEVEMENT_KillFleshpoundWithMelee = 31;
    const KFACHIEVEMENT_MedicKillXEnemiesWithKnife = 32; // Single Wave
    const KFACHIEVEMENT_TurnXEnemiesIntoGiblets = 33;
    const KFACHIEVEMENT_TurnXFleshpoundsIntoGiblets = 34;
    const KFACHIEVEMENT_HealSelfXTimes = 35;
    const KFACHIEVEMENT_OnlySurvivorXWaves = 36;
    const KFACHIEVEMENT_DonateXCashToTeammates = 37;
    const KFACHIEVEMENT_AcquireXMinutesOfZedTime = 38;
    const KFACHIEVEMENT_MaxOutAllPerks = 39;
    const KFACHIEVEMENT_KillPatriarchBeforeHeHeals = 40;
    const KFACHIEVEMENT_KillPatriarchWithLAW = 41;
    const KFACHIEVEMENT_DefeatPatriarchOnSuicidal = 42;
    const KFACHIEVEMENT_WinFoundryNormal = 43;
    const KFACHIEVEMENT_WinFoundryHard = 44;
    const KFACHIEVEMENT_WinFoundrySuicidal = 45;
    const KFACHIEVEMENT_WinAsylumNormal = 46;
    const KFACHIEVEMENT_WinAsylumHard = 47;
    const KFACHIEVEMENT_WinAsylumSuicidal = 48;
    const KFACHIEVEMENT_WinWyreNormal = 49;
    const KFACHIEVEMENT_WinWyreHard = 50;
    const KFACHIEVEMENT_WinWyreSuicidal = 51;
    const KFACHIEVEMENT_WinAll3SummerMapsNormal = 52;
    const KFACHIEVEMENT_WinAll3SummerMapsHard = 53;
    const KFACHIEVEMENT_WinAll3SummerMapsSuicidal = 54;
    const KFACHIEVEMENT_Kill1000EnemiesWithPipebomb = 55;
    const KFACHIEVEMENT_KillHuskWithFlamethrower = 56;
    const KFACHIEVEMENT_KillPatriarchOnlyCrossbows = 57;
    const KFACHIEVEMENT_Gib500ZedsWithM79 = 58;
    const KFACHIEVEMENT_LaserSightedEBRHeadshots25InARow = 59;
    const KFACHIEVEMENT_Kill1000ZedsWithSCAR = 60;
    const KFACHIEVEMENT_Heal200TeammatesWithMP7 = 61;
    const KFACHIEVEMENT_Kill100FleshpoundsWithAA12 = 62;
    const KFACHIEVEMENT_Kill20CrawlersKilledInAir = 63;
    const KFACHIEVEMENT_Obliterate10ZedsWithPipebomb = 64;

    struct native export KFAchievement
    {
    var string SteamName;
    var string DisplayName;
    var string Description;
    var byte bCompleted;

    var byte bShowProgress;
    var int ProgressNumerator;
    var int ProgressDenominator;

    var texture Icon;
    var texture LockedIcon;
    };

    var array<KFAchievement> Achievements;

    //=============================================================================
    // Perks
    //=============================================================================
    // Levels Available for Perks: (0=Medic, 1=Support, 2=Sharpshooter, 3=Commando, 4=Berserker, 5=Firebug, 6=Demolitions)
    var const native byte PerkLevel[7];

    // Debug only variables
    var globalconfig bool bOverridePerkLevels;
    var globalconfig int MedicPerkLevel;
    var globalconfig int SupportPerkLevel;
    var globalconfig int SharpshooterPerkLevel;
    var globalconfig int CommandoPerkLevel;
    var globalconfig int BerserkerPerkLevel;
    var globalconfig int FirebugPerkLevel;
    var globalconfig int DemolitionsPerkLevel;

    simulated native final function InitializePerks();
    simulated native final function CheckMedicPerks(bool bShowNotification);
    simulated native final function CheckSupportPerks(bool bShowNotification);
    simulated native final function CheckSharpshooterPerks(bool bShowNotification);
    simulated native final function CheckCommandoPerks(bool bShowNotification);
    simulated native final function CheckBerserkerPerks(bool bShowNotification);
    simulated native final function CheckFirebugPerks(bool bShowNotification);
    simulated native final function CheckDemolitionsPerks(bool bShowNotification);

    simulated native final function int PerkHighestLevelAvailable(int Type);

    simulated native final function float GetPerkProgress(int Type);
    simulated native final function GetMedicProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);
    simulated native final function GetSupportProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);
    simulated native final function GetSharpshooterProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);
    simulated native final function GetCommandoProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);
    simulated native final function GetBerserkerProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);
    simulated native final function GetFirebugProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);
    simulated native final function GetDemolitionsProgressDetails(int Index, out int CurrentValue, out int RequiredValue, out float Progress);

    replication
    {
    reliable if ( bFlushStatsToClient && Role == ROLE_Authority )
    DamageHealedStat, WeldingPointsStat, ShotgunDamageStat, HeadshotKillsStat,
    StalkerKillsStat, BullpupDamageStat, MeleeDamageStat, FlameThrowerDamageStat,
    SelfHealsStat, SoleSurvivorWavesStat, CashDonatedStat, FeedingKillsStat,
    BurningCrossbowKillsStat, GibbedFleshpoundsStat, StalkersKilledWithExplosivesStat,
    GibbedEnemiesStat, BloatKillsStat, TotalZedTimeStat, SirenKillsStat, KillsStat,
    ExplosivesDamageStat, DemolitionsPipebombKillsStat, EnemiesKilledWithSCAR,
    TeammatesHealedWithMP7, FleshpoundsKilledWithAA12, CrawlersKilledInMidair;
    }

    cpptext
    {
    void OnPerkAvailable(UBOOL bShowNotification, INT Type, INT Level);
    }

    final event bool IsDebugMode()
    {
    return class'ROEngine.ROLevelInfo'.static.RODebugMode();
    }

    // Used to only send the Stats/Achievements that have changed to Steam
    simulated event PostNetReceive()
    {
    local bool bFlushStatsToDatabase;

    if ( bDebugStats )
    log("STEAMSTATS: PostNetReceive called");

    if ( DamageHealedStat.Value != SavedDamageHealedStat )
    {
    CheckMedicPerks(true);

    FlushStatToSteamInt(DamageHealedStat, SteamNameStat[KFSTAT_DamageHealed]);

    SavedDamageHealedStat = DamageHealedStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( WeldingPointsStat.Value != SavedWeldingPointsStat )
    {
    CheckSupportPerks(true);

    FlushStatToSteamInt(WeldingPointsStat, SteamNameStat[KFSTAT_WeldingPoints]);

    SavedWeldingPointsStat = WeldingPointsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( ShotgunDamageStat.Value != SavedShotgunDamageStat )
    {
    CheckSupportPerks(true);

    FlushStatToSteamInt(ShotgunDamageStat, SteamNameStat[KFSTAT_ShotgunDamage]);

    SavedShotgunDamageStat = ShotgunDamageStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( HeadshotKillsStat.Value != SavedHeadshotKillsStat )
    {
    CheckSharpshooterPerks(true);

    FlushStatToSteamInt(HeadshotKillsStat, SteamNameStat[KFSTAT_HeadshotKills]);

    SavedHeadshotKillsStat = HeadshotKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( StalkerKillsStat.Value != SavedStalkerKillsStat )
    {
    CheckCommandoPerks(true);

    FlushStatToSteamInt(StalkerKillsStat, SteamNameStat[KFSTAT_StalkerKills]);

    SavedStalkerKillsStat = StalkerKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( BullpupDamageStat.Value != SavedBullpupDamageStat )
    {
    CheckCommandoPerks(true);

    FlushStatToSteamInt(BullpupDamageStat, SteamNameStat[KFSTAT_BullpupDamage]);

    SavedBullpupDamageStat = BullpupDamageStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( MeleeDamageStat.Value != SavedMeleeDamageStat )
    {
    CheckBerserkerPerks(true);

    FlushStatToSteamInt(MeleeDamageStat, SteamNameStat[KFSTAT_MeleeDamage]);

    SavedMeleeDamageStat = MeleeDamageStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( FlameThrowerDamageStat.Value != SavedFlameThrowerDamageStat )
    {
    CheckFirebugPerks(true);

    FlushStatToSteamInt(FlameThrowerDamageStat, SteamNameStat[KFSTAT_FlameThrowerDamage]);

    SavedFlameThrowerDamageStat = FlameThrowerDamageStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( ExplosivesDamageStat.Value != SavedExplosivesDamageStat )
    {
    CheckDemolitionsPerks(true);

    FlushStatToSteamInt(ExplosivesDamageStat, SteamNameStat[KFSTAT_ExplosivesDamage]);

    SavedExplosivesDamageStat = ExplosivesDamageStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( SelfHealsStat.Value != SavedSelfHealsStat )
    {
    FlushStatToSteamInt(SelfHealsStat, SteamNameStat[KFSTAT_SelfHeals]);

    SavedSelfHealsStat = SelfHealsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( SoleSurvivorWavesStat.Value != SavedSoleSurvivorWavesStat )
    {
    FlushStatToSteamInt(SoleSurvivorWavesStat, SteamNameStat[KFSTAT_SoleSurvivorWaves]);

    SavedSoleSurvivorWavesStat = SoleSurvivorWavesStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( CashDonatedStat.Value != SavedCashDonatedStat )
    {
    FlushStatToSteamInt(CashDonatedStat, SteamNameStat[KFSTAT_CashDonated]);

    SavedCashDonatedStat = CashDonatedStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( FeedingKillsStat.Value != SavedFeedingKillsStat )
    {
    FlushStatToSteamInt(FeedingKillsStat, SteamNameStat[KFSTAT_FeedingKills]);

    SavedFeedingKillsStat = FeedingKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( BurningCrossbowKillsStat.Value != SavedBurningCrossbowKillsStat )
    {
    FlushStatToSteamInt(BurningCrossbowKillsStat, SteamNameStat[KFSTAT_BurningCrossbowKills]);

    SavedBurningCrossbowKillsStat = BurningCrossbowKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( GibbedFleshpoundsStat.Value != SavedGibbedFleshpoundsStat )
    {
    FlushStatToSteamInt(GibbedFleshpoundsStat, SteamNameStat[KFSTAT_GibbedFleshpounds]);

    SavedGibbedFleshpoundsStat = GibbedFleshpoundsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( StalkersKilledWithExplosivesStat.Value != SavedStalkersKilledWithExplosivesStat )
    {
    FlushStatToSteamInt(StalkersKilledWithExplosivesStat, SteamNameStat[KFSTAT_StalkersKilledWithExplosives]);

    SavedStalkersKilledWithExplosivesStat = StalkersKilledWithExplosivesStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( GibbedEnemiesStat.Value != SavedGibbedEnemiesStat )
    {
    FlushStatToSteamInt(GibbedEnemiesStat, SteamNameStat[KFSTAT_GibbedEnemies]);

    SavedGibbedEnemiesStat = GibbedEnemiesStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( SirensKilledWithExplosivesStat.Value != SavedSirensKilledWithExplosivesStat )
    {
    FlushStatToSteamInt(SirensKilledWithExplosivesStat, SteamNameStat[KFSTAT_SirensKilledWithExplosives]);

    SavedSirensKilledWithExplosivesStat = SirensKilledWithExplosivesStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( BloatKillsStat.Value != SavedBloatKillsStat )
    {
    FlushStatToSteamInt(BloatKillsStat, SteamNameStat[KFSTAT_BloatKills]);

    SavedBloatKillsStat = BloatKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( TotalZedTimeStat.Value != SavedTotalZedTimeStat )
    {
    FlushStatToSteamFloat(TotalZedTimeStat, SteamNameStat[KFSTAT_TotalZedTime]);

    SavedTotalZedTimeStat = TotalZedTimeStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( SirenKillsStat.Value != SavedSirenKillsStat )
    {
    FlushStatToSteamInt(SirenKillsStat, SteamNameStat[KFSTAT_SirenKills]);

    SavedSirenKillsStat = SirenKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( KillsStat.Value != SavedKillsStat )
    {
    FlushStatToSteamInt(KillsStat, SteamNameStat[KFSTAT_Kills]);

    SavedKillsStat = KillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( DemolitionsPipebombKillsStat.Value != SavedDemolitionsPipebombKillsStat )
    {
    FlushStatToSteamInt(DemolitionsPipebombKillsStat, SteamNameStat[KFSTAT_DemolitionsPipebombKills]);

    SavedDemolitionsPipebombKillsStat = DemolitionsPipebombKillsStat.Value;
    bFlushStatsToDatabase = true;
    }

    if ( EnemiesGibbedWithM79.Value != SavedEnemiesGibbedWithM79 )
    {
    FlushStatToSteamInt(EnemiesGibbedWithM79, SteamNameStat[KFSTAT_EnemiesGibbedWithM79]);

    SavedEnemiesGibbedWithM79 = EnemiesGibbedWithM79.Value;
    bFlushStatsToDatabase = true;
    }

    if ( EnemiesKilledWithSCAR.Value != SavedEnemiesKilledWithSCAR )
    {
    FlushStatToSteamInt(EnemiesKilledWithSCAR, SteamNameStat[KFSTAT_EnemiesKilledWithSCAR]);

    SavedEnemiesKilledWithSCAR = EnemiesKilledWithSCAR.Value;
    bFlushStatsToDatabase = true;
    }

    if ( TeammatesHealedWithMP7.Value != SavedTeammatesHealedWithMP7 )
    {
    FlushStatToSteamInt(TeammatesHealedWithMP7, SteamNameStat[KFSTAT_TeammatesHealedWithMP7]);

    SavedTeammatesHealedWithMP7 = TeammatesHealedWithMP7.Value;
    bFlushStatsToDatabase = true;
    }

    if ( FleshpoundsKilledWithAA12.Value != SavedFleshpoundsKilledWithAA12 )
    {
    FlushStatToSteamInt(FleshpoundsKilledWithAA12, SteamNameStat[KFSTAT_FleshpoundsKilledWithAA12]);

    SavedFleshpoundsKilledWithAA12 = FleshpoundsKilledWithAA12.Value;
    bFlushStatsToDatabase = true;
    }

    if ( CrawlersKilledInMidair.Value != SavedCrawlersKilledInMidair )
    {
    FlushStatToSteamInt(CrawlersKilledInMidair, SteamNameStat[KFSTAT_CrawlersKilledInMidair]);

    SavedCrawlersKilledInMidair = CrawlersKilledInMidair.Value;
    bFlushStatsToDatabase = true;
    }

    if ( bFlushStatsToDatabase )
    {
    FlushStatsToSteamDatabase();
    }
    }

    // Event Callback for each GetStatsAndAchievements call
    // NETWORK: Client only
    simulated event OnStatsAndAchievementsReady()
    {
    local int i;

    GetStatInt(DamageHealedStat, SteamNameStat[KFSTAT_DamageHealed]);
    SavedDamageHealedStat = DamageHealedStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_DamageHealed, DamageHealedStat.Value);

    GetStatInt(WeldingPointsStat, SteamNameStat[KFSTAT_WeldingPoints]);
    SavedWeldingPointsStat = WeldingPointsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_WeldingPoints, WeldingPointsStat.Value);

    GetStatInt(ShotgunDamageStat, SteamNameStat[KFSTAT_ShotgunDamage]);
    SavedShotgunDamageStat = ShotgunDamageStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_ShotgunDamage, ShotgunDamageStat.Value);

    GetStatInt(HeadshotKillsStat, SteamNameStat[KFSTAT_HeadshotKills]);
    SavedHeadshotKillsStat = HeadshotKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_HeadshotKills, HeadshotKillsStat.Value);

    GetStatInt(StalkerKillsStat, SteamNameStat[KFSTAT_StalkerKills]);
    SavedStalkerKillsStat = StalkerKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_StalkerKills, StalkerKillsStat.Value);

    GetStatInt(BullpupDamageStat, SteamNameStat[KFSTAT_BullpupDamage]);
    SavedBullpupDamageStat = BullpupDamageStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_BullpupDamage, BullpupDamageStat.Value);

    GetStatInt(MeleeDamageStat, SteamNameStat[KFSTAT_MeleeDamage]);
    SavedMeleeDamageStat = MeleeDamageStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_MeleeDamage, MeleeDamageStat.Value);

    GetStatInt(FlameThrowerDamageStat, SteamNameStat[KFSTAT_FlameThrowerDamage]);
    SavedFlameThrowerDamageStat = FlameThrowerDamageStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_FlameThrowerDamage, FlameThrowerDamageStat.Value);

    GetStatInt(ExplosivesDamageStat, SteamNameStat[KFSTAT_ExplosivesDamage]);
    SavedExplosivesDamageStat = ExplosivesDamageStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_ExplosivesDamage, ExplosivesDamageStat.Value);

    GetStatInt(SelfHealsStat, SteamNameStat[KFSTAT_SelfHeals]);
    SavedSelfHealsStat = SelfHealsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_SelfHeals, SelfHealsStat.Value);

    GetStatInt(SoleSurvivorWavesStat, SteamNameStat[KFSTAT_SoleSurvivorWaves]);
    SavedSoleSurvivorWavesStat = SoleSurvivorWavesStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_SoleSurvivorWaves, SoleSurvivorWavesStat.Value);

    GetStatInt(CashDonatedStat, SteamNameStat[KFSTAT_CashDonated]);
    SavedCashDonatedStat = CashDonatedStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_CashDonated, CashDonatedStat.Value);

    GetStatInt(FeedingKillsStat, SteamNameStat[KFSTAT_FeedingKills]);
    SavedFeedingKillsStat = FeedingKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_FeedingKills, FeedingKillsStat.Value);

    GetStatInt(BurningCrossbowKillsStat, SteamNameStat[KFSTAT_BurningCrossbowKills]);
    SavedBurningCrossbowKillsStat = BurningCrossbowKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_BurningCrossbowKills, BurningCrossbowKillsStat.Value);

    GetStatInt(GibbedFleshpoundsStat, SteamNameStat[KFSTAT_GibbedFleshpounds]);
    SavedGibbedFleshpoundsStat = GibbedFleshpoundsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_GibbedFleshpounds, GibbedFleshpoundsStat.Value);

    GetStatInt(StalkersKilledWithExplosivesStat, SteamNameStat[KFSTAT_StalkersKilledWithExplosives]);
    SavedStalkersKilledWithExplosivesStat = StalkersKilledWithExplosivesStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_StalkersKilledWithExplosives, StalkersKilledWithExplosivesStat.Value);

    GetStatInt(GibbedEnemiesStat, SteamNameStat[KFSTAT_GibbedEnemies]);
    SavedGibbedEnemiesStat = GibbedEnemiesStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_GibbedEnemies, GibbedEnemiesStat.Value);

    GetStatInt(SirensKilledWithExplosivesStat, SteamNameStat[KFSTAT_SirensKilledWithExplosives]);
    SavedSirensKilledWithExplosivesStat = SirensKilledWithExplosivesStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_SirensKilledWithExplosives, SirensKilledWithExplosivesStat.Value);

    GetStatInt(BloatKillsStat, SteamNameStat[KFSTAT_BloatKills]);
    SavedBloatKillsStat = BloatKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_BloatKills, BloatKillsStat.Value);

    GetStatFloat(TotalZedTimeStat, SteamNameStat[KFSTAT_TotalZedTime]);
    SavedTotalZedTimeStat = TotalZedTimeStat.Value;
    PCOwner.ServerInitializeSteamStatFloat(KFSTAT_TotalZedTime, TotalZedTimeStat.Value);

    GetStatInt(SirenKillsStat, SteamNameStat[KFSTAT_SirenKills]);
    SavedSirenKillsStat = SirenKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_SirenKills, SirenKillsStat.Value);

    GetStatInt(KillsStat, SteamNameStat[KFSTAT_Kills]);
    SavedKillsStat = KillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_Kills, KillsStat.Value);

    GetStatInt(DemolitionsPipebombKillsStat, SteamNameStat[KFSTAT_DemolitionsPipebombKills]);
    SavedDemolitionsPipebombKillsStat = DemolitionsPipebombKillsStat.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_DemolitionsPipebombKills, DemolitionsPipebombKillsStat.Value);

    GetStatInt(EnemiesGibbedWithM79, SteamNameStat[KFSTAT_EnemiesGibbedWithM79]);
    SavedEnemiesGibbedWithM79 = EnemiesGibbedWithM79.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_EnemiesGibbedWithM79, EnemiesGibbedWithM79.Value);

    GetStatInt(EnemiesKilledWithSCAR, SteamNameStat[KFSTAT_EnemiesKilledWithSCAR]);
    SavedEnemiesKilledWithSCAR = EnemiesKilledWithSCAR.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_EnemiesKilledWithSCAR, EnemiesKilledWithSCAR.Value);

    GetStatInt(TeammatesHealedWithMP7, SteamNameStat[KFSTAT_TeammatesHealedWithMP7]);
    SavedTeammatesHealedWithMP7 = TeammatesHealedWithMP7.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_TeammatesHealedWithMP7, TeammatesHealedWithMP7.Value);

    GetStatInt(FleshpoundsKilledWithAA12, SteamNameStat[KFSTAT_FleshpoundsKilledWithAA12]);
    SavedFleshpoundsKilledWithAA12 = FleshpoundsKilledWithAA12.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_FleshpoundsKilledWithAA12, FleshpoundsKilledWithAA12.Value);

    GetStatInt(CrawlersKilledInMidair, SteamNameStat[KFSTAT_CrawlersKilledInMidair]);
    SavedCrawlersKilledInMidair = CrawlersKilledInMidair.Value;
    PCOwner.ServerInitializeSteamStatInt(KFSTAT_CrawlersKilledInMidair, CrawlersKilledInMidair.Value);

    // Check which Perks are available on Client
    InitializePerks();
    CheckMedicPerks(false);
    CheckSupportPerks(false);
    CheckSharpshooterPerks(false);
    CheckCommandoPerks(false);
    CheckBerserkerPerks(false);
    CheckFirebugPerks(false);
    CheckDemolitionsPerks(false);

    for ( i = 0; i < Achievements.Length; i++ )
    {
    Achievements.bCompleted = byte(GetAchievementCompleted(Achievements.SteamName));
    GetAchievementDescription(Achievements.SteamName, Achievements.DisplayName, Achievements.Description);
    }

    UpdateAchievementProgress();

    super.OnStatsAndAchievementsReady();
    }

    // Called on Server to initialize Stats from Client replication, because Servers can't access Steam Stats directly
    function InitializeSteamStatInt(int Index, int Value)
    {
    if ( bDebugStats )
    log("STEAMSTATS: InitializeSteamStatInt called - Index="$Index @ "Value="$Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    switch ( Index )
    {
    case KFSTAT_DamageHealed:
    InitStatInt(DamageHealedStat, Value);
    break;

    case KFSTAT_WeldingPoints:
    InitStatInt(WeldingPointsStat, Value);
    break;

    case KFSTAT_ShotgunDamage:
    InitStatInt(ShotgunDamageStat, Value);
    break;

    case KFSTAT_HeadshotKills:
    InitStatInt(HeadshotKillsStat, Value);
    break;

    case KFSTAT_StalkerKills:
    InitStatInt(StalkerKillsStat, Value);
    break;

    case KFSTAT_BullpupDamage:
    InitStatInt(BullpupDamageStat, Value);
    break;

    case KFSTAT_MeleeDamage:
    InitStatInt(MeleeDamageStat, Value);
    break;

    case KFSTAT_FlameThrowerDamage:
    InitStatInt(FlameThrowerDamageStat, Value);
    break;

    case KFSTAT_ExplosivesDamage:
    InitStatInt(ExplosivesDamageStat, Value);
    break;

    case KFSTAT_SelfHeals:
    InitStatInt(SelfHealsStat, Value);
    break;

    case KFSTAT_SoleSurvivorWaves:
    InitStatInt(SoleSurvivorWavesStat, Value);
    break;

    case KFSTAT_CashDonated:
    InitStatInt(CashDonatedStat, Value);
    break;

    case KFSTAT_FeedingKills:
    InitStatInt(FeedingKillsStat, Value);
    break;

    case KFSTAT_BurningCrossbowKills:
    InitStatInt(BurningCrossbowKillsStat, Value);
    break;

    case KFSTAT_GibbedFleshpounds:
    InitStatInt(GibbedFleshpoundsStat, Value);
    break;

    case KFSTAT_StalkersKilledWithExplosives:
    InitStatInt(StalkersKilledWithExplosivesStat, Value);
    break;

    case KFSTAT_GibbedEnemies:
    InitStatInt(GibbedEnemiesStat, Value);
    break;

    case KFSTAT_SirensKilledWithExplosives:
    InitStatInt(SirensKilledWithExplosivesStat, Value);
    break;

    case KFSTAT_BloatKills:
    InitStatInt(BloatKillsStat, Value);
    break;

    case KFSTAT_TotalZedTime:
    InitStatFloat(TotalZedTimeStat, Value);
    break;

    case KFSTAT_SirenKills:
    InitStatInt(SirenKillsStat, Value);
    break;

    case KFSTAT_Kills:
    InitStatInt(KillsStat, Value);
    break;

    case KFSTAT_DemolitionsPipebombKills:
    InitStatInt(DemolitionsPipebombKillsStat, Value);
    break;

    case KFSTAT_EnemiesGibbedWithM79:
    InitStatInt(EnemiesGibbedWithM79, Value);
    break;

    case KFSTAT_EnemiesKilledWithSCAR:
    InitStatInt(EnemiesKilledWithSCAR, Value);
    break;

    case KFSTAT_TeammatesHealedWithMP7:
    InitStatInt(TeammatesHealedWithMP7, Value);
    break;

    case KFSTAT_FleshpoundsKilledWithAA12:
    InitStatInt(FleshpoundsKilledWithAA12, Value);
    break;

    case KFSTAT_CrawlersKilledInMidair:
    InitStatInt(CrawlersKilledInMidair, Value);
    break;
    }
    }

    // Sets the specified Steam Achievement as completed; also, flushes all Stats and Achievements to the client
    function SetSteamAchievementCompleted(int Index)
    {
    if ( bDebugStats )
    log("STEAMSTATS: SetSteamAchievementCompleted called - Name="$Achievements[Index].SteamName @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    FlushStatsToClient();
    SetLocalAchievementCompleted(Index);
    SetAchievementCompleted(Achievements[Index].SteamName);
    }

    // Called from multiple locations on Client and Server to set Achievement booleans for later use
    simulated event SetLocalAchievementCompleted(int Index)
    {
    if ( bDebugStats )
    log("STEAMSTATS: SetLocalAchievementCompleted called - Name="$Achievements[Index].SteamName @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    Achievements[Index].bCompleted = 1;
    }

    function ServerSteamStatsAndAchievementsInitialized()
    {
    // Check which Perks are available on Server
    InitializePerks();
    CheckMedicPerks(false);
    CheckSupportPerks(false);
    CheckSharpshooterPerks(false);
    CheckCommandoPerks(false);
    CheckBerserkerPerks(false);
    CheckFirebugPerks(false);
    CheckDemolitionsPerks(false);

    if ( Achievements[KFACHIEVEMENT_WinAllMapsNormal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinWestLondonNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinManorNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinBioticsLabNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinFarmNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinOfficesNormal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAllMapsNormal);
    }
    }

    if ( Achievements[KFACHIEVEMENT_WinAllMapsHard].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinWestLondonHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinManorHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinBioticsLabHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinFarmHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinOfficesHard].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAllMapsHard);
    }
    }

    if ( Achievements[KFACHIEVEMENT_WinAllMapsSuicidal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinWestLondonSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinManorSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinBioticsLabSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinFarmSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinOfficesSuicidal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAllMapsSuicidal);
    }
    }

    if ( Achievements[KFACHIEVEMENT_WinAll3SummerMapsNormal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinFoundryNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinAsylumNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinWyreNormal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAll3SummerMapsNormal);
    }
    }

    if ( Achievements[KFACHIEVEMENT_WinAll3SummerMapsHard].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinFoundryHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinAsylumHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinWyreHard].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAll3SummerMapsHard);
    }
    }

    if ( Achievements[KFACHIEVEMENT_WinAll3SummerMapsSuicidal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinFoundrySuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinAsylumSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinWyreSuicidal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAll3SummerMapsSuicidal);
    }
    }

    super.ServerSteamStatsAndAchievementsInitialized();
    }

    // Called when the owner of this Stats Actor dies(used to reset "in one life" stats)
    function PlayerDied()
    {
    if ( bDebugStats )
    log("STEAMSTATS: PlayerDied resetting 'in one life' Stats - Player="$PCOwner.PlayerReplicationInfo.PlayerName);
    }

    function MatchEnded()
    {
    if ( bDebugStats )
    log("STEAMSTATS: MatchEnded - Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    // Reset any "per life" Stats
    PlayerDied();

    if ( !bFlushStatsToClient )
    {
    FlushStatsToClient();
    }
    }

    simulated function UpdateAchievementProgress()
    {
    local int i, NormalMapsCompleted, HardMapsCompleted, SuicidalMapsCompleted, PerksMaxed;
    local int NormalSummerMapsCompleted, HardSummerMapsCompleted, SuicidalSummerMapsCompleted;

    for ( i = KFACHIEVEMENT_WinWestLondonNormal; i <= KFACHIEVEMENT_WinBioticsLabNormal; i++ )
    {
    if ( Achievements.bCompleted == 1 )
    {
    NormalMapsCompleted++;
    }
    }

    for ( i = KFACHIEVEMENT_WinWestLondonHard; i <= KFACHIEVEMENT_WinBioticsLabHard; i++ )
    {
    if ( Achievements.bCompleted == 1 )
    {
    HardMapsCompleted++;
    }
    }

    for ( i = KFACHIEVEMENT_WinWestLondonSuicidal; i <= KFACHIEVEMENT_WinBioticsLabSuicidal; i++ )
    {
    if ( Achievements.bCompleted == 1 )
    {
    SuicidalMapsCompleted++;
    }
    }

    if ( Achievements[KFACHIEVEMENT_WinFoundryNormal].bCompleted == 1 )
    NormalSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinAsylumNormal].bCompleted == 1 )
    NormalSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinWyreNormal].bCompleted == 1 )
    NormalSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinFoundryHard].bCompleted == 1 )
    HardSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinAsylumHard].bCompleted == 1 )
    HardSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinWyreHard].bCompleted == 1 )
    HardSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinFoundrySuicidal].bCompleted == 1 )
    SuicidalSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinAsylumSuicidal].bCompleted == 1 )
    SuicidalSummerMapsCompleted++;

    if ( Achievements[KFACHIEVEMENT_WinWyreSuicidal].bCompleted == 1 )
    SuicidalSummerMapsCompleted++;

    for ( i = 0; i < 7; i++ )
    {
    if ( PerkHighestLevelAvailable(i) >= 5 )
    {
    PerksMaxed++;
    }
    }

    Achievements[KFACHIEVEMENT_WinAllMapsNormal].ProgressNumerator = NormalMapsCompleted;
    Achievements[KFACHIEVEMENT_WinAllMapsHard].ProgressNumerator = HardMapsCompleted;
    Achievements[KFACHIEVEMENT_WinAllMapsSuicidal].ProgressNumerator = SuicidalMapsCompleted;
    Achievements[KFACHIEVEMENT_KillXEnemies].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXEnemies].ProgressDenominator, KillsStat.Value);
    Achievements[KFACHIEVEMENT_KillXEnemies2].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXEnemies2].ProgressDenominator, KillsStat.Value);
    Achievements[KFACHIEVEMENT_KillXEnemies3].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXEnemies3].ProgressDenominator, KillsStat.Value);
    Achievements[KFACHIEVEMENT_KillXBloats].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXBloats].ProgressDenominator, BloatKillsStat.Value);
    Achievements[KFACHIEVEMENT_KillXSirens].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXSirens].ProgressDenominator, SirenKillsStat.Value);
    Achievements[KFACHIEVEMENT_KillXStalkersWithExplosives].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXStalkersWithExplosives].ProgressDenominator, StalkersKilledWithExplosivesStat.Value);
    Achievements[KFACHIEVEMENT_KillXBurningEnemiesWithCrossbow].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXBurningEnemiesWithCrossbow].ProgressDenominator, BurningCrossbowKillsStat.Value);
    Achievements[KFACHIEVEMENT_KillXEnemiesFeedingOnCorpses].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_KillXEnemiesFeedingOnCorpses].ProgressDenominator, FeedingKillsStat.Value);
    Achievements[KFACHIEVEMENT_TurnXEnemiesIntoGiblets].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_TurnXEnemiesIntoGiblets].ProgressDenominator, GibbedEnemiesStat.Value);
    Achievements[KFACHIEVEMENT_TurnXFleshpoundsIntoGiblets].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_TurnXFleshpoundsIntoGiblets].ProgressDenominator, GibbedFleshpoundsStat.Value);
    Achievements[KFACHIEVEMENT_HealSelfXTimes].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_HealSelfXTimes].ProgressDenominator, SelfHealsStat.Value);
    Achievements[KFACHIEVEMENT_OnlySurvivorXWaves].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_OnlySurvivorXWaves].ProgressDenominator, SoleSurvivorWavesStat.Value);
    Achievements[KFACHIEVEMENT_DonateXCashToTeammates].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_DonateXCashToTeammates].ProgressDenominator, CashDonatedStat.Value);
    Achievements[KFACHIEVEMENT_AcquireXMinutesOfZedTime].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_AcquireXMinutesOfZedTime].ProgressDenominator, int(TotalZedTimeStat.Value / 60.0));
    Achievements[KFACHIEVEMENT_MaxOutAllPerks].ProgressNumerator = PerksMaxed;
    Achievements[KFACHIEVEMENT_WinAll3SummerMapsNormal].ProgressNumerator = NormalSummerMapsCompleted;
    Achievements[KFACHIEVEMENT_WinAll3SummerMapsHard].ProgressNumerator = HardSummerMapsCompleted;
    Achievements[KFACHIEVEMENT_WinAll3SummerMapsSuicidal].ProgressNumerator = SuicidalSummerMapsCompleted;
    Achievements[KFACHIEVEMENT_Kill1000EnemiesWithPipebomb].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_Kill1000EnemiesWithPipebomb].ProgressDenominator, DemolitionsPipebombKillsStat.Value);
    Achievements[KFACHIEVEMENT_Gib500ZedsWithM79].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_Gib500ZedsWithM79].ProgressDenominator, EnemiesGibbedWithM79.Value);
    Achievements[KFACHIEVEMENT_Kill1000ZedsWithSCAR].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_Kill1000ZedsWithSCAR].ProgressDenominator, EnemiesKilledWithSCAR.Value);
    Achievements[KFACHIEVEMENT_Heal200TeammatesWithMP7].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_Heal200TeammatesWithMP7].ProgressDenominator, TeammatesHealedWithMP7.Value);
    Achievements[KFACHIEVEMENT_Kill100FleshpoundsWithAA12].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_Kill100FleshpoundsWithAA12].ProgressDenominator, FleshpoundsKilledWithAA12.Value);
    Achievements[KFACHIEVEMENT_Kill20CrawlersKilledInAir].ProgressNumerator = Min(Achievements[KFACHIEVEMENT_Kill20CrawlersKilledInAir].ProgressDenominator, CrawlersKilledInMidair.Value);
    }

    simulated function int GetAchievementCompletedCount()
    {
    local int i, Count;

    Count = 0;

    for ( i = 0; i < Achievements.Length; i++ )
    {
    if ( Achievements.bCompleted == 1 )
    {
    Count++;
    }
    }

    return Count;
    }

    // Server callback from native when new Perk unlocked
    event OnPerkAvailable()
    {
    local int i;

    if ( bInitialized )
    {
    FlushStatsToClient();
    }

    if ( KFPC(PCOwner) != none )
    {
    KFPC(PCOwner).bChangedVeterancyThisWave = false;
    KFPC(PCOwner).SendSelectedVeterancyToServer();
    KFPC(PCOwner).bChangedVeterancyThisWave = false;
    }

    for ( i = 0; i < 7; i++ )
    {
    if ( PerkHighestLevelAvailable(i) < 5 )
    {
    break;
    }

    if ( i == 6 && Achievements[KFACHIEVEMENT_MaxOutAllPerks].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_MaxOutAllPerks);
    }
    }
    }

    // Client callback to show pop up notification
    simulated event NotifyPerkAvailable(int Type, int Level)
    {
    if ( KFPC(PCOwner) != none )
    {
    KFPC(PCOwner).NotifyPerkAvailable(Type, Level);
    }
    }

    simulated function int GetPerkProgressDetailsCount(int Type)
    {
    switch ( Type )
    {
    case 0: // Medic
    return 1;
    case 1: // Support
    return 2;
    case 2: // Sharpshooter
    return 1;
    case 3: // Commando
    return 2;
    case 4: // Berserker
    return 1;
    case 5: // Firebug
    return 1;
    case 6: // Demolitions
    return 1;
    }
    }

    simulated function GetPerkProgressDetails(int Type, int Index, out int CurrentValue, out int RequiredValue, out float Progress)
    {
    switch ( Type )
    {
    case 0: // Medic
    GetMedicProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;

    case 1: // Support
    GetSupportProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;

    case 2: // Sharpshooter
    GetSharpshooterProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;

    case 3: // Commando
    GetCommandoProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;

    case 4: // Berserker
    GetBerserkerProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;

    case 5: // Firebug
    GetFirebugProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;

    case 6: // Demolitions
    GetDemolitionsProgressDetails(Index, CurrentValue, RequiredValue, Progress);
    break;
    }
    }

    function AddDamageHealed(int Amount, optional bool bMP7MHeal)
    {
    SetStatInt(DamageHealedStat, DamageHealedStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding DamageHealed - NewValue="$DamageHealedStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckMedicPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));

    if ( bMP7MHeal )
    {
    SetStatInt(TeammatesHealedWithMP7, TeammatesHealedWithMP7.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding SCAR Kill - NewValue="$TeammatesHealedWithMP7.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Heal200TeammatesWithMP7].bCompleted == 0 && TeammatesHealedWithMP7.Value >= Achievements[KFACHIEVEMENT_Heal200TeammatesWithMP7].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Heal200TeammatesWithMP7);
    }
    }
    }

    function AddWeldingPoints(int Amount)
    {
    SetStatInt(WeldingPointsStat, WeldingPointsStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding WeldingPoints - NewValue="$WeldingPointsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckSupportPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function AddShotgunDamage(int Amount)
    {
    SetStatInt(ShotgunDamageStat, ShotgunDamageStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Shotgun Damage - NewValue="$ShotgunDamageStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckSupportPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function AddHeadshotKill(bool bLaserSightedEBRHeadshot)
    {
    SetStatInt(HeadshotKillsStat, HeadshotKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Headshot Kill - NewValue="$HeadshotKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckSharpshooterPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));

    if ( Achievements[KFACHIEVEMENT_LaserSightedEBRHeadshots25InARow].bCompleted == 0 )
    {
    if ( bLaserSightedEBRHeadshot )
    {
    SetStatInt(LaserSightedEBRHeadshots, LaserSightedEBRHeadshots.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Laser Sighted EBRM14 Headshot Kill - NewValue="$LaserSightedEBRHeadshots.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( LaserSightedEBRHeadshots.Value >= 25 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_LaserSightedEBRHeadshots25InARow);
    }
    }
    else
    {
    SetStatInt(LaserSightedEBRHeadshots, 0);
    }
    }
    }

    function AddStalkerKill()
    {
    SetStatInt(StalkerKillsStat, StalkerKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Stalker Kill - NewValue="$StalkerKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckCommandoPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function AddBullpupDamage(int Amount)
    {
    SetStatInt(BullpupDamageStat, BullpupDamageStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Bullpup Damage - NewValue="$BullpupDamageStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckCommandoPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function AddMeleeDamage(int Amount)
    {
    SetStatInt(MeleeDamageStat, MeleeDamageStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding MeleeDamage - NewValue="$MeleeDamageStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckBerserkerPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function AddFlameThrowerDamage(int Amount)
    {
    SetStatInt(FlameThrowerDamageStat, FlameThrowerDamageStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding FlameThrowerDamage - NewValue="$FlameThrowerDamageStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckFirebugPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function AddExplosivesDamage(int Amount)
    {
    SetStatInt(ExplosivesDamageStat, ExplosivesDamageStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding ExplosivesDamage - NewValue="$ExplosivesDamageStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    CheckDemolitionsPerks(Level.NetMode == NM_Standalone || (Level.NetMode == NM_ListenServer && PCOwner == Level.GetLocalPlayerController()));
    }

    function WonLongGame(string MapName, float Difficulty)
    {
    if ( bDebugStats )
    log("STEAMSTATS: Won Long Game - MapName="$MapName @ "Difficulty="$Difficulty @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( MapName ~= "KF-WestLondon" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinWestLondonNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinWestLondonNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinWestLondonHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinWestLondonHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinWestLondonSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinWestLondonSuicidal);
    }
    }
    else if ( MapName ~= "KF-Manor" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinManorNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinManorNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinManorHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinManorHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinManorSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinManorSuicidal);
    }
    }
    else if ( MapName ~= "KF-BioticsLab" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinBioticsLabNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinBioticsLabNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinBioticsLabHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinBioticsLabHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinBioticsLabSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinBioticsLabSuicidal);
    }
    }
    else if ( MapName ~= "KF-Farm" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinFarmNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinFarmNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinFarmHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinFarmHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinFarmSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinFarmSuicidal);
    }
    }
    else if ( MapName ~= "KF-Offices" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinOfficesNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinOfficesNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinOfficesHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinOfficesHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinOfficesSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinOfficesSuicidal);
    }
    }

    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinAllMapsNormal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinWestLondonNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinManorNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinBioticsLabNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinFarmNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinOfficesNormal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAllMapsNormal);
    }
    }

    if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinAllMapsHard].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinWestLondonHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinManorHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinBioticsLabHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinFarmHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinOfficesHard].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAllMapsHard);
    }
    }

    if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinAllMapsSuicidal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinWestLondonSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinManorSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinBioticsLabSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinFarmSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinOfficesSuicidal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAllMapsSuicidal);
    }
    }

    if ( MapName ~= "KF-Foundry" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinFoundryNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinFoundryNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinFoundryHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinFoundryHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinFoundrySuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinFoundrySuicidal);
    }
    }
    else if ( MapName ~= "KF-Bedlam" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinAsylumNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAsylumNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinAsylumHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAsylumHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinAsylumSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAsylumSuicidal);
    }
    }
    else if ( MapName ~= "KF-Wyre" )
    {
    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinWyreNormal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinWyreNormal);
    }
    else if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinWyreHard].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinWyreHard);
    }
    else if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinWyreSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinWyreSuicidal);
    }
    }

    if ( Difficulty == 2.0 && Achievements[KFACHIEVEMENT_WinAll3SummerMapsNormal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinFoundryNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinAsylumNormal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinWyreNormal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAll3SummerMapsNormal);
    }
    }

    if ( Difficulty == 4.0 && Achievements[KFACHIEVEMENT_WinAll3SummerMapsHard].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinFoundryHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinAsylumHard].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinWyreHard].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAll3SummerMapsHard);
    }
    }

    if ( Difficulty == 7.0 && Achievements[KFACHIEVEMENT_WinAll3SummerMapsSuicidal].bCompleted == 0 )
    {
    if ( Achievements[KFACHIEVEMENT_WinFoundrySuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinAsylumSuicidal].bCompleted == 1 &&
    Achievements[KFACHIEVEMENT_WinWyreSuicidal].bCompleted == 1 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_WinAll3SummerMapsSuicidal);
    }
    }
    }

    function WaveEnded()
    {
    if ( bDebugStats )
    log("STEAMSTATS: WaveEnded resetting 'Single Wave' Stats - Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    InitStatInt(FireAxeKills, 0);
    InitStatInt(ChainsawKills, 0);
    InitStatInt(MedicKnifeKills, 0);
    }

    function AddKill(bool bLaserSightedEBRM14Headshotted)
    {
    SetStatInt(KillsStat, KillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Kill - NewKills="$KillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXEnemies].bCompleted == 0 && KillsStat.Value >= Achievements[KFACHIEVEMENT_KillXEnemies].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXEnemies);
    }

    if ( Achievements[KFACHIEVEMENT_KillXEnemies2].bCompleted == 0 && KillsStat.Value >= Achievements[KFACHIEVEMENT_KillXEnemies2].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXEnemies2);
    }

    if ( Achievements[KFACHIEVEMENT_KillXEnemies3].bCompleted == 0 && KillsStat.Value >= Achievements[KFACHIEVEMENT_KillXEnemies3].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXEnemies3);
    }

    if ( !bLaserSightedEBRM14Headshotted )
    {
    SetStatInt(LaserSightedEBRHeadshots, 0);

    if ( bDebugStats )
    log("STEAMSTATS: Reseting Laser Sighted EBRM14 Headshot Kills - NewKills="$LaserSightedEBRHeadshots.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);
    }
    }

    function AddBloatKill()
    {
    SetStatInt(BloatKillsStat, BloatKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Bloat Kill - NewValue="$BloatKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXBloats].bCompleted == 0 && BloatKillsStat.Value >= Achievements[KFACHIEVEMENT_KillXBloats].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXBloats);
    }
    }

    function AddSirenKill()
    {
    SetStatInt(SirenKillsStat, SirenKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Siren Kill - NewValue="$SirenKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXSirens].bCompleted == 0 && SirenKillsStat.Value >= Achievements[KFACHIEVEMENT_KillXSirens].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXSirens);
    }
    }

    function AddDemolitionsPipebombKill()
    {
    SetStatInt(DemolitionsPipebombKillsStat, DemolitionsPipebombKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Demolitions Pipebomb Kill - NewValue="$DemolitionsPipebombKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Kill1000EnemiesWithPipebomb].bCompleted == 0 && DemolitionsPipebombKillsStat.Value >= Achievements[KFACHIEVEMENT_Kill1000EnemiesWithPipebomb].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Kill1000EnemiesWithPipebomb);
    }
    }

    function AddStalkerKillWithExplosives()
    {
    SetStatInt(StalkersKilledWithExplosivesStat, StalkersKilledWithExplosivesStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Stalker Explosives Kill - NewValue="$StalkersKilledWithExplosivesStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXStalkersWithExplosives].bCompleted == 0 && StalkersKilledWithExplosivesStat.Value >= Achievements[KFACHIEVEMENT_KillXStalkersWithExplosives].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXStalkersWithExplosives);
    }
    }

    function AddFireAxeKill()
    {
    SetStatInt(FireAxeKills, FireAxeKills.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Fire Axe Kill - NewValue="$FireAxeKills.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXEnemiesWithFireAxe].bCompleted == 0 && FireAxeKills.Value >= 15 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXEnemiesWithFireAxe);
    }
    }

    function AddChainsawScrakeKill()
    {
    SetStatInt(ChainsawKills, ChainsawKills.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Chainsaw Scrake Kill - NewValue="$ChainsawKills.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXScrakesWithChainsaw].bCompleted == 0 && ChainsawKills.Value >= 2 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXScrakesWithChainsaw);
    }
    }

    function AddBurningCrossbowKill()
    {
    SetStatInt(BurningCrossbowKillsStat, BurningCrossbowKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Burning Crossbow Kill - NewValue="$BurningCrossbowKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXBurningEnemiesWithCrossbow].bCompleted == 0 && BurningCrossbowKillsStat.Value >= Achievements[KFACHIEVEMENT_KillXBurningEnemiesWithCrossbow].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXBurningEnemiesWithCrossbow);
    }
    }

    function AddFeedingKill()
    {
    SetStatInt(FeedingKillsStat, FeedingKillsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Feeding Kill - NewValue="$FeedingKillsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillXEnemiesFeedingOnCorpses].bCompleted == 0 && FeedingKillsStat.Value >= Achievements[KFACHIEVEMENT_KillXEnemiesFeedingOnCorpses].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXEnemiesFeedingOnCorpses);
    }
    }

    function OnShotHuntingShotgun()
    {
    if ( bDebugStats )
    log("STEAMSTATS: Resetting Hunting Shotgun Kills");

    InitStatInt(HuntingShotgunKills, 0);
    }

    function AddHuntingShotgunKill()
    {
    SetStatInt(HuntingShotgunKills, HuntingShotgunKills.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Hunting Shotgun Kill - NewValue="$HuntingShotgunKills.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Kill4EnemiesWithHuntingShotgunShot].bCompleted == 0 && HuntingShotgunKills.Value >= 4 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Kill4EnemiesWithHuntingShotgunShot);
    }
    }

    function KilledEnemyWithBloatAcid()
    {
    if ( bDebugStats )
    log("STEAMSTATS: KilledEnemyWithBloatAcid - Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillEnemyUsingBloatAcid].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillEnemyUsingBloatAcid);
    }
    }

    function KilledFleshpound(bool bWithMeleeAttack, bool bWithAA12)
    {
    if ( bWithMeleeAttack )
    {
    if ( bDebugStats )
    log("STEAMSTATS: KilledFleshpoundWithMeleeAttack - Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_KillFleshpoundWithMelee].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillFleshpoundWithMelee);
    }
    }

    if ( bWithAA12 )
    {
    SetStatInt(FleshpoundsKilledWithAA12, FleshpoundsKilledWithAA12.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Fleshpound Killed With AA12 - NewValue="$FleshpoundsKilledWithAA12.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Kill100FleshpoundsWithAA12].bCompleted == 0 && FleshpoundsKilledWithAA12.Value >= Achievements[KFACHIEVEMENT_Kill100FleshpoundsWithAA12].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Kill100FleshpoundsWithAA12);
    }
    }
    }

    function AddMedicKnifeKill()
    {
    SetStatInt(MedicKnifeKills, MedicKnifeKills.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Medic Knife Kill - NewValue="$MedicKnifeKills.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_MedicKillXEnemiesWithKnife].bCompleted == 0 && MedicKnifeKills.Value >= 8 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_MedicKillXEnemiesWithKnife);
    }
    }

    function AddGibKill(bool bWithM79)
    {
    SetStatInt(GibbedEnemiesStat, GibbedEnemiesStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Gib Kill - NewValue="$GibbedEnemiesStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_TurnXEnemiesIntoGiblets].bCompleted == 0 && GibbedEnemiesStat.Value >= Achievements[KFACHIEVEMENT_TurnXEnemiesIntoGiblets].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_TurnXEnemiesIntoGiblets);
    }

    if ( bWithM79 )
    {
    SetStatInt(EnemiesGibbedWithM79, EnemiesGibbedWithM79.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Gibbed with M79 Kill - NewValue="$EnemiesGibbedWithM79.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Gib500ZedsWithM79].bCompleted == 0 && EnemiesGibbedWithM79.Value >= Achievements[KFACHIEVEMENT_Gib500ZedsWithM79].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Gib500ZedsWithM79);
    }
    }
    }

    function AddFleshpoundGibKill()
    {
    SetStatInt(GibbedFleshpoundsStat, GibbedFleshpoundsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Gibbed Fleshpound - NewValue="$GibbedFleshpoundsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_TurnXFleshpoundsIntoGiblets].bCompleted == 0 && GibbedFleshpoundsStat.Value >= Achievements[KFACHIEVEMENT_TurnXFleshpoundsIntoGiblets].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_TurnXFleshpoundsIntoGiblets);
    }
    }

    function AddSelfHeal()
    {
    SetStatInt(SelfHealsStat, SelfHealsStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Self Heal - NewValue="$SelfHealsStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_HealSelfXTimes].bCompleted == 0 && SelfHealsStat.Value >= Achievements[KFACHIEVEMENT_HealSelfXTimes].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_HealSelfXTimes);
    }
    }

    function AddOnlySurvivorOfWave()
    {
    SetStatInt(SoleSurvivorWavesStat, SoleSurvivorWavesStat.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Only Survivor - NewValue="$SoleSurvivorWavesStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_OnlySurvivorXWaves].bCompleted == 0 && SoleSurvivorWavesStat.Value >= Achievements[KFACHIEVEMENT_OnlySurvivorXWaves].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_OnlySurvivorXWaves);
    }
    }

    function AddDonatedCash(int Amount)
    {
    SetStatInt(CashDonatedStat, CashDonatedStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Donated Cash - NewValue="$CashDonatedStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_DonateXCashToTeammates].bCompleted == 0 && CashDonatedStat.Value >= Achievements[KFACHIEVEMENT_DonateXCashToTeammates].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_DonateXCashToTeammates);
    }
    }

    function AddZedTime(float Amount)
    {
    SetStatFloat(TotalZedTimeStat, TotalZedTimeStat.Value + Amount);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Zed Time - NewValue="$TotalZedTimeStat.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_AcquireXMinutesOfZedTime].bCompleted == 0 && TotalZedTimeStat.Value >= 60.0 * Achievements[KFACHIEVEMENT_AcquireXMinutesOfZedTime].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_AcquireXMinutesOfZedTime);
    }
    }

    function KilledPatriarch(bool bPatriarchHealed, bool bKilledWithLAW, bool bSuicidalDifficulty, bool bOnlyUsedCrossbows)
    {
    if ( bDebugStats )
    log("STEAMSTATS: KilledPatriarch - bPatriarchHealed="$bPatriarchHealed @ "bKilledWithLAW="$bKilledWithLAW @ "bSuicidalDifficulty="$bSuicidalDifficulty @ "bOnlyUsedCrossbows="$bOnlyUsedCrossbows @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( !bPatriarchHealed && Achievements[KFACHIEVEMENT_KillPatriarchBeforeHeHeals].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillPatriarchBeforeHeHeals);
    }

    if ( bKilledWithLAW && Achievements[KFACHIEVEMENT_KillPatriarchWithLAW].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillPatriarchWithLAW);
    }

    if ( bSuicidalDifficulty && Achievements[KFACHIEVEMENT_DefeatPatriarchOnSuicidal].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_DefeatPatriarchOnSuicidal);
    }

    if ( bOnlyUsedCrossbows && Achievements[KFACHIEVEMENT_KillPatriarchOnlyCrossbows].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillPatriarchOnlyCrossbows);
    }
    }

    function KilledHusk(bool bDamagedFriendly)
    {
    if ( bDebugStats )
    log("STEAMSTATS: Killed Husk - bDamagedFriendly="$bDamagedFriendly @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( !bDamagedFriendly && Achievements[KFACHIEVEMENT_KillHuskWithFlamethrower].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillHuskWithFlamethrower);
    }
    }

    function AddSCARKill()
    {
    SetStatInt(EnemiesKilledWithSCAR, EnemiesKilledWithSCAR.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding SCAR Kill - NewValue="$EnemiesKilledWithSCAR.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Kill1000ZedsWithSCAR].bCompleted == 0 && EnemiesKilledWithSCAR.Value >= Achievements[KFACHIEVEMENT_Kill1000ZedsWithSCAR].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Kill1000ZedsWithSCAR);
    }
    }

    function AddCrawlerKilledInMidair()
    {
    SetStatInt(CrawlersKilledInMidair, CrawlersKilledInMidair.Value + 1);

    if ( bDebugStats )
    log("STEAMSTATS: Adding Crawler Killed in Midair - NewValue="$CrawlersKilledInMidair.Value @ "Player="$PCOwner.PlayerReplicationInfo.PlayerName);

    if ( Achievements[KFACHIEVEMENT_Kill20CrawlersKilledInAir].bCompleted == 0 && CrawlersKilledInMidair.Value >= Achievements[KFACHIEVEMENT_Kill20CrawlersKilledInAir].ProgressDenominator )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Kill20CrawlersKilledInAir);
    }
    }

    function Killed8ZedsWithGrenade()
    {
    if ( Achievements[KFACHIEVEMENT_KillXEnemiesWithGrenade].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_KillXEnemiesWithGrenade);
    }
    }

    function Killed10ZedsWithPipebomb()
    {
    if ( Achievements[KFACHIEVEMENT_Obliterate10ZedsWithPipebomb].bCompleted == 0 )
    {
    SetSteamAchievementCompleted(KFACHIEVEMENT_Obliterate10ZedsWithPipebomb);
    }
    }

    defaultproperties
    {
    //bDebugStats=true

    SteamNameStat[0]="DamageHealed"
    SteamNameStat[1]="WeldingPoints"
    SteamNameStat[2]="ShotgunDamage"
    SteamNameStat[3]="HeadshotKills"
    SteamNameStat[4]="StalkerKills"
    SteamNameStat[5]="BullpupDamage"
    SteamNameStat[6]="MeleeDamage"
    SteamNameStat[7]="FlameThrowerDamage"
    SteamNameStat[8]="SelfHeals"
    SteamNameStat[9]="SoleSurvivorWaves"
    SteamNameStat[10]="CashDonated"
    SteamNameStat[11]="FeedingKills"
    SteamNameStat[12]="BurningCrossbowKills"
    SteamNameStat[13]="GibbedFleshpounds"
    SteamNameStat[14]="StalkersKilledWithExplosives"
    SteamNameStat[15]="GibbedEnemies"
    SteamNameStat[16]="SirensKilledWithExplosives"
    SteamNameStat[17]="BloatKills"
    SteamNameStat[18]="TotalZedTime"
    SteamNameStat[19]="SirenKills"
    SteamNameStat[20]="Kills"
    SteamNameStat[21]="ExplosivesDamage"
    SteamNameStat[22]="DemolitionsPipebombKills"
    SteamNameStat[23]="EnemiesGibbedWithM79"
    SteamNameStat[24]="EnemiesKilledWithSCAR"
    SteamNameStat[25]="TeammatesHealedWithMP7"
    SteamNameStat[26]="FleshpoundsKilledWithAA12"
    SteamNameStat[27]="CrawlersKilledInMidair"

    SteamNameAchievement[0]="WinWestLondonNormal"
    SteamNameAchievement[1]="WinManorNormal"
    SteamNameAchievement[2]="WinFarmNormal"
    SteamNameAchievement[3]="WinOfficesNormal"
    SteamNameAchievement[4]="WinBioticsLabNormal"
    SteamNameAchievement[5]="WinAllMapsNormal"
    SteamNameAchievement[6]="WinWestLondonHard"
    SteamNameAchievement[7]="WinManorHard"
    SteamNameAchievement[8]="WinFarmHard"
    SteamNameAchievement[9]="WinOfficesHard"
    SteamNameAchievement[10]="WinBioticsLabHard"
    SteamNameAchievement[11]="WinAllMapsHard"
    SteamNameAchievement[12]="WinWestLondonSuicidal"
    SteamNameAchievement[13]="WinManorSuicidal"
    SteamNameAchievement[14]="WinFarmSuicidal"
    SteamNameAchievement[15]="WinOfficesSuicidal"
    SteamNameAchievement[16]="WinBioticsLabSuicidal"
    SteamNameAchievement[17]="WinAllMapsSuicidal"
    SteamNameAchievement[18]="KillXEnemies"
    SteamNameAchievement[19]="KillXEnemies2"
    SteamNameAchievement[20]="KillXEnemies3"
    SteamNameAchievement[21]="KillXBloats"
    SteamNameAchievement[22]="KillXSirens"
    SteamNameAchievement[23]="KillXStalkersWithExplosives"
    SteamNameAchievement[24]="KillXEnemiesWithFireAxe"
    SteamNameAchievement[25]="KillXScrakesWithChainsaw"
    SteamNameAchievement[26]="KillXBurningEnemiesWithCrossbow"
    SteamNameAchievement[27]="KillXEnemiesFeedingOnCorpses"
    SteamNameAchievement[28]="KillXEnemiesWithGrenade"
    SteamNameAchievement[29]="Kill4EnemiesWithHuntingShotgunShot"
    SteamNameAchievement[30]="KillEnemyUsingBloatAcid"
    SteamNameAchievement[31]="KillFleshpoundWithMelee"
    SteamNameAchievement[32]="MedicKillXEnemiesWithKnife"
    SteamNameAchievement[33]="TurnXEnemiesIntoGiblets"
    SteamNameAchievement[34]="TurnXFleshpoundsIntoGiblets"
    SteamNameAchievement[35]="HealSelfXTimes"
    SteamNameAchievement[36]="OnlySurvivorXWaves"
    SteamNameAchievement[37]="DonateXCashToTeammates"
    SteamNameAchievement[38]="AcquireXMinutesOfZedTime"
    SteamNameAchievement[39]="MaxOutAllPerks"
    SteamNameAchievement[40]="KillPatriarchBeforeHeHeals"
    SteamNameAchievement[41]="KillPatriarchWithLAW"
    SteamNameAchievement[42]="DefeatPatriarchOnSuicidal"
    SteamNameAchievement[43]="WinFoundryNormal"
    SteamNameAchievement[44]="WinFoundryHard"
    SteamNameAchievement[45]="WinFoundrySuicidal"
    SteamNameAchievement[46]="WinAsylumNormal"
    SteamNameAchievement[47]="WinAsylumHard"
    SteamNameAchievement[48]="WinAsylumSuicidal"
    SteamNameAchievement[49]="WinWyreNormal"
    SteamNameAchievement[50]="WinWyreHard"
    SteamNameAchievement[51]="WinWyreSuicidal"
    SteamNameAchievement[52]="WinAll3SummerMapsNormal"
    SteamNameAchievement[53]="WinAll3SummerMapsHard"
    SteamNameAchievement[54]="WinAll3SummerMapsSuicidal"
    SteamNameAchievement[55]="Kill1000EnemiesWithPipebomb"
    SteamNameAchievement[56]="KillHuskWithFlamethrower"
    SteamNameAchievement[57]="KillPatriarchOnlyCrossbows"
    SteamNameAchievement[58]="Gib500ZedsWithM79"
    SteamNameAchievement[59]="LaserSightedEBRHeadshots25InARow"
    SteamNameAchievement[60]="Kill1000ZedsWithSCAR"
    SteamNameAchievement[61]="Heal200TeammatesWithMP7"
    SteamNameAchievement[62]="Kill100FleshpoundsWithAA12"
    SteamNameAchievement[63]="Kill20CrawlersKilledInAir"
    SteamNameAchievement[64]="Obliterate10ZedsWithPipebomb"

    Achievements[0]=(SteamName="WinWestLondonNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_0',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[1]=(SteamName="WinManorNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_1',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[2]=(SteamName="WinFarmNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_2',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[3]=(SteamName="WinOfficesNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_3',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[4]=(SteamName="WinBioticsLabNormal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_4',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[5]=(SteamName="WinAllMapsNormal",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_5',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[6]=(SteamName="WinWestLondonHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_6',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[7]=(SteamName="WinManorHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_7',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[8]=(SteamName="WinFarmHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_8',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[9]=(SteamName="WinOfficesHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_9',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[10]=(SteamName="WinBioticsLabHard",Icon=Texture'KillingFloorHUD.Achievements.Achievement_10',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[11]=(SteamName="WinAllMapsHard",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_11',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[12]=(SteamName="WinWestLondonSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_12',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[13]=(SteamName="WinManorSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_13',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[14]=(SteamName="WinFarmSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_14',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[15]=(SteamName="WinOfficesSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_15',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[16]=(SteamName="WinBioticsLabSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_16',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[17]=(SteamName="WinAllMapsSuicidal",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_17',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[18]=(SteamName="KillXEnemies",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloorHUD.Achievements.Achievement_18',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[19]=(SteamName="KillXEnemies2",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloorHUD.Achievements.Achievement_19',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[20]=(SteamName="KillXEnemies3",bShowProgress=1,ProgressDenominator=10000,Icon=Texture'KillingFloorHUD.Achievements.Achievement_20',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[21]=(SteamName="KillXBloats",bShowProgress=1,ProgressDenominator=200,Icon=Texture'KillingFloorHUD.Achievements.Achievement_21',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[22]=(SteamName="KillXSirens",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloorHUD.Achievements.Achievement_22',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[23]=(SteamName="KillXStalkersWithExplosives",bShowProgress=1,ProgressDenominator=20,Icon=Texture'KillingFloorHUD.Achievements.Achievement_23',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[24]=(SteamName="KillXEnemiesWithFireAxe",Icon=Texture'KillingFloorHUD.Achievements.Achievement_24',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[25]=(SteamName="KillXScrakesWithChainsaw",Icon=Texture'KillingFloorHUD.Achievements.Achievement_25',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[26]=(SteamName="KillXBurningEnemiesWithCrossbow",bShowProgress=1,ProgressDenominator=25,Icon=Texture'KillingFloorHUD.Achievements.Achievement_26',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[27]=(SteamName="KillXEnemiesFeedingOnCorpses",bShowProgress=1,ProgressDenominator=10,Icon=Texture'KillingFloorHUD.Achievements.Achievement_27',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[28]=(SteamName="KillXEnemiesWithGrenade",Icon=Texture'KillingFloorHUD.Achievements.Achievement_28',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[29]=(SteamName="Kill4EnemiesWithHuntingShotgunShot",Icon=Texture'KillingFloorHUD.Achievements.Achievement_29',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[30]=(SteamName="KillEnemyUsingBloatAcid",Icon=Texture'KillingFloorHUD.Achievements.Achievement_30',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[31]=(SteamName="KillFleshpoundWithMelee",Icon=Texture'KillingFloorHUD.Achievements.Achievement_31',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[32]=(SteamName="MedicKillXEnemiesWithKnife",Icon=Texture'KillingFloorHUD.Achievements.Achievement_32',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[33]=(SteamName="TurnXEnemiesIntoGiblets",bShowProgress=1,ProgressDenominator=500,Icon=Texture'KillingFloorHUD.Achievements.Achievement_33',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[34]=(SteamName="TurnXFleshpoundsIntoGiblets",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_34',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[35]=(SteamName="HealSelfXTimes",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloorHUD.Achievements.Achievement_35',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[36]=(SteamName="OnlySurvivorXWaves",bShowProgress=1,ProgressDenominator=10,Icon=Texture'KillingFloorHUD.Achievements.Achievement_36',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[37]=(SteamName="DonateXCashToTeammates",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloorHUD.Achievements.Achievement_37',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[38]=(SteamName="AcquireXMinutesOfZedTime",bShowProgress=1,ProgressDenominator=5,Icon=Texture'KillingFloorHUD.Achievements.Achievement_38',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[39]=(SteamName="MaxOutAllPerks",bShowProgress=1,ProgressDenominator=7,Icon=Texture'KillingFloorHUD.Achievements.Achievement_39',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[40]=(SteamName="KillPatriarchBeforeHeHeals",Icon=Texture'KillingFloorHUD.Achievements.Achievement_40',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[41]=(SteamName="KillPatriarchWithLAW",Icon=Texture'KillingFloorHUD.Achievements.Achievement_41',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[42]=(SteamName="DefeatPatriarchOnSuicidal",Icon=Texture'KillingFloorHUD.Achievements.Achievement_42',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[43]=(SteamName="WinFoundryNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_44',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[44]=(SteamName="WinFoundryHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_45',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[45]=(SteamName="WinFoundrySuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_46',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[46]=(SteamName="WinAsylumNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_47',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[47]=(SteamName="WinAsylumHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_48',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[48]=(SteamName="WinAsylumSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_49',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[49]=(SteamName="WinWyreNormal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_50',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[50]=(SteamName="WinWyreHard",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_51',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[51]=(SteamName="WinWyreSuicidal",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_52',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[52]=(SteamName="WinAll3SummerMapsNormal",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_53',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[53]=(SteamName="WinAll3SummerMapsHard",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_54',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[54]=(SteamName="WinAll3SummerMapsSuicidal",bShowProgress=1,ProgressDenominator=3,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_55',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[55]=(SteamName="Kill1000EnemiesWithPipebomb",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_56',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[56]=(SteamName="KillHuskWithFlamethrower",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_57',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[57]=(SteamName="KillPatriarchOnlyCrossbows",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_58',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[58]=(SteamName="Gib500ZedsWithM79",bShowProgress=1,ProgressDenominator=500,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_59',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[59]=(SteamName="LaserSightedEBRHeadshots25InARow",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_60',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[60]=(SteamName="Kill1000ZedsWithSCAR",bShowProgress=1,ProgressDenominator=1000,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_62',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[61]=(SteamName="Heal200TeammatesWithMP7",bShowProgress=1,ProgressDenominator=200,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_63',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[62]=(SteamName="Kill100FleshpoundsWithAA12",bShowProgress=1,ProgressDenominator=100,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_64',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[63]=(SteamName="Kill20CrawlersKilledInAir",bShowProgress=1,ProgressDenominator=20,Icon=Texture'KillingFloor2HUD.Achievements.Achievement_65',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    Achievements[64]=(SteamName="Obliterate10ZedsWithPipebomb",Icon=Texture'KillingFloor2HUD.Achievements.Achievement_61',LockedIcon=Texture'KillingFloorHUD.Achievements.KF_Achievement_Lock')
    }
     
  14. Flame

    Flame -Заслуженый кодер форума-

    ))
    ну вот
    а теперь посмотри на 1017 строчку
    GetAchievementDescription(Achievements.SteamName, Achievements.DisplayName, Achievements.Description);
    именно здесь и происходит вызов функции получающей где-то информацию о названии и описании ачивки )
     
  15. Bezumie

    Bezumie Photoshop



    Это жжесть ))
     
  16. Flame

    Flame -Заслуженый кодер форума-

    не
    вот чуток жести
    декомпилировал Engine.dll, перегнал для удобства в C код
    вот как бы код GetAchievementDescription
    Код:
    int __stdcall ASteamStatsAndAchievementsBase__execGetAchievementDescription(int a1, int a2)
    {
      char *v2; // edi@1
      int v3; // eax@1
      int v4; // edx@1
      int v5; // ecx@1
      int v6; // eax@1
      int v7; // edx@1
      int v8; // ecx@1
      int v9; // eax@6
      int v10; // edx@6
      int v11; // ecx@6
      int v12; // edx@11
      int v13; // ecx@12
      const unsigned __int16 *v14; // eax@13
      const unsigned __int16 *v15; // eax@14
      void *v16; // esp@14
      const unsigned __int16 *v18; // eax@15
      int v19; // esi@15
      const unsigned __int16 *v20; // eax@15
      char *v21; // eax@15
      char v22; // [sp+0h] [bp-A50h]@1
      char v23; // [sp+Ch] [bp-A44h]@15
      char v24; // [sp+80Ch] [bp-244h]@15
      char v25; // [sp+A10h] [bp-40h]@1
      char v26; // [sp+A1Ch] [bp-34h]@6
      char v27; // [sp+A2Ch] [bp-24h]@1
      char *v28; // [sp+A38h] [bp-18h]@9
      char *v29; // [sp+A3Ch] [bp-14h]@4
      char *v30; // [sp+A40h] [bp-10h]@1
      int v31; // [sp+A4Ch] [bp-4h]@1
    
      v2 = 0;
      v30 = &v22;
      v31 = 0;
      FString__FString(&v27);
      v3 = *(_DWORD *)(a1 + 12);
      v4 = *(_BYTE *)v3;
      v5 = *(_DWORD *)(a1 + 8);
      *(_DWORD *)(a1 + 12) = v3 + 1;
      LOBYTE(v31) = 1;
      ((void (__fastcall *)(int, int, int, char *))*(&GNatives + v4))(v5, v4, a1, &v27);
      FString__FString(&v25);
      GPropAddr = 0;
      v6 = *(_DWORD *)(a1 + 12);
      v7 = *(_BYTE *)v6;
      v8 = *(_DWORD *)(a1 + 8);
      *(_DWORD *)(a1 + 12) = v6 + 1;
      LOBYTE(v31) = 2;
      ((void (__fastcall *)(int, int, int, char *))*(&GNatives + v7))(v8, v7, a1, &v25);
      if ( GPropObject )
    	((void (__stdcall *)(void *))*(&GPropObject + 26))(GProperty);
      if ( GPropAddr )
    	v29 = (char *)GPropAddr;
      else
    	v29 = &v25;
      FString__FString(&v26);
      GPropAddr = 0;
      v9 = *(_DWORD *)(a1 + 12);
      v10 = *(_BYTE *)v9;
      v11 = *(_DWORD *)(a1 + 8);
      *(_DWORD *)(a1 + 12) = v9 + 1;
      LOBYTE(v31) = 3;
      ((void (__fastcall *)(int, int, int, char *))*(&GNatives + v10))(v11, v10, a1, &v26);
      if ( GPropObject )
    	((void (__stdcall *)(void *))*(&GPropObject + 26))(GProperty);
      if ( GPropAddr )
    	v28 = (char *)GPropAddr;
      else
    	v28 = &v26;
      v12 = *(_DWORD *)(a1 + 12) + 1;
      *(_DWORD *)(a1 + 12) = v12;
      if ( *(_BYTE *)v12 == 66 )
      {
    	v13 = *(_DWORD *)(a1 + 8);
    	*(_DWORD *)(a1 + 12) = v12 + 1;
    	((void (__thiscall *)(int, int, _DWORD))*(&GNatives + 66))(v13, a1, 0);
      }
      v14 = (const unsigned __int16 *)FString__operator_(&v27);
      if ( winGetSizeANSI(v14) )
      {
    	v15 = (const unsigned __int16 *)FString__operator_(&v27);
    	v16 = alloca(winGetSizeANSI(v15));
    	v30 = &v22;
    	v2 = &v22;
      }
      v18 = (const unsigned __int16 *)FString__operator_(&v27);
      v19 = winGetSizeANSI(v18);
      v20 = (const unsigned __int16 *)FString__operator_(&v27);
      v21 = winToANSI(v2, v20, v19);
      sub_103BCCA0(v21, &v24, &v23, *(_DWORD *)&v22);
      FString__operator_(v29, &v24);
      FString__operator_(v28, &v23);
      LOBYTE(v31) = 2;
      FString___FString(&v26);
      LOBYTE(v31) = 1;
      FString___FString(&v25);
      LOBYTE(v31) = 0;
      return FString___FString(&v27);
    }
    
    ну или в ассемблере
    Код:
    .text:103BF930 ; public: void __thiscall ASteamStatsAndAchievementsBase::execGetAchievementDescription(struct FFrame &, void * const)
    .text:103BF930         		public ?execGetAchievementDescription@ASteamStatsAndAchievementsBase@@QAEXAAUFFrame@@QAX@Z
    .text:103BF930 ?execGetAchievementDescription@ASteamStatsAndAchievementsBase@@QAEXAAUFFrame@@QAX@Z proc near
    .text:103BF930                                 		; DATA XREF: .rdata:off_106E08C8o
    .text:103BF930                                 		; .data:intASteamStatsAndAchievementsBaseexecGetAchievementDescriptiono ...
    .text:103BF930
    .text:103BF930 var_A44 		= byte ptr -0A44h
    .text:103BF930 var_244 		= byte ptr -244h
    .text:103BF930 var_40      	= byte ptr -40h
    .text:103BF930 var_34      	= byte ptr -34h
    .text:103BF930 var_24      	= byte ptr -24h
    .text:103BF930 var_18      	= dword ptr -18h
    .text:103BF930 var_14      	= dword ptr -14h
    .text:103BF930 var_10      	= dword ptr -10h
    .text:103BF930 var_C   		= dword ptr -0Ch
    .text:103BF930 var_4   		= dword ptr -4
    .text:103BF930 arg_0   		= dword ptr  8
    .text:103BF930
    .text:103BF930         		push	ebp
    .text:103BF931         		mov 	ebp, esp
    .text:103BF933         		push	0FFFFFFFFh
    .text:103BF935         		push	offset ?execGetAchievementDescription@ASteamStatsAndAchievementsBase@@QAEXAAUFFrame@@QAX@Z_SEH
    .text:103BF93A         		mov 	eax, large fs:0
    .text:103BF940         		push	eax
    .text:103BF941         		mov 	large fs:0, esp
    .text:103BF948         		sub 	esp, 0A38h
    .text:103BF94E         		push	ebx
    .text:103BF94F         		push	esi
    .text:103BF950         		push	edi
    .text:103BF951         		xor 	edi, edi
    .text:103BF953         		lea 	ecx, [ebp+var_24]
    .text:103BF956         		mov 	[ebp+var_10], esp
    .text:103BF959         		mov 	[ebp+var_4], edi
    .text:103BF95C         		call	ds:??0FString@@QAE@XZ ; FString::FString(void)
    .text:103BF962         		mov 	esi, [ebp+arg_0]
    .text:103BF965         		mov 	eax, [esi+0Ch]
    .text:103BF968         		movzx   edx, byte ptr [eax]
    .text:103BF96B         		mov 	ecx, [esi+8]
    .text:103BF96E         		inc 	eax
    .text:103BF96F         		mov 	[esi+0Ch], eax
    .text:103BF972         		lea 	eax, [ebp+var_24]
    .text:103BF975         		push	eax
    .text:103BF976         		mov 	eax, ds:?GNatives@@3PAP8UObject@@AEXAAUFFrame@@QAX@ZA ; void (UObject::** GNatives)(FFrame &,void * const)
    .text:103BF97B         		push	esi
    .text:103BF97C         		mov 	byte ptr [ebp+var_4], 1
    .text:103BF980         		call	dword ptr [eax+edx*4]
    .text:103BF983         		lea 	ecx, [ebp+var_40]
    .text:103BF986         		call	ds:??0FString@@QAE@XZ ; FString::FString(void)
    .text:103BF98C         		mov 	ecx, ds:?GPropAddr@@3PAEA ; uchar * GPropAddr
    .text:103BF992         		mov 	[ecx], edi
    .text:103BF994         		mov 	eax, [esi+0Ch]
    .text:103BF997         		movzx   edx, byte ptr [eax]
    .text:103BF99A         		mov 	ecx, [esi+8]
    .text:103BF99D         		inc 	eax
    .text:103BF99E         		mov 	[esi+0Ch], eax
    .text:103BF9A1         		lea 	eax, [ebp+var_40]
    .text:103BF9A4         		push	eax
    .text:103BF9A5         		mov 	eax, ds:?GNatives@@3PAP8UObject@@AEXAAUFFrame@@QAX@ZA ; void (UObject::** GNatives)(FFrame &,void * const)
    .text:103BF9AA         		push	esi
    .text:103BF9AB         		mov 	byte ptr [ebp+var_4], 2
    .text:103BF9AF         		call	dword ptr [eax+edx*4]
    .text:103BF9B2         		mov 	ecx, ds:?GPropObject@@3PAVUObject@@A ; UObject * GPropObject
    .text:103BF9B8         		mov 	ecx, [ecx]
    .text:103BF9BA         		cmp 	ecx, edi
    .text:103BF9BC         		jz  	short loc_103BF9CB
    .text:103BF9BE         		mov 	eax, ds:?GProperty@@3PAVUProperty@@A ; UProperty * GProperty
    .text:103BF9C3         		mov 	eax, [eax]
    .text:103BF9C5         		mov 	edx, [ecx]
    .text:103BF9C7         		push	eax
    .text:103BF9C8         		call	dword ptr [edx+68h]
    .text:103BF9CB
    .text:103BF9CB loc_103BF9CB:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+8Cj
    .text:103BF9CB         		mov 	ecx, ds:?GPropAddr@@3PAEA ; uchar * GPropAddr
    .text:103BF9D1         		mov 	eax, [ecx]
    .text:103BF9D3         		cmp 	eax, edi
    .text:103BF9D5         		jz  	short loc_103BF9DC
    .text:103BF9D7         		mov 	[ebp+var_14], eax
    .text:103BF9DA         		jmp 	short loc_103BF9E2
    .text:103BF9DC ; ---------------------------------------------------------------------------
    .text:103BF9DC
    .text:103BF9DC loc_103BF9DC:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+A5j
    .text:103BF9DC         		lea 	edx, [ebp+var_40]
    .text:103BF9DF         		mov 	[ebp+var_14], edx
    .text:103BF9E2
    .text:103BF9E2 loc_103BF9E2:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+AAj
    .text:103BF9E2         		lea 	ecx, [ebp+var_34]
    .text:103BF9E5         		call	ds:??0FString@@QAE@XZ ; FString::FString(void)
    .text:103BF9EB         		mov 	eax, ds:?GPropAddr@@3PAEA ; uchar * GPropAddr
    .text:103BF9F0         		mov 	[eax], edi
    .text:103BF9F2         		mov 	eax, [esi+0Ch]
    .text:103BF9F5         		movzx   edx, byte ptr [eax]
    .text:103BF9F8         		mov 	ecx, [esi+8]
    .text:103BF9FB         		inc 	eax
    .text:103BF9FC         		mov 	[esi+0Ch], eax
    .text:103BF9FF         		lea 	eax, [ebp+var_34]
    .text:103BFA02         		push	eax
    .text:103BFA03         		mov 	eax, ds:?GNatives@@3PAP8UObject@@AEXAAUFFrame@@QAX@ZA ; void (UObject::** GNatives)(FFrame &,void * const)
    .text:103BFA08         		push	esi
    .text:103BFA09         		mov 	byte ptr [ebp+var_4], 3
    .text:103BFA0D         		call	dword ptr [eax+edx*4]
    .text:103BFA10         		mov 	ecx, ds:?GPropObject@@3PAVUObject@@A ; UObject * GPropObject
    .text:103BFA16         		mov 	ecx, [ecx]
    .text:103BFA18         		cmp 	ecx, edi
    .text:103BFA1A         		jz  	short loc_103BFA29
    .text:103BFA1C         		mov 	eax, ds:?GProperty@@3PAVUProperty@@A ; UProperty * GProperty
    .text:103BFA21         		mov 	eax, [eax]
    .text:103BFA23         		mov 	edx, [ecx]
    .text:103BFA25         		push	eax
    .text:103BFA26         		call	dword ptr [edx+68h]
    .text:103BFA29
    .text:103BFA29 loc_103BFA29:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+EAj
    .text:103BFA29         		mov 	ecx, ds:?GPropAddr@@3PAEA ; uchar * GPropAddr
    .text:103BFA2F         		mov 	eax, [ecx]
    .text:103BFA31         		cmp 	eax, edi
    .text:103BFA33         		jz  	short loc_103BFA3A
    .text:103BFA35         		mov 	[ebp+var_18], eax
    .text:103BFA38         		jmp 	short loc_103BFA40
    .text:103BFA3A ; ---------------------------------------------------------------------------
    .text:103BFA3A
    .text:103BFA3A loc_103BFA3A:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+103j
    .text:103BFA3A         		lea 	edx, [ebp+var_34]
    .text:103BFA3D         		mov 	[ebp+var_18], edx
    .text:103BFA40
    .text:103BFA40 loc_103BFA40:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+108j
    .text:103BFA40         		mov 	edx, [esi+0Ch]
    .text:103BFA43         		inc 	edx
    .text:103BFA44         		mov 	eax, edx
    .text:103BFA46         		mov 	[esi+0Ch], edx
    .text:103BFA49         		cmp 	byte ptr [eax], 42h
    .text:103BFA4C         		jnz 	short loc_103BFA62
    .text:103BFA4E         		mov 	ecx, [esi+8]
    .text:103BFA51         		inc 	eax
    .text:103BFA52         		push	edi
    .text:103BFA53         		mov 	[esi+0Ch], eax
    .text:103BFA56         		mov 	eax, ds:?GNatives@@3PAP8UObject@@AEXAAUFFrame@@QAX@ZA ; void (UObject::** GNatives)(FFrame &,void * const)
    .text:103BFA5B         		push	esi
    .text:103BFA5C         		call	dword ptr [eax+108h]
    .text:103BFA62
    .text:103BFA62 loc_103BFA62:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+11Cj
    .text:103BFA62         		mov 	ecx, ds:?GFileManager@@3PAVFFileManager@@A ; FFileManager * GFileManager
    .text:103BFA68         		mov 	ebx, [ecx]
    .text:103BFA6A         		lea 	ecx, [ebp+var_24]
    .text:103BFA6D         		call	ds:??DFString@@QBEPBGXZ ; FString::operator*(void)
    .text:103BFA73         		mov 	esi, ds:?winGetSizeANSI@@YAHPBG@Z ; winGetSizeANSI(ushort const *)
    .text:103BFA79         		push	eax
    .text:103BFA7A         		call	esi ; winGetSizeANSI(ushort const *) ; winGetSizeANSI(ushort const *)
    .text:103BFA7C         		add 	esp, 4
    .text:103BFA7F         		cmp 	eax, edi
    .text:103BFA81         		jz  	short loc_103BFAA8
    .text:103BFA83         		lea 	ecx, [ebp+var_24]
    .text:103BFA86         		call	ds:??DFString@@QBEPBGXZ ; FString::operator*(void)
    .text:103BFA8C         		push	eax
    .text:103BFA8D         		call	esi ; winGetSizeANSI(ushort const *) ; winGetSizeANSI(ushort const *)
    .text:103BFA8F         		add 	eax, 7
    .text:103BFA92         		and 	eax, 0FFFFFFF8h
    .text:103BFA95         		add 	eax, 3
    .text:103BFA98         		add 	esp, 4
    .text:103BFA9B         		and 	eax, 0FFFFFFFCh
    .text:103BFA9E         		call	__alloca_probe
    .text:103BFAA3         		mov 	[ebp+var_10], esp
    .text:103BFAA6         		mov 	edi, esp
    .text:103BFAA8
    .text:103BFAA8 loc_103BFAA8:                   		; CODE XREF: ASteamStatsAndAchievementsBase::execGetAchievementDescription(FFrame &,void * const)+151j
    .text:103BFAA8         		lea 	ecx, [ebp+var_24]
    .text:103BFAAB         		call	ds:??DFString@@QBEPBGXZ ; FString::operator*(void)
    .text:103BFAB1         		push	eax
    .text:103BFAB2         		call	esi ; winGetSizeANSI(ushort const *) ; winGetSizeANSI(ushort const *)
    .text:103BFAB4         		add 	esp, 4
    .text:103BFAB7         		lea 	ecx, [ebp+var_24]
    .text:103BFABA         		mov 	esi, eax
    .text:103BFABC         		call	ds:??DFString@@QBEPBGXZ ; FString::operator*(void)
    .text:103BFAC2         		push	esi
    .text:103BFAC3         		push	eax
    .text:103BFAC4         		push	edi
    .text:103BFAC5         		call	ds:?winToANSI@@YAPADPADPBGH@Z ; winToANSI(char *,ushort const *,int)
    .text:103BFACB         		add 	esp, 0Ch
    .text:103BFACE         		lea 	edx, [ebp+var_A44]
    .text:103BFAD4         		push	edx
    .text:103BFAD5         		lea 	ecx, [ebp+var_244]
    .text:103BFADB         		push	ecx
    .text:103BFADC         		push	eax
    .text:103BFADD         		lea 	ecx, [ebx+8]
    .text:103BFAE0         		call	sub_103BCCA0
    .text:103BFAE5         		mov 	ecx, [ebp+var_14]
    .text:103BFAE8         		lea 	edx, [ebp+var_244]
    .text:103BFAEE         		push	edx
    .text:103BFAEF         		call	ds:??4FString@@QAEAAV0@PBG@Z ; FString::operator=(ushort const *)
    .text:103BFAF5         		mov 	ecx, [ebp+var_18]
    .text:103BFAF8         		lea 	eax, [ebp+var_A44]
    .text:103BFAFE         		push	eax
    .text:103BFAFF         		call	ds:??4FString@@QAEAAV0@PBG@Z ; FString::operator=(ushort const *)
    .text:103BFB05         		lea 	ecx, [ebp+var_34]
    .text:103BFB08         		mov 	byte ptr [ebp+var_4], 2
    .text:103BFB0C         		call	ds:__imp_??1FString@@QAE@XZ ; FString::~FString(void)
    .text:103BFB12         		lea 	ecx, [ebp+var_40]
    .text:103BFB15         		mov 	byte ptr [ebp+var_4], 1
    .text:103BFB19         		call	ds:__imp_??1FString@@QAE@XZ ; FString::~FString(void)
    .text:103BFB1F         		lea 	ecx, [ebp+var_24]
    .text:103BFB22         		mov 	byte ptr [ebp+var_4], 0
    .text:103BFB26         		call	ds:__imp_??1FString@@QAE@XZ ; FString::~FString(void)
    .text:103BFB2C         		lea 	esp, [ebp-0A50h]
    .text:103BFB32         		mov 	ecx, [ebp+var_C]
    .text:103BFB35         		mov 	large fs:0, ecx
    .text:103BFB3C         		pop 	edi
    .text:103BFB3D         		pop 	esi
    .text:103BFB3E         		pop 	ebx
    .text:103BFB3F         		mov 	esp, ebp
    .text:103BFB41         		pop 	ebp
    .text:103BFB42         		retn	8
    .text:103BFB42 ?execGetAchievementDescription@ASteamStatsAndAchievementsBase@@QAEXAAUFFrame@@QAX@Z endp
    

    пока мне это не помогло :laugh:
     
  17. prototype22

    prototype22 Солдат

    при удалении файла steam.dll пропадает описание ачивок (пиратка), может в нем и хранится текст? :)
     
  18. Arionwt1997

    Arionwt1997 Соучастник

    Да, ачивменты сидят в стиме, поэтому на некоторых пиратках со старым эмуляттором они отображаются карокозябрами. И повторюсь, изменив Engige.dll или Steam.dll ждите банана от Steam'овского VAC!
     
  19. Bezumie

    Bezumie Photoshop

    Steam VAC распространяется только на игры от Valve. На другие игры им абсолютно наплевать, т.к это не их проблемы. Уже сколько раз было видно что достижения кф ломают, и никого не закрыли. Даже у создателей КФ достижения взломаны.
     
  20. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    Маленькое замечание : имхо, не везде будет уместно.
    Если, например, литейная как-то обыгрывается описании ачивки, то Фаундри будет не в тему и нарушит всё.

    Коряво написал, но, надеюсь, наши энтузиасты-переводчики мысль поймут.