Sergarr, в моей карте одновременно присутствует не так много юнитов, т. е. сомневаюсь что десятисекундные задержки происходят по этой причине. Зато большая загруженность по коду, где юниты созадются, для каждого их них формируются хеш таблицы с параметрами и т. д., поэтому мне важно разобраться что именно вызывает такие задержки. Посмотрите реплей сами - там не так много войск чтобы вызывать проблемы
DracoL1ch, какие данные именно синхронизируются? Меня тут убеждают (если я правильно понял) что данные не синхронизируются а генерируются на каждом клиенте отдельно. GameCache не использую. ДИалог собственно начался с того, что я стараюсь лишний раз не генерить юнита когда это не нужно - а на меня обвалились с критикой, что это не нагружает канал синхронизации.
Sergarr, мб тогда кто-нибудь подскажет всвязи с чем на карте может появляться следующая проблема: у игрока мало юнитов (не больше десяти) но при игре по сети очень большая задержка перед выполнением приказов. Например - крестьянин может начать строить башню лишь секунд через 10 после того, как игрок приказал это сделать. В одиночной игре с ботами такого не встречается. Карта не защищена wayofworlds.atlassian.net/wiki/spaces/SS/overview . Видео, где это производится www.youtube.com/watch?time_continue=366&v=C3tKPnKTVCo на 11:56 по таймингу
Это старая карта, полностью сделанная на GUI, сейчас делаю её заново на JASS
Но так как я до сих пор не понял в чём проблема - рискую снова нарваться на эту ошибку
ssbbssc, у героя может быть выучена способность, благодаря которой после применения заклинания есть вероятность восстановить затраченную ману на заклинание. Хотелось бы, чтобы это распространялось и на стрелы. DracoL1ch, ок, можешь описать алгоритм работы? Надо прикрепить к текущему спелу баф, или взять за основую другой спел? Что делать когда я получу спел с бафом - как его отлавливать надо?
Doc, подумай сам - если юнит создаётся - об этом должен узнать каждый клиент, в том числе узнать все параметры созданного юнита. Тоже самое когда юнит удаляется.
И тут всё зависит от того, как часто эта функция вызывается - если на этапе инициализации, чтобы узнать и сохранить параметр - то ок, а если в событии малой переодичности - то дорого выходит
Clamp, тебе в каждой карте нужно узнавать классификацию типа объекта? У меня проблема другого рода - при игре по сети очень сильные задержки при общении клиентов. Поэтому я стараюсь как можно меньше давать нагрузки на сеть (а значит - на создание данных, которые должны синхронизироваться между клиентами). Создавать юнита, чтобы узнать свойство его типа - непозволительная роскошь, я лучше для такой узкой задачи не поленюсь, и вложу свойства в флаги имени
Clamp, я в таких случаях кодирую нужную информацию в имя юнита, например "|c00000001|rФерма" и "|c00000002|rПехотинец", при проверке я извлекаю sub string от 3 до 10 и перевожу в число, с данным числом и работаю. В твоём случае ты бы мог считав значение "1" - понять что это здание
Doc, да, с абилками та же хрень. Но есть два основания полагать, что это баг: на юнитах система с уникальными именами работает, и как сказал 16GB, если было бы задумано менять строку у всех предметов - то нет смысла в аргументах запрашивать предмето, вместо типа предмета.
Скорее всего ошибка заключается в том, что все предметы одного экземпляра ссылаются на одну и ту же строку локализации, и вместо того, чтобы менять ссылку на строку - меняется сама строка.
pro100master, если задача стоит установить абсолютный запас здоровья, а не её прибавку - то придётся отслеживать все активные воздействия. Задача не стоит в том, чтобы добавить воину n HP, задача стоит в том, чтобы воину установпить n HP, а в данный момент это можно делать только наладив отслеживание бафов на макс hp
DracoL1ch, если ты герою установишь максимальный HP как 700 единиц, и при этом у героя заюзана абилка Аватар - то после завершения абилки "аватар" здоровье юнита уменьшится до 200 единиц.
pro100master, ну-ка расскажи как надо
Нет возможности устанавливать здоровье вне учёта временных прибавок к здоровью от активных заклинаний.
Например, лог действий:
юнит воспльзовался способностью "аватар", который прибавляет ему 500 ед. здоровья
пока эффект аватара не закончился ему через скрипт установили SetMaxUnitHP = 700
по истечению использования способности "аватар" здоровье юнита уменьшается на 500 ед. и принимает значение в 200 единиц.
Разумеется, можно изощряться и налаживать системы отлова активных способностей и прочих эффектов, дающих временные бонусы к здоровью - затем при установке здоровья к желаемому значению прибавлять полученное значение бонуса здоровья - но это всё костыли. Хотелось бы иметь возможность задавать здоровье юнита без учёта от активных эффектов (возможно - в качестве дополнительной функции, не изменяя механику старой функции)
DemonoiD, так нулевой пост начался с того, что багует. Изменение имени одного экземпляра предмета приводит к изменению имени всех экземпляров данного типа
DemonoiD, это не ответ на мой вопрос, у меня многопользовательская игра, и мне нельзя привязываться к юниту или игроку, мне нужно сделать привязку к предмету, который может лежать на земле, быть в рюкзаке и т. д.
я где-то читал, что, вроде handle можно преобразовать в число
но не знаю как
Да. У тебя же есть итемлвл. Либо БД. Если имя предмета такое, то индекс = 1.
не совсем то, что мне нужно. Я создал в игре 20 одинаковых кинжалов, но я их делаю разными (разные кинжалы для разных квестигверов). Когда игрок получает предмет - мне нужно понять какой именно предмет он получил, делать это перебором по массиву - очень дорого.
Исправят или нет, вопрос не к комьюнити, а к разработчикам.
насколько я знаю - разработчики ввели новые функции по запросу компьюнити. Если реализация отличается от запроса - то это бага
BaHeK, как ты string list будешь хранить в string, или как ты будешь хранить heroAbilityList в каком-то простом типе данных? Отвечайте пожалуйста по существу, у кого-нибудь есть информация о способе чтения этих данных из w3o?
*Modification structure:
char[4] modification ID code (get the IDs from "Units\UnitMetaData.slk" of war3.mpq)
int: variable type* t (0=int, 1=real, 2=unreal, 3=String,...)
t type: value (length depends on the type t specified before)
int: end of unit definition (usually 0)
Вот тут говорится, что размер значения зависит от типа, и приведён список из 21 типов, но не указано сколько весит каждый тип и как его читать
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
Ред. Cancel
» WarCraft 3 / Встреченные баги в 1.29
Это старая карта, полностью сделанная на GUI, сейчас делаю её заново на JASS
Но так как я до сих пор не понял в чём проблема - рискую снова нарваться на эту ошибку
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Как отлавливается событие использования "огненных стрел"?
DracoL1ch, ок, можешь описать алгоритм работы? Надо прикрепить к текущему спелу баф, или взять за основую другой спел? Что делать когда я получу спел с бафом - как его отлавливать надо?
» WarCraft 3 / Как отлавливается событие использования "огненных стрел"?
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
И тут всё зависит от того, как часто эта функция вызывается - если на этапе инициализации, чтобы узнать и сохранить параметр - то ок, а если в событии малой переодичности - то дорого выходит
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
Скорее всего ошибка заключается в том, что все предметы одного экземпляра ссылаются на одну и ту же строку локализации, и вместо того, чтобы менять ссылку на строку - меняется сама строка.
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / Встреченные баги в 1.29
Нет возможности устанавливать здоровье вне учёта временных прибавок к здоровью от активных заклинаний.
Например, лог действий:
юнит воспльзовался способностью "аватар", который прибавляет ему 500 ед. здоровья
пока эффект аватара не закончился ему через скрипт установили SetMaxUnitHP = 700
по истечению использования способности "аватар" здоровье юнита уменьшается на 500 ед. и принимает значение в 200 единиц.
Разумеется, можно изощряться и налаживать системы отлова активных способностей и прочих эффектов, дающих временные бонусы к здоровью - затем при установке здоровья к желаемому значению прибавлять полученное значение бонуса здоровья - но это всё костыли. Хотелось бы иметь возможность задавать здоровье юнита без учёта от активных эффектов (возможно - в качестве дополнительной функции, не изменяя механику старой функции)
» WarCraft 3 / Встреченные баги в 1.29
» WarCraft 3 / SetItemName - баг?
» WarCraft 3 / SetItemName - баг?
» WarCraft 3 / SetItemName - баг?
я где-то читал, что, вроде handle можно преобразовать в число
но не знаю как
Ред. Cancel
» WarCraft 3 / SetItemName - баг?
Ред. Cancel
» WarCraft 3 / Работа с w3o
*Modification structure:
char[4] modification ID code (get the IDs from "Units\UnitMetaData.slk" of war3.mpq)
int: variable type* t (0=int, 1=real, 2=unreal, 3=String,...)
t type: value (length depends on the type t specified before)
int: end of unit definition (usually 0)
Ред. Cancel
» WarCraft 3 / Работа с w3o
0=int
1=real
2=unreal
3=string
4=bool
5=char
6=unitList
7=itemList
8=regenType
9=attackType
10=weaponType
11=targetType
12=moveType
13=defenseType
14=pathingTexture
15=upgradeList
16=stringList
17=abilityList
18=heroAbilityList
19=missileArt
20=attributeType
21=attackBits
» WarCraft 3 / Работа с w3o
в процессе игры я могу поверить что всё по 4 байта (если это ссылки на объекты), но в файле сохранения это не прокатит, там ссылаться не на что, кроме самого себя