Просмотр полной версии : GuildHouse патч валит сервер при раскупленых ГХ
Патч guildmaster.cpp на SD2.
Вот баг-репорт получил. пишут как гх все раскупили при попытке купить -серв падает. Есть у тебя затычка? Сам пока не имею возможности проверить и исправить. Кто-то имеет возможность помочь хотя бы в проверке?
Ревизии - все (он не меняется).
Тема в разделе патчей на ядро (http://ru-mangos.ru/showthread.php?t=1309).
Вот место которое отвечает за работу патча, если все гх куплены
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)
кто бы протестил. :( А то мне сейчас тупо негде и не на чем. :(
скорее всего 1 вариант
if (showFromId == 0)
{
Тогда уж
if (showFromId == NULL)
но красивее.
if (!showFromId)
собственно предмет (http://ytdb.ru/Yuriy/patches/sd2/1633/scripts/custom/guildmaster.cpp)
уже правлено.
Если ГиМ меняет( по незнанию прописывает его сам в другом городе) дом то ГХ для гильды недоступен.
"меняет", в смысле - продает один, и покупает другой?
Кажется скоро придется все нафиг переписывать под Gossip System...
Так не роняет:
if (!showFromId)
Chesterfield
07.02.2010, 21:13
if (showFromId == NULL)
NULL это макрос того же самого нуля, который был указан.
Ну в оригинале-то там вообще if (showFromId = 0) стоит. :)
Konctantin
07.02.2010, 23:15
if (showFromId = 0) - означает, что переменной showFromId присваивается значение 0
А когда == или !showFromId означает что идет проверка на значение.
вау.... завидую.
Давайте я вам баллистику СЦ-130ВПС расскажу. :) Обещаю, что вы в этом тоже ничего не поймете. :)
Как я понимаю - безразлично что писать: if (showFromId = 0) // присвоение значения
if (showFromId == NULL) // проверка на значение
if (!showFromId) // проверка на значение то есть все три строки - равнозначны? Или же все-таки какая-то из них содержит ошибку? При первой пишут, что "валит сервер при раскупленых ГХ", при последней пишут что не валит. Не понимаю.
Первая дает ошибку
if (showFromId = 0) // присвоение значения
Идентичны:
if (showFromId == NULL) // проверка на значение
if (!showFromId)
А, вот теперь понял. Тогда последняя строка и правда красивее смотрится. Везде поправил.
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;
Ну тогда я про баллистику не буду, но популярные сведения предоставлю. :)
При разработке крупнокалиберных патронов, основная область их применения виделась как борьба с защищеными и слабобронированными целями. По этому, на мой взгляд, основные качества винтовок являются логическим продолжением свойств боеприпаса.
Вот, кстати известное фото поражение борта (в самое "неудачное" место - на стыке броневых листов)советской 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: Если что, извиняюсь за боян...
vBulletin® v3.8.4, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot