I WonT To BeLiVe
Домашняя ] Вверх ]
All what you wont, Last update 12.08.07.


Upload

In Da Forum форум сайта смотрим тут


Новости Сайта

12.08.07 Доработан дизайн.


03.07.07 Добавлены разделы.

02.07.07 Новый дизайн.

22.11.06 Обновление.

10.07.06 Форум упал.

20.06.06 Новый форум.

17.06.06 Форум удален.
 

10.06.06 Новый дизайн.


________________
Происшествия
________________
Предложения и пожелания,нашли неработающую ссылку?

Напишите об этом Администратору
Спасибо !!!
 

 
Хук атаки

И так, давайте разберем всех нас интересующих атак хук. Для чего он нужен вы наверное уже уяснили из предыдущих статей на сайте, а теперь давайте перейдем к самому захватывающему действу, а именно рассмотрению общей структуры кода. Конечно мы не будет досконально рассматривать все детали, но общий смысл уловить будет несложно.
Начнем пожалуй.
Как всегда подключаем необходимые нам модули и инклюды, после этого считываем конфиг фалы. Для работы нам хватит “itemdesc”, “*:npcdesc” и “*:skills”.
После слов: exported function MyAttack(attacker, defender), начинаем делать разные проверки, на видимость оппонентов, на зоны где невозможна атака и т.д., примерно будет выглядеть все это так:
npccfg := ReadConfigFile("::npcdesc");
itmcfg := ReadConfigFile(":*:itemdesc");
skillcfg := ReadConfigFile(":*:skills");

SafeZone(attacker);

if((attacker == defender) && (!attacker.cmdlevel))
return 1;
endif

if(!CheckLineOfSight(attacker, defender))
return 1;
endif

if((attacker.frozen == 1) || (attacker.paralyzed == 1))
return 1;
endif

Если у участников сражения есть бонусы к атаке или защите их также необходимо считать. Считываем у атакующего и защищающегося бросок к атаке. Если у атакующего бросок атаки больше чем у защищающегося то увеличиваем бонус атаки, если нет то уменьшаем.
Потом смотрим каким оружием действует атакующий:
weapon := GetEquipmentByLayer(attacker, 0x01);
if(!weapon)
weapon := GetEquipmentByLayer(attacker, 0x02);
endif
endif
Далее определяем кто у нас атакующий если он НПС, то значения всех звуков и используемый скилл считываем из кфг файла, если атакующий игрок, то значение анимации звуков и т.д. берем из значений оружия.
Если значения не получены, то будем считать, что атакующий использует wrestling.
Для просто ты мы будем хукать только использование холодного оружия, а хук метательного оружия оставим оставим на совесть коровского атак хука, для этого напишем:
if(skillId == "Archery")
return 0;
endif
Потом теже действия, выполняем для защищающегося и получаем значения:
var ska := CInt(GetAttribute(attacker, skillId));
var skd := CInt(GetAttribute(defender, skillIdd));
var rand := RandomInt(100)+1;
после чего рассчитываем шанс, формула может быть любой, как пример напишем например вот такую:
var chance := CInt(100*(ska+50)/(2*skd+100)+CInt(atackbonus-defbonus));

И смотрите попал ли атакующий или нет?
If(rand <= chance то

После чего нужно рассчитать в какую часть тела произошло попадание и получить какой вид брони с каким армомром одет на эту часть тела, например:
layerarmor := GetEquipmentByLayer(defender, layer);
После чего получить суммарное значение брони:
if(!layarmor.ar)
armor := CInt(defender.ar/2);
else
armor := CINT(layarmor.ar)+ CInt(defender.ar_mod);
endif
else // дефендер НПС
armor := CInt(npccfg[defender.npctemplate].ar)+Cint(defender.ar_mod);
endif
Потом получаем значение урона оружия и рассчитываем базовое значение повреждения.
Если вы собираетесь использовать параметр силы и анатомии, а также есть учет расовых особенностей, то рассчитываете их и добавляете к базовым повреждениям. Делаете учет на качество оружия и рассчитываете новое значение повреждений:
var rawdamage := CInt(basedmg*(25+GetAttribute(attacker,"tactics"))/100)+strmod+anatommod+racebonus;
Далее проверяете использует ли защищающейся щит, если да (смотрите опять же по эквипу на 2 лэер), то вычитаете из rawdamege значение армор класса щита, тут можно также варьировать значениям смотря на то какой тип щита используется и каким оружием произошло нанесение удара.
Опять же из rawdamage вычитаем значение armor которое мы получили когда смотрели в какую часть тела был нанесен удар.
Все теперь мы получили все необходимые значения, а именно attacker, defender, weapon, armor, basedmg, rawdamage и передаем их на запуск mainhitscript’у.
После чего, повышаем боевые скиллы:
var skill_id := FindSkillidByIdentifier(skillId);
AwardPoints(attacker, SKILLID_TACTICS, value);
AwardPoints(attacker, skill_id, value);

Если шанс попадания не прошел, то проигрываем звук промахивания:
SendSysMessage(attacker, "!!!MIMO!!!");
PlaySoundEffect(attacker, CInt(misssound));
return 1;
endif

Вот собственно и все. Это самый простенький пример написания атак хука.
 

 


 

Новое из разделов:


Юмор:
Комментатор

 


Тюнинг:
Самое мощное авто

 


Web дизайн:
Хитрости

 


Мобильник:
Сервисные коды

 

 


История дня:

Звони по 0,01$


 

 
Hosted by uCoz