avatar_Simp1e

Необычные факты в MuOnline - псевдослучайные числа и катастрофические последствия

Автор Simp1e, 2015 Авг. 15, 03:07

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlineзащитаmuonlineпсевдослучайные числаrandкатастрофические последствия

Simp1e

выясняется что абсолютно все скилы в му работают псевдослучайными числами что очень сложно назвать их реальным процентам более того так же работает хаус машина дроп заточка жолами итд что приводит очень к катастрофическим последствиям если думать логический

допустим гс использует функцию rand() но не объявляет исходное число для последовательности и тогда я подумал что если после каждого рестратра сервера  кидать 32 кундума и что выяснилось моя логика меня не подвела падают те же вещи в том же порядке причём с теме же опциями подумайте сами как на этом можно неплохо навариваться просчитав всю формулу дропа ехе вещей и опций ... так же работает на всём можно после рестарта взять простую вещь на 13 проточить жолами штук 20 и узнать какой жол будет гореть какой нет потом же после рестрата кидать в нужную вещь тот который не горит потом тот который горит в левую вещь или 2 -3 если 2-3 горят потом 1 в нужную ) с варкой крыльев тоже такая же схема если 1 или 5 или  10 крылья получаются лак маналост то после каждого рестарта тот же номер варки от рестарта даст те же вигни с лаком маналостом Дерзайте .)

Profesor08

#1
Интересно. Если не сложно, опубликуй результаты тестов, например для заточки, где видна последовательность.

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

P.S. Генератор случайных чисел, по своей сути, довольно медленный. А такое его использование - пример микро-оптимизации. Так как перезагрузка генератора перед каждым использованием сильно съест ресурсы и время.

qword

srand(time(NULL)) тебе в помощь

Simp1e

#3
Profesor08 хаус машин мало можно стоять рядом с ними и примерно просчитывать миксы и даже пользоваться этим  допустим ты знаешь что тот номер микса сгорит и пусть он и точит  проёб может быть ток в одном случае 1 вещь после каждого запуска будет 100% одинакова 2 вещь может быть или одинакова или такая же как первая но тогда третья уже будет такая как вторая. я тестировал когда это всё фиксил если тебе интересно скачай любой сервер с паблика запусти его и пробуй.

так же важно учесть даже если использовать srand в некоторых случаях допустим в дропе не очень хорошо так как можно убить и 20 мобов за 1 мс и она не успеет сгенерировать числа итог вещи будут одного типа.

и так же если ты будешь варить допустим винги а кто то билеты в бц или дс или шмотки твой rand вингов не испортится ток в случае если кто то еще будет варить винги

qword

@Simp1e, в чем суть "катастрофы"?

У нас имеется N кол-во переменных использующих псевдорандомные числа, предположим, что одна из них отвечает за шанс успеха при крафте крыльев, уточним, что переменная эта общая для всего пула пользователей, стало быть влиять на нее может любой пользователей сервера, от сюда вопрос: как ты собираешься это эксплуатировать, если ты это не контролируешь?

srand не обязательно устанавливать перед каждым вызовом rand, скажу больше - это не обязательно делать в каждом классе, rand общий для всей программы, устанавливая стартовое значение в time(NULL) - мы определяем начальное значение псевдорандомного числа для всей программы, при этом число это будет случайное (в зависимости от системного времени).

источник: cplusplus.com

Simp1e

#5
суть проблемы в том что если 1 винги сварятся лак маналост 2 сгорят а 3 просто лак и ты это засёк то после каждого запуска гса ты можешь идти смело в хаус машину и знать что у тебя 1 вигни будут лак маналост 2 винги сгорят а 3 будут с лаком или же 1 вигни будут лак маналост 2 такие же лак маналост 3 сгорит а 4 будет с лаком


так же с кундумами если ты на каждый запуск будешь держать 10 кундумов +5 ты будешь знать какие шмотки тебе будут падать и более того с какими опциями

а как вычислять твоей логике трудно понять ведь об этом к сожалению в источниках не пишут(

qword

@Simp1e,

// импорт
#include "stdafx.h"
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

// пульт
#define RAND_STATIC_SETUP FALSE

// вычисляем
void main() {
char tmpTitleBuffer[MAX_PATH];
sprintf_s(tmpTitleBuffer, "App time stamp: %d", time(NULL));
SetConsoleTitle(tmpTitleBuffer);
#if (RAND_STATIC_SETUP == 0)
srand(time(NULL)); // устаналиваем случайное значение в зависимости от системного времени
#endif
int chanceLimit = 500; // максимальное значение шанса
for (int i = 0; i < 10; i++) { // 10 попыток
int randChance = rand() % chanceLimit;
printf("[%d] keep value: %dn", i, randChance);
}
system("pause");
}

Результаты запусков без srand(time(NULL)):




Результаты запусков с srand(time(NULL)):




Это касательно корня твоей "катастрофы".

Теперь о гаданиях:
Даже если у нас при каждом запуске программы нет инициализации случайного числа и rand получает предсказуемый пул значений, то это не отменяет того, что переменная оказывается под влиянием любого из игроков, иначе говоря - пока ты будешь гадать на дропе (в реальных условиях), кто нибудь зайдет и скинет пару боксов, и вот уже твои гадания нужно начинать сначала, понимаешь?

Simp1e

#7
это да но начнём с того что после рестарта на сервере как обычно люди не заходят по 200-300 человек и масово не идут точится и кидать боксы и даже если 1 или 2 забуровят тебе схему то ты это определённо увидишь так как примерно знаешь какой микс будет в порядке и если кто то будет варить 1 винги или 3 а ты 2 то тебе не испортят rand так что это еще надо попасть .. и я не думаю что все держат боксы на рестарт так же можно подключить клан и делать это быстрее чем все )))

qword интересно ты до сих пор считаешь что тут всё нормально и существенных преимуществ в этом нет?

Paladium

Протестировал спасибо Simp1e за идею, все работает как часы.  ;)


Таким способом можно точить vip камушками которые дают разные ехе опции, или гм боксы накидать и многое другое.

epmak

народу в онлайн человек 20 добавь. и будет вам тест

Simp1e

#10
да хоть все 500 если не быть раком можно всё успевать в нужное тебе время=) а если сам не успеваешь что стоит подключить грамотных людей  темболее если учитывать что ты играешь не на говно сервере х9999 а лоу рейт где каждый бокс в цене и его кидают когда выбивают так как на него ходят всем кланом....

Profesor08

#11
Да хоть 2, 1000, 10000. Будет работать до первого вызова rand() который ты не контролируешь. rand() - глобальна, для любой функции, для любого класса, для всего в программе.

InsurgenT

катастрофа в том, что в нынешних серверах бывают ли вообще рестарты сервера, и чтоб можно было за этим следить и оно того стоило?

epmak

Цитата: InsurgenT от 2015 Авг. 17, 12:52  катастрофа в том, что в нынешних серверах бывают ли вообще рестарты сервера, и чтоб можно было за этим следить и оно того стоило?
вай  (y)
лучше было не сказать.
мой тонкий намек не поняли, зато меня прямо весь чат вспоминал. аж приятно.

Simp1e

#14
InsurgenT Глупо растерты могут быть по многим причинам. допустим норм досс тех работы в сервис центре да и сама норм администрация если следит за сервером постоянно делает обновления рестарты следить? учитывай что ты не администратор сервера а задрот который и так играет по 12 часов в день и тебе каждый лишний трофей выгоден

на некоторых серьёзных серверах крылья лак + норм опция даже денег стоят в районе 10 вмз не думаю что тебе было бы плохо их просто так делать каждый раз

Everybody

#15
Теперь чтобы использовать багу, надо иметь ботнет. Заставлять сервер рестартовать и по сценарию точить у chaos machine шотки.

BeL4eNaK

#16
Я не вижу как это можно использовать на работающем сервере.  Довольно бесполезно, но как занимательные факты - интересно.

Похожие темы (5)