Перейти к содержанию

Госпель сбивает статус книги на опыт


Рекомендуемые сообщения

В общем и целом, дискуссия пошла у меня вот тут кому не в лом гляньте. То что мне удалось выяснить в посте по ссылке. То что понял - без модификации исходников эту багу не решить. Но пока слабо представляю себе как. Либо какимто образом менять механизм дебафа от госпеля, либо.. На этом мысль останавливается.

Изменено пользователем Renegade Bastard
Ссылка на комментарий
Поделиться на другие сайты

Костыль: в сорсах же в куске кода, где госпель снимает все статусы - сделать проверку на SC_EXPBOOST и не снимать его (:

Ссылка на комментарий
Поделиться на другие сайты

Костыль: в сорсах же в куске кода, где госпель снимает все статусы - сделать проверку на SC_EXPBOOST и не снимать его (:

8I8fMOJ.png

я так понял он тупо всем активным статусам обнуляет таймер. Если добавить условный оператор то если висит статус SC_EXPBOOST госпель вообще статусы не скинет. Это будет неочень.

Изменено пользователем Renegade Bastard
Ссылка на комментарий
Поделиться на другие сайты

У меня последняя 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 removed
case 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 effect
val2 = tick/10000;
tick = 10000;
status_change_clear_buffs(bl,3); //Remove buffs/debuffs
}
break;

При старте статуса "Госпель" вызывается status_change_clear_buffs

P.S. Перевес же не сбивает :D

P.P.S. Чёртов форум отступы съедает >.<

Ссылка на комментарий
Поделиться на другие сайты

у меня так же. в каком файле искать саму функцию 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]

Изменено пользователем Renegade Bastard
Ссылка на комментарий
Поделиться на другие сайты

В файле 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)
{

Скажи айди книги на опыт

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты


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) //Debuffs
for( 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 removed
case 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

Изменено пользователем Renegade Bastard
Ссылка на комментарий
Поделиться на другие сайты

У меня не вешается статус. Ну точнее, вешается, но не отображается в списке. Это нормально, но потестить как у тебя не смогу)

Ты скинул кусок кода, там нету статуса SC_EXPBOOST в списке.

Ссылка на комментарий
Поделиться на другие сайты

Обновил. Нету) Добавь после case SC_MATKFOOD:

case SC_EXPBOOST:

Ну я же не дебил, добавил сразу как нашел. Чуть попозжя перекомпилю.

У меня не вешается статус. Ну точнее, вешается, но не отображается в списке. Это нормально

А у меня вешается. Чекни status.c на предмет наличия

StatusIconchangeTable[SC_EXPBOOST] = SI_EXPBOOST;

Изменено пользователем Renegade Bastard
Ссылка на комментарий
Поделиться на другие сайты

У меня не вешается, потому что так надо :D

Потом скомпилишь - скажешь заработало-нет)

точняк, нашел. Кеник, ты царь.

В точку!

BoW7822ji1E.jpg

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика