DracoL1ch, я играл со своими тестерами. И они писали что соединение прервано.И такое происходит довольно часто когда на 1-м боссе начинают через таймер спауниться мобы. В функции спауна не используется GetLocalPlayer
nvc123, а насчет десинка с багнутым ландшафтом. Когда происходит этот десинк? Типо когда угодно по ходу игры? Когда объект попадает в "забагованые" координаты? И есть ли спопсоб проверить ландшафт на наличие таких ошибок?
Кстати заметил там такую тему
я объявляю локалку в одной из функций и потом в цикле при помощи нее создаю юнитов. Но потом не обнуляю локалку в конце и изначально не задаю ей значение. Как думаете может ли это служить причиной десинхрона?
ClotPh, да предмет создается. Сейчас кину код на который у меня подозрение. Есть два босса с которых падает артефакт. Сегодня когда убили одного из этих боссов критануло у некоторых игроков. При смерти босса вызывается метод spawn ( integer it_id, real x, real y ).
з.ы: название методов конечно голимые но я не думал что мой код кто-то будет читать:D
struct mscArtefact
static trigger roll_trig
static item array queue_item
static integer queue_cnt = 0
static item roll_cur_item = null
static integer roll_time = 0
static integer roll_table_delay = 0
static timer roll_timer = null
static integer array roll_result
static integer roll_cnt = 0
static leaderboard lb = null
static method add_to_queue takes item it returns nothing
set queue_item[queue_cnt] = it
set queue_cnt = queue_cnt + 1
endmethod
static method ger_first_from_queue takes nothing returns item
local item it = queue_item [0]
local integer i = 0
loop
set queue_item [i] = queue_item [i+1]
set i = i + 1
exitwhen ( i >= queue_cnt - 1 )
endloop
set queue_cnt = queue_cnt - 1
return it
endmethod
static method get_winner_rnd takes nothing returns integer
local msc_Players plr = msc_Players.get_random ()
local integer i = 0
local boolean flag = true
loop
if ( roll_result[i] != -1 ) then
set flag = false
endif
set i = i + 1
exitwhen ( i == 8 )
endloop
if ( flag ) then
set roll_result[GetPlayerId (plr.plr)] = 100
endif
return ger_winner ()
endmethod
static method update takes nothing returns nothing
if ( roll_time == 0 ) then
if ( roll_table_delay == 0 ) then
call play_prize ( get_winner_rnd() )
else
set roll_table_delay = roll_table_delay - 1
endif
else
set roll_time = roll_time - 1
endif
call LeaderboardSetLabel ( lb, "Артефакт " + GetObjectName ( GetItemTypeId ( roll_cur_item ) ) + " |cFF567C7E(" + I2S ( roll_time ) + ")|r" )
endmethod
static method play_prize takes integer id returns nothing
local integer i = 0
call DisplayTimedTextToForce ( GetPlayersAll(), 10.0, MSC_CLR_TAG_PLAYER[id] + GetPlayerName ( Player ( id ) ) + "|cFF90FF00(" + I2S ( roll_result[id] ) + ")|r" + "|cFFFFCD00 выиграл предмет|r " + GetObjectName ( GetItemTypeId ( roll_cur_item ) ) )
call SetItemPlayer ( roll_cur_item, Player ( id ), true )
call RemoveSavedBoolean ( HASH, 'ATFC', GetHandleId ( roll_cur_item ) )
call msc_effectXY ( "Abilities\\Spells\\Human\\Polymorph\\PolyMorphDoneGround.mdl", GetItemX ( roll_cur_item ), GetItemY ( roll_cur_item ) )
set roll_cur_item = null
set roll_cnt = 0
loop
call LeaderboardRemovePlayerItem ( lb, Player (i) )
set roll_result[i] = -1
set i = i + 1
exitwhen ( i == 8 )
endloop
call get_next ()
endmethod
static method ger_winner takes nothing returns integer
local integer i = 0
local integer id = 0
loop
if ( roll_result[i] > roll_result[id] ) then
set id = i
endif
set i = i + 1
exitwhen ( i == 8 )
endloop
return id
endmethod
static method roll takes nothing returns nothing
local player p = GetTriggerPlayer ()
local integer p_id = GetPlayerId ( p )
local integer rnd
if ( roll_cur_item == null ) then
set rnd = GetRandomInt ( 0, 100 )
else
if ( roll_result[p_id] == -1 ) and ( roll_table_delay == 3 ) then
set rnd = GetRandomInt ( 0, 100 )
call LeaderboardAddItem ( lb, GetPlayerName ( p ), rnd, p )
call LeaderboardSortItemsBJ( lb, bj_SORTTYPE_SORTBYVALUE, false )
call LeaderboardResizeBJ ( lb )
set roll_result[p_id] = rnd
set roll_cnt = roll_cnt + 1
endif
endif
call DisplayTimedTextToForce ( GetPlayersAll(), 10.0, MSC_CLR_TAG_PLAYER[GetPlayerId(p)] + GetPlayerName ( p ) + "|cFFFFCD00 выбросил:|r " + I2S ( rnd ) )
if ( roll_cnt == msc_Players.player_count ) then
set roll_time = 0//call play_prize ( ger_winner() )
call LeaderboardSetLabel ( lb, "Артефакт " + GetObjectName ( GetItemTypeId ( roll_cur_item ) ) + " |cFF567C7E(" + I2S ( roll_time ) + ")|r" )
endif
endmethod
static method get_next takes nothing returns nothing
if ( queue_cnt > 0 ) then
set roll_cur_item = ger_first_from_queue ()
call DisplayTimedTextToForce ( GetPlayersAll(), 30.0, "|cFF20F100Внимание: |r|cFFFFCD00разыгрывается артефакт |r" + GetObjectName ( GetItemTypeId ( roll_cur_item ) ) + "\n|cFFFFCD00Напишите|r -roll |cFFFFCD00чтобы принять участие в розыгрыше|r" )
call PlaySoundBJ ( gg_snd_SecretFound )
call LeaderboardSetLabel ( lb, "Артефакт " + GetObjectName ( GetItemTypeId ( roll_cur_item ) ) + " |cFF567C7E(" + I2S ( roll_time ) + ")|r" )
call LeaderboardDisplay ( lb, true )
//call LeaderboardResizeBJ ( lb )
set roll_table_delay = 3
set roll_time = 30
else
call LeaderboardResizeBJ ( lb )
call LeaderboardDisplay ( lb, false )
call PauseTimer ( roll_timer )
call DestroyTimer ( roll_timer )
set roll_timer = null
endif
endmethod
static method start_quiz takes nothing returns nothing
if ( roll_timer == null ) then
call get_next ()
set roll_timer = CreateTimer ()
call TimerStart ( roll_timer, 1.0, true, function mscArtefact.update )
endif
endmethod
static method spawn takes integer it_id, real x, real y returns item
local item it = CreateItem ( it_id, x, y )
call msc_effectXY ( "Abilities\\Spells\\Demon\\ReviveDemon\\ReviveDemon.mdl", x, y )
call SaveBoolean ( HASH, 'ATFC', GetHandleId ( it ), true )
call add_to_queue ( it )
call start_quiz ()
return it
endmethod
static method check takes unit u, item it returns boolean
local boolean flag = LoadBoolean ( HASH, 'ATFC', GetHandleId ( it ) )
local item it_new = null
local integer it_id
local real x
local real y
if ( flag ) then
call DisplayTimedTextToPlayer ( GetOwningPlayer ( u ), 0, 0, 10.0, "|cFFFF0505Ошибка:|r предмет сейчас разыгрывается" )
set it_id = GetItemTypeId ( it )
set x = GetItemX ( it )
set y = GetItemY ( it )
call RemoveSavedBoolean ( HASH, 'ATFC', GetHandleId ( it ) )
call RemoveItem ( it )
set it_new = CreateItem ( it_id, x, y )
call SaveBoolean ( HASH, 'ATFC', GetHandleId ( it_new ), true )
set roll_cur_item = it_new
endif
set it = null
set it_new = null
return flag
endmethod
static method init takes nothing returns nothing
set lb = CreateLeaderboard ()
call ForceSetLeaderboardBJ( lb, GetPlayersAll() )
set roll_result[0] = -1
set roll_result[1] = -1
set roll_result[2] = -1
set roll_result[3] = -1
set roll_result[4] = -1
set roll_result[5] = -1
set roll_result[6] = -1
set roll_result[7] = -1
set roll_trig = CreateTrigger ()
call TriggerRegisterPlayerChatEvent( roll_trig, Player(0), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(1), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(2), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(3), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(4), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(5), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(6), "-roll", true )
call TriggerRegisterPlayerChatEvent( roll_trig, Player(7), "-roll", true )
call TriggerAddAction ( roll_trig, function mscArtefact.roll )
endmethod
endstruct
nvc123, да это десинк 100%. Уже не раз случался мне игроки писали что их отключило. Однако я не понимаю что его может вызывать. При появлении босса нигде не используется GetLocalPlayer().
DracoL1ch, да но у меня это правило. Все происходит на 1-м боссе. Или в начале когда он появляется часть игроков дисконектит. Или после его смерти босса происходит краш. Причем киает игроков с небольшой задержкой. Хотя это происходит не всегда но довольно часто
Я сделал спел типа омнислэша у джаггернаута. Герой прыгает по мобам в указаной области и автоатачит их. И чтобы героя нельзя было выбрать и как-то контролить им я даю ему москитов + в москитах его не атакуют мобы.
DracoL1ch, ещё такая тема что во время этого краша игроки вылетают не сразу а как бы по очереди. Это может быть изза повышения уровня ауры у мертвого юнита? Я думал что если крашит то всех сразу)
ClotPh, ну хоть кто-то понимает) Хотя должен признаться что у меня в карте попадаются ошибки которые я сделал не нарочно) По мере возможности я их исправляю.
» Резьня / Резьня
» WarCraft 3 / Удаление спецэффекта с null'евым путем к моделе
Ред. EvilPenguin
» WarCraft 3 / Удаление спецэффекта с null'евым путем к моделе
» WarCraft 3 / Снижается скорость атаки
quq_CCCP, статы и так вручаются до удара)
» WarCraft 3 / Краш
Ред. EvilPenguin
» WarCraft 3 / Краш
Ред. EvilPenguin
» WarCraft 3 / Краш
Кстати заметил там такую тему
» WarCraft 3 / Изменение высоты юнита
» WarCraft 3 / Краш
» WarCraft 3 / Краш
Ред. EvilPenguin
» WarCraft 3 / Краш
» WarCraft 3 / Краш
» WarCraft 3 / Вернуть кликабельность юниту после москитов
Ред. EvilPenguin
» WarCraft 3 / Краш
» WarCraft 3 / Вернуть кликабельность юниту после москитов
» WarCraft 3 / Вернуть кликабельность юниту после москитов
» WarCraft 3 / Вернуть кликабельность юниту после москитов
» WarCraft 3 / Вернуть кликабельность юниту после москитов
» WarCraft 3 / Краш
Ред. EvilPenguin
» WarCraft 3 / Краш
Ред. EvilPenguin
» WarCraft 3 / Вернуть кликабельность юниту после москитов
» WarCraft 3 / Краш
Ред. EvilPenguin
» XGM Team / Spotlight
Краткое описание: Не ешь чудо грибы!
Ссылка на ресурс: xgm.guru/p/1580
Ссылка на изображение или гифку: xgm.guru/files/402/97665/comments/391249/LogoForPRMT.png
» Резьня / Резьня
» Резьня / Вышла новая версия Резьни 1.74beta