Перейти к содержанию

Functor

Core Developers
  • Постов

    940
  • Зарегистрирован

  • Посещение

  • Победитель дней

    147

Сообщения, опубликованные Functor

  1. Открываем .../src/map/party.c и меняем:

    	// count the number of players eligible for exp sharing
    for (i = c = 0; i < MAX_PARTY; i++) {
    if( (sd[c] = p->data[i].sd) == NULL || sd[c]->bl.m != src->m || pc_isdead(sd[c]) || (battle_config.idle_no_share && pc_isidle(sd[c])) )
    continue;
    c++;
    }

    на:

    	// count the number of players eligible for exp sharing
    for (i = c = 0; i < MAX_PARTY; i++) {
    if( (sd[c] = p->data[i].sd) == NULL || sd[c]->bl.m != src->m || pc_isdead(sd[c]) || (battle_config.idle_no_share && pc_isidle(sd[c])) )
    continue;
    if (sd[c]->state.partyexp)
    continue;
    c++;
    }

    Открываем .../src/map/pc.h и после:

    	unsigned int warping : 1;//states whether you're in the middle of a warp processing

    пишем:

    	unsigned int partyexp : 1;

    Открываем .../src/map/atcommand.c и перед:

    /**
    * Fills the reference of available commands in atcommand DBMap
    **/
    #define ACMD_DEF(x) { #x, atcommand_ ## x }
    #define ACMD_DEF2(x2, x) { x2, atcommand_ ## x }

    пишем:

    ACMD_FUNC(partyexp) {

    nullpo_retr(-1, sd);

    if (sd->state.partyexp)
    {
    clif_displaymessage(fd, "Деактивирован отказ от получения експы в Party.");
    sd->state.partyexp = 0;
    }
    else
    {
    clif_displaymessage(fd, "Активирован отказ от получения експы в Party.");
    sd->state.partyexp = 1;
    }

    return 0;
    }

    После:

    	AtCommandInfo atcommand_base[] = {

    пишем:

    	ACMD_DEF(partyexp),

    Так же не забудьте назначить команду необходимому GM уровню в конфигах.

    • Upvote 2
  2. Какую версию Vertrigo устанавливали?

    Сколько свободного места на диске С?

    Покажите список процессов.

    В консоли:

    tasklist

    Вывод покажите в следующем сообщении.

    Попробуйте отключить антивирус, если установлен.

    Если не поможет, сделайте проверку диска C на предмет ошибок файловой системы.

    В консоли:

    chkdsk c:

    Вывод покажите в следующем сообщении.

    Деинсталлируйте Vertrigo и затем проинстальте не по дефолтному пути.

    Например:

    C:\Program Files\MyVertrigo\

    • Upvote 1
  3. Судя по выводу netstat, никто не занимает нужный нам порт. Так что смысла менять порт нету.

    Vertrigo после запуска v_mysqld.exe не находит его в процессах. В результате чего пишет ошибку. Но причина может быть любая.

    В таком случае откройте консоль и введите:

    cd C:\Program Files\VertrigoServ\Mysql\bin
    v_mysqld.exe --console

    Вывод покажите в следующем сообщении.

    P.S. Если у Вас системный диск не C - замените на правильный.

    У Вас установлен Firewall?

    • Upvote 1
  4. Shader, поскольку Вы закрыли тему про свой сервер, то напишу здесь.

    Очень не советую использовать BitSecure в качестве защиты.

    Полная отвязка от защиты заняла 10 минут.

    Для теста необходимо:

    1. Скачать архив по ссылке http://rghost.ru/37935301 (пароль в ПМ)

    2. Переименовать game.bin в game.exe

    3. Заменить bitsecure.dll в папке с игрой на тот что в архиве

    4. Для запуска игры используем game.exe

  5. Омг.. Ну уже бестолку. Пакуй-не пакуй. Переделывать нужно, т.к. уже есть не пакованная версия.

    Это и так понятно. Запаковал dll он только для оценки пакера.

    @Hot Space

    Теперь dll накрыта ASPack v2.12. От реверса алгоритма он не спасет. Но усложнит модификацию dll на диске.

    Так же Avira начала жаловаться на файл. :)

    • Upvote 1
  6. @Hot Space

    Алгоритм как на ладони. Легко написать свою dll и юзать обычную кору.

    Добавлено:

    Отреверсил я алгоритм и написал свою dll. Соответственно снимаются все ограничения.

    Для проверки скачайте и замените в клиенте Вашего сервера midg.dll.

    Пароль на архив скинул в ПМ.

    http://rghost.ru/37835804

    Хм.. А не rcp1 ли у тебя, со сломанной дллкой?

    Это его разработка. С RCP ничего схожего нету.

    2. Что о твоей длл думают антивирусы?

    Антивирусы молчат ибо он не паковал dll.

    • Upvote 1
  7. Так что это Вы за график приводили в пример? И причем там округление?

    Правила правилами. Для игрока "кидание кубика 1000 раз" в любом случае остается за занавесом. Он этого не оценит. Так что зря Вы прицепились к этому алгоритму.

    Если погрешность у Вас заключается в разбросе, то вот статистика для двух алго:

    for (set @i,0; @i < 1000; set @i,@i+1) {
    set @play,@play+rand(0,2)
    }

    Минимальное число: 868

    Максимальное число: 1116

    for (set @i,0; @i < 900; set @i,@i+100) {
    set @play,@play+rand(0,2)*100;
    }
    for (set @i,0; @i < 90; set @i,@i+10) {
    set @play,@play+rand(0,2)*10;
    }
    for (set @i,0; @i < 10; set @i,@i+1) {
    set @play,@play+rand(0,2);
    }

    Минимальное число: 37

    Максимальное число: 1947

    При сборе каждый алгоритм прокрутил 1 миллион раз.

  8. Я просто со школы помню график, который мы чертили.

    Что это за график?

    Поэтому предложенное округление будет слишком сильным.

    Какое еще округление? :blink:

    Набросал я Ваш алгоритм на С++ и прокрутил его 1 миллион раз.

    Во время теста я фиксировал самое маленькое число и самое большое.

    Минимальное число: 863

    Максимальное число: 1126

    Так что Вам мешает использовать rand(800,1200) и не создавать себе проблемы?

  9. botka4aet, не понимаю зачем так извращаться, потому что Ваш код аналогичный одной строке:

    set @play, rand(0,2000);

    Вы просто подумайте в каком диапазоне будет выходное число с Вашего скрипта и с моего.

×
×
  • Создать...
Яндекс.Метрика