Начальная

Windows Commander

Far
WinNavigator
Frigate
Norton Commander
WinNC
Dos Navigator
Servant Salamander
Turbo Browser

Winamp, Skins, Plugins
Необходимые Утилиты
Текстовые редакторы
Юмор

File managers and best utilites

Написание макроса-бота для браузерной игры. Бот для браузера


Автоматизируй рутину! Боты для лучших браузерных игр.

Мы рады представить вам наши разработки для автоматизации лучших браузерных игр (нажмите на изображение нужного проекта):

Бот для Мосвар "Понаехали тут!" Бот для РосварБот для Легенды

Бот для Джаггернаута (Jugger) Бот для Небес Бот для MusicWars (МузВар)

99% браузерных игр в Интернете построены по одной бизнес-модели: базовые функции игры являются условно бесплатными, но всегда существует возможность ввести в игровой мир реальные деньги, которые будут конвертированы в специальную игровую валюту и дадут игроку либо эксклюзивные возможности, либо просто крайне ускорят его рост.

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

Мы искренне считаем, что эти нудные операции не могут развлекать игрока и постарались несколько облегчить ему жизнь. Наши боты прекрасно конфигурируемы, интуитивно понятны в настройке и, что самое главное, гарантированно неопределяемы администрацией игровых серверов (при разумном и адекватном использовании, конечно). 

Боты для браузерных игр заметно облегчают жизнь игроку. Бот для Мосвара и Росвара будет воевать в закоулках, варить петрики и делать множество других операций, пока вы спите. Бот для Легенды собирает игровые ресурсы и бьет мобов. Бот для Джаггернаута сам ходит по локациям, управляет гремлинами и воюет с мобами. Бот для игры Небеса рекомендует вам лучший ход, который уберет наибольшее количество камней. Бот для MusicWars позволит вам проводить бои на Территории и играть в Музбокс, копя вам лицензии и энергию.

Вы воюйте и общайтесь с людьми, а рутину оставьте нам!

www.browsergamebots.com

Пишем web-бота при помощи twill / Песочница / Хабр

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

Зачастую, боты пишут с нуля на php, python и других языках высокого уровня. Программисты вручную формируют HTTP запросы, читают cookie, парсят регулярками страницы, чтобы найти ссылки, веб-формы и т. п. Но зачем?

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

Искать долго не пришлось. Такой эмулятор быстро нашелся. Зовут его twill. Сайт: http://twill.idyll.org/

Twill — это библиотека на python, и также интерпретатор языка, который позволяет ходить по сайтам, парзить веб-формы, принимать/отправлять cookies. В общем то что нам нужно. С его помощью можно писать функциональные тесты, ботов и проводить стресс-тестирование по заданному сценарию.

Короче, поехали:

Сейчас я напишу скрипт позволяющий управлять livejournal из консоли. (На самом деле я просто хотел автоматизировать добавление пользователей в друзья, для раскрутки своего блога)

Ставим twill:aptitude install python-twill

Интерпретатор twill запускается так.twill-sh

Создаем файл jj_login.twill (он будет выполнять авторизацию на livejournal)

# ставим юзер агент как у нашего любимого браузера agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" # идем на сайт go http://www.livejournal.com/ # форма авторизации имеет номер 1. по нему и будем обращаться (чтобы это узнать есть команда showforms) # теперь заполним ее # спрашиваем логин и пароль getinput "login: " # вставляем логин введенный с клавиатуры formvalue 1 user __input__ # спрашиваем пароль getpassword "password: " formvalue 1 password __password__ # ставим галочку "запомнить" formvalue 1 remember_me 1 # сабмитим форму (жмем кнопку "вход") # тут передается не номер формы, а имя кнопки submit _submit # сохраняем куки в файл save_cookies jj_cookies.txt

Запускаем скрипт так:twill-sh jj_login.twill Скрипт спросит нас логи и пароль, зайдет на сайт и сохранит cookie в файл jj_cookies.txt, чтобы другой скрипт смог работать уже без авторизации.

Далее самое главное: файл jj_command_execute.twill

agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" # загружаем куки из файла load_cookies jj_cookies.txt # теперь идем в консоль go http://www.livejournal.com/admin/console/ # спрашиваем команду у пользователя getinput "command: " # заполняем форму formvalue 1 commands __input__ # нажимаем кнопку submit 3

Запускаем:twill-sh jj_command_execute.twill

Чтобы добавить пользователя pupkin в друзья, нужно ввести команду: friend add pupkin

или сразу из консоли:echo "friend add pupkin" | twill-sh jj_command_execute.twill Список команд тут: http://www.livejournal.com/admin/console/reference.bml

У скрипта есть недостаток: за раз можно передавать только 1 команду, так как в twill нету многострочного ввода. Это поправимо, если использовать twill из python или написать для него расширение.

habr.com

Написание макроса-бота для браузерной игры / Хабр

Введение
Не так давно на Google+ появились игры. Прочитав топик об этом, я решил во что нибудь поиграть. Выбор пал на игру Diamond Dash. Через некоторое время игры программист во мне заговорил, что однотипные действия нужно автоматизировать. И вот что из этого вышло… *Примечание: «руками» даже опытному игроку сложно набрать больше 400к

Раньше я никогда не сталкивался с задачами работы с экраном и мышкой. После непродолжительного гугления было решено для решения использовать язык макросов AutoIt. Под катом вы найдете краткое описание игры, мой способ распознавания поля, алгоритм определения точки нажатия, и некоторое количество оптимизаций. А так же ссылку на github-репозиторий скрипта.UPD Добавлено видео работы скрипта.

Краткое описание игры
Игра представляет из себя простую «кликни-на-область-больше-трех-квадратиков-одного-цвета» головоломку. Есть поле 9 на 10, заполненное квадратиками 5 цветов. У нас есть одна минута на то, чтобы набрать максимальное количество очков. При нажатии на область из 3 или более одноцветных клеток, она исчезает, то что над ней проваливается, а сверху падает недостающее. Количество начисленных очков зависит от размера области: чем она больше — тем больше очков. Кроме того, если делать клики быстро, и почти безошибочно, поле вокруг загорается, а каждое удаление(в данном случае взрыв), захватывает соседние с удаляемой областью клетки. И наконец последняя особенность: наверху есть шкала с алмазом в конце, которая заполняется по мере уничтожения клеток(и уменьшается при ошибочных кликах). Когда она заполняется, на поле в случайном месте появляется горящий алмаз. При клике на него время останавливается, а сверху поля падает огненный шар, уничтожая все клетки в строке и столбце, где находился камень.
Определение координат окна
Эта часть была добавлена в самую последнюю очередь, до этого координаты угла были жестко прописаны в коде. Используется функция из сторонней библиотеки ImageSearch для поиска сохраненного шаблона 10 на 10 пикселей. Судя по всему, фон слегка меняется от игры к игре, потому что не любой кусок подходил. На форумах повсеместно не рекомендуют использование ImageSearch из-за долгого времени работы. Но так как нам нужно определить координаты только один раз в начале игры, провисаний по времени можно не опасаться.
Распознавание цветов и сохранение скриншотов
Для определения цвета пикселя по его координатам в AutoIt есть функция PixelGetColor. Но как показала практика, измерение всего 90 пикселей занимает полторы секунды, что, конечно, не очень хорошо. Но справедливости ради надо сказать, что бот написанный с использованием этой функции набирал 400-600 тысяч очков, а это больше чем может набрать человек, даже при большой сноровке. На форумах был найден метод сохранения текущего состояния монитора в Bitmap, используя WinAPI. Кстати, этот битмап, при необходимости(например для дебага), можно сохранить в файл функцией _ScreenCapture. Далее смотрим цвета 90 пикселей, расположенных по решетке и по ним строим таблицу цветов квадратиков.
  1. Func _GetField(ByRef $aiField) ; получение массива цветов поля
  2. ; получение BitMap-снимка экрана с помощью WinAPI
  3. Local $hWnd = WinGetHandle("Игры Google+ - Google Chrome")
  4. Local $Size = WinGetClientSize($hWnd)
  5. Local $hDC = _WinAPI_GetDC($hWnd)
  6. Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
  7. Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Size[0], $Size[1])
  8. Local $hSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
  9. _WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, 0, 0, $SRCCOPY)
  10. _WinAPI_SelectObject($hMemDC, $hSv)
  11. _WinAPI_DeleteDC($hMemDC)
  12. _WinAPI_ReleaseDC($hWnd, $hDC)
  13. Local $L = $Size[0] * $Size[1]
  14. Local $tBits = DllStructCreate('dword[' & $L & ']')
  15. _WinAPI_GetBitmapBits($hBitmap, 4 * $L, DllStructGetPtr($tBits))
  16. ; определение цветов клеток
  17. For $iCol = 0 To $iNumCols - 1
  18. For $iRow = $iNumRows - 1 to 0 Step -1
  19. ; замер цвета квадратика
  20. $iX = $iCornerX + ($iCol * 40) + $iDeltaX
  21. $iY = $iCornerY + ($iRow * 40) + $iDeltaY
  22. $iPixelColor = Mod(DllStructGetData($tBits, 1, $iY * $Size[0] + $iX), 0x1000000)
  23. $aiField[$iRow][$iCol] = _GetCheckColor($iPixelColor)
  24. Next
  25. Next
  26. ; удаление данных для избежаня утечки памяти
  27. _WinAPI_DeleteObject($hBitmap)
  28. _WinAPI_DeleteObject($hMemDC)
  29. _WinAPI_DeleteObject($tBits)
  30. EndFunc
Тут стоит оговориться, почему замер происходит всего по 1 точке. Этот метод был испробован мной в первую очередь, и остался в финальной версии. Между этими двумя моментами было испробовано довольно большое количество альтернативных способов, среди которых были: замер 64 точек на каждый квадратик(решетка 8 на 8) и различные усреднения полученных значений, случайный выбор координат для замера, хранение истории нескольких последних замеров для лучшей точности… Но все они оказались менее точными или удобными, чем самый первый способ. Возможно, что так как я весьма далек от темы распознавания изображений, я не знаю чего-то простого, способного помочь мне в этом вопросе. В таком случае буду рад любым предложениям. =)
Определение одноцветной области по таблице цветов
Ну, и, наконец, осталось найти подходящее место и кликнуть туда. Для этого обходим поле снизу вверх (потому что все падает вниз, а значит снизу менее пусто чем сверху), и проверяем одноцветные части. Я делал это с помощью алгоритма безрекурсивного поиска в глубину (DFS). Вкратце суть такова: кладем в стек стартовую клетку, а дальше, пока стек не пуст, достаем из него текущую клетку и обходим ее соседей, при совпадении цвета кладем в стек. Ну да что говорить, код понятней. =)
  1. Func _DfsAreaSize(ByRef $aiField, $iStartX, $iStartY) ; нерекурсивный алгоритм поиска размера одноцветной области
  2. ; методом поиска в глубину
  3. Local $aiResult[$iNumCols * $iNumRows][2] ; список клеток входящих в область
  4. Local $iResultSize = 0
  5. Local $afMap[$iNumRows][$iNumCols] ; флаги пройденности
  6. For $iRow = 0 to $iNumRows - 1
  7. For $iCol = 0 to $iNumCols - 1
  8. $afMap[$iRow][$iCol] = False
  9. Next
  10. Next
  11. $afMap[$iStartX][$iStartY] = True
  12. Local $aiStack[$iNumRows * $iNumCols][2] ; активный стек
  13. Local $iStackSize = 1
  14. $aiStack[0][0] = $iStartX
  15. $aiStack[0][1] = $iStartY
  16. While $iStackSize > 0
  17. $iStackSize -= 1
  18. $iX = $aiStack[$iStackSize][0]
  19. $iY = $aiStack[$iStackSize][1]
  20. $aiResult[$iResultSize][0] = $iX
  21. $aiResult[$iResultSize][1] = $iY
  22. $iResultSize += 1
  23. For $iDirection = 0 to 3 ; перебор 4 рядомстоящих клеток
  24. Local $iNewX = $iX
  25. Local $iNewY = $iY
  26. Switch $iDirection
  27. Case 0
  28. $iNewY += 1
  29. Case 1
  30. $iNewY -= 1
  31. Case 2
  32. $iNewX += 1
  33. Case 3
  34. $iNewX -= 1
  35. EndSwitch
  36. If ($iNewX >= 0 And $iNewX < $iNumRows And _
  37. $iNewY >= 0 And $iNewY < $iNumCols And _
  38. Not($afMap[$iNewX][$iNewY]) And $aiField[$iNewX][$iNewY] = $aiField[$iStartX][$iStartY]) Then
  39. $afMap[$iNewX][$iNewY] = True
  40. $aiStack[$iStackSize][0] = $iNewX
  41. $aiStack[$iStackSize][1] = $iNewY
  42. $iStackSize += 1
  43. EndIf
  44. Next
  45. WEnd
  46. Return $iResultSize
  47. EndFunc
Оптимизации
Оптимизация 1. Алмазики
Написанного выше уже хватало для получения миллиона. Но мне хотелось больше. Самым большим недостатком вышеописанного алгоритма было, пожалуй, неумение определять алмазы. Поэтому под конец минуты поле выглядело примерно так: А между тем, алмазы — очень полезная вещь, потому что пока падает огненный шар, таймер останавливается, а квадратики падают. А значит пробелы заполняются, и ошибок будет меньше. Для определения алмазов для начала пришлось поиграть с координатами замеров, чтобы цветные клетки определялись корректно, а алмазы — не попадали ни под один из их цветов. После этого создаем массив $aiDiams размером 3 (будем проверять только нижние 3 строки, потому что все алмазы рано или поздно туда упадут) * ширину (в нашем случае — 10). При каждом замере просматриваем нижние 3 строки, и если ячейка определилась, то обнуляем соответствующее место в $aiDiams, иначе инкрементируем его. Таким образом для клеток с алмазиками значения будут велики. При накоплении некоего порога, кликаем.
  1. For $iRow = $iNumRows - 1 to $iNumRows - 3 Step -1
  2. For $iCol = 0 to $iNumCols - 1
  3. If $aiField[$iRow][$iCol] <> 0 Then
  4. $aiDiams[$iRow][$iCol] = 0
  5. Else
  6. $aiDiams[$iRow][$iCol] += 1
  7. If $aiDiams[$iRow][$iCol] > 15 Then
  8. MouseClick("Left", $iCornerX + 30 + ($iCol * 40), $iCornerY + 10 + ($iRow * 40), 1, $iMouseSpeed)
  9. $aiDiams[$iRow][$iCol] = 0
  10. Sleep(500)
  11. Return 0
  12. EndIf
  13. EndIf
  14. Next
  15. Next
Оптимизация 2. Over Explosion
Тут надо объяснить, почему очень важно уменьшить количество ошибок, и почему в моем скрипте между соседними снимками экрана стоит задержка в 1/10 секунды. Дело в том, что когда поле загорается и ячейки начинают взрываться, количество очков многократно возрастает. Но если слишком много ошибаться, поле перестает загораться. Поэтому минимизация ошибок не менее важная часть, чем оптимизация времени распознавания (а учитывая запас времени, вообще единственно важная). Несмотря на задержку в 1/10 секунды между соседними снимками экрана, некоторые ячейки все равно не успевают упасть, и определяются не на своих местах. Чтобы уменьшить их количество, была введена проверка на взрыв. При взрыве в квадратике появляется ореол почти чисто-белого цвета (#fffefc если быть точным), а это легко определить. Все клетки над взрывом, не мудрствуя лукаво, можно проставить как неопределенные.
Оптимизация 3. Область последнего клика
Защита от повторной ошибки, в эффективности которой я не уверен. Дело в том, что в самой игре при ошибке клетка становится серого цвета, а серый цвет алгоритмом определяется как неопределенный (тавтология получилась =) ). Но хуже эта проверка точно сделать не может, поэтому пусть живет. Суть в том, что при каждом клике сохраняем область, по которой кликаем, и при следующем клике не трогаем ее.
Итог
После всего вышеописанного, мой рекорд стал примерно таким: Очень хотелось 2 миллиона, но 4 дня попыток, пара тысяч строк экспериментального кода (с самописным логгированием и сохранением скринов), тщательное курение логов и сверки со скриншотами, результатов не дало. =( Ссылка на репозиторий github: github.com/EvilTosha/DiamondDash
Вместо постскриптума. Пара слов об AutoIt
Меня очень удивило, что этот язык почти не освещен на хабре. Собственно, желание исправить эту несправедливость и побудило написать этот топик. Язык при этом умеет довольно много, и обладает поражающей простотой изучения. Через пару часов после того, как я узнал о его существовании, я уже обладал всеми знаниями нужными для написания данного макроса. С помощью AutoIt можно автоматизировать почти любое рутинное действие: сохранение скриншота, установка программы(если надо поставить на много компов), многократный логин куда-либо… Можно скомпилировать в exe-шник, подключать DLL-ки. Но что-то я как евангелист заговорил. =)

UPD Видео работы.

Спасибо за внимание, буду рад любым комментариям.

habr.com

Как пишут ботов для игр (или для программ с интерфейсом)? — Toster.ru

Инфы море на одном только хабре habrahabr.ru/search/?q=%5B%D0%B1%D0%BE%D1%82%5D&ta...

от себя добавлю что основные методы это1) простейший понятный способ - поиск нужного элемента на экране и кликание по экрану, или клик по указанным координатам. я в основном использую этот способ, так как вмешательство в игру минимальное - ее не надо ломать, для онлайн игр - меньше шансов получить бан. Подходит для простых игр, в основном те что 2D пошаговые.Гуглить отправку событий мыши и клавиатуры на выбранном вами ЯП (java robots например).Минусы - игра должна быть постоянно открыта на экране и иметь фокус (можно решить - запустив игру с ботом в виртуалке).

2) для онлайн игр - изучение протокола обмена данными с сервером. нужно изучать куда отправляются/откуда получаются данные и в каком формате. пишем программу которая эмулирует клиент игры. очень хороший способ - для очень интерактивных игр - максимальная скорость. Способ довольно сложный надо реверсить протокол (гуглить wireshark) и возможно само приложение (гуглить дизассемблирование / декомпиляция). Если игра браузерная - то все может быть проще - запросы и ответы можно смотреть в консоли браузера. Очень перспективный способ - визуальный клиент не обязателен - можно делать армию ботов и размещать на серверах - скорее всего они будут потреблять немного памяти и процессора и возможности впечатляющие.

3) для десткопных игр - патчинг памяти запущенной игры. варианты от простых типа - поменять очки/деньги в игре (artmoney) это в основном для не онлайн игр, и до очень сложных - подменить адрес вызова системной функции - например функции отрисовки directx - то есть меняем адрес вызова на свою функци (недавно была серия статей на эту тему, к сожалению не нашел побыстрому). Либо как разновидность - декомпиляция игры - изменение логики - компиляция (гуглить все что связано с крекерством, создание кейгенов). Для этого варинта требуется довольно высокая квалификация, понимание того как работает игра. Также игры могут иметь защиту от этого.

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

toster.ru

Робот браузер - Что может бот?

Может играть одновременно за 4 и больше персонажей (надо запустить бот несколько раз)

Ищет месторождения в шахте(копальне) и копает кристаллы. Одевает дабыч(копач) если он у вас есть в экипировке.

Умеет прикрываться, между боями на арене, любыми свитками. Может одновременно одевать и амулет(кулон) усиливающий свитки. 

В подземелье бот может сам находить подходящие отряды, пишет "всегда готов" в перекличке(если выставлен автоматический поиск отряда), ставит игрока на нужную позицию и атакует гоблинов. Может одевать аштер(метрин) перед началом. Ходит все 3 раза в день, сам, без вас. 

Боту требуется мало кликов в подземелье и прорыве, как с телефона.

Распознаёт капчу. Самостоятельно проходит испытание ведьмы. (Распознаёт сам, программным путём. Не включайте 2 бота за одного персонажа. Распознавание капчи можно проверить создав нового персонажа в игре, там испытание будет в самом начале)

Путешествует и выполняет действия в путешествии. Может отвечать на вопросы старика. Может одевать пилигрим(странник) перед отправкой.

Посылает выбраненные проклятья вашему противнику. Каждые 5-10 минут проверяет их наличие на нём.

Может снимать кристальные проклятья с себя.

Может атаковать одного выбранного игрока, постоянно, каждый раз когда приходит время для атаки.

Бьёт любых наёмников на арене, а так же игроков, старших, младших или ровню, по выбору.

Может атаковать золотых наёмников со свитками пока не выбьет золото до лимита, после этого переключается обратно на арену. Или же атакует золотых наёмников свитками постоянно, если выставлена специальная галка.

Проверяет подарки у игроков на арене и может не нападать на тех у кого корона(венец).

По умолчанию не нападает на друзей, отмеченных, а так же на своё братство(дружина), клан(орден) или союзников. Эти настройки можно изменить.

Может выбирать противников по статам.

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

Следит за уровнем здоровья зверя и прячет его в клетку если оно снизилось ниже указанного процента.

Атакует владыку когда он приходит. Может атаковать дракона если выставить такое задание.

Атакует войнов или повелителей нежити(орков) по выбору, или всех подряд

Ходит в походы по 10 минут.

Качает указный стат герою или зверю если серебра достаточно накоплено. Может одевать уроборос перед прокачкой.

Может лечить героя и/или зверя если снижается здоровье. 

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

Переходит на младших когда заканчивается забвение.

Может раздавать удачу. То есть бот будет проверять каждые 10 минут чат братства и раздаёт удачу по фрагменту слова "Удач"(по умолчанию) То есть если кто-то напишет в чате братства сообщение со словом "Удача" или "удачи" или "удачу" тогда бот пожелает ему удачи. 

Ухаживает за питомцем. Может кормить его разной едой и отправлять в путешествия.

Выполняет задания на плантации. Снимает серебро с плантации если серебро на руках плюс серебро на плантации достаточно для прокачки стата. Может одевать фермстень(фермулон) перед снятием серебра.

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

 

ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ

Бот обновляет главную страницу 1 раз примерно каждые 10 минут. Этот отсчёт обновляется если вы обновляете страницу или бот что то делает 

Можно выставлять все функции одновременно. Бот будет по очереди идти в шахту, потом в подземелье и потом в походы.

Если вы активируете бот, тогда вы можете скачивать обновлённые версии бота и они будут автоматически активированы на вашем компьютере.

Если вы хотите перенести активацию бота на любой другой компьютер, тогда надо ввести в бот ваш зарегистрированный ID код. В меню активации бота, ваш ID код написан красным шрифтом. Если вы не помните свой ID код, тогда спросите его на почте [email protected]

robot-brauzer.do.am

Бот для браузерной онлайн игры

Вопрос: Структура базы данных онлайн игры

Стала задача написать онлайн игру. Начал проектировать базу данных, но возникло несколько вопросов.1. Будет несколько игровых валют. (камни, кирпичи, доска, пшеница, и т.д. штук так 20). Как лучше хранить данные валюты? 2. как и в каком виде хранить операции по расходам и доходам игроков.

-----------------------Мои мысли-----------------------

Вопрос 1. Создать таблицу, в которой будет подробно описывать каждая валюта.

t_money

id | name | img-------------------1 | камни | a.png2 | кирпичи| b.png3 | доска| c.pngи т. д.

PS: По мне это самый оптимальный вариант.

Вопрос 2. Тут у нас будет две таблицы.

Таблица 1.

t_history

id | type | date

В ней храним id операции, тип операции(постройка дома, покупка валюты и т.д.), и время операции

А вторая таблица будет хранить информацию, какие валюты были задействованы в данной операции, в каком количестве, и в какую сторону были переведены средства(отнимались с баланса или прибавлялись на баланс).

Таблица 2.

t_history_money

id_history | id_money | numbers | type

id_history - ид из таблицы t_historyid_money - ид валюты из таблицы t_moneynumbers - сколько было затронуто данной валютыtype - добавлялась или отнималась валюта (0 или 1)

Хочу заметить, что у одной операции может быть задействовано несколько валют.

И тут возникает вопрос о росте базы данных.

Берем в расчет, что в сутки будет играть минимум 5000 игроков, каждый игрок совершает минимум 50 операций, каждая операция затрагивает в среднем 4 валюты.

Итого, за сутки, в таблице t_history появится 5000*50 = 250000 записей, а в таблице t_history_money 2 250000*4 = 1000000 записей.

Т.е. за сутки база данных будет расти в бешеном темпе, что меня очень смущает.

Да и вопрос с выборкой возник.За месяц соберется 7.500.000 и 30.000.000 записей, делать выборку по этим таблицам, по-моему будет не легко....

Какие есть мысли по оптимальному решению поставленной задачи?

Ответ: Движок то какой?

Например (из достаточно популярных):myisam - медленно обрабатывает инсерты но быстро выполняет селекты из основных минусов данный движок не поддерживает (в сторону которых Вам можно было бы посмотреть) и . innodb - поддерживает связи и транзакции, быстрый в инсертах но медлителен в селектах.

Разумеется это не все плюсы и минусы. Подробнее можно почитать и

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

forundex.ru

Бот для flash браузерной игры

Вопрос: Архитектура браузерной игры

Добрый вечер, коллеги и товарищи. Написал полный дизайн документ игрушки, команда художников уже прорисовали море графики, а я ломаю голову над архитектурой приложения... Есть много всяких скриптов, алгоритмов, но а вот "движка" нет, который объединит разрозненную логику в один организм.

Кто имел опыт создания крупных игрушек? Перекопал десятка два игр, исходников из сети, и всё мимо, тихий ужас нулевых.

Буду благодарен за любую полезную информацию, статьи, личный опыт, советы. Игра объёмная, рпг. Будут и привычная лавка, пиналка, чат и море других локаций, и персональные для каждой фракции. Хотелось бы изначально продумать и прописать всё максимально грамотно, чтобы при расширении последующем оно не вздулось и не лопнуло :-)

Ответ:

Вы правы, да. Думаю стоит меньше заморачиваться и просто начать писать :-)

А несколько точек я делал с той целью, чтобы избежать путаницы со слоями, видами так называемыми, контроллерами и т.д.

Изначальное видение:

(к примеру) 3 точки входа- index.php- player.php- shop.php

В каждой я подключаю некий init файл, который содержит автолоадер, конфиг подрубает, пути устанавливает различные, подключает файл с классом БД и файл с разными функциями.

Дальше в точке входа я обращаюсь к классу Auth и проверяю, авторизован ли юзверь (чекается сессия, не умерла ли она, не забанен ли уже юзверь и т.п. условия). Если точка входа требует авторизацию, а её нет, то редиректим куда нужно.

Всё, дальше идёт html, инклюдим шапку, боковую панель, а так же отображаем интерфейс этой точки входа. Это простое, ничего не забивает голову. НО! К примеру это shop.php, т.е. мы можем покупать тут что-то. Я думал создать класс определённый с методами, которые будут покупать или продавать шмотку со всей нужной логикой, а так же класс с объектами самих шмоток, ибо не хочу их заносить в БД (экономим лишний раз запросы).

И это лишь первые мысли организации. Есть ли советы какие на этот счёт? Или не нужно никакие классы писать для магазина и писать в этом же файле всё? (при условии, если точки останутся разные)

Это сообщение отредактировал n1ko - 24.10.2015 - 21:12

forundex.ru


 

..:::Новинки:::..

Windows Commander 5.11 Свежая версия.

Новая версия
IrfanView 3.75 (рус)

Обновление текстового редактора TextEd, уже 1.75a

System mechanic 3.7f
Новая версия

Обновление плагинов для WC, смотрим :-)

Весь Winamp
Посетите новый сайт.

WinRaR 3.00
Релиз уже здесь

PowerDesk 4.0 free
Просто - напросто сильный upgrade проводника.

..:::Счетчики:::..