Использовать сторонний импорт, тогда можно будет разделить модели по графикам указывая нужный тип графики в менеджере импорта (аккуратней иногда всё слетает, сделайте резервную копию)
что влечет увлечению карты, смысл импортировать модели, которые уже заложены в игре
Обладатели классик ключей не имеют этой проблемы (они просто видят обычные модели, а не тени), то есть проблема наблюдается только у тех, кто насильно выставляет себе SD графику в настройках, так что это больше проблема близов чем ваша
То есть у кого классика, нормально видят модели персонажей, если они прописаны через reforged hd?
Zetox, на старых патчах это делалось весь тяжело, не будем вспоминать
На новых модель не приаттаченкую к юниту, а свободную можно вращать по любой оси, и даже вывернуть вверх ногами, что позволит ходить по стенам или потолку
BlzSetSpecialEffectPitch(eff,math.rad(180))
Имел ввиду модель модель декорации) это нужно для блок путей...
Получилось вот так:
Решил не заморачиваться с полноценной физикой и без прыжков, так как я не могу определить потолок объектов. Просто брал свою координату и сравнивал со всеми возможными координатами Z в этой точке. И в зависимости от разницы Z моего юнита и Высоты точек у координаты куда он идет, выставлял у юнита нужную высоту.
И кстати, как убирается пропажа моста, при повороте камеры ?
Использовал фреймы, небольшая сетка, 8 вправо, 8 влево, вверх и вниз по 6. world2win - работает с погрешностью, потому что камера реальная и которая должна устанавливается имеют небольшое смещение. У меня, изменение положение камеры не мгновенные (вроде каждый 0.01 сек, меняется положение камеры на 10% от разницы, на сколько она должна поменяться)
NanO, кстати, что с фпс в игре ? из такой камеры в игре, у меня впс падает с 300 до 120-80 (на более слабых машинах был бы в разы меньше), приходится оптимизировать (уменьшать кол-во декораций).
Zetox, так что удалось получить экранные координаты? можно принтами как-то проследить это?
нет, пришлось сделать небольшую сетку фреймов 16 на 12 (ещё обрежу ее по углам). Сейчас через подгонку параметров и постепенного перехода удалось добиться нормального фпс и плавность камеры.
Да я ее использовал в примере. Да проблема, как я понял в BlzGetTriggerPlayerMouseX/Y(), а точнее в срабатывании триггера. Передавая положение мыши из вне, каждые 0.01 сек работает так как нужно. Все таки придется использовать фреймы, но их количество жестко ограничу
CAMERA
local TypeUnit = FourCC("dgui")
local GL4Cam = Location(0,0)
local AtUnit = null
local DeltaZ = 0
local WidthScreen = 0.544
local HeightScreen = 0.302
local AspectRatio = WidthScreen/HeightScreen
CAMERA = {}
function CAMERA:New()
local obj = {}
self.__index = self
local OBB = setmetatable(obj, self)
obj.CostumValue = 0
obj.change = true
obj.Eye = VECTOR3:New_1(0.0,-922.668,DeltaZ+1367.912)
obj.At = VECTOR3:New_1(0, 0, DeltaZ)
obj.Distance = 0
obj.Yaw = 0
obj.Pitch = 0
obj.Roll = 0
obj.AxisX = VECTOR3:new()
obj.AxisY = VECTOR3:new()
obj.AxisZ = VECTOR3:new()
obj.View = MATRIX4:new()
obj.Projection = Matrix4Perspective2(MATRIX4:new(), 0.5, 10000, -WidthScreen/2, WidthScreen/2, -HeightScreen/2, HeightScreen/2)
OBB:UpdateDistanceYawPitch()
OBB:UpdateAxisMatrix()
return setmetatable(obj, self)
end
function CAMERA:Win2World(X,Y,Range)
local VECTOR3 Output = VECTOR3:new()
Output.x = self.Eye.x+self.AxisZ.x*Range+X*self.AxisX.x*WidthScreen*Range+Y*self.AxisY.x*HeightScreen*Range
Output.y = self.Eye.y+self.AxisZ.y*Range+X*self.AxisX.y*WidthScreen*Range+Y*self.AxisY.y*HeightScreen*Range
Output.z = self.Eye.z+self.AxisZ.z*Range+X*self.AxisX.z*WidthScreen*Range+Y*self.AxisY.z*HeightScreen*Range
return Output
end
function CAMERA:Win2World (X,Y,Range)
local VECTOR3 Output = VECTOR3:new()
Output.x = self.Eye.x+self.AxisZ.x*Range+X*self.AxisX.x*WidthScreen*Range+Y*self.AxisY.x*HeightScreen*Range
Output.y =self.Eye.y+self.AxisZ.y*Range+X*self.AxisX.y*WidthScreen*Range+Y*self.AxisY.y*HeightScreen*Range
Output.z = self.Eye.z+self.AxisZ.z*Range+X*self.AxisX.z*WidthScreen*Range+Y*self.AxisY.z*HeightScreen*Range
return Output
end
function CAMERA:World2Win (X,Y,Z)
local Pos = VECTOR3:New_1(X, Y, Z)
local b
Vec3Transform_2(Pos, Pos, self.View)
b = Pos.z < 0
Vec3Transform_2(Pos, Pos, self.Projection)
if b then
Pos.z = -Pos.z
end
return Pos
end
function CAMERA:UpdateDistanceYawPitch ()
local dx = self.At.x-self.Eye.x
local dy = self.At.y-self.Eye.y
local dz = self.At.z-self.Eye.z
local len2d
self.Distance = SquareRoot(dx*dx+dy*dy+dz*dz)
self.Yaw = Atan2(dy, dx)
len2d = SquareRoot(dx*dx+dy*dy)
self.Pitch = Atan2(dz, len2d)
end
function CAMERA:UpdateAxisMatrix ()
local mat
Vec3Normalize(self.AxisZ, Vec3Subtract(self.AxisZ, self.At, self.Eye))
mat = Matrix3RotationAxis(MATRIX3:new(), self.AxisZ, -self.Roll)
Vec3Normalize(self.AxisX, Vec3Cross(self.AxisX, self.AxisZ, VECTOR3.oneZ))
Vec3Transform_1(self.AxisY, Vec3Cross(self.AxisY, self.AxisX, self.AxisZ), mat)
Vec3Transform_1(self.AxisX, self.AxisX, mat)
Matrix4Look(self.View, self.Eye, self.AxisX, self.AxisY, self.AxisZ)
mat = nil
end
function CAMERA:ApplyCameraForPlayer (p,IgnorChange)
if GetLocalPlayer() == p then
SetCameraField(CAMERA_FIELD_ROTATION, self.Yaw*bj_RADTODEG, 0)
SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, self.Pitch*bj_RADTODEG, 0)
SetCameraField(CAMERA_FIELD_ROLL, self.Roll*bj_RADTODEG, 0)
SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, self.Distance, 0)
SetCameraTargetController(AtUnit, self.At.x, self.At.y, false)
SetCameraField(CAMERA_FIELD_ZOFFSET, self.At.z-DeltaZ, 0)
end
if self.change or IgnorChange then
self.change = false
return true
end
return false
end
function CAMERA:SetPosition (x,y,z)
local dx = x-self.At.x
local dy = y-self.At.y
local dz = z-self.At.z
self.Eye.x = self.Eye.x+dx
self.Eye.y = self.Eye.y+dy
self.Eye.z = self.Eye.z+dz
self.At.x = x
self.At.y = y
self.At.z = z
self.change = true
end
function CAMERA:SetEyeAndAt (ex,ey,ez,tx,ty,tz)
self.Eye.x = ex
self.Eye.y = ey
self.Eye.z = ez
self.At.x = tx
self.At.y = ty
self.At.z = tz
self:UpdateDistanceYawPitch()
self:UpdateAxisMatrix()
self.change = true
end
function CAMERA:SetYawPitchRoll (yaw,pitch,roll,EyeLock)
local Z = self.Distance*Sin(pitch)
local XY =self.Distance*Cos(pitch)
local X = XY*Cos(yaw)
local Y = XY*Sin(yaw)
self.Yaw = yaw
self.Pitch = pitch
self.Roll = roll
if EyeLock then
self.At.x = self.Eye.x+X
self.At.y = self.Eye.y+Y
self.At.z = self.Eye.z+Z
else
self.Eye.x = self.At.x-X
self.Eye.y = self.At.y-Y
self.Eye.z = self.At.z-Z
end
self:UpdateAxisMatrix()
self.change = true
end
local TempX = 0
local TempY = 0
function InitDeltaZ_Timer()
DeltaZ = GetCameraTargetPositionZ()
SetCameraPosition(TempX, TempY)
DestroyTimer(GetExpiredTimer())
end
function InitDeltaZ()
TempX = GetCameraTargetPositionX()
TempY = GetCameraTargetPositionY()
SetCameraPosition(0, 0)
TimerStart(CreateTimer(), 0.01, false, function()
DeltaZ = GetCameraTargetPositionZ()
SetCameraPosition(TempX, TempY)
DestroyTimer(GetExpiredTimer())
end)
end
function InitCameraL()
AtUnit = CreateUnit(Player(15), TypeUnit, 0, 0, 0)
ShowUnit(AtUnit, false)
InitDeltaZ()
end
Я и так всё уже аккуратно перенёс по тестил) xgm.guru/p/wc3/lua-wgeometry
кроме камеры
Но там надо width/height тюнинговать
это вот эти переменные
local screenWidth = 0.544
local screenHeight = 0.302
попробуй, может у тебя получится
я ещё дописал комменты к некоторым совершенно неясным функциям перспективы, их щас можно хотябы погуглить
думаю, там ещё где-то проблемы с проекцией
небо - дальность прорисовки камеры, она задается FAR_Z че-то такое
А я переносил строчку в строчку и вышло (пока небыло времени lua изучить) D: Да и саму библиотеку CAMERA надо доработать - реализовать плавный переход.... слишком сильно дергается, когда глаз находится практически за спиной юнита, а точка, куда смотрит камера, немного дальше.
function R2I_n(r)
local integer i = R2I(r)
if (r < I2R(i)+0.5) then
return i
else
return i+1
end
end
VECTOR3 = {}
function VECTOR3:new()
local obj = {}
obj.x = 0
obj.y = 0
obj.z = 0
self.__index = self
return setmetatable(obj, self)
end
function VECTOR3:New_0()
local obj = {}
obj.x = 0
obj.y = 0
obj.z = 0
self.__index = self
return setmetatable(obj, self)
end
function VECTOR3:New_1(x,y,z)
local obj = {}
obj.x = x
obj.y = y
obj.z = z
self.__index = self
return setmetatable(obj, self)
end
function VECTOR3:New_2(v)
local obj = {}
obj.x = v.x
obj.y = v.y
obj.z = v.z
self.__index = self
return setmetatable(obj, self)
end
function VECTOR3:SetValues (x,y,z)
self.x = x
self.y = y
self.z = z
end
function VECTOR3:GetValues ()
print(self.x,self.y,self.z )
end
function VECTOR3:Length ()
return SquareRoot(self.x*self.x+self.y*self.y+self.z*self.z)
end
function VECTOR3:LengthSq ()
return self.x*self.x+self.y*self.y+self.z*self.z
end
function Vec3Add(Output,v1,v2)
Output.x = v1.x + v2.x
Output.y = v1.y + v2.y
Output.z = v1.z + v2.z
return Output
end
function Vec3Subtract(Output,v1,v2)
Output.x = v1.x - v2.x
Output.y = v1.y - v2.y
Output.z = v1.z - v2.z
return Output
end
function Vec3Scale(Output,v,r)
Output.x = v.x * r
Output.y = v.y * r
Output.z = v.z * r
return Output
end
function Vec3Division(Output,v,r)
Output.x = v.x / r
Output.y = v.y / r
Output.z = v.z / r
return Output
end
function Vec3Length(v)
return SquareRoot(v.x*v.x+v.y*v.y+v.z*v.z)
end
function Vec3LengthSq(v)
return v.x*v.x+v.y*v.y+v.z*v.z
end
function Vec3Normalize( Output, v )
local len = SquareRoot(v.x*v.x+v.y*v.y+v.z*v.z)
Output.x = v.x/len
Output.y = v.y/len
Output.z = v.z/len
return Output
end
function Vec3Dot (v1,v2)
return v1.x*v2.x+v1.y*v2.y+v1.z*v2.z
end
function Vec3Cross ( Output, v1, v2 )
local y = v1.z * v2.x - v1.x * v2.z
local z = v1.x * v2.y - v1.y * v2.x
Output.x = v1.y * v2.z - v1.z * v2.y
Output.y = y
Output.z = z
return Output
end
function Vec3Transform_1 ( Output, v, m )
local y = v.x*m.m12+v.y*m.m22+v.z*m.m32
local z = v.x*m.m13+v.y*m.m23+v.z*m.m33
Output.x = v.x*m.m11+v.y*m.m21+v.z*m.m31
Output.y = y
Output.z = z
return Output
end
function Vec3Transform_2 (Output, v, m )
local y = v.x*m.m12+v.y*m.m22+v.z*m.m32+m.m42
local z = v.x*m.m13+v.y*m.m23+v.z*m.m33+m.m43
local w = v.x*m.m14+v.y*m.m24+v.z*m.m34+m.m44
Output.x = (v.x*m.m11+v.y*m.m21+v.z*m.m31+m.m41)/w
Output.y = y/w
Output.z = z/w
return Output
end
MATRIX3 = {}
function MATRIX3:new()
local obj = {}
self.__index = self
return setmetatable(obj, self)
end
function MATRIX3:New_0()
local obj = {}
obj.m11 = 0
obj.m12 = 0
obj.m13 = 0
obj.m21 = 0
obj.m22 = 0
obj.m23 = 0
obj.m31 = 0
obj.m32 = 0
obj.m33 = 0
self.__index = self
return setmetatable(obj, self)
end
function MATRIX3:New_1(r11,r12,r13,r21,r22,r23,r31,r32,r33)
local obj = {}
obj.m11 = r11
obj.m12 = r12
obj.m13 = r13
obj.m21 = r21
obj.m22 = r22
obj.m23 = r23
obj.m31 = r31
obj.m32 = r32
obj.m33 = r33
self.__index = self
return setmetatable(obj, self)
end
function MATRIX3:New_2(m)
local obj = {}
obj.m11 = m.m11
obj.m12 = m.m12
obj.m13 = m.m13
obj.m21 = m.m21
obj.m22 = m.m22
obj.m23 = m.m23
obj.m31 = m.m31
obj.m32 = m.m32
obj.m33 = m.m33
self.__index = self
return setmetatable(obj, self)
end
function MATRIX3:SetValues(r11,r12,r13,r21,r22,r23,r31,r32,r33)
self.m11 = r11
self.m12 = r12
self.m13 = r13
self.m21 = r21
self.m22 = r22
self.m23 = r23
self.m31 = r31
self.m32 = r32
self.m33 = r33
return self
end
function Matrix3Multiply (Output, M1, M2 )
return Output:SetValues(M1.m11*M2.m11+M1.m21*M2.m12+M1.m31*M2.m13,M1.m12*M2.m11+M1.m22*M2.m12+M1.m32*M2.m13,M1.m13*M2.m11+M1.m23*M2.m12+M1.m33*M2.m13,M1.m11*M2.m21+M1.m21*M2.m22+M1.m31*M2.m23,M1.m12*M2.m21+M1.m22*M2.m22+M1.m32*M2.m23,M1.m13*M2.m21+M1.m23*M2.m22+M1.m33*M2.m23,M1.m11*M2.m31+M1.m21*M2.m32+M1.m31*M2.m33,M1.m12*M2.m31+M1.m22*M2.m32+M1.m32*M2.m33,M1.m13*M2.m31+M1.m23*M2.m32+M1.m33*M2.m33)
end
function Matrix3RotationX (Output, a)
return Output:SetValues(1,0,0,0,Cos(a),-Sin(a),0,Sin(a),Cos(a))
end
function Matrix3RotationY (Output, a)
return Output:SetValues(Cos(a),0,Sin(a),0,1,0,-Sin(a),0,Cos(a))
end
function Matrix3RotationZ (Output, a)
return Output:SetValues(Cos(a),-Sin(a),0,Sin(a),Cos(a),0,0,0,1)
end
function Matrix3RotationAxis (Output, v,a)
local cosa = Cos(a)
local sina = Sin(a)
return Output:SetValues(cosa+(1-cosa)*v.x*v.x,(1-cosa)*v.x*v.y-sina*v.z,(1-cosa)*v.x*v.z+sina*v.y,(1-cosa)*v.y*v.x+sina*v.z,cosa+(1-cosa)*v.y*v.y,(1-cosa)*v.y*v.z-sina*v.x,(1-cosa)*v.z*v.x-sina*v.y,(1-cosa)*v.z*v.y+sina*v.x,cosa+(1-cosa)*v.z*v.z)
end
function Matrix3RotationYawPitchRoll (Output, Yaw, Pitch,Roll)
local cosa = Cos(Yaw)
local sina = Sin(Yaw)
local cosb = Cos(Pitch)
local sinb = Sin(Pitch)
local cosy = Cos(Roll)
local siny = Sin(Roll)
return Output:SetValues(cosa*cosb,cosa*sinb*siny-sina*cosy,cosa*sinb*cosy+sina*siny,sina*cosb,sina*sinb*siny+cosa*cosy,sina*sinb*cosy-cosa*siny,-sinb,cosb*siny,cosb*cosy)
end
MATRIX4 = {}
function MATRIX4:new()
local obj = {}
self.__index = self
return setmetatable(obj, self)
end
function MATRIX4:New_0()
local obj = {}
self.__index = self
obj.m11 = 0
obj.m12 = 0
obj.m13 = 0
obj.m14 = 0
obj.m21 = 0
obj.m22 = 0
obj.m23 = 0
obj.m24 = 0
obj.m31 = 0
obj.m32 = 0
obj.m33 = 0
obj.m34 = 0
obj.m41 = 0
obj.m42 = 0
obj.m43 = 0
obj.m44 = 0
return setmetatable(obj, self)
end
function MATRIX4:New_1(r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
local obj = {}
self.__index = self
obj.m11 = r11
obj.m12 = r12
obj.m13 = r13
obj.m14 = r14
obj.m21 = r21
obj.m22 = r22
obj.m23 = r23
obj.m24 = r24
obj.m31 = r31
obj.m32 = r32
obj.m33 = r33
obj.m34 = r34
obj.m41 = r41
obj.m42 = r42
obj.m43 = r43
obj.m44 = r44
return setmetatable(obj, self)
end
function MATRIX4:New_2(m)
local obj = {}
self.__index = self
obj.m11 = m.m11
obj.m12 = m.m12
obj.m13 = m.m13
obj.m14 = m.m14
obj.m21 = m.m21
obj.m22 = m.m22
obj.m23 = m.m23
obj.m24 = m.m24
obj.m31 = m.m31
obj.m32 = m.m32
obj.m33 = m.m33
obj.m34 = m.m34
obj.m41 = m.m41
obj.m42 = m.m42
obj.m43 = m.m43
obj.m44 = m.m44
return setmetatable(obj, self)
end
function MATRIX4:New_3(m)
local obj = {}
self.__index = self
obj.m11 = m.m11
obj.m12 = m.m12
obj.m13 = m.m13
obj.m14 = 0
obj.m21 = m.m21
obj.m22 = m.m22
obj.m23 = m.m23
obj.m24 = 0
obj.m31 = m.m31
obj.m32 = m.m32
obj.m33 = m.m33
obj.m34 = 0
obj.m41 = 0
obj.m42 = 0
obj.m43 = 0
obj.m44 = 0
return setmetatable(obj, self)
end
function MATRIX4:SetValues(r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
self.m11 = r11
self.m12 = r12
self.m13 = r13
self.m14 = r14
self.m21 = r21
self.m22 = r22
self.m23 = r23
self.m24 = r24
self.m31 = r31
self.m32 = r32
self.m33 = r33
self.m34 = r34
self.m41 = r41
self.m42 = r42
self.m43 = r43
self.m44 = r44
return self
end
function Matrix4Multiply(Output,M1,M2)
return Output:SetValues(M1.m11*M2.m11+M1.m21*M2.m12+M1.m31*M2.m13+M1.m41*M2.m14,M1.m12*M2.m11+M1.m22*M2.m12+M1.m32*M2.m13+M1.m42*M2.m14,M1.m13*M2.m11+M1.m23*M2.m12+M1.m33*M2.m13+M1.m43*M2.m14,M1.m14*M2.m11+M1.m24*M2.m12+M1.m34*M2.m13+M1.m44*M2.m14,M1.m11*M2.m21+M1.m21*M2.m22+M1.m31*M2.m23+M1.m41*M2.m24,M1.m12*M2.m21+M1.m22*M2.m22+M1.m32*M2.m23+M1.m42*M2.m24,M1.m13*M2.m21+M1.m23*M2.m22+M1.m33*M2.m23+M1.m43*M2.m24,M1.m14*M2.m21+M1.m24*M2.m22+M1.m34*M2.m23+M1.m44*M2.m24,M1.m11*M2.m31+M1.m21*M2.m32+M1.m31*M2.m33+M1.m41*M2.m34,M1.m12*M2.m31+M1.m22*M2.m32+M1.m32*M2.m33+M1.m42*M2.m34,M1.m13*M2.m31+M1.m23*M2.m32+M1.m33*M2.m33+M1.m43*M2.m34,M1.m14*M2.m31+M1.m24*M2.m32+M1.m34*M2.m33+M1.m44*M2.m34,M1.m11*M2.m41+M1.m21*M2.m42+M1.m31*M2.m43+M1.m41*M2.m44,M1.m12*M2.m41+M1.m22*M2.m42+M1.m32*M2.m43+M1.m42*M2.m44,M1.m13*M2.m41+M1.m23*M2.m42+M1.m33*M2.m43+M1.m43*M2.m44,M1.m14*M2.m41+M1.m24*M2.m42+M1.m34*M2.m43+M1.m44*M2.m44)
end
function Matrix4Perspective1 ( Output, fovy, Aspect, zn, zf)
return Output:SetValues(2*zn/fovy,0,0,0,0,2*zn/Aspect,0,0,0,0,zf/(zf-zn),1,0,0,zn*zf/(zn-zf),0)
end
function Matrix4Perspective2 ( Output, n, f, r, l, t, b)
return Output:SetValues(2*n/(r-l), 0, (r+l)/(r-l), 0, 0, 2*n/(t-b), (t+b)/(t-b), 0, 0, 0, -(f+n)/(f-n), -2*f*n/(f-n), 0, 0, -1, 0)
end
function Matrix4Look (Output, PosCamera, AxisX, AxisY, AxisZ)
return Output:SetValues(AxisX.x,AxisY.x,AxisZ.x,0,AxisX.y,AxisY.y,AxisZ.y,0,AxisX.z,AxisY.z,AxisZ.z,0,-Vec3Dot(AxisX, PosCamera),-Vec3Dot(AxisY, PosCamera),-Vec3Dot(AxisZ, PosCamera),1)
end
function InitMath()
VECTOR3.Zero = VECTOR3:New_0()
VECTOR3.oneX = VECTOR3:New_1(1,0,0)
VECTOR3.oneY = VECTOR3:New_1(0,1,0)
VECTOR3.oneZ = VECTOR3:New_1(0,0,1)
MATRIX3.Zero = MATRIX3:New_0()
MATRIX3.E = MATRIX3:New_1(1,0,0,0,1,0,0,0,1)
MATRIX4.Zero = MATRIX4:New_0()
MATRIX4.E = MATRIX4:New_1(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)
end
В том и проблема, что сейчас скиллы статичны по причине отсутствия системы менеджмента скиллов, которую я хочу реализовать посредством специального UI меню, но нет человека, который мог бы помочь это сделать.
В массив заносишь тип юнитов (напр MyUnits[1] = 'u001', . MyUnits[2] = 'u002', MyUnits[3] = 'u003') В функции где идет призыв юнита, вставляешь этот массив с GetInt(1,3) ( CreateUnit(GetOwnedUnit(GetTriggerUnit()),MyUnits[GetInt(1,3)],GetSpellTargetX(),GetSpellTargetY(),0) )
» WarCraft 3 / Обычная и hd графика
» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9
» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9
» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9
» Endless Tale / Endless Tale
» WarCraft 3 / Custom Hero Survival 30 lvl (no official)
» WarCraft 3 / Custom Hero Survival 30 lvl (no official)
» WarCraft 3 / Движение через wasd, движение по X,Y,Z
Ред. Zetox
» WarCraft 3 / Движение через wasd, движение по X,Y,Z
Ред. Zetox
» WarCraft 3 / Камера от 3 лица.
Ред. Zetox
» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9
» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9
» Endless Tale / Endless Tale
» WarCraft 3 / inputMovement - Движение клавишами WASD, Ctrl, Space
» WarCraft 3 / как сделать стан мгновенно без даммикаста
» WarCraft 3 / Камера от 3 лица.
» WarCraft 3 / Камера от 3 лица.
» WarCraft 3 / Камера от 3 лица.
зы: прикрепил новое видео с камерой
» WarCraft 3 / Камера от 3 лица.
Ред. Zetox
» WarCraft 3 / Камера от 3 лица.
» Endless Tale / Endless Tale
» WarCraft 3 / Шанс 33/33/33%
» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9
» XGM Конкурсы / Mini-Game Contest: Reforged
» WarCraft 3 / Тестируем вместе