Renegade Bastard Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 (изменено) В общем и целом, дискуссия пошла у меня вот тут кому не в лом гляньте. То что мне удалось выяснить в посте по ссылке. То что понял - без модификации исходников эту багу не решить. Но пока слабо представляю себе как. Либо какимто образом менять механизм дебафа от госпеля, либо.. На этом мысль останавливается. Изменено 24 июля, 2015 пользователем Renegade Bastard Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 Костыль: в сорсах же в куске кода, где госпель снимает все статусы - сделать проверку на SC_EXPBOOST и не снимать его (: Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 24 июля, 2015 Автор Жалоба Поделиться Опубликовано 24 июля, 2015 (изменено) Костыль: в сорсах же в куске кода, где госпель снимает все статусы - сделать проверку на SC_EXPBOOST и не снимать его (: я так понял он тупо всем активным статусам обнуляет таймер. Если добавить условный оператор то если висит статус SC_EXPBOOST госпель вообще статусы не скинет. Это будет неочень. Изменено 24 июля, 2015 пользователем Renegade Bastard Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 У меня последняя eA. Проверять лень, но судя по исходникам - не будет сниматься статус. Есть кусок кода: Файл: ea/src/map/status.c -> функция status_change_clear_buffs for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ ){if(!sc->data[i])continue;switch (i) {//Stuff that cannot be removedcase SC_WEIGHT50:case SC_WEIGHT90:case SC_COMBO:case SC_SMA:case SC_DANCING:case SC_GUILDAURA:case SC_SAFETYWALL:case SC_PNEUMA:case SC_NOCHAT:case SC_JAILED:case SC_ANKLE:case SC_BLADESTOP:case SC_CP_WEAPON:case SC_CP_SHIELD:case SC_CP_ARMOR:case SC_CP_HELM:case SC_STRFOOD:case SC_AGIFOOD:case SC_VITFOOD:case SC_INTFOOD:case SC_DEXFOOD:case SC_LUKFOOD:case SC_HITFOOD:case SC_FLEEFOOD:case SC_BATKFOOD:case SC_WATKFOOD:case SC_MATKFOOD:case SC_FOOD_STR_CASH:case SC_FOOD_AGI_CASH:case SC_FOOD_VIT_CASH:case SC_FOOD_DEX_CASH:case SC_FOOD_INT_CASH:case SC_FOOD_LUK_CASH:case SC_EXPBOOST:case SC_JEXPBOOST:case SC_ITEMBOOST:continue;//Debuffs that can be removed.case SC_HALLUCINATION:case SC_QUAGMIRE:case SC_SIGNUMCRUCIS:case SC_DECREASEAGI:case SC_SLOWDOWN:case SC_MINDBREAKER:case SC_WINKCHARM:case SC_STOP:case SC_ORCISH:case SC_STRIPWEAPON:case SC_STRIPSHIELD:case SC_STRIPARMOR:case SC_STRIPHELM:if (!(type&2))continue;break;//The rest are buffs that can be removed.case SC_BERSERK:if (!(type&1))continue;sc->data[i]->val2 = 0;break;default:if (!(type&1))continue;break;}status_change_end(bl, (sc_type)i, INVALID_TIMER);} В цикле перебираются статусы и либо снимаются, либо пропускаются. Смотри, как у тебя сделано. Там же в status.c : Функция status_change_start: case SC_GOSPEL:if(val4 == BCT_SELF) { // self effectval2 = tick/10000;tick = 10000;status_change_clear_buffs(bl,3); //Remove buffs/debuffs}break; При старте статуса "Госпель" вызывается status_change_clear_buffs P.S. Перевес же не сбивает P.P.S. Чёртов форум отступы съедает >.< Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 24 июля, 2015 Автор Жалоба Поделиться Опубликовано 24 июля, 2015 (изменено) у меня так же. в каком файле искать саму функцию status_change_clear_buffs ?~# grep -rn "status_change_clear_buffs" /home/renegade/trunk/src//home/renegade/trunk/src/map/status.c:5522: status_change_clear_buffs(bl,3); //Remove buffs/debuffs/home/renegade/trunk/src/map/status.c:7256:int status_change_clear_buffs (struct block_list* bl, int type)Двоичный файл /home/renegade/trunk/src/map/obj_sql/status.o совпадаетДвоичный файл /home/renegade/trunk/src/map/obj_sql/skill.o совпадает/home/renegade/trunk/src/map/.svn/text-base/status.c.svn-base:5522: status_change_clear_buffs(bl,3); //Remove buffs/debuffs/home/renegade/trunk/src/map/.svn/text-base/status.c.svn-base:7256:int status_change_clear_buffs (struct block_list* bl, int type)/home/renegade/trunk/src/map/.svn/text-base/skill.c.svn-base:5385: status_change_clear_buffs(bl,1);/home/renegade/trunk/src/map/.svn/text-base/skill.c.svn-base:7334: status_change_clear_buffs(bl,1); //Should dispell only allies./home/renegade/trunk/src/map/.svn/text-base/skill.c.svn-base:7699: status_change_clear_buffs(bl,2);/home/renegade/trunk/src/map/.svn/text-base/status.h.svn-base:1265:int status_change_clear_buffs(struct block_list* bl, int type);/home/renegade/trunk/src/map/skill.c:5385: status_change_clear_buffs(bl,1);/home/renegade/trunk/src/map/skill.c:7334: status_change_clear_buffs(bl,1); //Should dispell only allies./home/renegade/trunk/src/map/skill.c:7699: status_change_clear_buffs(bl,2);/home/renegade/trunk/src/map/status.h:1265:int status_change_clear_buffs(struct block_list* bl, int type);[/font][/color][color=#282828][font=Open Sans', ', sans-serif] Изменено 24 июля, 2015 пользователем Renegade Bastard Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 В файле status.c (у меня 7414 строка)/*==========================================* Clears buffs/debuffs of a character.* type&1 -> buffs, type&2 -> debuffs*------------------------------------------*/int status_change_clear_buffs (struct block_list* bl, int type){Скажи айди книги на опыт 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 24 июля, 2015 Автор Жалоба Поделиться Опубликовано 24 июля, 2015 (изменено) int status_change_clear_buffs (struct block_list* bl, int type){int i;struct status_change *sc= status_get_sc(bl);if (!sc || !sc->count)return 0;if (type&2) //Debuffsfor( i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++ ){if(sc->data[i])status_change_end(bl,(sc_type)i,-1);}for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ ){if(!sc->data[i])continue;switch (i) {//Stuff that cannot be removedcase SC_WEIGHT50:case SC_WEIGHT90:case SC_COMBO:case SC_SMA:case SC_DANCING:case SC_GUILDAURA:case SC_SAFETYWALL:case SC_PNEUMA:case SC_NOCHAT:case SC_JAILED:case SC_ANKLE:case SC_BLADESTOP:case SC_CP_WEAPON:case SC_CP_SHIELD:case SC_CP_ARMOR:case SC_CP_HELM:case SC_STRFOOD:case SC_AGIFOOD:case SC_VITFOOD:case SC_INTFOOD:case SC_DEXFOOD:case SC_LUKFOOD:case SC_HITFOOD:case SC_FLEEFOOD:case SC_BATKFOOD:case SC_WATKFOOD:case SC_MATKFOOD:continue;//Debuffs that can be removed.case SC_HALLUCINATION:case SC_QUAGMIRE:case SC_SIGNUMCRUCIS:case SC_DECREASEAGI:case SC_SLOWDOWN:case SC_MINDBREAKER:case SC_WINKCHARM:case SC_STOP:case SC_ORCISH:case SC_STRIPWEAPON:case SC_STRIPSHIELD:case SC_STRIPARMOR:case SC_STRIPHELM:if (!(type&2)) continue;break;//The rest are buffs that can be removed.case SC_BERSERK:if (!(type&1)) continue; sc->data[i]->val2 = 0;break;default:if (!(type&1)) continue;break;}status_change_end(bl,(sc_type)i,-1);}return 0;}Нашел в файле /src/map/.svn/text-base/skill.c.svn-baseно чесноговоря не уверен что оно компилиится оттудаВ файле status.c (у меня 7414 строка)/*==========================================* Clears buffs/debuffs of a character.* type&1 -> buffs, type&2 -> debuffs*------------------------------------------*/int status_change_clear_buffs (struct block_list* bl, int type){Скажи айди книги на опытточняк, нашел. Кеник, ты царь.А книжка - вотhttp://ratemyserver....&isearch=Search Изменено 24 июля, 2015 пользователем Renegade Bastard Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 У меня не вешается статус. Ну точнее, вешается, но не отображается в списке. Это нормально, но потестить как у тебя не смогу)Ты скинул кусок кода, там нету статуса SC_EXPBOOST в списке. Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 24 июля, 2015 Автор Жалоба Поделиться Опубликовано 24 июля, 2015 Страничку обнови. Хорошо что не Кенни Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 Страничку обнови. Хорошо что не Кенни Обновил. Нету) Добавь после case SC_MATKFOOD: case SC_EXPBOOST: Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 24 июля, 2015 Автор Жалоба Поделиться Опубликовано 24 июля, 2015 (изменено) Обновил. Нету) Добавь после case SC_MATKFOOD: case SC_EXPBOOST:Ну я же не дебил, добавил сразу как нашел. Чуть попозжя перекомпилю.У меня не вешается статус. Ну точнее, вешается, но не отображается в списке. Это нормальноА у меня вешается. Чекни status.c на предмет наличияStatusIconchangeTable[SC_EXPBOOST] = SI_EXPBOOST; Изменено 24 июля, 2015 пользователем Renegade Bastard Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 24 июля, 2015 Жалоба Поделиться Опубликовано 24 июля, 2015 У меня не вешается, потому что так надо Потом скомпилишь - скажешь заработало-нет) точняк, нашел. Кеник, ты царь. В точку! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения