0
6
11 лет назад
0

» W3 Model Pack / Предложения

Sergant1000, и много, думаешь таких людей будет, которые этот мод себе установят? В лучшем случае какая-то часть пользователей XGM. В любом случае, создавая карту, на наличие мода у других игроков ориентироваться не стоит. Я, если честно, не понимаю, о чём спор. Я осознаю, что это мод. И как мод, он, пожалуй, функционирует на отлично.
Возможно, в этой теме не следует писать такие предложения, т.к. скорее это будет уже не столько мод, сколько надстройка для редактора. Просто если есть такая возможность (сделать то, что я описал выше), почему бы ей не воспользоваться. Если такой возможности нет, то и разговаривать не о чем.
0
6
11 лет назад
Отредактирован Parez
0

» W3 Model Pack / Предложения

Sergant1000, понятно, что технически появляются, но создавая свою карту, используя модели из мода, тебе придётся очень тщательно следить за импортом и вручную импортировать всё, что использовал (извлекая из MPQ архива мода). [Если, конечно, я правильно понял описание] В данном случае это скорее работает как пак моделей, нежели как надстройка редактора.
Думаю, моя мысль понятна.
0
6
11 лет назад
Отредактирован Parez
0

» W3 Model Pack / Предложения

Хорошая идея мода. Жаль только, что свои карты с помощью него делать нельзя.
Может возможно как-то сделать, чтобы нестандартные модели/иконки/текстуры из этого мода, которые ты задействуешь в своей карте, автоматически в неё импортировались. Это конечно уже немного другой уровень, но тогда цены бы этой наработке не было.
То есть сделать его как надстройку для редактора.
0
6
12 лет назад
0

» WarCraft 3 / Портирование с vJass на cJass

Ну да, это понятно. Я уже узнал, что можно, но проблема не ушла. Видимо, cJass интерпретатор не всегда верно интерпретирует код, написанный на vJass.
Вот та же библиотека TimerUtils. Может конечно что-то не так с моим редактором, но у меня эта библиотека прекрасно компилируется с выключенным AdicParser'ом, а когда я его включаю, возникают ошибки.
Код библиотеки:
library TimerUtils initializer init
globals
private constant boolean USE_HASH_TABLE = false
private constant boolean USE_FLEXIBLE_OFFSET = false
private constant integer OFFSET = 0x100000
private integer VOFFSET = OFFSET
private constant integer QUANTITY = 256
private constant integer ARRAY_SIZE = 8190
endglobals
==================================================================================================?
globals
private integer array data[ARRAY_SIZE]
private hashtable ht
endglobals
It is dependent on jasshelper's recent inlining optimization in order to perform correctly.
function SetTimerData takes timer t, integer value returns nothing
static if(USE_HASH_TABLE) then
new blue
call SaveInteger(ht,0,GetHandleId(t), value)

elseif (USE_FLEXIBLE_OFFSET) then
orange
static if (DEBUG_MODE) then
if(GetHandleId(t)-VOFFSET<0) then
call BJDebugMsg("SetTimerData: Wrong handle id, only use SetTimerData on timers created by NewTimer")
endif
endif
set data[GetHandleId(t)-VOFFSET]=value
else
new red
static if (DEBUG_MODE) then
if(GetHandleId(t)-OFFSET<0) then
call BJDebugMsg("SetTimerData: Wrong handle id, only use SetTimerData on timers created by NewTimer")
endif
endif
set data[GetHandleId(t)-OFFSET]=value
endif
endfunction
function GetTimerData takes timer t returns integer
static if(USE_HASH_TABLE) then
new blue
return LoadInteger(ht,0,GetHandleId(t) )

elseif (USE_FLEXIBLE_OFFSET) then
orange
static if (DEBUG_MODE) then
if(GetHandleId(t)-VOFFSET<0) then
call BJDebugMsg("SetTimerData: Wrong handle id, only use SetTimerData on timers created by NewTimer")
endif
endif
return data[GetHandleId(t)-VOFFSET]
else
new red
static if (DEBUG_MODE) then
if(GetHandleId(t)-OFFSET<0) then
call BJDebugMsg("SetTimerData: Wrong handle id, only use SetTimerData on timers created by NewTimer")
endif
endif
return data[GetHandleId(t)-OFFSET]
endif
endfunction
==========================================================================================
globals
private timer array tT[ARRAY_SIZE]
private integer tN = 0
private constant integer HELD=0x28829022
use a totally random number here, the more improbable someone uses it, the better.
endglobals
==========================================================================================
function NewTimer takes nothing returns timer
if (tN==0) then
If this happens then the QUANTITY rule has already been broken, try to fix the
issue, else fail.
debug call BJDebugMsg("NewTimer: Warning, Exceeding TimerUtils_QUANTITY, make sure all timers are getting recycled correctly")
static if( not USE_HASH_TABLE) then
debug call BJDebugMsg("In case of errors, please increase it accordingly, or set TimerUtils_USE_HASH_TABLE to true")
set tT[0]=CreateTimer()
static if( USE_FLEXIBLE_OFFSET) then
if (GetHandleId(tT[0])-VOFFSET<0) or (GetHandleId(tT[0])-VOFFSET>=ARRAY_SIZE) then
all right, couldn't fix it
call BJDebugMsg("NewTimer: Unable to allocate a timer, you should probably set TimerUtils_USE_HASH_TABLE to true or fix timer leaks.")
return null
endif
else
if (GetHandleId(tT[0])-OFFSET<0) or (GetHandleId(tT[0])-OFFSET>=ARRAY_SIZE) then
all right, couldn't fix it
call BJDebugMsg("NewTimer: Unable to allocate a timer, you should probably set TimerUtils_USE_HASH_TABLE to true or fix timer leaks.")
return null
endif
endif
endif
else
set tN=tN-1
endif
call SetTimerData(tT[tN],0)
return tT[tN]
endfunction
==========================================================================================
function ReleaseTimer takes timer t returns nothing
if(t==null) then
debug call BJDebugMsg("Warning: attempt to release a null timer")
return
endif
if (tN==ARRAY_SIZE) then
debug call BJDebugMsg("Warning: Timer stack is full, destroying timer!!")
stack is full, the map already has much more troubles than the chance of bug
call DestroyTimer(t)
else
call PauseTimer(t)
if(GetTimerData(t)==HELD) then
debug call BJDebugMsg("Warning: ReleaseTimer: Double free!")
return
endif
call SetTimerData(t,HELD)
set tT[tN]=t
set tN=tN+1
endif
endfunction
private function init takes nothing returns nothing
local integer i=0
local integer o=-1
local boolean oops = false

static if( USE_HASH_TABLE ) then
set ht = InitHashtable()
loop
exitwhen(i==QUANTITY)
set tT[i]=CreateTimer()
call SetTimerData(tT[i], HELD)
set i=i+1
endloop
set tN = QUANTITY
else
loop
set i=0
loop
exitwhen (i==QUANTITY)
set tT[i] = CreateTimer()
if(i==0) then
set VOFFSET = GetHandleId(tT[i])
static if(USE_FLEXIBLE_OFFSET) then
set o=VOFFSET
else
set o=OFFSET
endif
endif
if (GetHandleId(tT[i])-o>=ARRAY_SIZE) then
exitwhen true
endif
if (GetHandleId(tT[i])-o>=0) then
set i=i+1
endif
endloop
set tN = i
exitwhen(tN == QUANTITY)
set oops = true
exitwhen not USE_FLEXIBLE_OFFSET
debug call BJDebugMsg("TimerUtils_init: Failed a initialization attempt, will try again")
endloop

if(oops) then
static if ( USE_FLEXIBLE_OFFSET) then
debug call BJDebugMsg("The problem has been fixed.")
If this message doesn't appear then there is so much
handle id fragmentation that it was impossible to preload
so many timers and the thread crashed! Therefore this
debug message is useful.
elseif(DEBUG_MODE) then
call BJDebugMsg("There were problems and the new timer limit is "+I2S(i))
call BJDebugMsg("This is a rare ocurrence, if the timer limit is too low:")
call BJDebugMsg("a) Change USE_FLEXIBLE_OFFSET to true (reduces performance a little)")
call BJDebugMsg("b) or try changing OFFSET to "+I2S(VOFFSET) )
endif
endif
endif
endfunction
endlibrary
p.s.
Как форматировать сообщение?
1
6
12 лет назад
1

» WarCraft 3 / Hero Duel 2.6

В принципе, карта норм. Но дисбаланс адский! Сравнить того же Колдуна с Мортой (или как её там). У Колдуна практически все скиллы массовые - для такой арены это самое то. У Морты - все точечные, да ещё и убогие. Первый раз играл за Колдуна, второй за Морту. Сужу более менее объективно. Баланс отсутствует.
4
6
15 лет назад
4

» WarCraft 3 / Вредные советы

По ходу Фролов Александр решил, что освоил ландшафтинг, прочитав эту статью.Теперь мне "ПОМОГАЕТ". Не дай Бог вам такого помощника!
1
6
15 лет назад
1

» WarCraft 3 / Всё о Multiboard'ах

Видел-бы эту статью раньше, быстрей бы понял эту хитрость,а так сам додумывался.Полезная на самом деле вещь с удалением лишних строчек в Multiboard. Я уж было обрадовался, что это только до меня допёрло.