21

» WarCraft 3 / Memory Hack

хоткеи на лету уже разобрались как менять (у скиллов)? помоему самое профитное
и немного оффтопа, Лич, а ты реализовал пинги из доты2? ну типа чтоб при пингах на самой карте тож анимация рисовалась (помимо миникарты)
21

» WarCraft 3 / как найти утечки на jass?

что можно посоветовать:
  1. для отслеживания утечек используй количество хендлов (handle) если число неуклонно растёт - есть утекания. поиском поищи, где-то есть пример триггера который будет выводить тебе хэндлы
  2. для того чтоб убрать лишние лаги - можно грузить предварительно. Напрмер абилки (изза них прилично так лагает, при первом создании в самой игре), мы таким образом почти секундный лаг убрали в своей карте.
21

» WarCraft 3 / Создание текстового файла

ну это изврат знатный) я как раз о локе и писал
да и это не удобно в целом, плодить разные архивы, у одних игроков одно, у других другое, прикольно для сингловых ьольше решений, но там и без них плюс минус пофиг
21

» WarCraft 3 / Создание текстового файла

было бы неплохо внутрь самой карты писать, но там же нет доступа поидее (:
21

» WarCraft 3 / Создание текстового файла

можно, только это время, да и применение какое может быть? сейвы в mix формат записывать))?
21

» WarCraft 3 / Полноценный Антимапхак.

okfinch:
how to send text too all player if hack player detected ?
u need to sync this data, any one to inform other games (i mean other players) that current player uses mh.
One other way is force black screen mask for 99999seconds, disable user controls, enable cinematic mode, if player keeping stacked and disconnected bnet, might he is a hacker.
21

» WarCraft 3 / Конкурс карт WC3 на 50 000 рублей!

16GB,
Не проще ли перепилить КФ тогда? понимаешь о чём я?) Конкурс на апдейты уместнее бы смотрелся в таком случае, и контент по уровню явно не хуже можно сделать, и времени меньше потратить.
21

» WarCraft 3 / Конкурс карт WC3 на 50 000 рублей!

Nosferoh:
Загляни несколько раз на стримы ХАЙВа, рано или поздно Твич предложит и другие похожие каналы. Тогда и увидишь, во что сейчас играют.
Я бы не доверял так твичу, в этом плане. Выборка мала имхо, то что стримят, то и смотрят, де факто. Если какой то жанр не стримится, это не значит что он менее популярный. Возможно игровые сессии более короткие и прочий ряд факторов. Смотреть людям мб менее интересно. Но это не связано с количеством реально играющих людей в ту или иную карту. Какие то карты более пригодные к игре, нежели стримингу.
Более реальные показатели: количество реальных игроков, человекочасов в игре, сыгранных игр на боте. Эти показатели на мой взгляд ближе к правде, нежели твич.
PrincePhoenix, вот на вскидку пара вариантов
  • сообщить о том, что идея конкурса имеет изъяны.
  • не участвовать
10к подели на команду и на 3 месяца работы. ?
По поводу "прикольно" вообще не понял. Для меня смысл игр в фане получаемом от них. К чему эта мелочность и придирки). Рекомендую книгу Теория фана, Костэра, к слову.
21

» WarCraft 3 / Конкурс карт WC3 на 50 000 рублей!

Doc:
Эээ а чего ты ожидал? Все эти мега рпг и супер скилловые арены среднему игроку не интересны. Интересно дрочево крипов, застройка, бесконечный фарм.
Ну как бы не согласен. Очень много карт на микро в топах, пуджи hhf, футбольчики и прочее.(список куда шире)
21

» WarCraft 3 / Конкурс карт WC3 на 50 000 рублей!

Честно, выглядит как конкурс на лучшую переделку из списка 19 карт. (ну или перезапуск) Оригинальными идеями список особо не блещет, опять ТДшки опять прочее. Неужели варик настолько однообразен. Есть же всякие оригинальные идеи.. гранд прикс тот же взять и оживить. 101 Rounds, Platform escape, Murloc Shooter от 16GB, и прочие, да идей собственно куча хороших и оригинальных, далеких от полного раскрытия на движке вара, но вы хотите контент который будет конкурировать с тем что уже и так в довольно неплохом объёме имеется (и жанрах). Не лучше ли было действительно что то прикольное сделать.
Либо запускать конкурс на лучший апдейт существующей мапы (популярной, из тех, что вам интересны как раз), где оцениваться будет работа по попаданию по духу автора, объёму нововведений, пофикшеных багов и прочему.
Да и призовые на мой взгляд неочень. Ибо подели их между победителями (а победить может и командная работа), то на такой срок вообще незначительные деньги. И это в дни когда близзы убивают варик очередными патчами, и интереса к варику у многих скилловых авторов попросту нет.
Всё выше сказанное сугубо моё имхо, с ним не обязательно соглашаться, но я вроде койчего в мапмейкинге смыслю, и даже конкурс карт последний выигрывал, из проводимых тут.
21

» WarCraft 3 / Конкурс карт WC3 на 50 000 рублей!

Андреич:
даже если ты пишешь безупречный код... у тебя красивое оформление и ландшафт.... это мало что значит на данном конкурсе...
ту больше упор в идею, её реализацию... и баланс... (последнее похоже будет подвергнуто весьма субъективной оценке...)
Фонд маловат для "безупречной" реализации
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

Вроде более менее разобрались.
В начале игры происходит лаг, который не дает двигать камеру. Его продолжительность меняется от случая к случаю.
Так же если происходят лаги вызванные происходящим в самой игре (зависит от конкретных решений внутри карты) могут так же появляться
лаги, препятствующие передвижению камеры.
В самом лучшем случае, при просмотре реплея, игра начинается примерно с 2.9 сек (проверялось на пустой melee карте)
Таким образом между концом вступительного игрового лага и началом игры в реплее, есть окно, внутри которого можно расположить проверку. (как уже писал выше, передвижение камеры в реплее не работает, если оно вызывалось до старта реплея, 2.9~)
На 0.101 можно не смотреть (т.к выполняется при инициализации карты, в реплее в том числе)
Немного про SetCameraBounds, проверяет текущее положение камеры и двигает её в установленные границы, но не делает этого, если игра свёрнута, в реплее работает так же, как и в обычной игре.
код на котором остановились
library ReplayLib

struct ReplayLib extends array
    readonly static boolean wasPaused = false
    readonly static boolean wasReplay = false
    readonly static boolean wasMeasured = false
    
    private static real x = 0
    private static real y = 0
    
    private static real tx1 = 0
    private static real tx2 = 0
    
    private static real newx1 = 0
    private static real newx2 = 0
    
    private static real minX = 0
    private static real minY = 0
    private static real maxX = 0
    private static real maxY = 0
    
    private static method onReplayTest2 takes nothing returns nothing
        call DestroyTimer(GetExpiredTimer())
        
        set newx2 = GetCameraTargetPositionX()
        
        set wasReplay = (((tx1 != newx1) and (tx2 != newx2)) and (not wasPaused))
        set wasMeasured = true
        
        call SetCameraBounds(minX, minY, minX, maxY, maxX, maxY, maxX, minY)
        call SetCameraPosition(x, y)
        
        call EnableUserControl(true)
    endmethod
    
    // Tests if we are running in a replay
    private static method onReplayTest1 takes nothing returns nothing
        set newx1 = GetCameraTargetPositionX()
        
        call SetCameraPosition(tx2, y) // Pan camera (doesn't occur near start of replays)
        
        call TimerStart(GetExpiredTimer(), 0.2, false, function thistype.onReplayTest2)
    endmethod
    
    private static method onPausedTest takes nothing returns nothing
        set wasPaused = (x == GetCameraTargetPositionX())
        
        call SetCameraPosition(tx1, y) // Pan camera (doesn't occur near start of replays)
        
        call TimerStart(GetExpiredTimer(), 0.5, false, function thistype.onReplayTest1)
    endmethod
    
    // Schedules the replay test as soon as possible
    private static method onInit takes nothing returns nothing
        call EnableUserControl(false) // Block users from manually moving the screen
        
        set x = GetCameraTargetPositionX()
        set y = GetCameraTargetPositionY()
        
        set tx1 = x + 2
        set tx2 = x + 3
        
        set minX = GetCameraBoundMinX()
        set minY = GetCameraBoundMinY()
        set maxX = GetCameraBoundMaxX()
        set maxY = GetCameraBoundMaxY()
        
        call SetCameraBounds(x + 1, y, x + 1, y, tx2, y, tx2, y)
        
        call TimerStart(CreateTimer(), 1.1, false, function thistype.onPausedTest)
    endmethod
endstruct

// Returns the outcome of the replay test
function IsReplay takes nothing returns boolean
    if (not ReplayLib.wasMeasured) then
        call BJDebugMsg("[ReplayLib] Error: used IsReplay() before value was ready.")
    endif
    return ReplayLib.wasReplay
endfunction

endlibrary
Загруженные файлы
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

ты на дисинхрон тестил?
Дак нет, я имею ввиду, что дальше то, только то использовать с такой булей, что может локально без десинков работать, это основное правило работы с асинк данными.
В общем это бОльше от нужд зависит, ну вверху я писал, что мне только с отображением поиграться, так что достаточно).
Основные приёмы как не ловить десинк в примерах по getlocalplayer() описаны
В общем пока такие результаты:
Реплей проигрывается с 5-6 игровой секунды, соответственно если двигать и проверять камеру до 5 секунды, в реплее движения камеры не будет.
Но если игрок долго "залипает" в альтабе, то движения камеры так же может и не быть. Вопрос в том каким образом отловить alt+tab или паузу (isPausedGame).
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

ну просто GetCameraTargetPositionX() SetCameraPosition() это локальные функции, их можно одновременно для всех игроков запустить спокойно, поправьте если не так)).
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

ловким движением руки из кода выкидываются циклы, а смысл не меняется.
private function IsInGame takes nothing returns boolean
local integer counter = 1
local real camerax
local real cameray
local real x
local real y
local boolean output
loop
    exitwhen counter > 12
    if GetLocalPlayer() == Player(counter-1) then
        set camerax = GetCameraTargetPositionX()
        set cameray = GetCameraTargetPositionY()
    endif
    set counter = counter + 1
endloop
set counter = 1
call PauseGame(true)
call TriggerSleepAction(0)
loop
    exitwhen counter > 12
    if GetLocalPlayer() == Player(counter-1) then
        call SetCameraPosition(camerax + 1,cameray + 1)
    endif
    set counter = counter + 1
endloop
call TriggerSleepAction(0)
call PauseGame(false)
set counter = 1
loop
    exitwhen counter > 12
    if GetLocalPlayer() == Player(counter-1) then
        set x = GetCameraTargetPositionX()
        if x == camerax + 1 then
            set output = true
        else
            set output = false
        endif
        call SetCameraPosition(camerax,cameray)
    endif
    set counter = counter + 1
endloop
return output
endfunction 
private function IsInGame takes nothing returns boolean
local integer counter = 1
local real camerax
local real cameray
local real x
local real y
local boolean output
        set camerax = GetCameraTargetPositionX()
        set cameray = GetCameraTargetPositionY()

call PauseGame(true)
call TriggerSleepAction(0)

        call SetCameraPosition(camerax + 1,cameray + 1) 

call TriggerSleepAction(0)
call PauseGame(false)

        set x = GetCameraTargetPositionX()
            set output = (x == camerax)
        call SetCameraPosition(camerax,cameray)

return output
endfunction 
Смотри код внимательнее
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

quq_CCCP:
awesomesk1ll, ты можешь синкнуть между всеми значение InGame, кстати там вроде все игроки проверяются, в мультиплеере кто-нить тестил?
та на это не смотри особо) эта либа корявая же..
GetCameraTargetPositionX() возвращает локальное X же?) нафига там цикл вообще.
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

quq_CCCP:
На афкашеров пофигу, что им лишнее что то показалось, чаще всего такие вовсе не приходят или ливают.
Да не, часто бывает что пока загрузка идёт кто-то может табнуться мессенжеры/вконтачи посмотреть, или музон переключить.. Нельзя так игроков хоронить корявыми решениями)
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

quq_CCCP:
IceFog, Ну уже хорошо, что работает.
Игра может быть свёрнута и не в реплее, в этом беда..
Если я буду выводить реплейную инфу во время игры будет не очень хорошо).
21

» WarCraft 3 / Система погодных эффектов и тумана

Что-то как-то ничего особого. Ну дождик, ну туман
Готовые для использования.
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

quq_CCCP:
Ну либо игрок обсерв как в доте
Этот вариант не подходит, т.к у нас все 12 слотов доступны для игры).
quq_CCCP:
Проверял эту штуку?
Пока не успел, не дома. Прикидываю варианты "что потестить" )
21

» WarCraft 3 / Есть ли рабочий способ проверки на просмотр replay'я

Есть ещё такие ссылки по теме
Но я так понимаю инфа опубликованная по ним уже не актуальна.
В продолжение вопроса есть ещё одна мысль, как работает GetLocalPlayer() при проигрывании реплея?
Например если изначально сделать отображение всей "доп инфы" на старте игры для всех, а затем сразу же локально скрыть её.
21

» WarCraft 3 / Важная информация об обновлении 1.28

quq_CCCP:
awesomesk1ll, Не берут, прописка США нид, так же нид хорошое досье, у нас ни у кого нету необходимого, кроме сомнительной славы читеров\крякеров, модмейкеров, там эффективные менеджеры таких не пускают даже на порог.
Неужели на основании работы не пропишешься.
Хорошее досье, с реальными практическими результатами, включающее в себя читы, кряки, моды и т.д. Это намного лучше чем то что сейчас, похоже что люди вообще не понимают во что лезут и как с этим работать. Ну либо не болеют за игру, раз так запустили..
"Эффективные" менеджеры говоришь, дак надо найти их в соц сетях, деанонимизировать и разнести в пух и прах. То что сейчас творится с нашим любимым вариком их заслуга в том числе.
21

» WarCraft 3 / Важная информация об обновлении 1.28

Doc,
да имхо, если есть тут кто с знанием c/с+, может смело на вакансию откликаться...
21

» WarCraft 3 / Важная информация об обновлении 1.28

Astra:
New Preload protection:
result = Storm_588(Dest, "\\..\\");
if ( !result )
{
result = Storm_588(Dest, "\\..");
if ( !result )
{
result = Storm_588(Dest, "..\\");
if ( !result )
{
result = Storm_588(Dest, "/../");
if ( !result )
{
result = Storm_588(Dest, "/..");
if ( !result )
{
result = Storm_588(Dest, "../");
if ( !result )
{

Это просто прорыв "Classic Developers Team" в части защиты прелоада)))))))))))))))))))
Было выше же..