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 Новый дизайн.


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

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

 
Создание и редактирование НПЦ

Отступление:
Народ, если что не так, то сорри, писал на дежурстве, одним
глазом спал, другой рукой писал :)), просот более времени не могу найти кроме как на ночных дежурствах, если что пишите критику, недовольства и т.д.



По многочисленным порсьбам, сегодня мы с вами займемся созданием НПС. Для начала давайте придумаем кого будем делать?
Я предлагаю сделать девочку, симпатичную такую, может даже с бантиков, а то как бывает идешь бывало по землям британии видешь вроде симпатичная, а оказывается это подросток трансвестит. Вот, а эта хоть и компьютерная, зато натуралка.
И так, давайте начнем с АИ.
ЗЫ Сразу сории за Англицкий :))


// A girl script by Slayer - Last Updated 23 ноября 2002
// mailto: slayer@dinfo.ru
// Добрая милая девушка, чего так сильно не хватает в УО

use os;
use uo;
use npc;
use util;
use cfgfile;

// ну тут все обычно и понятно

include "include/randname"; //- используем для названиея по имени :)
include "include/sysevent"; //- нужные нам ивенты
include "include/client"; //- тут всякие звучки, анимация и т.д.
include "include/objtype"; //- типы объектов
include "include/dist"; //- изназвания понятно
include "include/vetement"; //- чтобы одеть девушку

const MONEY := 0xeed; //- между делом девочка будет всякой шмалью торговать, жить то на что то надо.

global me :=self(); //- ну тут чтоб короче писать
global flag := 0; //- это просто вспомогательная

program girl()

if( me.name[""] )
me.graphic := 401; me.gender := 1;
SetName ( me , RandomName( me ));
EquipFromTemplate( me , "girl" );
endif
// Тут смотрим, если в npcdesk имя ей не дали, то ставим ей имя, тело и одеваем

set_priority(10);//- приоритетность, ну это пока вам не надо
EnableEvents( EVID_ITEM_GIVEN ); //- включили событие, что если девушке дадут подарок.
EnableEvents( EVID_ITEM_SPEECH,3 ); // чтоб даровать ей слух
EnableEvents( EVID_ENGAGED + EVID_DAMAGED ); //- эти события на тот случай если ее кто нить обидет
EnableEvents( EVID_ENTEREDAREA + EVID_LEFTAREA,3);//- это для всех входящих и выходящих в зоне 3 тайтлов от девушки.

var mnext_wander := ReadGameClock() + 30;
var mwanders := 11;
// данные преобразования, чтобы девушка не стояла как тополь на плющихе

while (1)
Local ev;
ev := os::wait_for_event( 5 ); //ждать событие
if (ev)
case (ev.type)
EVID_SPEECH:
mwanders := 0;
mnext_wander := readgameclock()+60;

if (ev.text["hi"] or ev.text["hail"])
//тобишь, если внешний источник изрек Hi или Hail то на них будет реакция? другие слова пропускаются.

TurnToward( ev.source );
//поварачиваемся лицом к говорящему, не говрить же с ним жопой.
if(ev.gender == 1)
say("Hail big man! You want take a funny?");
else
say("I'm greeting you my lady!");
endif
//Пусть девушка поприветствует игрока

elseif (ev.text["miserable"] or ev.text["bich"] or ev.text["fuck off"])
say("You are hybrid. God curses you and you will die as a cat!!!");
// Если милое создание хотят обидеть - не беда, ответим!

elseif(ev.text["sex"]or ev.text["funny"]or ev.text["baby"])
say("Ooo, yes, come to me baby!");
endif

EVID_ITEM_GIVEN:
//Событие, если на девушки перетащат какой то предмет.
mwanders := 0;
mnext_wander := readgameclock()+60;

var amo := GetAmount (ev.item);
//Смотрим какое количество дают
if((ev.item.objtype = 0xeed) and (amo >= 500) )
//Смотрим, если то что дали является деньгами и их более 500

SubtractAmount( ev.item, CInt(amo));
//Удаляем то что нам дали

flag := 1ж
TurnToward( ev.source );
say("Ou, you are fanny!!");

//Ставим флажок, что деньги уплаченв, поварачиваемся и благодарим

MoveCharacterToLocation(me, ev.source.x-1,ev.source.y,ev.source.z);
//Переносим девушку поближе к игроку(что то не захотела она у меня пешком к нему топать :) )

TurnToward( ev.source );
sendsysmessage( ev.source, "Long Kiss", 3, 93 );

PerformAction(me, 0x0020 );
//проигрывем анимацию, какую сами увидете
PlaySoundEffect( ev.source, 0x0032);
//из client берем номер звучка и играем его

if(ev.source.gendr ==1)
PlaySoundEffect( ev.source, 0x014c);
else
PlaySoundEffect( ev.source, 0x0151);
endif

sleep(2);
PerformAction(me, 0x0020 );
PlaySoundEffect( ev.source, 0x01cb);
sleep(2);
PerformAction(me, 0x0020 );
PlaySoundEffect( ev.source, 0x01cb);
sleep(2);
PerformAction(me, 0x0020 );
PlaySoundEffect( ev.source, 0x01cb);
sleep(2);
PlaySoundEffect( ev.source, 0x0031);
sleep(1);
PerformAction(me, ANIM_HIT );
sleep(1);
if(ev.source.gendr ==1)
PlaySoundEffect( ev.source, 0x014c);
else
PlaySoundEffect( ev.source, 0x0151);
endif

PlaySoundEffect(ev.source , SFX_SPELL_HEAL );

sendsysmessage(ev.source,":-E~~~~~~~~~~~");
else
// Automatically take cash
if ( (ev.item.objtype = MONEY))
ConsumeSubstance(ev.backpack, ev.item, CInt(GetAmount (ev.item)));
say("If you want sacki sacki, you must pay more");
// Если дали денег, но мало просто заберем их и обругаем игрока :))
endif
endif

EVID_ENTEREDAREA:
greeting();
//Ежели кто приблизится ближе 3 тайтлов, выполнится функция приветствия, о ней ниже
EVID_LEFTAREA:
If(flag==1)
say("call to me!!!");
else
say("Go away ananist!!!!");
endif
//Смотрим, если денег девушке дали, пожелать счастливого пути, если нет, буркнуть просто катись. это будет если игрок отойдет дальше 3 тайтлов, мы такой радиус установили в самом начале

EVID_ENGAGED:

EVID_DAMAGED:

while(dist(me,ev.source)<10)
RunAwayFrom( ev.source );
endwhile
//Если кто то выбрал ее в качестве цели или ударил, она по идее должна убегать, но ИМХО она забивает на все и дает по морде.


endcase
endif

if (ReadGameClock() >= mnext_wander)
mwanders:=mwanders+1;
wander();
mnext_wander := ReadGameClock() + 10;
if (mwanders>10)
mwanders := 0;
endif
endif
endwhile
endprogram

function greeting()
var sp:=RandomInt(6);
case(sp)
0: say("Hey, come to me, I'm looking somphinc for you.");
sleep(3);
1: say("Hey, a realy big tits to me!");
sleep(3);
2: say("Ou? you looking is very tied.");
sleep(3);
3: say("Come with me, it will fantastic!");
sleep(3);
4: say("Hello, good sir, could you spare some gold with me, please?");
sleep(3);
5: say("If you want I have a girlfriend.");
sleep(10);
endcase
// Ну тут думаю все понятно?
endfunction

Вот, вобщем то не сложно. Теперь мозги у нее есть, теперь создадим ее образ, пойдемте в ../config/npcdesc.cfg
и вставте следующую шнягу:

NpcTemplate girl ее темплэйт, так вы ее будете в игре вызывать
{
Name - имя рандомом, мы про это уже говорили
script girl - скрипт котором она думает что же делать.
Все что ниже довольно понятно, я остановлюсь лишь на паре моментов.
ObjType 0x190
Color 33784
TrueColor 33784
Gender 1
Strength 200
Intelligence 200
Dexterity 200
Life 200
Mana 200
Stamina 200
Privs invul
Settings invul
TitleSuffix ", a Girl" - Это будет прописано после имени на папердоле
AnimalLore 50
Cooking 100
Herding 40
Peacemaking 120
DetectingHidden 80
Provocation 120
Lockpicking 40
Snooping 70
Musicianship 60
Begging 30

CProp MerchantType sgirl - тип вещей которыми девушка торгует, он прописывается в файле mrcspawn
CProp Equipt sgirl - новомодное шмотье, последний писк в веспере
alignment good - тут можно сделать ее красной и серой
guardignore 1 - гварды ее не трогают
Wrestling 100
AttackAttribute Wrestling
AttackSpeed 80
AttackDamage 50d100
Cprop AR i50
Attackhitscript :combat:npchitscript
}

Теперь перейдем в mrcspawn и там напишем:

Например будет она у нас бабушкиным золотишком приторговывать.

merchanttype girl это то, что мы прописывали в итемдеске
{
Sells gems - продает группу объектов камни
Sells jewelry - украшения
Buys jewelry - покупает украшения, камни не купит
}

Теперь само описание групп которые девушка покупает и продает

productgroup jewelry
{
item 0x1085 3 указываем объект и количество которое будет в наличии
item 0x1086 3
item 0x1087 3
item 0x1088 3
item 0x1089 3
item 0x108a 3
}

productgroup gems
{
Item 0xF0F 5
Item 0xF10 5
Item 0xF11 5
Item 0xF13 5
Item 0xF15 5
Item 0xF16 5
Item 0xF18 5
Item 0xF25 5
Item 0xF30 5
}

Вот, впроде, все. Если что пишите, все переделаем и поправим.


Статью прислал: Slayer

Comments:
Рапота нат Ашипками - Quester (Anonymous) at 11:37:5 PM on 11/23/2002
flag := 1ж
:)
А еще я не понял что делает wander()... откель она?

os::wait_for_event( 5 ) - TYM6O4KA (Anonymous) at 12:03:31 PM on 11/24/2002
ну ты и ждать ивента поставил цифру, 5 - так и сервак лагать начнет

comment - Atrus (Anonymous) at 11:53:18 PM on 11/25/2002
2 Quester: wander - функция из npc.em npc иногда делает шаг вперед, периодически поворачивает. Предназначена для беспорядочного шляния энписи в указанной области.
2 TYM6O4KA: Почему лагать? Мало? Ведь в процессе wait_for_event процесс в спячку уходит?

HELP - Crushkov (Anonymous) at 03:44:58 PM on 4/3/2003
У меня 1 проблема скачал пол 094 а когда начинаю вендоров ставить
они не реагируют на слова bank и buy объясни плиззз


mailto: - тРоЯн (Anonymous) at 11:41:47 AM on 9/27/2004
напиши вендор буй или по имен гаркни ему
 

 


 

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


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

 


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

 


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

 


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

 

 


История дня:

Звони по 0,01$


 

 
Hosted by uCoz