Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> add necromancy spell to spellbook
Amaterasu
сообщение 21.8.2024, 11:35
Сообщение #1


*

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



нашел в вики вот такое описание у спеллбуки

_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 достаточно старая версия и такая возможность есть, но методом подбора ничего добавить не вышло, мб кто знает как это должно работать?



Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
SusaniN
сообщение 14.10.2024, 23:20
Сообщение #2


*****

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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
keni
сообщение 15.10.2024, 15:04
Сообщение #3


**

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

Пс лучше все проверить с телефона писал


--------------------
Ryan John Waldecker 1987 -2007 best friend forever

https://uoarena.ru/ FUN PVP 51a ORION GG by BangBang
Sphere 51 Open Source
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
keni
сообщение 15.10.2024, 21:00
Сообщение #4


**

Группа: Пользователи
Наличность: 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 раз вообще владея исходным кодом что угодно сделать можно, хоть видео с ютуба в ультиму запихать))) вопрос только твоей фантазии и наличия времени


--------------------
Ryan John Waldecker 1987 -2007 best friend forever

https://uoarena.ru/ FUN PVP 51a ORION GG by BangBang
Sphere 51 Open Source
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Amaterasu
сообщение 19.10.2024, 13:07
Сообщение #5


*

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 раз вообще владея исходным кодом что угодно сделать можно, хоть видео с ютуба в ультиму запихать))) вопрос только твоей фантазии и наличия времени



спасибо

да, в исходниках давно копаюсь(ибо каждый год у меня был обряд поиска исходников и однажды я таки нашел на гитхабе их), но в основном в ознакомительных целях посмотреть что как работает, ибо за основу беру абисс а там много модификаций от которых не готов отказываться

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
keni
сообщение 21.10.2024, 12:07
Сообщение #6


**

Группа: Пользователи
Наличность: 1
Пользователь №: 6.699
Возраст: 10



Цитата(Amaterasu @ 19.10.2024, 13:07) *

спасибо

да, в исходниках давно копаюсь(ибо каждый год у меня был обряд поиска исходников и однажды я таки нашел на гитхабе их), но в основном в ознакомительных целях посмотреть что как работает, ибо за основу беру абисс а там много модификаций от которых не готов отказываться

Забавно что кому то спустя столько лет еще интересно, если любишь копаться заходи ко мне хотя я еще особо ничего не написал интересного, потихоньку начал делать сферу не знаю на сколько энтузиазма хватит.

Ссылка на гит


--------------------
Ryan John Waldecker 1987 -2007 best friend forever

https://uoarena.ru/ FUN PVP 51a ORION GG by BangBang
Sphere 51 Open Source
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 21.10.2024, 16:47
Сообщение #7


******

Expert
Сообщений: 823
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 16104
Пользователь №: 14.566
Возраст: 30



У меня исходники появились слишком поздно... но раньше чем вообще какие-то исходники сферы появились в сети. И тогда мне это уже было совершенно не интересно. Сейчас залезаю в них исключительно как в справочник. Иногда, если мне что-то нужно исправить, я тупо всю систему через скрипты переписываю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Amaterasu
сообщение 22.10.2024, 18:33
Сообщение #8


*

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)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 22.10.2024, 19:09
Сообщение #9


******

Expert
Сообщений: 823
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 16104
Пользователь №: 14.566
Возраст: 30



да я не про 51 сферу. но не много лучше - 55i... но пиленная-перепиленная, так что версия сферы это только точка старта.

меня просто заинтересовала эта тема, что вы предлагаете напрямую в исходники что-то исправлять.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
keni
сообщение 23.10.2024, 1:44
Сообщение #10


**

Группа: Пользователи
Наличность: 1
Пользователь №: 6.699
Возраст: 10



Цитата(Amaterasu @ 22.10.2024, 18:33) *

спасибо за приглашение)
но не могу
Вот бы найти реверс инженера который бы переписал функционал абисса в исходник... мечта
хз какие ты там системы с скуднейшим функционалом 51 сферы переписываешь (IMG:style_emoticons/default/biggrin.gif)


Там бесполезно, но если у тебя есть какие то вопросы касательно работы могу подсказать, я просто начал писать те фишки о которых знаю и которые реализованы на абисе, ну и в последствии добавить отсебятины )) Просто крайне сложно с графиком 7.0 этим заниматься


--------------------
Ryan John Waldecker 1987 -2007 best friend forever

https://uoarena.ru/ FUN PVP 51a ORION GG by BangBang
Sphere 51 Open Source
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Amaterasu
сообщение 23.10.2024, 21:12
Сообщение #11


*

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



Цитата(keni @ 23.10.2024, 1:44) *

Там бесполезно, но если у тебя есть какие то вопросы касательно работы могу подсказать, я просто начал писать те фишки о которых знаю и которые реализованы на абисе, ну и в последствии добавить отсебятины )) Просто крайне сложно с графиком 7.0 этим заниматься

ну почему, я просто не усидчивый человек а так если сесть надолго или посадить спеца то он за пару недель все сделает

я бы именно хотел обратную совместимость а не сделать тот же функционал но по другому)(это при должном усердии тоже можно сделать (по крайней мере то о чем известно))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
SusaniN
сообщение 3.11.2024, 3:48
Сообщение #12


*****

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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
keni
сообщение 4.11.2024, 23:32
Сообщение #13


**

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




Вот как это выглядит в игре Видео

Закину еще ссылку на гитхаб может будет интересно, полноценную книгу я думаю к концу месяца смогу сделать ибо сейчас времени совсем нет разбирать все


--------------------
Ryan John Waldecker 1987 -2007 best friend forever

https://uoarena.ru/ FUN PVP 51a ORION GG by BangBang
Sphere 51 Open Source
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Amaterasu
сообщение 8.11.2024, 12:33
Сообщение #14


*

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



Цитата(SusaniN @ 3.11.2024, 3:48) *

Некромантию можно скриптами реализовать, даже на 51 сфере, смотря что ты хочешь сделать конкретно, было бы желание и понимание.
А реверс инженерия - это цирк, особенно в таких античных проектах как 51 сфера.

Тебе даже исходники дали и подсказали где копать, но тебе этого мало, ну так сиди и разбирайся, было бы понимание - не было бы таких вопросов. А по факту ты просто хочешь готовое решение, желательно с Абиса, но его тут тебе никто не даст.

PS: Для начала придумай на что влияет некромантия и как она будет работать у тебя.


Рили?!! а я думал ток циферки менять можно((((

А если серьезно, если есть возможность оригинально сделать почему бы не попробовать?

я нашел в вики что такая возможность есть в старых сферах но нет инфы как - пошел на форум спросил. В чем проблема?
это какая то традиция всех обвинять в поиске готовых легких решений?



Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 8.12.2024, 16:22
Designed by Nickostyle