Всем привет! Кто знает, пожалуйста, подскажите куда копать. Есть программа - покер клиент (сторонняя, без исходников), после запуска создается окно лобби, далее пользователь открывает столы для игры (пример стола на скриншоте). https://gyazo.com/b8ece09c1aeddd3cf553d6d11a9c76d3 Моя программа сканирует список окон, выбирает окна с нужными заголовками (столы). В заголовке видим ставки, к примеру: $0.01/0.02 (малый блайнд 0.01 USD и большой блайнд 0.02 USD). (это я уже сделал, но дальше стопор). Задача: Нужно сделать так, чтобы все ставки у каждого игрока и в банке были поделены на большой блайнд. Тоесть, требуется сделать Pot: 6.5, у игрока Djdam 5, cathat5000 0.5, Spactatr 1. И далее в процессе игры, чтобы ставки изменялись соответственно заданному правилу (делению на большой блайнд). И стеки игроков (деньги, с которыми он сидит за столом) аналогично. Как этого можно добиться? P.S. если интересует тема покера, могу так же поделиться знаниями, ответить на интересующие вопросы.
Есть решения для других покер-румов (PokerStars,PartyPoker,888,iPoker) - там работает такая подстановка. Думаю, как-то можно и тут это сделать, вопрос: как?
Это не решения - это развод. Данные всех игроков хранятся на сервере, ты не сможешь поменять их в клиенте, который служить лишь для оторбражения этих данных, и изменения твоих данных и пересылке твоих данных на сервер. Ты можешь изменить, то, что отображается у тебя в клиенте как угодно, но это никак не повлияет на то, что есть на сервере.
Всё верно, нет необходимости менять данные на сервере. Нужно только поменять отображение в моем клиенте, чтобы было не в деньгах, а в больших блайндах. К примеру, если играть два лимита-три лимита одновременно с разными размерами больших блайндов (мин ставка), то очень неудобно считать. Приведение всех денежных сумм к ставкам в ББ упрощает математику в игре.
Здравствуйте! Тоже копаю в этом направлении, сам играю, использую HM2. Вот в чем вопрос - как изменить значение которое отображается за покерным столом, его необходимо поменять для удобства отображения информации... и не только, это всего лишь отправная точка =) К примеру за столом сидят 9 игроков, у каждого примерно по 3000 фишек, обязательная ставка (большой блайнд) = 30 фишкам. Размер обязательной ставки динамически меняется со временем и стеки игроков соответственно. Нужно что бы программа, автоматически находила это значение (размер стека) и делила его на ставку (большой блайнд), при этом естественно заменяя прошлое значение под никнейном (размер стека). Это основная цель! =) Как я понял, для этого необходимо использовать winAPI? Не много почитав, как я понял, не желательно использовать hook`и, т.к. покерный клиент может это палить и тормозить процессы может. В дальнейшем хочется написать своего помощника, который например будет считывать твои карты и в зависимости от диапазона, подставлять нужную ставку для рейза, или ре-рейза, если кто-то до нас зашел в банк. Далее хочется с помощью HM2 API, запрашивать определенную статистику на оппонентов и подсказывать, то или иное решение. Например здесь нам лучше украсть блайнды или проще упасть учитывая оппонента и позицию. Очень надеюсь что хоть кто-то поможет, подскажет, а то уже устал копать, а информации очень мало. Есть программа которая переводит стеки в бб (и не только, но в основном ее юзают для этого), стоит 35$ StarsHelper. Но хочется понять как она работает, сделать такую самому и добавить нужный функционал. З.Ы. sackett если что-то узнаешь пиши в личку, с удовольствием обменяюсь инфой =)
Привет! По поводу подсказок уже пахнет ботоводством, а это наказуемо. Для старзов есть еще StarsCaption, бесплатная до какого-то лимита. Попробуй её. Да, если что-то будет - напишу.
Ну с подсказками согласен, если спалят то забанят, т.к. это можно считать комментарием к игре в реальном времени... короче есть там такой пункт =) Бота писать нет желания, да и знаний не хватит. Для бота нужно реализовать блок действий за столом, а к нему эмулятор поведения человека чтобы не спалиться, что по факту является тяжелейшей задачей. Сделать подсказчика не много проще и с палевом вопрос решить можно. Это поможет не щелкать лицом когда долго играешь, меньше совершать ошибок, придерживаться нужной(ых) стратегии и тактики - которые получаешь в ходе обучения (будь-то воды, тренировки, статьи). Все Caption`ы бесплатны до лимита $3. С $3 включительно - если ты открываешь стол, то программа закрывается.
Caption`ы не работают на .NET, а вот StarsHelper напротив. С помощью .NET Reflector нашел класс HUDUserAdjBB и в нем метод UpdateText(); Code: public class HUDUserAdjBB : HUDUserText { // Fields [DecimalConstant(0x1c, 0, (uint) 0x158a8994, (uint) 0x296e0196, (uint) 0xaaaaaab)] private static readonly decimal TwoThirds; // Methods static HUDUserAdjBB(); public HUDUserAdjBB(HUDTopLevel ThisHUDTopLevel, SettingsHUDBase ThisSettings, int MaxUsers, int UserPos); protected override void SetEvent(); protected override void UnsetEvent(); protected override void UpdateText(); // Properties protected override string DefaultNameHUD { get; } private SettingsHUDUserAdjBB ThisSettingsAll { get; } } Expand Methods Code: protected override void UpdateText() { base.CalculateRenderNode(); if (base.IsShow) { RenderNode latestRenderNode = base.LatestRenderNode; if (latestRenderNode == null) { base.SetDefaultText(); } else { GameData currentGameData = base.ThisBoardUnit.CurrentGameData; if (currentGameData == null) { base.SetDefaultText(); } else { decimal tourneyAdjBBHelper = currentGameData.TourneyAdjBBHelper; if (tourneyAdjBBHelper <= decimal.Zero) { base.SetText("NA", false); } else if (latestRenderNode.Stack_CurrentType == (RenderNode.EnumTypeTextStack.NotDetect | RenderNode.EnumTypeTextStack.SittingOut)) { base.SetText("SitOut", false); } else { decimal num2; SettingsHUDUserAdjBB thisSettingsAll = this.ThisSettingsAll; if (thisSettingsAll.IsStartGame.Value) { num2 = latestRenderNode.Stack_StartGame_Get(); } else { num2 = latestRenderNode.Stack_AfterBB_Get(); } if (num2 < decimal.Zero) { base.SetDefaultText(); } else { string str; if (thisSettingsAll.IsM.Value) { str = (num2 / tourneyAdjBBHelper).ToString(thisSettingsAll.RoundType.Value); } else { str = (num2 / (0.6666666666666666666666666667M * tourneyAdjBBHelper)).ToString(thisSettingsAll.RoundType.Value); } base.SetText(str, true); } } } } } } Это может нам как-то помочь? =)
я не понимаю, если нужно просто отхватить хэндл элемента окна, и заменить там текст, то почему не использовать spy++ чтобы найти ID того самого элемента, потом в C++ при помощи FindWindow и FindWindowEx зацепить, и потом отправить сигнал о смене текста SendMessage с WM_SETTEXT?
kranx, для простых программ так можно сделать, но для окон покерных клиентов нельзя - это окно графическое и элементов там нет. копал уже в этом направлении. Elrton, интересно... Это ты StarsHelper декомпилировал? PokerStars и StarsHelper написаны на .NET Framework?
Да, там особо никаких параметров нет, только действие user`a в одну строку описано и там ничего нет. PokerStars написан не на .NET, в отличии от StrasHelper`a, который в свою очередь требует что бы все сообщения чата были включены. Но там все равно инфы по стекам не выводится.
А вы пробовали каким нибудь ArtMoney поискать и поменять значения в памяти программы? Если значение находится и изменяется через ArtMoney, можно вычислить смещение переменной в блоке данных программы и потом использовать в своих целях. Алгоритм тогда будет такой: открыть программу клиент, определить адрес загрузки блока данных, взять адрес переменной по нужному смещению - использовать в своих целях, для любых вычислений. Правда это справедливо для компилируемых программ, как обстоят дела с псевдокодом .NET и Java я не в курсе.
Не получается, ArtMoney предлагает выбрать только лобби покерных клиентов, а не окна со столами, за которым непосредственно осуществляется игра. Поиск в лобби по цифрам, в попытках отыскать значение своего стека (фишек за столом), при отсеивание не дает результатов. Не остается никаких строк.
Складывается впечатление, что все данные генерирует сервер, а программа клиент просто транслирует картинку как видео плеер )