Перейти к содержимому
La2Base
Главная
ЗагрузкиВикиФорумFAQ
Поиск
ruen
Регистрация Войти
ГлавнаяФайлыВикиВойти
  • Главная
  • Загрузки
  • Вики
  • FAQ
  • Обратная связь
  • О проекте
  • Правила
  • Конфиденциальность
  • Условия использования

© 2026 la2base.com · Все права защищены

ruen
Форум/Скрипты/Баффер через Ai.obj
Поиск

Баффер через Ai.obj

15 ответов747 просмотровСейчас просматривают: 1
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 07.12.2008, 06:44

Привет всем!
Ситуация следующая:
Хочу сделать себе баффера. Поковырялся в АИ.ОБЖ и нарвался на идентификатор скилла в странном виде для меня:


myself->AddUseSkillDesire(talker,1106433,1,0,1000000);


Я конечно понимаю, что это нормальный номер скилла для аи......но где я могу узнать какой это скилл?
То есть, как можно преобразовать это число, чтоб получить нормальный ID или вообще нужно ли это, или где можно посмотреть, какой скилл соответствует хотябы данному номеру...

Заранее спасибо.

0
IIIeiK
IIIeiK

Пользователь

Участник

Постов: 85

На форуме с: 04.10.2008

Репутация: +35

Рейтинг: 0

· 07.12.2008, 13:55

я так понел тебе нужен ID скила ?

вот что я нашол
[s_wind_walk_for_newbie] = 1106433 я точно незнаю это или нет

0
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 07.12.2008, 15:38

MYSOR007: я так понел тебе нужен ID скила ?

вот что я нашол
[s_wind_walk_for_newbie] = 1106433 я точно незнаю это или нет


Спасибо....понял...посмотреть можно в файле skill_pch.txt.

Тему можно закрыть.

0
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 07.12.2008, 18:30

MYSOR007: у меня пов и вика бафаются нормально а вот дансы и сонги 3 проф не бафает а если себе прописать то всё норм
а в AI я незнаю как закодировать обратно (


Завтра добавлю сонги и дансы 3 проф в аи и попробую. Как сделаю сразу отпишу в этой теме.
Закодировать аи мона этой прогой....

Скачать

0
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 08.12.2008, 09:14

Тоже не кидает ни дансы ни сонги.....Проблема я так понимаю скрыта в файле skilldata.txt:

skill_begin skill_name=[s_dance_of_warrior] /* [댄스 오브 워리어] */ skill_id=271 level=1 operate_type=A2 magic_level=55 effect={{p_physical_attack;{all};12;per}} operate_cond={{equip_weapon;{dual}}} is_magic=0 mp_consume2=60 cast_range=-1 effective_range=-1 skill_hit_time=2.5 skill_cool_time=0 skill_hit_cancel_time=0.5 reuse_delay=10 activate_rate=-1 lv_bonus_rate=0 basic_property=none abnormal_time=120 abnormal_lv=1 abnormal_type=dance_of_warrior attribute=attr_none effect_point=523 target_type=self affect_scope=party affect_range=1000 affect_object=friend affect_limit={0;0} next_action=none debuff=0 ride_state={@ride_none} skill_end

И в файле npcdata.txt:

npc_begin citizen 31756 [test_server_helper] level=70 acquire_exp_rate=0 acquire_sp=0 unsowing=1 clan={} ignore_clan_list={} clan_help_range=300 slot_chest=[] slot_rhand=[] slot_lhand=[] shield_defense_rate=0 shield_defense=0 skill_list={@s_race_animals;@s_full_magic_defence} npc_ai={[test_server_helper];{[fnHi]=[test_server_helper001.htm]};{[fnSell]=[tes
t_server_helper002.htm]};{[fnBuy]=[test_server_helper003.htm]};{[fnUnableItemSel
l
]=[test_server_helper005.htm]};{[MoveAroundSocial]=0};{[MoveAroundSocial1]=0};{[
M
oveAroundSocial2]=0};{[type]=0}} category={} race=animal sex=male undying=1 can_be_attacked=0 corpse_time=7 no_sleep_mode=0 agro_range=0 ground_high={118.8;0;0} ground_low={79.2;0;0} exp=429634528 org_hp=2444 org_hp_regen=11.85 org_mp=1493 org_mp_regen=2.78 collision_radius={9;9} collision_height={16;16} str=40 int=21 dex=30 wit=40 con=43 men=10 base_attack_type=first base_attack_range=40 base_damage_range={0;0;80;120} base_rand_dam=7 base_physical_attack=683.28 base_critical=8 physical_hit_modify=0 base_attack_speed=247.42 base_reuse_delay=0 base_magic_attack=468 base_defend=296.1 base_magic_defend=206.28 physical_avoid_modify=0 soulshot_count=0 spiritshot_count=0 hit_time_factor=0.61 item_make_list={} corpse_make_list={} additional_make_list={} additional_make_multi_list={} hp_increase=0 mp_increase=0 safe_height=100 npc_end


Но это только предположение, времени проверить небыло...

0
D
dredik13

Пользователь

Ветеран

Постов: 711

На форуме с: 24.11.2008

Репутация: +365

Рейтинг: 0

· 09.12.2008, 02:33

Для начало нужно переделать скиллы дэнс\сонг.
По дефолту они кастуются "на себя " и только "в пати".
Пример скилла который кастуется на окружающих:

Код
skill_begin    skill_name = [s_dance_of_warrior2]    /* [m1nd] */    skill_id = 271    level = 2    operate_type = A2    magic_level = 40    effect = {{p_physical_attack;{all};12;per}}    is_magic = 1    mp_consume1 = 7    mp_consume2 = 28    cast_range = 400    effective_range = 900    skill_hit_time = 1    skill_cool_time = 0    skill_hit_cancel_time = 0.5    reuse_delay = 0    activate_rate = -1    lv_bonus_rate = 0    basic_property = none    abnormal_time = 3600    abnormal_lv = 1    abnormal_type = dance_of_warrior    attribute = attr_none    effect_point = 379    target_type = target    affect_scope = single    affect_limit = {0;0}    next_action = none    debuff = 0    ride_state = {@ride_none;@ride_wind;@ride_star;@ride_twilight}    skill_end

На этом примере нужно сделать все нужные денс\сонг скиллы, добавить их в skill_pch и зарядить в АИ
По идее, если кусок АИ правильный, всё получиться.

— 127.0.0.1 hacker!!1

0
IIIeiK
IIIeiK

Пользователь

Участник

Постов: 85

На форуме с: 04.10.2008

Репутация: +35

Рейтинг: 0

· 09.12.2008, 03:37

marsh12: Для начало нужно переделать скиллы дэнс\сонг.
По дефолту они кастуются "на себя " и только "в пати".
Пример скилла который кастуется на окружающих:
Код
skill_begin    skill_name = [s_dance_of_warrior2]    /* [m1nd] */    skill_id = 271    level = 2    operate_type = A2    magic_level = 40    effect = {{p_physical_attack;{all};12;per}}    is_magic = 1    mp_consume1 = 7    mp_consume2 = 28    cast_range = 400    effective_range = 900    skill_hit_time = 1    skill_cool_time = 0    skill_hit_cancel_time = 0.5    reuse_delay = 0    activate_rate = -1    lv_bonus_rate = 0    basic_property = none    abnormal_time = 3600    abnormal_lv = 1    abnormal_type = dance_of_warrior    attribute = attr_none    effect_point = 379    target_type = target    affect_scope = single    affect_limit = {0;0}    next_action = none    debuff = 0    ride_state = {@ride_none;@ride_wind;@ride_star;@ride_twilight}    skill_end

На этом примере нужно сделать все нужные денс\сонг скиллы, добавить их в skill_pch и зарядить в АИ
По идее, если кусок АИ правильный, всё получиться.

а вот такой вопрос как зарядить в АI ? можеш дать пример ?

0
D
dredik13

Пользователь

Ветеран

Постов: 711

На форуме с: 24.11.2008

Репутация: +365

Рейтинг: 0

· 09.12.2008, 03:56

MYSOR007: а вот такой вопрос как зарядить в АI ? можеш дать пример ?

Дэкомпиль newbie_guide и тащи пример аи.

— 127.0.0.1 hacker!!1

0
IIIeiK
IIIeiK

Пользователь

Участник

Постов: 85

На форуме с: 04.10.2008

Репутация: +35

Рейтинг: 0

· 09.12.2008, 11:11

marsh12: Дэкомпиль newbie_guide и тащи пример аи.

вот млин еслибы я знал что такое newbie_guide ((((

народ а ктонить может выложить готовый ? AI бафеоа ?

0
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 09.12.2008, 12:40

Класс newbie_guide - та часть кода файла Ai.obj, которая отвечает за все действия, выполняемые НПСом Newbie Guide, в игре.

Вот декомпелированный класс newbie_guide:

CODE
class newbie_guide : citizen
{
parameter:
string fnHi = "";
string fnHighLevel = "";
string fnRaceMisMatch = "";
string fnGuideF05 = "";
string fnGuideF10 = "";
string fnGuideF15 = "";
string fnGuideF20 = "";
string fnGuideM07 = "";
string fnGuideM14 = "";
string fnGuideM20 = "";
string ShopName = "";

property:
TelPosList NewbieTokenTeleports = {{"Dark Elf Village"; 9716; 15502; -4500; 0; 0 };{"Dwarven Village"; 115120; -178112; -916; 0; 0 };{"Talking Island Village"; -84141; 244623; -3729; 0; 0 };{"Elven Village";46890; 51531; -2976; 0; 0 };{"Orc Village - Newbie Travel Token"; -45186; -112459; -236; 0; 0 }};

handler:
EventHandler //(talker)
{
if( talker.level > 20 )
{
myself->ShowPage(talker,fnHighLevel);
return;
}
myself->Teleport(talker,NewbieTokenTeleports,ShopName, "", "", "",8542, "Newbie Travel Token");
}

EventHandler TALKED(talker)
{
myself->DeleteRadar(talker,-71073,258711,-3099,2);
myself->DeleteRadar(talker,-84081,243277,-3723,2);
myself->DeleteRadar(talker,45492,48359,-3060,2);
myself->DeleteRadar(talker,12111,16686,-4582,2);
myself->DeleteRadar(talker,-45042,-113598,-192,2);
myself->DeleteRadar(talker,115632,-177996,-905,2);
myself->ShowPage(talker,fnHi);
}

EventHandler MENU_SELECTED(talker,ask,reply)
{
if( ask == -7 && reply == 1 )
{
if( talker.race != myself.sm.race )
{
myself->ShowPage(talker,fnRaceMisMatch);
}
else if( talker.level > 20 || myself->IsInCategory(5,talker.occupation) == 0 )
{
myself->ShowPage(talker,fnHighLevel);
}
else if( myself->IsInCategory(0,talker.occupation) )
{
if( talker.level <= 5 )
{
myself->ShowPage(talker,fnGuideF05);
}
else if( talker.level <= 10 )
{
myself->ShowPage(talker,fnGuideF10);
}
else if( talker.level <= 15 )
{
myself->ShowPage(talker,fnGuideF15);
}
else
{
myself->ShowPage(talker,fnGuideF20);
}
}
else if( talker.level <= 7 )
{
myself->ShowPage(talker,fnGuideM07);
}
else if( talker.level <= 14 )
{
myself->ShowPage(talker,fnGuideM14);
}
else
{
myself->ShowPage(talker,fnGuideM20);
}
}
if( ask == -7 && reply == 2 )
{
if( myself->IsNewbie(talker) && myself->IsInCategory(7,talker.occupation) == 0 )
{
if( talker.level < 8 )
{
myself->ShowPage(talker,"guide_for_newbie002.htm");
}
else if( myself->IsInCategory(0,talker.occupation) )
{
if( talker.level >= 8 && talker.level <= 24 )
{
myself->AddUseSkillDesire(talker,1106433,1,0,1000000);
}
if( talker.level >= 11 && talker.level <= 23 )
{
myself->AddUseSkillDesire(talker,1106689,1,0,1000000);
}
if( talker.level >= 12 && talker.level <= 22 )
{
myself->AddUseSkillDesire(talker,1106945,1,0,1000000);
}
if( talker.level >= 13 && talker.level <= 21 )
{
myself->AddUseSkillDesire(talker,1107201,1,0,1000000);
}
if( talker.level >= 14 && talker.level <= 20 )
{
myself->AddUseSkillDesire(talker,1107457,1,0,1000000);
}
if( talker.level >= 15 && talker.level <= 19 )
{
myself->AddUseSkillDesire(talker,1107713,1,0,1000000);
}
if( talker.level >= 16 && talker.level <= 19 )
{
myself->AddUseSkillDesire(talker,1110529,1,0,1000000);
}
}
else if( talker.level >= 8 && talker.level <= 24 )
{
myself->AddUseSkillDesire(talker,1106433,1,0,1000000);
}
if( talker.level >= 11 && talker.level <= 23 )
{
myself->AddUseSkillDesire(talker,1106689,1,0,1000000);
}
if( talker.level >= 12 && talker.level <= 22 )
{
myself->AddUseSkillDesire(talker,1107969,1,0,1000000);
}
if( talker.level >= 13 && talker.level <= 21 )
{
myself->AddUseSkillDesire(talker,1108225,1,0,1000000);
}
if( talker.level >= 14 && talker.level <= 20 )
{
myself->AddUseSkillDesire(talker,1108481,1,0,1000000);
}
if( talker.level >= 15 && talker.level <= 19 )
{
myself->AddUseSkillDesire(talker,1108737,1,0,1000000);
}
if( talker.level >= 16 && talker.level <= 19 )
{
myself->AddUseSkillDesire(talker,1110529,1,0,1000000);
}
}
else
{
myself->ShowPage(talker,"guide_for_newbie003.htm");
}
}
if( ask == -7 && reply == 3 )
{
if( myself->IsNewbie(talker) && talker.level < 40 )
{
myself->AddUseSkillDesire(talker,1326593,1,0,1000000);
}
else
{
myself->ShowPage(talker,fnHighLevel);
}
}
}

}


Если имееш хоть малейшее понимание программирования.......думаю разберешся. pogranichnik.gif

0
B
Bymko

Пользователь

Новичок

Постов: 9

На форуме с: 22.10.2008

Репутация: +9

Рейтинг: 0

· 09.12.2008, 18:23

Ребята, вы смешные)
Всё до жути просто реализуется...а вы делаете хз что.

Шаг 1
Skilldata.txt

1)Не ленимся и делаем клоны всех бафов которые вы будите засовывать.(на новые ID)
2)Не забываем в клонах наших скилов убирать условия - типо требование спирит оре,дуалов для дансов итд
(т.е. наши скилы кастить можно без всего с любых пух)
3)Меняем настройки скила на следующие: target_type=target affect_scope=single affect_limit={0;0} - наш скил будет каститься как любой обычный баф ПП - пати требоваться не будет, на пати чела баф не распостраниться.

Шаг 2
Skillpch.txt
Генерируем прогой, запоминаем номера

Шаг 3
Html
В нашей Html-ке вывов бафа будет выглядеть так:
<a action="bypass -h menu_select?ask=-201&reply=12888834">Wind Walk</a>
Главное не ошибитесь в числе после reply - это должен быть номер вашего бафа в Pch , "Wind Walk" это надпись на которую игрок будет тыкать


AI.obj

Тут вместо того чтобы ломать голову пишем простейший хендлер

Код
class buff : default_npc
{
parameter:
    string    fnHi = "buff.htm";
    string    fnNotEnoughAdena = "nobuff.htm";
    int    ItemBuff = 57;
    int    Amount = 0;

EventHandler MENU_SELECTED(talker,ask,reply)
    {
        if( ask == -201 && myself->OwnItemCount(talker,ItemBuff) >= Amount )
        {
                myself->DeleteItem1(talker,ItemBuff,Amount);
                myself->AddUseSkillDesire(talker,reply,1,0,1000000);
                myself->ShowPage(talker,fnHi);
        }
        else
        {
            myself->ShowPage(talker,fnNotEnoughAdena);
        }
    }



По данному AI бафер будет бафать ВСЕ бафы линейки, если конечно они были написаны по правилам указанным в шаге 1.
Кстати в данном варианте все бафы бесплатны, если хотите можите указать -
int ItemBuff = ID вещи за которую баф
int Amount = кол-во этих вещей.

P.s. можно в мануалы перенести....минут за 10 сможите написать бафера хоть с 3ий хоть с 33ей профой....кубики, бафы самонов...ему пофигу что бафать)

0
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 10.12.2008, 16:02

В общем разобрался почему криво кидал мой бафер этот "новый данс"....
Он кидал его правельно, просто клиент не мог понять, что от него требуется отобразить в списке баффов....Вот и парился...

Решил проблему следующим способом:

Добавил в файл skillgrp.dat строку с "новым дансом", то есть, скопировал строчку основного данса и подставил значения нового ((ID скила остается тот же!) Изменил Лвл с 1 на 2, изменил каст_рейнж с -1 на 400 и т.д.).....

Затем добавил в файл skillname-e.dat строчку, аналогичную строке основного Данса....изменив лиш ЛВЛ, который будет отображаться, и описание (В описании написал GM Dance of Warrior)....

После этих изменений...клиент стал корректно отображать и анимацию скила....и значок и описание....

0
S
Shaman2008

Пользователь

Участник

Постов: 39

На форуме с: 27.01.2008

Репутация: +19

Рейтинг: 0

· 10.12.2008, 17:50

Ребят....

Кто может дать описание или ссылку на описание функций, использующихся при написании Аи, если есть возможность дайте пожалуйсто...

Или если кто знает, за что отвечают, выделенные красным, значения и какими они могут быть в этой функции:

AddUseSkillDesire(talker,reply,1,0,1000000)

talker - это, я так понимаю, тот, кто разговаривает с НПСом.... Какие еще могут быть значения?
reply - это наверно номер скила из файла skill_pch.txt...... Тут понятно..
1 - за что отвечает это значение и каким может быть?
0 - за что это и каким тоже может быть?
1000000 - и это тоже, за что отвечает и каким может быть?

Если кто знает, расскажите пожалуйста.

С меня спасибка, думаю не только с меня будет....полезная инфа, очень даже...

0
М
Макс

Пользователь

Участник

Постов: 68

На форуме с: 05.04.2008

Репутация: +45

Рейтинг: 0

· 09.01.2009, 16:33

talker - то над кем выполняется действие
reply - это то что отправляется при нажатии на бафф в диалоговом окне чара с бафером (html), тоибиш сам линк с параметром -h menu_select?ask=reply= собсно ask и reply значени переменных передаваемых от игрока к АИ, тоесть выполнить menu_select с такимто ask= и такимто reply= где reply= и есть ИД вашего баффа, теоретически это способ передачи информации на выполнение скрипту GET методом
1 - первое не помню
0 - второе это докастовывать ли на чара бафы если он после отправки запроса изменил какието свои пармаметры, в том числе и убежал за радиус бафа, собсно это так сказать фикс бегающего бафера за игроками выложенного в разделе "Для новичков", ставим 1 и бафер стоит на месте
1000000 - это какойто делей чтоли, точно не уверен

0
B
Bymko

Пользователь

Новичок

Постов: 9

На форуме с: 22.10.2008

Репутация: +9

Рейтинг: 0

· 13.01.2009, 18:06

talker

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

1000000

3е число это не делей а приоритет это действия.

если скажем моб добавляет 1000 к приоретету пинать чела Noob оттого что Noob его пнул,
и 2000 к приоретету пинать чела Papko за то что Papko пнул его 2 раза то пинать он будет Papko)

так как у нас единственное действие (баф) ,единственный способ вызвать его (menu_selected) , и все игроки "равноправны" то значение может быть любым от 1 (ибо на 0 нпс плевать) до 2.1ккк.

0
Тема закрыта для ответов