|
|
|
add necromancy spell to spellbook |
|
|
SusaniN |
14.10.2024, 23:20
|
Journeyman
Сообщений: 415
Регистрация: 23.6.2004 Группа: Пользователи Наличность: 0 Из: Izmaylovo
Пользователь №: 1.873
|
Цитата(Amaterasu @ 21.8.2024, 11:35) нашел в вики вот такое описание у спеллбуки
_In older sphere versions, MOREX, MOREY, and MOREZ could be set to add additional spells (necro, etc), but recently these concepts may have been removed...
предполагаю что 51.a достаточно старая версия и такая возможность есть, но методом подбора ничего добавить не вышло, мб кто знает как это должно работать?
Никак простым способом не добавить в обычную спелбуку некромантию, только переписывать всю с нуля.
--------------------
Cause i can dodge the bullets, baby © Phil Hellmuth
|
|
|
|
keni |
15.10.2024, 15:04
|
Группа: Пользователи Наличность: 1
Пользователь №: 6.699
Возраст: 10
|
Привет к сожалению никак, но я выложил исходники в соседней теме вот пример краткий, если разберешься все довольно просто. ccharskill.cpp Код // Метод для проверки возможности использования некромантских заклинаний. bool CChar::CanUseNecromancerMagic() const { // Проверяем, дохлый вы или нет, и антимагию региона. return !IsStat(STATF_DEAD) && !m_pArea->IsFlag(REGION_ANTIMAGIC_ALL); }
метод Spell_CanCast Код bool CChar::Spell_CanCast(SPELL_TYPE spell, bool fTest, CObjBase* pSrc, bool fFailMsg) { if (g_Serv.m_SpellDefs[spell]->m_bIsNecro) { if (!CanUseNecromancerMagic()) //метод который выше приложил чекаем, на состояние и регион { if (fFailMsg) SysMessage("You can't cast necromantic spells in this area or state."); return false; } }
if (spell <= SPELL_NONE || pSrc == NULL || !g_Serv.m_SpellDefs.IsValidIndex(spell) || g_Serv.m_SpellDefs[spell]->IsSpellType(SPELLFLAG_DISABLED)) { return false; }
int mana = g_Serv.m_SpellDefs[spell]->m_wManaUse; if (mana <= 0) mana = Spell_ManaReq[(spell - SPELL_Clumsy) / 8];
// Проверка на наличие маны if (m_StatMana < mana) { if (fFailMsg) SysMessage("You lack sufficient mana for this spell"); return false; }
if (!fTest && mana) // Уменьшаем ману { UpdateStats(STAT_INT, -mana); }
// Проверка на наличие необходимых реагентов if (g_Serv.m_fReagentsRequired) { CItemContainer* pPack = GetPack(); if (pPack) { const TCHAR* pszRegs = g_Serv.m_SpellDefs[spell]->m_sReags; while (pszRegs[0]) { if (*pszRegs == ',') pszRegs++; const TCHAR* pRegPrv = pszRegs; if (pPack->ContentConsume(GetResourceItem(const_cast<TCHAR*&>(pszRegs)), 1, fTest)) { if (fFailMsg) SysMessagef("You lack reagents for this spell (%s)", pRegPrv); return false; } if (pRegPrv == pszRegs) break; } } } return true; }
и сам спелл выводит сообщение тупо о том что закастованно, там уже эффекты из других возьмешь потыкаешь Код bool CChar::CastNecromancerSpell(SPELL_TYPE spell) { if (!Spell_CanCast(spell, false, this, true)) return false;
SysMessage("SKILL USED NECRO"); //мессага
return true; }
Пс код не полный там еще должны быть удаления эффекта итд но по идее и такой заведется, проверок на привелегию нет поэтому он даж на гме будет как на обычном чаре кастоваться но можешь по аналогии добавить/убрать И если память не изменяет докидываешь в сфертеблс магию свою,а через дефс иконку там опять же разберешься. Либо возьми какой нибудь unused spell потипу Earthquake, или Hallucination Пс лучше все проверить с телефона писал
--------------------
|
|
|
|
keni |
15.10.2024, 21:00
|
Группа: Пользователи Наличность: 1
Пользователь №: 6.699
Возраст: 10
|
Вообще понял что слишком абстрактно написал, доехал с работы короче вот тупой пример но рабочий. если мне не изменяет память на 51 не работает скилл MAGIC_TRAP И АНТРАП точней он работал но там баг был какой я не помню, вообще я иногда забываю как меня зовут 1.Топаем сфератаблес в выставляем тут реги звуки и прочее я особо не заморачивался, Cамо название иконки и спела нужно менять где то в мулах я думаю кто тут шариться с клиентом подскажет. Название того что каститься типо In Jux тоже вроде в клиенте храниться [Spell 13] NAME=NECROMANCY SOUND=SPELL_MAGIC_TRAP //музончик какой при юзе RUNES=IJ //это из RUNES секции идет 1 буквы Типо хочешь что бы было An Bet Corp Пиши ABC (а если хочешь кастом месаги то клиент) CASTTIME=1 REAGENTS= RUNE_ITEM=RUNE_MAGIC_TRAP SCROLL_ITEM=SCROLL_MAGIC_TRAP FLAGS=SPELLFLAG_TARG_OBJ EFFECT_ID=0 EFFECT_LO=0 EFFECT_HI=0 2. Топаем в ссcharskill.cpp Ищем скил MAGIC_TRAP //Пример с суммоном сделал что бы наглядней было Код case SPELL_Magic_Trap: m_atMagery.m_SummonID = CREID_LICH; //дописываем кого хотим суммонить goto summon_effect; //сумон
Собираем решение Вуаля Лич флексит Ссылка на то как это работает ВИДЕОВообще Лучше переходи на X там это все через скрипты делается на изи итд Блин так и не смог уснуть чет думал об ультиме ))))))))))) короче вот еще пример набросал типо чар обкастовывает себя стенами и реколиться не стал функцию рекала делать потому что не совсем бы понятно было че происходит. Опять же можно добавить проверку на некру % итд все что угодно просто закидываю идеи может кто нибудь запилит годный шард наконец)))))) с онлайном живым под 600 тел Пример кода Код case SPELL_Magic_Trap: { //16.10.2024 CPointMap playerPos = GetTopPoint();
//3x3 сетку создаем for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { CPointMap wallPos = playerPos; wallPos.m_x += x; wallPos.m_y += y;
//Не уверен что эти стены откатываются надо проверять CItem* pWall = CItem::CreateBase(ITEMID_STONE_WALL); pWall->MoveToCheck(wallPos); } }
SysMessage("Feel the power of necromancer"); } break;
Видеопс в 100 раз вообще владея исходным кодом что угодно сделать можно, хоть видео с ютуба в ультиму запихать))) вопрос только твоей фантазии и наличия времени
--------------------
|
|
|
|
Amaterasu |
19.10.2024, 13:07
|
Registred
Сообщений: 6
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45
|
Цитата(keni @ 15.10.2024, 21:00) Вообще понял что слишком абстрактно написал, доехал с работы короче вот тупой пример но рабочий. если мне не изменяет память на 51 не работает скилл MAGIC_TRAP И АНТРАП точней он работал но там баг был какой я не помню, вообще я иногда забываю как меня зовут 1.Топаем сфератаблес в выставляем тут реги звуки и прочее я особо не заморачивался, Cамо название иконки и спела нужно менять где то в мулах я думаю кто тут шариться с клиентом подскажет. Название того что каститься типо In Jux тоже вроде в клиенте храниться [Spell 13] NAME=NECROMANCY SOUND=SPELL_MAGIC_TRAP //музончик какой при юзе RUNES=IJ //это из RUNES секции идет 1 буквы Типо хочешь что бы было An Bet Corp Пиши ABC (а если хочешь кастом месаги то клиент) CASTTIME=1 REAGENTS= RUNE_ITEM=RUNE_MAGIC_TRAP SCROLL_ITEM=SCROLL_MAGIC_TRAP FLAGS=SPELLFLAG_TARG_OBJ EFFECT_ID=0 EFFECT_LO=0 EFFECT_HI=0 2. Топаем в ссcharskill.cpp Ищем скил MAGIC_TRAP //Пример с суммоном сделал что бы наглядней было Код case SPELL_Magic_Trap: m_atMagery.m_SummonID = CREID_LICH; //дописываем кого хотим суммонить goto summon_effect; //сумон
Собираем решение Вуаля Лич флексит Ссылка на то как это работает ВИДЕОВообще Лучше переходи на X там это все через скрипты делается на изи итд Блин так и не смог уснуть чет думал об ультиме ))))))))))) короче вот еще пример набросал типо чар обкастовывает себя стенами и реколиться не стал функцию рекала делать потому что не совсем бы понятно было че происходит. Опять же можно добавить проверку на некру % итд все что угодно просто закидываю идеи может кто нибудь запилит годный шард наконец)))))) с онлайном живым под 600 тел Пример кода Код case SPELL_Magic_Trap: { //16.10.2024 CPointMap playerPos = GetTopPoint();
//3x3 сетку создаем for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { CPointMap wallPos = playerPos; wallPos.m_x += x; wallPos.m_y += y;
//Не уверен что эти стены откатываются надо проверять CItem* pWall = CItem::CreateBase(ITEMID_STONE_WALL); pWall->MoveToCheck(wallPos); } }
SysMessage("Feel the power of necromancer"); } break;
Видеопс в 100 раз вообще владея исходным кодом что угодно сделать можно, хоть видео с ютуба в ультиму запихать))) вопрос только твоей фантазии и наличия времени спасибо да, в исходниках давно копаюсь(ибо каждый год у меня был обряд поиска исходников и однажды я таки нашел на гитхабе их), но в основном в ознакомительных целях посмотреть что как работает, ибо за основу беру абисс а там много модификаций от которых не готов отказываться
|
|
|
|
Amaterasu |
22.10.2024, 18:33
|
Registred
Сообщений: 6
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45
|
Цитата(keni @ 21.10.2024, 12:07) Забавно что кому то спустя столько лет еще интересно, если любишь копаться заходи ко мне хотя я еще особо ничего не написал интересного, потихоньку начал делать сферу не знаю на сколько энтузиазма хватит. Ссылка на гитспасибо за приглашение) но не могу Вот бы найти реверс инженера который бы переписал функционал абисса в исходник... мечта Цитата(Sirocco @ 21.10.2024, 16:47) У меня исходники появились слишком поздно... но раньше чем вообще какие-то исходники сферы появились в сети. И тогда мне это уже было совершенно не интересно. Сейчас залезаю в них исключительно как в справочник. Иногда, если мне что-то нужно исправить, я тупо всю систему через скрипты переписываю.
хз какие ты там системы с скуднейшим функционалом 51 сферы переписываешь (IMG: style_emoticons/default/biggrin.gif)
|
|
|
|
keni |
23.10.2024, 1:44
|
Группа: Пользователи Наличность: 1
Пользователь №: 6.699
Возраст: 10
|
Цитата(Amaterasu @ 22.10.2024, 18:33) спасибо за приглашение) но не могу Вот бы найти реверс инженера который бы переписал функционал абисса в исходник... мечта хз какие ты там системы с скуднейшим функционалом 51 сферы переписываешь (IMG: style_emoticons/default/biggrin.gif) Там бесполезно, но если у тебя есть какие то вопросы касательно работы могу подсказать, я просто начал писать те фишки о которых знаю и которые реализованы на абисе, ну и в последствии добавить отсебятины )) Просто крайне сложно с графиком 7.0 этим заниматься
--------------------
|
|
|
|
Amaterasu |
23.10.2024, 21:12
|
Registred
Сообщений: 6
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45
|
Цитата(keni @ 23.10.2024, 1:44) Там бесполезно, но если у тебя есть какие то вопросы касательно работы могу подсказать, я просто начал писать те фишки о которых знаю и которые реализованы на абисе, ну и в последствии добавить отсебятины )) Просто крайне сложно с графиком 7.0 этим заниматься
ну почему, я просто не усидчивый человек а так если сесть надолго или посадить спеца то он за пару недель все сделает я бы именно хотел обратную совместимость а не сделать тот же функционал но по другому)(это при должном усердии тоже можно сделать (по крайней мере то о чем известно))
|
|
|
|
SusaniN |
3.11.2024, 3:48
|
Journeyman
Сообщений: 415
Регистрация: 23.6.2004 Группа: Пользователи Наличность: 0 Из: Izmaylovo
Пользователь №: 1.873
|
Цитата(Amaterasu @ 23.10.2024, 21:12) ну почему, я просто не усидчивый человек а так если сесть надолго или посадить спеца то он за пару недель все сделает
я бы именно хотел обратную совместимость а не сделать тот же функционал но по другому)(это при должном усердии тоже можно сделать (по крайней мере то о чем известно))
Некромантию можно скриптами реализовать, даже на 51 сфере, смотря что ты хочешь сделать конкретно, было бы желание и понимание. А реверс инженерия - это цирк, особенно в таких античных проектах как 51 сфера. Тебе даже исходники дали и подсказали где копать, но тебе этого мало, ну так сиди и разбирайся, было бы понимание - не было бы таких вопросов. А по факту ты просто хочешь готовое решение, желательно с Абиса, но его тут тебе никто не даст. PS: Для начала придумай на что влияет некромантия и как она будет работать у тебя.
--------------------
Cause i can dodge the bullets, baby © Phil Hellmuth
|
|
|
|
keni |
4.11.2024, 23:32
|
Группа: Пользователи Наличность: 1
Пользователь №: 6.699
Возраст: 10
|
А если как на абусе то тут немного по другому нужно подход делать. Скрипт книги sphereitem.scpКод [2253] //Necromancer book COLOR=0488 BUYVALUE=2000000 //SELLVALUE=0 ATTR=24 LAYER=2 WEIGHT=0
ONTRIGGER=DCLICK if (<src.necromancy><700) // С 70 процентов некры мы можем читать книгу собственно и использовать ее. по назначению src.sysmessage Your necromancy skill is too low to read this book.^Ваш навык necromancy слишком мал чтобы прочитать эту книгу. return 1 elseif (<src.gm>==1) return 1 endif
Ссылка на кодтопаем в файл идентификаторов graymul.hКод ITEMID_NECRO_BOOK = 0x2593 //Номер книжки в скрипте
Топаем в cclientevent.cppНаходим функцию Cmd_Use_Item Вот пример кода что бы понять что мы сделали все правильно, он будет просто выводить сообщение ``NOW U CAN USE UR BOOK IDIOT`` при юзе книги и скила выше 70% в журнал. Дальше уже полет фантазии только за вами. Ссылка на кодКод case ITEM_NORMAL: { //ABYSS STUFF HERE // Handle all ITEM_NORMAL cases here. Avoid nested switches if possible. if (!m_pChar->ContentFind(ITEMID_NECRO_BOOK)) { SysMessage("NOW U CAN USE UR BOOK IDIOT."); return false; } else { //SOMETHING ELSE return false; } }
Вот как это выглядит в игре ВидеоЗакину еще ссылку на гитхаб может будет интересно, полноценную книгу я думаю к концу месяца смогу сделать ибо сейчас времени совсем нет разбирать все
--------------------
|
|
|
|
Amaterasu |
8.11.2024, 12:33
|
Registred
Сообщений: 6
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45
|
Цитата(SusaniN @ 3.11.2024, 3:48) Некромантию можно скриптами реализовать, даже на 51 сфере, смотря что ты хочешь сделать конкретно, было бы желание и понимание. А реверс инженерия - это цирк, особенно в таких античных проектах как 51 сфера.
Тебе даже исходники дали и подсказали где копать, но тебе этого мало, ну так сиди и разбирайся, было бы понимание - не было бы таких вопросов. А по факту ты просто хочешь готовое решение, желательно с Абиса, но его тут тебе никто не даст.
PS: Для начала придумай на что влияет некромантия и как она будет работать у тебя.
Рили?!! а я думал ток циферки менять можно(((( А если серьезно, если есть возможность оригинально сделать почему бы не попробовать? я нашел в вики что такая возможность есть в старых сферах но нет инфы как - пошел на форум спросил. В чем проблема? это какая то традиция всех обвинять в поиске готовых легких решений?
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|