Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Промежуток времени между заказами квеста
Pathfinding
сообщение 1.2.2015, 8:01
Сообщение #1


**

Neophyte
Сообщений: 19
Регистрация: 20.1.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.251



Доброе утро.
Уже какую тему подряд начинаю с вопросов, не обессудьте.
И кстати благодарю тех людей кто потихоньку помогает мне на этом форуме.

Так вот, установил квест Monster Contract, отличный квест. Но проблема в том, что контракты можно брать без прерывно. Хотелось бы установить промежуток времени между между заказами. Подскажите популярно как это сделать. Заранее благодарен
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 1.2.2015, 19:48
Сообщение #2


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Pathfinding @ 1.2.2015, 8:01) *

Доброе утро.
Уже какую тему подряд начинаю с вопросов, не обессудьте.
И кстати благодарю тех людей кто потихоньку помогает мне на этом форуме.

Так вот, установил квест Monster Contract, отличный квест. Но проблема в том, что контракты можно брать без прерывно. Хотелось бы установить промежуток времени между между заказами. Подскажите популярно как это сделать. Заранее благодарен


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

public class PlayerMobile
{
    ......

    // Добавляем свойство, в конструкторе желательно добавить его инициализацию
    // from.LastUsed = DateTime.Now;
    // так же не забываем добавить для него серелизацию\диссерилизацию,
    // а при дессирилизации старой версии провести его инициализацию.
    public bool LastGetMonsterContractQuest { get; set; }
    
    ......
}


public class .....
{
    ....

    // Где-то в недрах ваших скриптов добавляем проверку
    public bool QuestAvaible(Mobile mobile)
    {
        var from = mobile as PlayerMobile;
        if (from == null || DateTime.Now.Subtract(from.LastUsed) < TimeSpan.FromMinutes(40f))
            return false;

        from.LastUsed = DateTime.Now;
        return true;
    }

    ......
}


Сообщение отредактировал StaticZ - 1.2.2015, 19:49


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 2.2.2015, 1:59
Сообщение #3


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8675
Пользователь №: 15.607



Pathfinding, ты знаешь что такое конструктор или сериализация в РанУО?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Pathfinding
сообщение 2.2.2015, 16:11
Сообщение #4


**

Neophyte
Сообщений: 19
Регистрация: 20.1.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.251



А если не через PrayerMobile, а в самом скрипте квеста?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 2.2.2015, 19:28
Сообщение #5


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Pathfinding @ 2.2.2015, 16:11) *

А если не через PrayerMobile, а в самом скрипте квеста?

Можно но сложнее, к примеру создать какойнибудь Hashtable с ключем равным серийнику мобайла и значением равным времени получения квеста. Соответственно вместо изменения свойства мобайла добавляем\изменяем соответствующее значение в таблице. Ну и нужно добавить свои обработчики событий на сохранение\загрузку мира (Server.EventSink если память не изменяет), что бы сохранять\грузить эту таблицу. Если онлайн большой и\или сервер подолгу не перезапускается при сохранении еще лучше удалять просроченные ключи, что бы снизить размер потр<вырезано анти-матом>емой оперативы. Но делать такое каждый раз для каждого квеста и\или чего-то еще достаточно напряжно, так что еще лучше доработать механизм хранения значений в отдельную универсальную систему, которой было бы удобно пользоваться в подобных задачах.

Другой вариант прикрутить к серверу БД, какую нибудь embedded SQL (к примеру SQLite, но вообще их много), тупо создать таблицы для каждого подобного случая и хранить все данные там. Вариант более громоздкий, но более универсальный и возможно эффективнее если нужно хранить много информации (к примеру аналогичной информации для каждого из 100500 квестов)

Ну а вообще вариантов куча, все зависит от Ваших конкретных целей, умения и времени которое Вы готовы на это затратить. Если все стремиться к нулю, то ничего проще того что писал в предыдущем посте тут не придумаешь.


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Pathfinding
сообщение 2.2.2015, 19:44
Сообщение #6


**

Neophyte
Сообщений: 19
Регистрация: 20.1.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.251



Большое спасибо, буду пробовать все варианты.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alrick
сообщение 25.2.2015, 23:41
Сообщение #7


**

Neophyte
Сообщений: 10
Регистрация: 14.10.2004
Группа: Пользователи
Наличность: 0
Пользователь №: 2.421



Я бы квесты делал в XMLspawner-е. Это ваще космас что там можно вытворять.

Например, для выдачи повторяемого по таймеру квеста:
Код
GIVE/<questholder/name/A Beggars Treasure/notestring/Use the code book found inside the tunnel to navigate the maze and find the treasure/objective1/Complete the maze/objective2/Find the treasure/autoreward/true/nextrepeatable/06:00

nextrepeatable/чч:мм - т.е. на примере 6 часов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.4.2024, 10:00
Designed by Nickostyle