|
|
  |
add necromancy spell to spellbook |
|
|
SusaniN |
14.10.2024, 23:20
|

    
Journeyman
Сообщений: 418
Регистрация: 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
|

 
Группа: Пользователи Наличность: 0
Пользователь №: 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
|

 
Группа: Пользователи Наличность: 0
Пользователь №: 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
Сообщений: 8
Регистрация: 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
Сообщений: 8
Регистрация: 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
|

 
Группа: Пользователи Наличность: 0
Пользователь №: 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
Сообщений: 8
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45

|
Цитата(keni @ 23.10.2024, 1:44)  Там бесполезно, но если у тебя есть какие то вопросы касательно работы могу подсказать, я просто начал писать те фишки о которых знаю и которые реализованы на абисе, ну и в последствии добавить отсебятины )) Просто крайне сложно с графиком 7.0 этим заниматься
ну почему, я просто не усидчивый человек а так если сесть надолго или посадить спеца то он за пару недель все сделает я бы именно хотел обратную совместимость а не сделать тот же функционал но по другому)(это при должном усердии тоже можно сделать (по крайней мере то о чем известно))
|
|
|
|
SusaniN |
3.11.2024, 3:48
|

    
Journeyman
Сообщений: 418
Регистрация: 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
|

 
Группа: Пользователи Наличность: 0
Пользователь №: 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
Сообщений: 8
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45

|
Цитата(SusaniN @ 3.11.2024, 3:48)  Некромантию можно скриптами реализовать, даже на 51 сфере, смотря что ты хочешь сделать конкретно, было бы желание и понимание. А реверс инженерия - это цирк, особенно в таких античных проектах как 51 сфера.
Тебе даже исходники дали и подсказали где копать, но тебе этого мало, ну так сиди и разбирайся, было бы понимание - не было бы таких вопросов. А по факту ты просто хочешь готовое решение, желательно с Абиса, но его тут тебе никто не даст.
PS: Для начала придумай на что влияет некромантия и как она будет работать у тебя.
Рили?!! а я думал ток циферки менять можно(((( А если серьезно, если есть возможность оригинально сделать почему бы не попробовать? я нашел в вики что такая возможность есть в старых сферах но нет инфы как - пошел на форум спросил. В чем проблема? это какая то традиция всех обвинять в поиске готовых легких решений?
|
|
|
|
SusaniN |
13.12.2024, 0:08
|

    
Journeyman
Сообщений: 418
Регистрация: 23.6.2004 Группа: Пользователи Наличность: 0 Из: Izmaylovo
Пользователь №: 1.873

|
Цитата(Amaterasu @ 8.11.2024, 12:33)  Рили?!! а я думал ток циферки менять можно((((
А если серьезно, если есть возможность оригинально сделать почему бы не попробовать?
я нашел в вики что такая возможность есть в старых сферах но нет инфы как - пошел на форум спросил. В чем проблема? это какая то традиция всех обвинять в поиске готовых легких решений?
Так Написали же, пишешь предмет: бук оф некроманси, если по красоте, то туда рисуешь картинки, подгоняешь гампы, хотя можешь для начала просто через меню сделать, потом нарисуешь если будет все работать. И вот в сфеременю делаешь менюшку со спеллами какими хочешь, и описываешь как они будут работать. Можешь через ивенты сделать если сфера с lil, если абисовская то придется тебе через мемори айтемы все это писать. В сфереитем добавляешь: [aaaa] ID=0efa NAME=Book of Necromancy ONTRIGGER=DCLICK SRC.ITEMMENU xxxx Ну и там проверки все нужно вбить на кучу всего, но смысл такой, что при клике будет меню открываться. Дальше пишешь мемори на книгу на касты и что хочешь. [yyyy] ID=2007 TYPE=100 TIMER=1 ONTRIGGER=TIMER cont.name=<cont.name> velikiy nekromancer timer -1 В нем описываешь весь механизм, который нужно продумать и все учесть, в триггере timer используй вместо src. -> cont. чтобы эффект был с чаром носящим этот мемори(либо через линк, тогда при его создании нужно прописать link=<src.uid>), например cont.mana=<cont.mana>+1, и просто timer чтобы обращаться к предмету, например morez=1 сделает параметр morez на мемори предмете равным 1. Через эти параметры можно все и описывать. Дальше в сфеременю пишешь менюшку: ITEMMENU [xxxx] Menu of necromancy ON=0 Summon Undead IF <SRC.RESTEST 1 0aaaa> IF <SRC.NECROMANCY>>=1000 SRC.NEWITEM yyyy SRC.ACT.EQUIP SRC.ACT.LINK=<SRC.UID> или src.act.link=<src.serial> SRC.ANIM SRC.SOUND ENDIF ELSE SRC.MESSAGE=You have lost your book of necromancy return 1 Это как книгу сделать, а еще нужно написать сам скилл чтобы качался и как. Ну и еще нужно решить проблему как прицел вызывать из меню, по идее есть определенные тайпы когда на них дкликаешь прицел выходит, можно использовать это, я уже не помню как там чего, но смысл в том что вот такими костылями это все и реализуется. Ну и сам понимаешь что писать это все не 5 минут, это нужно сидеть и думать как и что ты будешь реализовывать, как и что будет работать и т. д. поэтому в начале лучше придумать просто что ты хочешь сделать, и только потом уже реализовывать.
--------------------
Cause i can dodge the bullets, baby © Phil Hellmuth
|
|
|
|
Amaterasu |
13.12.2024, 21:23
|

Registred
Сообщений: 8
Регистрация: 21.8.2024 Группа: Пользователи Наличность: 0
Пользователь №: 20.808
Возраст: 45

|
Цитата(SusaniN @ 13.12.2024, 0:08)  Так Написали же, пишешь предмет: бук оф некроманси, если по красоте, то туда рисуешь картинки, подгоняешь гампы, хотя можешь для начала просто через меню сделать, потом нарисуешь если будет все работать. И вот в сфеременю делаешь менюшку со спеллами какими хочешь, и описываешь как они будут работать. Можешь через ивенты сделать если сфера с lil, если абисовская то придется тебе через мемори айтемы все это писать.
В сфереитем добавляешь:
[aaaa] ID=0efa NAME=Book of Necromancy
ONTRIGGER=DCLICK SRC.ITEMMENU xxxx
Ну и там проверки все нужно вбить на кучу всего, но смысл такой, что при клике будет меню открываться.
Дальше пишешь мемори на книгу на касты и что хочешь.
[yyyy] ID=2007 TYPE=100 TIMER=1
ONTRIGGER=TIMER cont.name=<cont.name> velikiy nekromancer timer -1
В нем описываешь весь механизм, который нужно продумать и все учесть, в триггере timer используй вместо src. -> cont. чтобы эффект был с чаром носящим этот мемори(либо через линк, тогда при его создании нужно прописать link=<src.uid>), например cont.mana=<cont.mana>+1, и просто timer чтобы обращаться к предмету, например morez=1 сделает параметр morez на мемори предмете равным 1. Через эти параметры можно все и описывать.
Дальше в сфеременю пишешь менюшку:
ITEMMENU [xxxx] Menu of necromancy
ON=0 Summon Undead IF <SRC.RESTEST 1 0aaaa> IF <SRC.NECROMANCY>>=1000 SRC.NEWITEM yyyy SRC.ACT.EQUIP SRC.ACT.LINK=<SRC.UID> или src.act.link=<src.serial> SRC.ANIM SRC.SOUND ENDIF ELSE SRC.MESSAGE=You have lost your book of necromancy return 1
Это как книгу сделать, а еще нужно написать сам скилл чтобы качался и как. Ну и еще нужно решить проблему как прицел вызывать из меню, по идее есть определенные тайпы когда на них дкликаешь прицел выходит, можно использовать это, я уже не помню как там чего, но смысл в том что вот такими костылями это все и реализуется.
Ну и сам понимаешь что писать это все не 5 минут, это нужно сидеть и думать как и что ты будешь реализовывать, как и что будет работать и т. д. поэтому в начале лучше придумать просто что ты хочешь сделать, и только потом уже реализовывать.
Так написал же, что хотел именно посмотреть как это работало бы стандартно. Вопроса как написать самому не было... но спасибо за старания, хоть и бесполезные. прицел через 12 тип делается
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|