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


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

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

 
Работа с .cfg (Квесты)

/*Доброго времени суток дамы и господа, леди и джентэльмены, сэры и срихи, мальчики и девочки.

Сегодня мы с вами посмотрим как работать с cfg файлами на примере создания простейших квестов.
Хочется сразу обратить ваше внимание, что данный скрипт не будет полноценнвм, в енм будет только основная мысль, а всяческого рода проверок, гампов, развитлений и т.д. не будет.

И так, создадим квест типа: подай принеси.
Приамбула:
Жили были славные мершанты и торговали они велеколепными товарами, но вот беда между собой они редко встречались, т.к. боялись ходить по земля британии т.к. неродивые игроки часто любили шутить над ними, так бывало в иной раз как выскочат в самый неподходящий момент из -за кустов, как начнут орать, а еще паче насрут перед походным вогончиком. Вот так тяжело жилось имершентами, пока один из них не придумал, что можно просить тех же игроков перетаскивать товары между мершантами. И началась в селе совсем дургая жизнь. Игроки за небольшую мзду шныряли между мершантами достовляя радость себе и оружающим.

ЗЫ. Данные события небыли в реальны, поэтому совпадение всех имен, итемов и координат случайны.

Смысл вобщем квеста ясен, темперь займемся важным делом, а именно планированием нашего cfg файла.
Т.к. все у нас будет случайно, то мы сделаем с вами несколько групп в cfg файле и будет все выглядеть именно так:

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

quest Items
{
item Gorshok
item Poroshok
item Zapashok
}

quest Names
{
name Asmodey
name Velzevul
name Moloh
}

quest Narod
{
npc barber
npc cannonsmith
npc beggar
}

quest Place
{
xy 5510 775
xy 5123 796
xy 5536 1822
}

Items - это список вещей из которыйх будет выбрана вешь которую нужно будет доставит.
Name - список имен из которого будет выбрано имя апонента которому нужно будет доставить вешь.
Place - список координат (ну дальше вы уже знаете)

Так cfg фаил написали, теперь перейдем непосредственно к программе. */

use uo;
use os;
use util;
use cfgfile; // <------ Важная фишка, не забудте ее

program rabcfg(who)

var cfg := ReadConfigFile("::primer"); // тута мы напишем путь к нашему файлу, в данном случае он будет искаться в паке config

if (!cfg)
Syslog ("Can't open cfg file!");
return;
endif

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

var items_entry := FindConfigElem(cfg, "items");


// Сия строка значит, что в нашем файле мы будем искать слово Items, Items - у нас ключевое слово.

var possible_items := GetConfigStringArray(items_entry, "Item");

// Далее получаем массив всех элементов начинающихся со слов item, причем получать все это мы будем из Items. Тоесть как бы из портфеля (Items), мы берем кучу бумаг (item)

var theitem := possible_items[RandomInt(len(possible_items))+1];


// Выбираем из всех элементов только один, да и тот случайным образом. Как мы это сделали: применив Len к массиву, мы получаем количество элементво в массиве, Функцией Random получаем случайное число и говорим, что мы берем в массиве элемент равный полученному нами номеру(possible_items[n])

if(CInt(theitem))
theitem :=CInt(theitem);
else
theitem := Cint(GetObjtypeByName(theitem));
endif

// далее мы смотрим вот что, ведь вешь у нас можеть быть задана не тлько именем, но и числов в виде 0х. Поэтому делаем проверку.

if(!theitem)
Syslog("Error item.");
return;
endif

// Ну малоли по каким причинам не вышло, но все должно быть запротоколированно

// Такимже образом получаем имена и что то под названием ХУ, но с ху не та то все и просто, мы должны провести с ним еще одну операцию, а именно:

// var coord := SplitWords(xy);

//теперь мы всегда сможем получить Х и У просто написав coord[1] и coord[2]


var names_entry := FindConfigElem(cfg, "Names");
var possible_names := GetConfigStringArray(names_entry, "name");
var name := possible_names[RandomInt(len(possible_names))+1];
sendsysmessage(who, "name"+name);

var place_entry := FindConfigElem(cfg, "Place");
var possible_place := GetConfigStringArray(place_entry, "xy");
var place := possible_place[RandomInt(len(possible_place))+1];
var coords := SplitWords(place);

var npc_entry := FindConfigElem(cfg, "Narod");
var npc_all := GetConfigStringArray(npc_entry, "npc");
var template := npc_all[RandomInt(len(npc_all))+1];

sendsysmessage(who, "npc"+template);

var npc := CreateNpcFromTemplate( template, Cint(coords[1]), CInt(coords[2]), coords[3]);

SetName( npc, "name");

var needitem := CreateItemInContainer(who.backpack, theitem12, 1);

endprogram

//ну тут и так все понятно
// Вот собственно и все, вам осталось зделать проверуи, вставить это куда нить и все должно работать по идее.
/*
Бывают варианты, когда вам нужно делать статические квесты, где заранее известен данжен, монстр и т.д.тоесть Cfg выглядит так:

quest1
{
mesto regionOne
monster blah blah
ietem blah
group blah blah
}

mesto regionOne
{
rectangle x1 y1 x2 y2
rectangle x1 y1 x2 y2
.....

}

group blah blah
{
npc blah
npc blah
......
}

Тут надо будет немного по другому для выбора рандомом квеста будем использывать GetConfigMaxIntKey( config_file );
Потом из нее рандом берем число и пешем
var num_cose := cfg[num]; так мы доступимся к элементу с нужным нам номером
var elem := CSTR(FetConfigString(num_cose, "mesto"); получаем название списка с координатами
var regions := FindConfigElem(cfg, CStr(elem)); находим в конфиге нужный элемент
далее идем уже по знакомой нам программе

var reg_array := GetConfigStringArray(regions, "rectangle");
var chose_reg := RandomInt(len(reg_array))+1;
var chose := reg_array[chose_reg];
var info := SplitWords(chose);

Вот вобщем то и все


*/

 


 

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


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

 


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

 


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

 


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

 

 


История дня:

Звони по 0,01$


 

 
Hosted by uCoz