13

» WarCraft 3 / как сменить иконки приказов

Простите, похоже, что это нельзя сделать.
раскрыть
В файле UI\war3skins.txt есть что-то типа этого:
[Human]
Cursor=UI\Cursor\HumanCursor.mdl
MainMenu=UI\Glues\MainMenu\MainMenu3D\MainMenu3D.mdl
// CommandAttack=ReplaceableTextures\CommandButtons\BTNAttackHuman.blp
// CommandAttackGround=ReplaceableTextures\CommandButtons\BTNAttackGroundHuman.blp
CommandBasicStruct=ReplaceableTextures\CommandButtons\BTNHumanBuild.blp
// CommandCancel=ReplaceableTextures\CommandButtons\BTNCancelHuman.blp
// CommandHoldPosition=ReplaceableTextures\CommandButtons\BTNHoldPositionHuman.blp
// CommandMove=ReplaceableTextures\CommandButtons\BTNMoveHuman.blp
// CommandNewSkill=ReplaceableTextures\CommandButtons\BTNSkillzHuman.blp
// CommandPatrol=ReplaceableTextures\CommandButtons\BTNPatrolHuman.blp
// CommandStop=ReplaceableTextures\CommandButtons\BTNStopHuman.blp
RallyIndicatorDst=UI\Feedback\RallyPoint\RallyPoint.mdl
IdlePeon=ReplaceableTextures\CommandButtons\BTNPeasant.blp
PlacementCursor=ReplaceableTextures\Selection\SpellAreaOfEffect.blp
Вы можете попробовать заменить этот файл на свой, импортировав в свою карту по указанному пути, либо создать текстовый файл war3mapSkin.txt и записать туда данные строки для каждой расы.
Ой, простите, сейчас ещё раз проверю.
Загруженные файлы
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Кет, а, это вообще старая версия.
Здесь я просто показал, что можно заменить стандартные кнопки приказов на свои.
13

» XGM Team / [V9] Опрос по цветовым предпочтениям

Извините, что не по теме, но не было ли у вас желания добавить следующий функционал на сайт?
Так на мобильных устройствах выглядит гораздо приятнее:
А если по теме, то у меня сайт ассоциируется с этим цветом (#9EACB8):
В голосовании ближе был лазурный, но я случайно промахнулся и проголосовал за синий.
13

» WarCraft 3 / Моделинг (Тема ЗАКРЫТА) позже сделаю статью ...

Скинь модель, возможно у материала неправильно выставлен параметром смешивания.
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

ssbbssc, если вы про миникарту, то это я случайно нажал на кнопку скрытия ландшафта и долго не мог понять, в чём дело :)
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Lotus101, посмотри эту систему, либо сделай сам. Для движения снарядов нужно написать всего-лишь одну-две формулы. Ещё можешь посмотреть наработки для Unreal Engine, Unity, либо прочитать книги по игровой физике.
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Кстати, а нет ли планов как-то объединить мод с JNGP?
Для подключения RenderEdge к Jass New Gen Pack (exp. 2) скачайте и замените файл wehack.lua в папке с JNGP (заменяет вкладку с RtC). Либо отредактируйте его самостоятельно:
wehack.lua
Пример того, как выглядит wehack.lua после редактирования
-- # begin RenderEdge #
RenderEdgePath = grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "InstallPath")
haveRenderEdge = grim.exists(RenderEdgePath .. "\\RenderEdge.exe")

function toggleRenderEdgeDebug(checked)
    if checked then
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 1)
	else
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 0)
	end
end

if haveRenderEdge then
	RenderEdgeMenu = wehack.addmenu("RenderEdge")
	RenderEdgeEnabled = TogMenuEntry:New(RenderEdgeMenu, "Run with RenderEdge", nil, true)
	RenderEdgeDebug = TogMenuEntry:New(RenderEdgeMenu, "Debug Mode", 
	    function(self) toggleRenderEdgeDebug(self.checked) end, false)
	if grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug") == 1 then
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 1)
	else
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 0)
	end
end
-- # end RenderEdge #

function testmap(cmdline)
	if haveRenderEdge and RenderEdgeEnabled.checked then
		local pos = string.find(cmdline, ".exe")
		cmdline = string.sub(cmdline, 5 + pos)
		cmdline = RenderEdgePath .. "\\RenderEdge.exe " .. cmdline
	end
	
	if wh_opengl.checked then
		cmdline = cmdline .. " -opengl"
	end
	if wh_window.checked then
		cmdline = cmdline .. " -window"
	end
	wehack.execprocess(cmdline)
end
Постарайтесь склеиться с mix файлом. Он вариком автоматически подгружается, так что думаю, что есть шанс разобраться и вклеить туда запуск своего кода
Пробовал, но что-то не получалось, возможно, из-за того, что загрузка mix файлов происходит после создания Direct3D, а для работы мода нужно перехватить эту функцию до её вызова.
Возможно, сделаю два способа внедрения RenderEdge: (Или лучше оставить только один вариант?)
  • Запуск через .exe;
  • Внедрение библиотеки в игру с помощью d3d8.dll/d3d9.dll в паке с варкрафтом.
Я не силен в джассе, но преобразовать в свою карту умею. Мне бы хотелось добавить в карту систему перемещения камеры от 3 лица на правую кнопку мыши и чтобы она двигалась плавно за героем, и передвижение героя на клавиши wasd, можете ли вы добавить это в мод или функции написать?
Я уже добавил вращение и приближение камеры при зажатом Ctrl и правой клавише мыши. Выложу обновлённую карту-пример вместе со следующей версией мода. Но если надо сейчас, то вот код (ещё изменится):
Камера
library Camera initializer Camera_Init
{
    private float facing = 0.0;
    private float aoa = 0.0;
    private float curCamDist = 0.0;

    private float cameraTime = 0.03125;
    private float sens = 0.05;

    private bool bRBM = false;
    private bool bCtrlPressed = false;


    private void OnMouseMove()
    {
        if (bCtrlPressed && bRBM)
        {
            int centerX = GetWindowWidth()/2;
            int centerY = GetWindowHeight()/2;
            float deltaX = I2R(centerX - GetMouseX()) * sens;
            float deltaY = I2R(centerY - GetMouseY()) * sens;
            
            if (GetMouseX() != centerX)
            {
                facing += deltaX;
                if (facing > 360.0)   { facing -= 360.0; }
                elseif (facing < 0.0) { facing += 360.0; }

                SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_ROTATION, facing, cameraTime);
            }
            
            if (GetMouseY() != centerY)
            {
                aoa += deltaY;
                if (aoa > 360.0)     { aoa = 360.0; }
                elseif (aoa < 275.0) { aoa = 275.0; }
                
                SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_ANGLE_OF_ATTACK, aoa, cameraTime);
            }
            
            SetMousePos(centerX, centerY);
        }
    }

    private void OnKeyboardDown()
    {
        if (GetTriggerKey() == 17 && !IsKeyDown(1) && !IsKeyDown(2))
        {
			curCamDist = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE);
            BlockMouse(true);
            //ShowCursor(false);
            bCtrlPressed = true;
        }
    }

    private void OnKeyboardUp()
    {
        if (GetTriggerKey() == 17)
        {
            BlockMouse(false);
            //ShowCursor(true);
            bCtrlPressed = false;
        }
    }
                
    private void OnMouseDown()
    {
        bRBM = true;
        if (bCtrlPressed)
        {
            facing = GetCameraField(CAMERA_FIELD_ROTATION) * bj_RADTODEG;
            aoa = GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK) * bj_RADTODEG;
            SetMousePos(GetWindowWidth()/2, GetWindowHeight()/2);
        }
    }
            
    private void OnMouseUp()
    {
        bRBM = false;
    }

    private void OnWheelEvent()
    {
        if (bCtrlPressed)
        {
            curCamDist -= I2R(GetWheelDelta()) * 0.5;
            if (curCamDist < 300.0)
            {
                curCamDist = 300.0;
            }
            elseif (curCamDist > 3000.0)
            {
                curCamDist = 3000.0;
            }
            SetCameraFieldForPlayer(Player(0), CAMERA_FIELD_TARGET_DISTANCE, curCamDist, cameraTime);
        }
    }

    //===========================================================================
    private void Camera_Init()
    {
        trigger temp = CreateTrigger();
        TriggerRegisterTimerEvent(temp, cameraTime, true);
        TriggerAddAction(temp, function OnMouseMove);
        //TriggerRegisterMouseMoveEvent(temp);

        temp = CreateTrigger();
        TriggerAddAction(temp, function OnKeyboardDown);
        TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Down);

        temp = CreateTrigger();
        TriggerAddAction(temp, function OnKeyboardUp);
        TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Up);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnMouseDown);
        TriggerRegisterMouseEvent(temp, MB_Right, EVENT_Down);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnMouseUp);
        TriggerRegisterMouseEvent(temp, MB_Right, EVENT_Up);
	
        temp = CreateTrigger();
        TriggerAddAction(temp, function OnWheelEvent);
        TriggerRegisterMouseWheelEvent(temp);
    }
}
Готовую систему перемещения камеры от первого лица (легко переделать для третьего лица) можно взять отсюда, в RenderEdge есть все необходимые функции для реализации.
Загруженные файлы
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Melissa, я её уже делал, так что в следующей версии добавлю данную систему в карту-пример.
А что насчёт запуска на Win7? Всё должно отлично работать.
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Melissa, для этого можно просто написать свою систему на jass. Можно сделать ещё лучше - вращение камеры по двум осям при зажатой клавише мыши.
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Melissa, 32-битные поддерживаются, а вот XP - нет. Чтобы RenderEdge работал на XP, нужно просто пересобрать .exe с соответствующим параметром совместимости, вроде всё хорошо, игра начинает запускаться, но .dll не внедряется. Возможно я использую какие-то несовместимые с XP функции в методе InjectDLL, позже буду разбираться.
Такое предложение - сделать возможность в редакторе выделять несколько элементов. Экспорт/Удаление/Копирование станет гораздо быстрее.
Выделение каких элементов, GUI? Всё это можно реализовать самостоятельно с помощью функций, которые уже существуют.
13

» Game Dev / Sculpt Stream #2

darkowlom, а ты работал с Quixel Suite? Там наконец-то запустили Megascans, буквально две недели назад.
13

» WarCraft 3 / Шкала здоровья на экране

NekoriDes, тогда да, вариант с мультибоардом лучше. И реализуется легче.

YuliyaQuest, вот пример реализации через мультибоард: www.wc3c.net/showthread.php?t=98138
Загруженные файлы
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Обновление v0.1.0a (без изменения версии)

Скачать RenderEdge.dll (ссылка на скачививание в комментарии #77 обновлена).
  • Реализована поддержка широкоформатных мониторов;
Скриншоты игры при разных отношениях сторон:
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Кстати, только что с Ильёй ( darkowlom) доработали фикс, теперь игра адекватно себя ведёт при изменении размера окна. Осталось ещё немного протестировать его, чтобы убедиться, что всё будет работать при любом разрешении экрана, выбранном в игре, и при любом разрешении монитора.
GF RaiseD:
Там не камеру отдалять нужно, а гуи нормальный.
С этим будет посложнее, но будем стараться переделать на нормальный, не растянутый.
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Обновление 0.1.0a

Возможны вылеты во время загрузки карты!
  • Реализовано корректное получение информации из jass строки (поддержка всех языков, а не только английского);
  • Изменено название функции CtrlCreateInstance на CtrlNew;
  • Изменена функция CtrlSetText(int id, bool autoResize, string text) на CtrlSetText(int id, string text, bool bWrap);
  • Изменена функция CtrlGetFromMousePoint() на CtrlGetFromPoint(int x, int y);
  • Добавлена новая native функция GUISetFont;
  • Добавлена новая native функция CtrlIsText;
  • Функция IsMouseOverUI теперь работает корректно;
  • Удалена функция CtrlSetSolidColor, вместо этого используйте белую текстуру ("Textures\\white.blp") и функцию CtrlSetColor(int argb);
  • Исправлена проблема, связанная с невозможностью запустить RenderEdge после переустановки Warcraft по другому пути;
  • Добавлена поддержка TTF шрифтов (FreeType);
  • Добавлена поддержка многострочного текста и форматирования ("|n" (на новую строку), "|cAARRGGBB" (изменить цвет), "|b" (полужирный шрифт), "|i" (наклонный шрифт), "|r" (сброс к стандартному цвету текста и обычному шрифту));
  • Уменьшена задержка отдачи приказов юнитам в одиночной игре;
  • Добавлен логотип проекта;
  • Уменьшен размер RenderEdge.mpq;
  • Улучшен debug log.
native void CtrlSetText(int id, string text, bool bWrap) // bWrap: если текст заходит за пределы ширины, заданной при создании элемента GUI, то происходит переход на новую строку
native int CtrlGetHeight(int id) // Используется, чтобы узнать высоту элемента GUI после применения функции CtrlSetText с аргументом "bWrap" == true
native int CtrlGetFromPoint(int x, int y) // Возвращает элемент, расположенный по заданным координатам (если такого нет, возвращает -1)
native bool CtrlIsText(int id) // Является ли элемент GUI текстом?
native void GUISetFont(string name, int size) // Устанавливает шрифт для всех текстовых элементов GUI (по умолчанию используется "Consolas" с размером 13)


Полноценный Widescreen fix!

У меня только что получилось реализовать фикс для широкоформатных мониторов, теперь экран не выглядит растянутым на мониторах с отношением сторон равным 16:9!
Сейчас буду дорабатывать фикс, например, нужно немного отдалить камеру и добавить поддержку любого отношения сторон монитора (16:10, 21:9), динамическую подстройку под текущий размер окна.
13

» WarCraft 3 / как сделать стрельбу левой кнопкой мыши?

endryu, тебе нужна следующая функция:
function fun_pressed_LMB takes nothing returns nothing
	// Здесь делаешь то, что тебе нужно
endfunction