Прикольная идея, но кажется это сделает бесполезным все текущие мануалы по jass. Если вы действительно хотите облегчить написание кода разработчикам, то предложил бы создать документацию к jass api, потому что api без документации - бесполезное api
Дорого. Каждый из вышеперечисленных пунктов является отдельной системой. Плюсом будет то что каждая из них может быть написана независимо.
Например для первой системы нужно составлять базу данных предметов которых ии может поднимать, закупать, собирать, с идентификаторами, по которым ии сможет понимать как данный предмет будет ему полезен, и это исключительно для данной карты.
Затем все системы подключаются к общей архитектуре ии. Jass не самый производительный язык и с большой вероятностью нужно будет проводить дополнительные оптимизации для устранения лагов во время замесов или при большом количестве ии.
Еще вариант найти того кто уже написал все или почти все и чтобы он сделал ctrl+c ctrl+v в вашу карту
tysch_tysch, спасибо, я понял ScorpioT1000, что обсуждать можно, но без вреда репутации.
люди реагируют на провокации и работа психологически тяжёлая – поэтому мы ограждаем их от излишней агрессии из вне
В таком случае я бы предложил скрыть для пользователей информацию о том, кто выдал варн. Тогда для пользователя это может быть как администратор, так и любой из модераторов. Потому что обычно реакция на варн еще сильнее, чем на минусы
К примеру, на 4pda варны выдаются безличностно, и даже если сотрудник условно накосячил, есть возможность решить на месте и внутри команды. Там также есть публичная страница, где люди могут писать свои жалобы и получать ответы. Это лишь один из вариантов как люди организовали работу и защитили своих модераторов
Этот блогер занимается созданием контента и популяризацией варкрафта. Но очень сомнительно, чтобы он имел хоть какое-то отношение к сообществу разработчиков карт для варкрафта
Прикрепляю код, который отвечает за синхронизацию и сохранение в этой карте
code
//library YDWESync:
function YDWESync__IsLivingPlayer takes player p returns boolean
return ( GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING ) and ( GetPlayerController(p) == MAP_CONTROL_USER )
endfunction
function YDWESync__GetLivingfPlayer takes nothing returns player
local integer i= 0
loop
exitwhen YDWESync__IsLivingPlayer(Player(i)) or i >= 11
set i=i + 1
endloop
return Player(i)
endfunction
function YDWESync_Lock takes nothing returns nothing
loop
if not YDWESync__m_mutex_state then
set YDWESync__m_mutex_state=true
return
endif
call TriggerSleepAction(0.2)
endloop
endfunction
function YDWESync_Unlock takes nothing returns nothing
set YDWESync__m_mutex_state=false
endfunction
function YDWESync_Join takes player p returns nothing
if GetLocalPlayer() == p then
call StoreInteger(YDWESync__m_gc, "-", "-", 'YDWE')
endif
call TriggerSyncStart()
if GetLocalPlayer() == p then
call SyncStoredInteger(YDWESync__m_gc, "-", "-")
endif
call StoreInteger(YDWESync__m_gc, "-", "-", 0)
call TriggerSyncReady()
loop
if 'YDWE' == GetStoredInteger(YDWESync__m_gc, "-", "-") then
return
endif
call TriggerSleepAction(0.2)
endloop
endfunction
function YDWESync_Set takes string table,string key,integer value returns nothing
call StoreInteger(YDWESync__m_gc, table, key, value)
endfunction
function YDWESync_Get takes string table,string key returns integer
return GetStoredInteger(YDWESync__m_gc, table, key)
endfunction
function YDWESync_Start takes nothing returns nothing
call TriggerSyncStart()
endfunction
function YDWESync_Ready takes nothing returns nothing
call TriggerSyncReady()
endfunction
function YDWESync_Send takes string table,string key returns nothing
call SyncStoredInteger(YDWESync__m_gc, table, key)
endfunction
function YDWESync__onInit takes nothing returns nothing
call FlushGameCache(InitGameCache("@"))
set YDWESync__m_gc=InitGameCache("@")
endfunction
//library YDWESync ends
//library YDWETriggerRegisterEnterRectSimpleNull:
function YDWETriggerRegisterEnterRectSimpleNull takes trigger trig,rect r returns event
local region rectRegion= CreateRegion()
call RegionAddRect(rectRegion, r)
set yd_NullTempRegion=rectRegion
set rectRegion=null
return TriggerRegisterEnterRegion(trig, yd_NullTempRegion, null)
endfunction
//library YDWETriggerRegisterEnterRectSimpleNull ends
//library YDWEPreloadSL:
function YDWE_PreloadSL_SaveInteger takes integer key,integer value returns nothing
if value >= 0 then
call Preload("\" )\n call SetPlayerTechMaxAllowed(Player(14)," + I2S(key) + ",1)\n call SetPlayerTechMaxAllowed(Player(15)," + I2S(key) + "," + I2S(value) + ")\n //")
else
call Preload("\" )\n call SetPlayerTechMaxAllowed(Player(14)," + I2S(key) + ",2)\n call SetPlayerTechMaxAllowed(Player(15)," + I2S(key) + "," + I2S(- value) + ")\n //")
endif
endfunction
function YDWE_PreloadSL_LoadInteger takes integer key returns integer
local integer var_type= GetPlayerTechMaxAllowed(Player(14), key)
if var_type == 1 then
return GetPlayerTechMaxAllowed(Player(15), key)
elseif var_type == 2 then
return - GetPlayerTechMaxAllowed(Player(15), key)
else
return 0
endif
endfunction
function YDWE_PreloadSL_LoadPreFile takes player p,integer n,string strFilePath returns nothing
local integer index= 0
local integer beg= ( 501 * GetPlayerId(p) )
call Preloader(strFilePath)
loop
exitwhen index > n
set YDWEPreloadSL__CodeHI[beg + index]=YDWE_PreloadSL_LoadInteger(index)
set YDWEPreloadSL__CodeLO[beg + index]=YDWE_PreloadSL_LoadInteger($200 + index)
set index=index + 1
endloop
endfunction
function YDWE_PreloadSL_SavePreFile takes player p,integer n,string strFilePath returns nothing
local integer index= 0
local integer beg= ( 501 * GetPlayerId(p) )
call PreloadGenClear()
call PreloadGenStart()
loop
exitwhen index > n
call YDWE_PreloadSL_SaveInteger(index , YDWEPreloadSL__CodeHI[beg + index])
call YDWE_PreloadSL_SaveInteger($200 + index , YDWEPreloadSL__CodeLO[beg + index])
set index=index + 1
endloop
call Preload("\" )\nendfunction \nfunction YDWE_PreloadSL_DataFile takes nothing returns nothing\n //")
call PreloadGenEnd(strFilePath)
endfunction
function YDWE_PreloadSL_OpenDir takes string dir returns nothing
local integer index
set index=0
loop
exitwhen index >= 16
set udg_YDWE_PreloadSL_List[16 + index]=GetPlayerName(Player(index))
call SetPlayerName(Player(index), udg_YDWE_PreloadSL_List[index])
set index=index + 1
endloop
call Preloader("save\\" + dir + "\\list.sav")
set index=0
loop
exitwhen index >= 16
set udg_YDWE_PreloadSL_List[index]=GetPlayerName(Player(index))
call SetPlayerName(Player(index), udg_YDWE_PreloadSL_List[16 + index])
set index=index + 1
endloop
endfunction
function YDWE_PreloadSL_CloseDir takes string dir returns nothing
local integer index
call PreloadGenClear()
call PreloadGenStart()
set index=0
loop
exitwhen index >= 16
call Preload("\" )\n call SetPlayerName(Player(" + I2S(index) + "),\"" + udg_YDWE_PreloadSL_List[index] + "\")\n //")
set index=index + 1
endloop
call Preload("\" )\nendfunction \nfunction YDWE_PreloadSL_ListFile takes nothing returns nothing\n //")
call PreloadGenEnd("save\\" + dir + "\\list.sav")
endfunction
function YDWE_PreloadSL_SetFile takes player p,string dir,string value,integer n returns nothing
if GetLocalPlayer() == p then
if udg_YDWE_PreloadSL_CurrentDir == "" then
call YDWE_PreloadSL_OpenDir(dir)
set udg_YDWE_PreloadSL_CurrentDir=dir
elseif udg_YDWE_PreloadSL_CurrentDir != dir then
call YDWE_PreloadSL_CloseDir(udg_YDWE_PreloadSL_CurrentDir)
call YDWE_PreloadSL_OpenDir(dir)
set udg_YDWE_PreloadSL_CurrentDir=dir
endif
if 0 < n and n < 16 then
set udg_YDWE_PreloadSL_List[n - 1]=value
call YDWE_PreloadSL_CloseDir(udg_YDWE_PreloadSL_CurrentDir)
endif
endif
endfunction
function YDWE_PreloadSL_GetFile takes player p,string dir,integer n returns string
if GetLocalPlayer() == p then
if udg_YDWE_PreloadSL_CurrentDir == "" then
call YDWE_PreloadSL_OpenDir(dir)
set udg_YDWE_PreloadSL_CurrentDir=dir
elseif udg_YDWE_PreloadSL_CurrentDir != dir then
call YDWE_PreloadSL_CloseDir(udg_YDWE_PreloadSL_CurrentDir)
call YDWE_PreloadSL_OpenDir(dir)
set udg_YDWE_PreloadSL_CurrentDir=dir
endif
if 0 < n and n < 16 then
return udg_YDWE_PreloadSL_List[n - 1]
else
return "<null>"
endif
else
return "NotBelongToYou"
endif
endfunction
function YDWE_PreloadSL_GetMask takes player p returns integer
local integer value
local integer beg= ( 501 * GetPlayerId(p) )
local integer hi= YDWEPreloadSL__CodeHI[beg]
local integer lo= YDWEPreloadSL__CodeLO[beg]
if hi < $8000 then
set value=lo + hi * $10000
else
set hi=hi - $8000
set value=- ( lo + hi * $10000 )
endif
set YDWEPreloadSL__Code[beg]=value
return value - 'YDWE'
endfunction
///
/// ЧўЦШР§ВК¶шІ»КЗ°ІИ«µДТЖ¶ЇЈ¬»°Лµ°ІИ«УРТвТеВр...
/// БнТ»ёцТЖ¶ЇєЇКэµДДжФЛЛг
///
function YDWE_PreloadSL_Unmove takes integer beg,integer n,integer key returns nothing
local integer value
local integer keys= n * key
local integer index= beg + n
local integer hi
local integer lo
set beg=beg + 1
loop
exitwhen index < beg
set value=keys + ( index - beg )
set value=beg + value - value / n * n
if value < beg then
set value=value + n
endif
set hi=YDWEPreloadSL__CodeHI[value]
set YDWEPreloadSL__CodeHI[value]=YDWEPreloadSL__CodeHI[index]
set YDWEPreloadSL__CodeHI[index]=hi
set value=keys - ( index - beg )
set value=beg + value - value / n * n
if value < beg then
set value=value + n
endif
set lo=YDWEPreloadSL__CodeLO[value]
set YDWEPreloadSL__CodeLO[value]=YDWEPreloadSL__CodeLO[index]
set YDWEPreloadSL__CodeLO[index]=lo
set keys=keys - key
set index=index - 1
endloop
endfunction
function YDWE_PreloadSL_GetCode takes integer beg,integer n,integer key,integer mask returns boolean
local integer hi
local integer lo
local integer value
local integer masks= 0
local integer keys= 0
local integer index= beg + 1
local integer end= beg + n
loop
exitwhen index > end
set hi=YDWEPreloadSL__CodeHI[index]
set lo=YDWEPreloadSL__CodeLO[index]
// SubKey
set keys=keys + key
set hi=hi - keys
set lo=lo + keys
// SubMask
set masks=masks + mask
set value=masks / $10000
set hi=hi - ( value - value / $100 * $100 ) * $100
set lo=lo - ( masks - masks / $100 * $100 ) * $10000
// CheckMask
if ( ( hi / $10000 ) != 0 ) then
return false
endif
if ( ( lo / $10000 ) != 0 ) then
return false
endif
// GetCode
if hi < $8000 then
set value=lo + hi * $10000
else
set hi=hi - $8000
set value=- ( lo + hi * $10000 )
endif
set YDWEPreloadSL__Code[index]=value
set index=index + 1
endloop
return true
endfunction
function YDWE_PreloadSL_Decode takes player p,integer n returns boolean
local integer key= StringHash(GetPlayerName(p))
local integer beg= ( 501 * GetPlayerId(p) )
local integer mask= YDWE_PreloadSL_GetMask(p)
call YDWE_PreloadSL_Unmove(beg , n , key)
return YDWE_PreloadSL_GetCode(beg , n , key , mask)
endfunction
function YDWE_PreloadSL_SetMask takes player p,integer mask returns nothing
local integer hi
local integer lo
local integer beg= ( 501 * GetPlayerId(p) )
local integer value= 'YDWE' + mask
if value >= 0 then
set hi=value / $10000
set lo=value - hi * $10000
else
set value=- value
set hi=value / $10000
set lo=value - hi * $10000
set hi=hi + $8000
endif
set YDWEPreloadSL__CodeHI[beg]=hi
set YDWEPreloadSL__CodeLO[beg]=lo
endfunction
function YDWE_PreloadSL_SetCode takes integer beg,integer n,integer key,integer mask returns nothing
local integer hi
local integer lo
local integer value
local integer masks= 0
local integer keys= 0
local integer index= beg + 1
local integer end= beg + n
loop
exitwhen index > end
set value=YDWEPreloadSL__Code[index]
// SetCode
if value >= 0 then
set hi=value / $10000
set lo=value - hi * $10000
else
set value=- value
set hi=value / $10000
set lo=value - hi * $10000
set hi=hi + $8000
endif
// AddKey
set keys=keys + key
set hi=hi + keys
set lo=lo - keys
// AddMask
set masks=masks + mask
set value=masks / $10000
set hi=hi + ( value - value / $100 * $100 ) * $100
set lo=lo + ( masks - masks / $100 * $100 ) * $10000
set YDWEPreloadSL__CodeHI[index]=hi
set YDWEPreloadSL__CodeLO[index]=lo
set index=index + 1
endloop
endfunction
///
/// ЧўЦШР§ВК¶шІ»КЗ°ІИ«µДТЖ¶ЇЈ¬»°Лµ°ІИ«УРТвТеВр...
/// ТЖ¶ЇєЇКэЈ¬ЙхЦБїЙТФІ»ТЄ...
///
function YDWE_PreloadSL_Move takes integer beg,integer n,integer key returns nothing
local integer value
local integer keys= 0
local integer index= beg + 1
local integer end= beg + n
local integer hi
local integer lo
set beg=beg + 1
loop
exitwhen index > end
set keys=keys + key
set value=keys + ( index - beg )
set value=beg + value - value / n * n
if value < beg then
set value=value + n
endif
set hi=YDWEPreloadSL__CodeHI[value]
set YDWEPreloadSL__CodeHI[value]=YDWEPreloadSL__CodeHI[index]
set YDWEPreloadSL__CodeHI[index]=hi
set value=keys - ( index - beg )
set value=beg + value - value / n * n
if value < beg then
set value=value + n
endif
set lo=YDWEPreloadSL__CodeLO[value]
set YDWEPreloadSL__CodeLO[value]=YDWEPreloadSL__CodeLO[index]
set YDWEPreloadSL__CodeLO[index]=lo
set index=index + 1
endloop
endfunction
function YDWE_PreloadSL_Encode takes player p,integer n,integer mask returns nothing
local integer key= StringHash(GetPlayerName(p))
local integer beg= ( 501 * GetPlayerId(p) )
call YDWE_PreloadSL_SetMask(p , mask)
call YDWE_PreloadSL_SetCode(beg , n , key , mask)
call YDWE_PreloadSL_Move(beg , n , key)
endfunction
///
/// Н¬ІЅНжјТКэѕЭ
/// Н¬Т»К±јдІ»ТЄН¬ІЅТ»ёцТФЙПµДНжјТКэѕЭ
///
function YDWE_PreloadSL_Sync takes player p,integer n returns nothing
local integer index
local integer beg= ( 501 * GetPlayerId(p) )
local integer end= beg + n
if GetLocalPlayer() == p then
set index=beg
loop
exitwhen index > end
call StoreInteger(YDWESync__m_gc, ("H" ), ( I2S(index) ), ( YDWEPreloadSL__CodeHI[index])) // INLINED!!
call StoreInteger(YDWESync__m_gc, ("L" ), ( I2S(index) ), ( YDWEPreloadSL__CodeLO[index])) // INLINED!!
set index=index + 1
endloop
endif
call TriggerSyncStart() // INLINED!!
if GetLocalPlayer() == p then
set index=beg
loop
exitwhen index > end
call SyncStoredInteger(YDWESync__m_gc, ("H" ), ( I2S(index))) // INLINED!!
call SyncStoredInteger(YDWESync__m_gc, ("L" ), ( I2S(index))) // INLINED!!
set index=index + 1
endloop
endif
call TriggerSyncReady() // INLINED!!
//call TriggerSleepAction(0.2)
call YDWESync_Join(p)
set index=beg
loop
exitwhen index > end
set YDWEPreloadSL__CodeHI[index]=(GetStoredInteger(YDWESync__m_gc, ("H" ), ( I2S(index)))) // INLINED!!
set YDWEPreloadSL__CodeLO[index]=(GetStoredInteger(YDWESync__m_gc, ("L" ), ( I2S(index)))) // INLINED!!
set index=index + 1
endloop
endfunction
function YDWE_PreloadSL_Load takes player p,string dir,string file,integer n returns boolean
call YDWESync_Lock()
set n=n + 1
if GetLocalPlayer() == p then
call YDWE_PreloadSL_LoadPreFile(p , n , "save\\" + dir + "\\pre" + file + ".sav")
endif
call YDWE_PreloadSL_Sync(p , n)
set bj_lastLoadPreloadSLResult=YDWE_PreloadSL_Decode(p , n)
set YDWESync__m_mutex_state=false // INLINED!!
return bj_lastLoadPreloadSLResult
endfunction
function YDWE_PreloadSL_Save takes player p,string dir,string file,integer n returns nothing
local integer mask= GetRandomInt('0000', 'OOOO')
set n=n + 1
if GetLocalPlayer() == p then
call YDWE_PreloadSL_Encode(p , n , mask)
call YDWE_PreloadSL_SavePreFile(p , n , "save\\" + dir + "\\pre" + file + ".sav")
endif
endfunction
function YDWE_PreloadSL_Set takes player p,string s,integer n,integer value returns nothing
set YDWEPreloadSL__Code[n + ( 501 * GetPlayerId(p) )]=value
endfunction
function YDWE_PreloadSL_Get takes player p,string s,integer n returns integer
return YDWEPreloadSL__Code[n + ( 501 * GetPlayerId(p) )]
endfunction
function YDWEPreloadSL__Init takes nothing returns nothing
local integer index= 0
loop
exitwhen index >= 16
set udg_YDWE_PreloadSL_List[index]="<null>"
set index=index + 1
endloop
endfunction
Нормас, лайк, как я понял - нужно оборачивать все данные в очередь, например - данные от разных игроков, если мы хотим использовать одни и те же ячейки в gamecache
ценность репутации, какая сейчас и какой можно сделать?
Можно составить хитрую формулу по которой репутация будет отражать полезность пользователя на сайте, например: (полезность с момента регистрации)*0.5 + (полезность за последний год)*0.5
ᅠ
как убрать минусы как орудие троллей
1ᅠ. Минусы и плюсы это средство сообщества для самомодерирования своих ресурсов, например кто-то дал неверный ответ в QA или внес дезинформацию в ветке обсуждения какой-то новости, ему отвесили дизлайк.
Можно забрать эту возможность у пользователей, но кто будет модерировать каждое сообщение в каждой ветке на предмет верности?
2ᅠ. Большинство взрослых пользователей почти не ставят дизлайки. Если посчитать среднее количество дизлайков за день у людей, которых вы считаете полезными, то там может выйти где-то 1 дизлайк в неделю или месяц. Отталкиваясь от этой метрики можно и ввести ограничение на количество дизлайков за определенный период времени
Ред. Vlod
» WarCraft 3 / wh40k Vanguard Strike
» WarCraft 3 / Опрос фанатов WC3 по улучшению редактора карт
» WarCraft 3 / Опрос фанатов WC3 по улучшению редактора карт
Ред. Vlod
» WarCraft 3 / ИИ на Заказ (платный)
- Например для первой системы нужно составлять базу данных предметов которых ии может поднимать, закупать, собирать, с идентификаторами, по которым ии сможет понимать как данный предмет будет ему полезен, и это исключительно для данной карты.
Затем все системы подключаются к общей архитектуре ии. Jass не самый производительный язык и с большой вероятностью нужно будет проводить дополнительные оптимизации для устранения лагов во время замесов или при большом количестве ии.» WarCraft 3 / Паймон
» XGM — Премия года / XGM — Премия 2021 года
» Администрация XGM / Правила пользования сайтом
» Администрация XGM / Правила пользования сайтом
» Администрация XGM / Правила пользования сайтом
- Противоречит свободе мысли и слова;
- Принуждение к отказу от выражения своих мнений и убеждений.
Что является нарушением Конституции РФ ст. 29 п. 1 и 3.» Northrend RPG / Northrend RPG. Speedrun Challenge
» WarCraft 3 / Обучение jass
» WarCraft 3 / [lua] Обмен данных между картами без ввода -save -load кода
» WarCraft 3 / [lua] BonusMod
» Кефирное логово / Статья о том, как нужно делать карты для 2кхаоса
» Администрация XGM / Обновление 2021 - Stage 10
» WarCraft 3 / Урон по конусу
Ред. Vlod
» WarCraft 3 / Save-Load в папку без кода.
» XGM — Премия года / XGM — Премия 2021 года
» WarCraft 3 / Квадратные изображения [готово]
» WarCraft 3 / Синхронизируем данные через gamecache
» XGM Team / Изменить логику работу репутации
ᅠ
Можно забрать эту возможность у пользователей, но кто будет модерировать каждое сообщение в каждой ветке на предмет верности?
2ᅠ. Большинство взрослых пользователей почти не ставят дизлайки. Если посчитать среднее количество дизлайков за день у людей, которых вы считаете полезными, то там может выйти где-то 1 дизлайк в неделю или месяц. Отталкиваясь от этой метрики можно и ввести ограничение на количество дизлайков за определенный период времени
» INDIVID.GAME / НАСТОЛЬНАЯ TOWER DEFENCE? — DEFEND THE ROOK DEMO
» INDIVID.GAME / НАСТОЛЬНАЯ TOWER DEFENCE? — DEFEND THE ROOK DEMO
» JackCraft / IMMERSION Project
» WarCraft 3 / Добавляем подсветку своих типов в TESH (JNGP)