KadVar писал(а):
Чего хорошего от питона, кроме тормозов вы получите ?
Или там очень качественный и продуманный API ?
1) Тормоза ?:) При текущем соотношении цена/характеристики сервера для мада тормозов не должно быть.
2) Скорость разработки, простота языка. Для мада это очень критично, так как обычно лишь несколько людей что-то делают и вышеперечисленные параметры существенно ускоряют разработку/допиливание мада.
3) Гибкость. Примеры:
Вот примерно такой формат имеет файл .mob (кусок из него)
Код:
me.aux("stats").names = ['Сила', 'Ловкость', 'Ум', 'Тело', 'Жизни']
me.aux("stats").values = [1, 2, 1, 1, 3]
К примеру, можно сделать рандомную силу:
Код:
me.aux("stats").values = [random(0,5), 2, 1, 1, 3]
Или добавить новых характеристик:
Код:
me.aux("stats").names = ['Сила', 'Ловкость', 'Ум', 'Тело', 'Жизни', 'Мудрость']
Сам формат зон похож на формат зон CircleMUD
Пример игровой команды afk
Код:
def remove_afk(ch):
''Для удаления префикса AFK'''
if ch.prfs == 'АFK':
ch.prfs = 'none'
else:
prfs = ch.prfs.split(', ')
prfs.remove('AFK')
ch.prfs = ', '.join(prfs)
# очень удобно, у каждого чара есть такой ассоциативный динамический массив, который вроде даже умеет сохранятся после ребута
ch.delvar('afkmessage')
ch.send('Вы вернулись к нам.')
def set_afk(ch):
'''Установка статуса afk чару.'''
if ch.prfs == 'none':
ch.prfs = 'AFK'
else:
ch.prfs += ', AFK'
ch.send('Вы отошли от клавиатуры')
def afk_event(owner, void, info):
'''Событие, которое устанавливает AFK для неактивных игроков'''
# доступ к сокетам можно получить из python'a
# насколько я понял, через питон можно вообще реализовать ВСЕ
for sock in mudsock.socket_list():
if sock.idle_time >= 300:
if sock.account != None:
if sock.ch != None:
set_afk(sock.ch)
event.start_event(None, 300, afk_event, None, '')
def afk_command_hook(info):
'''Удаляем AFK у игрока'''
ch, cmd, arg = hooks.parse_info(info)
#no point in continue
if not ch.hasPrefs('AFK') or ch.is_npc or cmd == 'AFK':
return
remove_afk(ch)
def afk_from_game(info):
''Удаляем флаг у игрока, если он вышел'''
ch, = hooks.parse_info(info)
#no point in continue
if not ch.hasPrefs('AFK') or ch.is_npc:
return
remove_afk(ch)
def setafk_hook(info):
'''Добавляем евент в список евентов'''
event.start_event(None, 300, afk_event, None, '')
def cmd_afk(ch, cmd, arg):
'''Использование: afk [сообщение]
Устанавливает режим afk''
if ch.hasPrefs('AFK'):
remove_afk(ch)
else:
set_afk(ch)
if len(arg) > 0:
ch.setvar('afkmessage', arg)
ch.send('Во время AFK вы будете отвечать:: ' + arg)
# добавляем команду в список команд
mudsys.add_cmd('afk', None, cmd_afk, 'player', False)
# создаем поле у чара
mudsys.create_bit('char_prfs', 'afk')
# вешаем события
hooks.add('char_from_game', afk_from_game)
hooks.add('command', afk_command_hook)
hooks.add('start', setafk_hook)
# кстати, очень удобно для того, чтобы не ребутать мад, если изменили код
def __unload__():
'''removes the hooks for afk mode.'''
hooks.remove('char_from_game', afk_from_game)
hooks.remove('command', afk_command_hook)
hooks.remove('start', setafk_hook)