PDA

Просмотр полной версии : GuildHouse патч валит сервер при раскупленых ГХ


tempura
15.11.2009, 18:54
Патч guildmaster.cpp на SD2.

Вот баг-репорт получил. пишут как гх все раскупили при попытке купить -серв падает. Есть у тебя затычка? Сам пока не имею возможности проверить и исправить. Кто-то имеет возможность помочь хотя бы в проверке?

Ревизии - все (он не меняется).

Тема в разделе патчей на ядро (http://ru-mangos.ru/showthread.php?t=1309).

Mr.Grom
02.12.2009, 12:00
Вот место которое отвечает за работу патча, если все гх куплены

if (showFromId = 0)
{
//all guildhouses are occupied
_creature->MonsterWhisper(MSG_NOFREEGH, player->GetGUID());
player->CLOSE_GOSSIP_MENU();
} else
{
//this condition occurs when COUNT(guildhouses) % GOSSIP_COUNT_MAX == 0
//just show GHs from beginning
showBuyList(player, _creature, 0);
}

Возможно должно быть if (showFromId == NULL)
или if (!showFromId)

tempura
02.12.2009, 12:27
кто бы протестил. :( А то мне сейчас тупо негде и не на чем. :(

real
02.12.2009, 13:08
скорее всего 1 вариант
if (showFromId == 0)
{

Mr.Grom
02.12.2009, 13:36
Тогда уж
if (showFromId == NULL)
но красивее.
if (!showFromId)

tempura
02.12.2009, 18:24
собственно предмет (http://ytdb.ru/Yuriy/patches/sd2/1633/scripts/custom/guildmaster.cpp)


уже правлено.

Mr.Grom
07.12.2009, 01:21
Если ГиМ меняет( по незнанию прописывает его сам в другом городе) дом то ГХ для гильды недоступен.

tempura
07.12.2009, 11:38
"меняет", в смысле - продает один, и покупает другой?


Кажется скоро придется все нафиг переписывать под Gossip System...

Smak
07.02.2010, 18:25
Так не роняет:
if (!showFromId)

Chesterfield
07.02.2010, 21:13
if (showFromId == NULL)
NULL это макрос того же самого нуля, который был указан.

tempura
07.02.2010, 23:06
Ну в оригинале-то там вообще if (showFromId = 0) стоит. :)

Konctantin
07.02.2010, 23:15
if (showFromId = 0) - означает, что переменной showFromId присваивается значение 0
А когда == или !showFromId означает что идет проверка на значение.

tempura
07.02.2010, 23:47
вау.... завидую.

Давайте я вам баллистику СЦ-130ВПС расскажу. :) Обещаю, что вы в этом тоже ничего не поймете. :)


Как я понимаю - безразлично что писать: if (showFromId = 0) // присвоение значения
if (showFromId == NULL) // проверка на значение
if (!showFromId) // проверка на значение то есть все три строки - равнозначны? Или же все-таки какая-то из них содержит ошибку? При первой пишут, что "валит сервер при раскупленых ГХ", при последней пишут что не валит. Не понимаю.

timmit
07.02.2010, 23:51
Первая дает ошибку
if (showFromId = 0) // присвоение значения
Идентичны:
if (showFromId == NULL) // проверка на значение
if (!showFromId)

tempura
07.02.2010, 23:54
А, вот теперь понял. Тогда последняя строка и правда красивее смотрится. Везде поправил.

Konctantin
07.02.2010, 23:57
int i = 0;
int value = 5;
i = value; // теперь i равно 5

if (i = value) // это ошибка так нельзя писать

if (i == value)
return true;

if (!value)
return false;

if (value == null)
return false;

tempura
08.02.2010, 00:23
Ну тогда я про баллистику не буду, но популярные сведения предоставлю. :)

При разработке крупнокалиберных патронов, основная область их применения виделась как борьба с защищеными и слабобронированными целями. По этому, на мой взгляд, основные качества винтовок являются логическим продолжением свойств боеприпаса.
Вот, кстати известное фото поражение борта (в самое "неудачное" место - на стыке броневых листов)советской 12,7 мм пулей грузинского броневичка (произведённого, по-моему в Турции). Как результат - пробитая броня и (вроде) два трупа за ней:

http://img171.imageshack.us/img171/871/4deba008d572.jpg

Выстрел был сделан из крупнокалиберной снайперской винтовки, броня была прошита, и пуля уничтожила часть экипажа броневика. Вдоль правого борта были расположены два стрелка, сидящие друг к другу боками. Их и прошила пуля. В водителя, вроде, не попала, но приборы повредила.

Большая эффективность действия по цели достигается использованием тяжелых крупнокалиберных пуль массой 59 грамм (патрон СЦ-130ПТ повышенной точности) и даже 76 грамм (патрон СЦ-130ВПС с повышенной пробивной способностью). Для патрона СЦ-130ПТ заявляется кучность стрельбы 25мм на дальности 100 метров (1 МОА / угловая минута), для патрона СЦ-130ВПС - гарантированное пробитие 16мм стальной плиты на дальности 200 метров или тяжелого бронежилета 5 класса защиты (по ГОСТ) на дальности 100 метров. Патроны используют специально изготовленные пули и относительно короткие гильзы цилиндрической формы - полная длина 12.7мм патрона СЦ-130 составляет 97мм против 145 мм у "обычного" отечественного крупнокалиберного патрона 12.7х108. За счет сравнительно небольшой (для выбранного калибра, разумеется) дульной энергии оружие под него получилось практически в два с половиной - три раза легче, чем винтовки под "обычные" крупнокалиберные патроны 12.7х108 или 12.7х99. Тем не менее, дульная энергия пули патрона СЦ-130ПТ составляет порядка 2500 Джоулей (3 650 Дж для патрона СЦ-130ВПС), и за счет тяжелой пули с высоким баллистическим коэффициентом энергия лучше сохраняется на траектории пули по сравнению с "обычными" снайперскими патронами калибра 7.62мм или "бесшумными" 9мм патронами при стрельбе из винтовки ВСС "Винторез".

http://img218.imageshack.us/img218/871/4deba008d572.jpg

12,7х54мм специальные патроны. Слева направо: СЦ-130ПТ, СЦ-130ПТ2, СЦ-130ВПС


Ага, вот это я кажется понял:i = value; // теперь i равно 5

if (i = value) // это ошибка так нельзя писать Тут value и так присваивается в предыдущей строке, поэтому запрос "если i = value" - некорректный.

griffonheart
08.02.2010, 06:53
if (i = value) // это ошибка так нельзя писать
Это семантическая ошибка, но не синтаксическая. Так писать можно, но в данном контексте не правильно.
if(i = value) - означает следующее:
1) Присваиваем переменной i значение переменной value
2) Если результат присваивания - истина - условии выполняется, если ложь - не выполняется. А рельзтат может быть ложью, если допустим значение переменной value ложно (равно нулю, например)
PS: Если что, извиняюсь за боян...