www.mudconnector.su
https://forum.mudconnector.su/

Файлы классов для MUD World of russian fantasy
https://forum.mudconnector.su/viewtopic.php?f=14&t=297
Страница 1 из 2

Автор:  Харч [ Ср июн 22, 2011 12:31 pm ]
Заголовок сообщения:  Файлы классов для MUD World of russian fantasy

Вот файлы классов, как и обещал. В архиве.

Вложения:
Комментарий к файлу: классы
class.rar [7.01 KIB]
Скачиваний: 566

Автор:  KadVar [ Ср июн 22, 2011 1:05 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

Комментов, конечно не хватает остро.
Краткий ревью, искал интересные идеи. Честно - не нашел :(, а хотелось.

area.h
map<int,ROOM> rooms;
map<int,int> number_rooms;
Ммм... это что такое :) ? И зачем их два ?
Время восхода и заката по идее с временем года связаны.


class CONTAINER
int door; - это что :) ?

class EXITS
6 выходов хорошо, но вообще-то их могло бы быть и 10...
Пустые строки не вполне хорошие значения для значений по умолчанию.

class INVENTAR - не понял назначения класса

class MOB
gold = 0;
serebro = 0; - имеет ли смысл отличать одно от другого ?
flags = ""; - string ????
sost = "normal"; - string ????
А где инициализация остального ?

int number_in_area;
int number_area; - не понял что это

string name_1;
string name_2;
string name_3;
string name_4;
string name_5;
string name_6; - это пардон гарантированный секас и мат... у падежей есть названия

string name_room; - ?

int where_sit; - я так понимаю место куда он вернется автоматом после каких-то событий ? каких ?

string rasa;
string clas; - string ?????

string SK;
string sost; - не смог понять что это
map<int,string> opis;
int size_opis; - и это и многое другое

Дальше смотреть не стал.
Возможно мое мнение не интересно, но я все-же его выскажу: структура классов требует серьезной переделки как минимум.
OOP не видно совсем. Почему sosud не является потомком obj ? Кто является потомком хоть кого-либо ?

Автор:  Харч [ Ср июн 22, 2011 1:21 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

rooms - массив комнат в арии
numer_rooms - id комнат в арии
Да, закат и восход пока не сделаны

CONTAINER
door - имеет ли объект "двери".
0 - не имеет
1 - имеет и она открыта
2 - закрыта
3 - заперта

EXITS
да, я понимаю, но изначально делал под 6 :)
Все что я не инициализирую должно заполняться из арий, и инициализировать это просто нет смысла

INVENTAR - инвентарь персонажа :) Хранит, кроме id вещей еще и вместительность, вес и так далее

MOB
да, потому что золото - типа долларов :D Серебро - типа рублей :)
flags - флаги на мобе, пока никак не используется (у obj используется)
sost - normal, sit, sleep - пока так, но будет изменено, потому как плохо сделано
number_in_area - номер в арии (относительно арии!), в которой он описан
number_area - номер арии, откуда он создан. То есть мобы могут выйти из любой арии в любую, а эти переменные помогают определить откуда он "родом".
Ну имена - да, плохо :(
name_room - long_name вообщем, как отображается в комнате
where_sit - id объекта на котором персонаж сидит (глупо, понимаю, будет переделано).
SK - не используется (тут в классах куча наработок)
sost - normal, sit, sleep
opis - описание, size_opis - количество строк в нем
Мнение всегда интересно :)
Да, я согласен с этим. Просто писать начинал в 9-м классе, когда о классах было весьма смутное представление. Переделке собираюсь подвергнуть :) ООП и нет, к сожалению :(
Ну, SOSUD объявляется внутри OBJ, что плохо, потому что занимает место у не сосудов :( Наследование отсутствует.

Автор:  KadVar [ Ср июн 22, 2011 2:39 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

ЗЫ. В качестве идей и кусочка того что делал сам. Давно. Не претендую на идеал.
Самая простая иерархия (код синтетический, реальный весьма замусорен и будет непонятен, многое вычеркнуто)

class cAM_Char_Object : public cAM_Alive_Object
{
public:
password", store_dt_String
loadroom", store_dt_Integer
birthdatemud", store_dt_Integer );// BirthDate_MUD // Дата рождения по времени мада все начинают в 20 лет.
timeplayed", store_dt_Integer ); // сколько тиков игрок играет
createdRL", store_dt_Integer ); // Created: [Mon Nov 13],
lastlogonRL", store_dt_Integer ); // Last Logon: [Wed Aug 10]

max_level", store_dt_Integer ); //максимальный левел который когда либо был у игрока в данном реморте
remorts", store_dt_Integer ); //количество ремортов

trains", store_dt_Integer );
trains_spend", store_dt_Integer ); // Количество оставшихся тренировок (отдельно писать логи по получению-расходованию)

hunger", store_dt_Integer );
thirst", store_dt_Integer );
drunk", store_dt_Integer );

death_cnt", store_dt_Integer );
death_pk_cnt", store_dt_Integer );
delevels_counter", store_dt_Integer );

coins", store_dt_Integer );
coins_bank", store_dt_Integer );

clan", store_dt_Integer );
clan_rank", store_dt_Integer );
}

class cAM_Alive_Object : public cAM_Base_Object_With_Noun
{
"ligth_dark", store_dt_Integer ); // Светлый или темный персонаж
"race", store_dt_Integer ); // Раса персонажа
"class", store_dt_Integer ); // Профессия персонажа
"homeland", store_dt_Integer ); // Хоумленд персонажа

"long_desc", store_dt_String );
"title_prefix", store_dt_String );
"title_postfix", store_dt_String );

"level", store_dt_Integer );
"current_lvl_exp", store_dt_Integer );

"def_position", store_dt_Integer ); // Default position: Стоит
"original_move_type", store_dt_Integer ); // : 0(ушел) (аффекты наливаются сверху)

"hp", store_dt_Integer );
"mana", store_dt_Integer );
"move", store_dt_Integer );
}

// Промежуточный класс с существительным внутри
class cAM_Base_Object_With_Noun : public cAM_Base_Object
{
string Name;
string In_Ground_Description;
Russian_Word_Combination* Names;
};


class Russian_Word_Combination_Part - объект хранящий в себе название, выдает наружу
все падежи, которые в разумных пределах автогенерируемы. Там внутри скрыта хренова туча
кода, такие объекты как существительно-прилагательное итп.

Мобы при этом являются разновидностью cAM_Alive_Object.

Очень примитивно, просто чтобы пояснить мысль.

Автор:  KadVar [ Ср июн 22, 2011 2:42 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

Харч писал(а):
rooms - массив комнат в арии
numer_rooms - id комнат в арии

Зачем и то и другое одновременно ?

Харч писал(а):
CONTAINER
door - имеет ли объект "двери".
0 - не имеет
1 - имеет и она открыта
2 - закрыта
3 - заперта

Контейнер ? Двери ? Предполагается прятаться внутри запираемого лукошка ?

Харч писал(а):
EXITS
да, я понимаю, но изначально делал под 6 :)

И что делать если понадобится 10 :) ? А 20 ?

Харч писал(а):
Все что я не инициализирую должно заполняться из арий, и инициализировать это просто нет смысла

Все, что есть ДОЛЖНО инициализироваться.

Харч писал(а):
number_area - номер арии, откуда он создан. То есть мобы могут выйти из любой арии в любую, а эти переменные помогают определить откуда он "родом".

Тут верная идея. Только лучше сохранять birth_room, т.е. ссылку на него, или номер.

Харч писал(а):
Наследование отсутствует.

Вас ждут недетские проблемы с отладкой копированного кода и модернизацией.

Автор:  Харч [ Ср июн 22, 2011 3:37 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

спасибо, буду разбираться :)

KadVar писал(а):
Харч писал(а):
rooms - массив комнат в арии
numer_rooms - id комнат в арии

Зачем и то и другое одновременно ?


Для более легкого поиска :)
То есть id необязательно идут подряд, а обращение к комнате:
rooms[ID_ROOM]./////
Я знаю что есть итераторы, но мне показалось так проще :)

KadVar писал(а):
Контейнер ? Двери ? Предполагается прятаться внутри запираемого лукошка ?


Это просто называется "дверь", а на самом деле можно же открывать и закрывать шкаф, и так далее? Вот у них и есть "дверь", а фактически это заперт/незаперт и т. д.

KadVar писал(а):
И что делать если понадобится 10 ? А 20 ?


Э... мне вроде не надо :D

Цитата:
Все, что есть ДОЛЖНО инициализироваться.


Согласен, только мне морокой показалось в далеком 9-м :D

KadVar писал(а):
Тут верная идея. Только лучше сохранять birth_room, т.е. ссылку на него, или номер.


Дело в том что у меня нет общего списка комнат как в ромовском движке.
У меня есть список арий, а в каждой арии список комнат, и вот номера этих комнат могут пересекаться. Конечно можно хранить адрес комнаты в памяти, но... что делать при перезагрузке? :D обновлять? Морока. (я имею ввиду петов).

Проблемы - наверное, но я собираюсь вообще полностью очистить файл команд и написать его заново :D так что проблем не будет, просто перепишу все :)

Автор:  KadVar [ Ср июн 22, 2011 4:07 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

Харч писал(а):
Для более легкого поиска :)
То есть id необязательно идут подряд, а обращение к комнате:
rooms[ID_ROOM]./////
Я знаю что есть итераторы, но мне показалось так проще :)


Очень не рекомендую так делать.
И эээ..
Код:
map<int,ROOM> rooms;
map<int,int> number_rooms;

Что мешает ID_ROOM использовать как ключ для map ?
Или map не имеет функционала доступа по ключу (давно я на ++ не писал, может хешмап нужен?) ?
Если не имеет - вы используете не тот список, что вам нужен.


Харч писал(а):
KadVar писал(а):
Контейнер ? Двери ? Предполагается прятаться внутри запираемого лукошка ?

Это просто называется "дверь", а на самом деле можно же открывать и закрывать шкаф, и так далее? Вот у них и есть "дверь", а фактически это заперт/незаперт и т. д.
[/code]
И зачем он называется "дверь" ?
Почему не "заяц" ?


Харч писал(а):
KadVar писал(а):
Тут верная идея. Только лучше сохранять birth_room, т.е. ссылку на него, или номер.

Дело в том что у меня нет общего списка комнат как в ромовском движке.
У меня есть список арий, а в каждой арии список комнат, и вот номера этих комнат могут пересекаться. Конечно можно хранить адрес комнаты в памяти, но... что делать при перезагрузке? :D обновлять? Морока. (я имею ввиду петов).
[/quote]
Не понял силы подхода и его преимущества...

Автор:  Харч [ Ср июн 22, 2011 5:35 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

Цитата:
Что мешает ID_ROOM использовать как ключ для map ?
Или map не имеет функционала доступа по ключу (давно я на ++ не писал, может хешмап нужен?) ?
Если не имеет - вы используете не тот список, что вам нужен.


Гм... всмысле доступ по ключу? Может и имеет, а может я даже им пользуюсь, не зная названия :)

KadVar писал(а):
Не понял силы подхода и его преимущества...


Какого именно подхода?

Ну вот например, в ROM вроде имеются vnum, которые каждой арии выделяются вручную - надо думать и просчитывать, тогда как у меня просчет идет автоматически, я конечно понимаю что весь мир не представляется как огромный набор комнат, а разбивается на арии, но мне кажется так и поиск делать проще, и арию отдельную обрабатывать тоже намного проще.

Автор:  KadVar [ Ср июн 22, 2011 5:50 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

Харч писал(а):
Какого именно подхода?

Ну вот например, в ROM вроде имеются vnum, которые каждой арии выделяются вручную - надо думать и просчитывать, тогда как у меня просчет идет автоматически, я конечно понимаю что весь мир не представляется как огромный набор комнат, а разбивается на арии, но мне кажется так и поиск делать проще, и арию отдельную обрабатывать тоже намного проще.


Подход - Свалить всё в одну кучу.
Что уж проще, для vnum комнаты 999888 - 999 номер зоны, 888 номер комнаты в нём.
И как проще делать поиск, с 999000 по 999999 комнату или среди "всех".
И как проще обрабатывать "арию" :) ?

Чисто формально vnum-ы не особо нужны. Но на практике это большое подспорье именно
в плане "отдельной обработки арии"

Автор:  Харч [ Ср июн 22, 2011 7:43 pm ]
Заголовок сообщения:  Re: Файлы классов для MUD World of russian fantasy

KadVar писал(а):
Харч писал(а):
Какого именно подхода?

Ну вот например, в ROM вроде имеются vnum, которые каждой арии выделяются вручную - надо думать и просчитывать, тогда как у меня просчет идет автоматически, я конечно понимаю что весь мир не представляется как огромный набор комнат, а разбивается на арии, но мне кажется так и поиск делать проще, и арию отдельную обрабатывать тоже намного проще.


Подход - Свалить всё в одну кучу.
Что уж проще, для vnum комнаты 999888 - 999 номер зоны, 888 номер комнаты в нём.
И как проще делать поиск, с 999000 по 999999 комнату или среди "всех".
И как проще обрабатывать "арию" :) ?

Чисто формально vnum-ы не особо нужны. Но на практике это большое подспорье именно
в плане "отдельной обработки арии"


Да, но это все-таки уже путаница, думать, разделять на первые три цифры и последние, ИМХО так проще запутаться :)
А я и не делаю поиск среди всех :) Я вообще даже поиска нигде практически не делаю (вот только для репопа), избавился от них именно введением таких дополнительных массивов. Если Вы подробнее скажете какой поиск имеете ввиду, для чего - скажу как он происходит. И кстати по времени доступа - к любому объекту мира она одинаковая в текущей системе :) Маленькая, как просто доступ к одному элементу массива.
Ну, насчет арии - какое-то например арийное заклинание, ИМХО проще обращаться areas[ID_AREA].rooms[ID_ROOM].ЧТО_ТО, а не objects[VNUM] (и перед этим вычислять этот VNUM).

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/