Добро пожаловать на Pawno-Info.Ru - Портал о программировании v2.0

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

Маппинг для сервера

Если вы хотите обновить Ваш сервер новыми доработками - то зайдите в наш раздел. Большой выбор готовых решений от наших пользователей

Моды для сервера

Огромный выбор различных модификаций для Вашего сервера. пролистайте эти темы! Возможно именно там Вы найдете то, что искали уже давно.

Модификации SA

Хотите разнообразить свою игру в San Andrease? Смелее в наш раздел. Отличный сборник готовых решений. Играйте с удовольствием

[Мануал] Игра казино 'Zeppelin'

unreal.

Специалист
Пользователь
Регистрация
15 Окт 2015
Сообщения
891
Реакции
532
Адрес
Ростов-на-Дону
  • Помощник
Суть игры:

- Игрок делает ставку >> запускает игру >> Коэффициент растет >> успел забрать вовремя - WIN
>>Захотел больше кэф, а он сгорел - FAIL

Техническая часть:

Коэффициент растет 1 раз в 50ms, если он меньше 5.0, то прибавляем 0.01
если выше, то прибавляем 0.1

На каждую итерацию шанс проигрыша 1 к 99, но как показано на видео фейлы случаются и на 3.0 и на 1.1, на тестах доходил до 8.0.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


C++:
#define DIALOG_BET_ZEPPELIN 1340

new PlayerText:gameTextDraw_player[MAX_PLAYERS][2];
new Text:gameTextDraw_all[6];

new Float: score_game_zeppelin[MAX_PLAYERS] = {1.0, ...};
new Float: bet_zeppelin[MAX_PLAYERS],
    Float: bet_static_win[MAX_PLAYERS];

new bool:start_game[MAX_PLAYERS];
new player_timer[MAX_PLAYERS];





public OnGameModeInit()
{
    createTextDrawToAll();
    return 1;
}
public OnPlayerConnect(playerid)
{
    createTextDrawToPlayer(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_BET_ZEPPELIN) {

        /*if (playerInfo[playerid][money] < bet_zeppelin[playerid])
                                return SendClientMessage(playerid, -1, "У вас нет столько денег");*/
        bet_zeppelin[playerid] = strval(inputtext)*1.0;
        /*playerInfo[playerid][money] -= bet_zeppelin[playerid]*/
        score_game_zeppelin[playerid] = 1.0;
        new string_game_zeppelin[35]; //для большей суммы
        format(string_game_zeppelin, sizeof string_game_zeppelin, "%.2f~n~~b~%.0f$", score_game_zeppelin[playerid], bet_zeppelin[playerid]);
        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][0], string_game_zeppelin);
    }
    return 1;
}


CMD:casino(playerid) {
    SetPVarInt(playerid, #game, 1);
    showBoxZeppelin(playerid, 1);
}


forward timerGameZeppelin(playerid);
public timerGameZeppelin(playerid)
{

    if (random(100) != 5) { // если выпадет '5' - игра проиграна

        if ( score_game_zeppelin[playerid] <= 5.0 ) score_game_zeppelin[playerid] += 0.01;//если кэф ниже 5 то прибавляем по 1/100 раз в 50 мс
        else score_game_zeppelin[playerid] += 0.10; //в ином случае по 1/10 в 50мс

        bet_static_win[playerid] = score_game_zeppelin[playerid]*bet_zeppelin[playerid];

        new string_game_zeppelin[35];
        format(string_game_zeppelin, sizeof string_game_zeppelin, "%.2f~n~~b~%.0f$", score_game_zeppelin[playerid], bet_static_win[playerid]);
        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][0], string_game_zeppelin);

        player_timer[playerid] = SetTimerEx("timerGameZeppelin", 5_0, false, "i", playerid);//50ms
    }
    else {
        bet_zeppelin[playerid] = 0.0;
        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][0], "~r~FAIL");
        setGame(playerid, 1);
    }
  
}
stock gameZeppelinStart(playerid)
{

    score_game_zeppelin[playerid] = 1.0;
    player_timer[playerid] = SetTimerEx("timerGameZeppelin", 5_0, false, "i", playerid);//50ms

    return 1;
}

stock showBoxZeppelin(playerid, int) {

    if ( int ) {
        for(new i; i<6; i++) {
            TextDrawShowForPlayer(playerid,gameTextDraw_all[i]);
        }
        PlayerTextDrawShow(playerid, gameTextDraw_player[playerid][0]);
        PlayerTextDrawShow(playerid, gameTextDraw_player[playerid][1]);
        SelectTextDraw ( playerid, 0xFFFFFF80 ) ;
    }
    else {
        for(new i; i<6; i++) {
            TextDrawHideForPlayer(playerid,gameTextDraw_all[i]);
        }
              
            //скрываем тд
      
        PlayerTextDrawHide(playerid,gameTextDraw_player[playerid][0]);
        PlayerTextDrawHide(playerid,gameTextDraw_player[playerid][1]);

        CancelSelectTextDraw(playerid);
        //
        start_game[playerid] = false;//статус игры
        KillTimer(player_timer[playerid]);//убираем таймер
        bet_zeppelin[playerid] = 0;

        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][1], "BET________START");
        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][0], "1.00");
    }
}

stock setGame(playerid, status) { // запуск / остановка игры

    if ( !status ) {

        if (bet_zeppelin[playerid] <= 0) return SendClientMessage(playerid, -1, "Сделайте ставку, прежде чем начать игру!");

        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][1], "BET_________STOP");

        start_game[playerid] = true;

        gameZeppelinStart(playerid);//запускаем игру

    } else {

        if(bet_zeppelin[playerid])    {//проверяем сдлали ставку

            new string_game_zeppelin[35];
      
            format(string_game_zeppelin, sizeof string_game_zeppelin, "~g~WIN!!!~n~%d$", floatround(bet_static_win[playerid]));
            PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][0], string_game_zeppelin);

            GivePlayerMoney(playerid, floatround(bet_static_win[playerid]));//Изменить на свою выдачу денег
            /*playerInfo[playerid][money] += floatround(bet_static_win[playerid]);*/

            bet_static_win[playerid] = 0.0;
            bet_zeppelin[playerid] = 0.0;
        }

        PlayerTextDrawSetString(playerid, gameTextDraw_player[playerid][1], "BET________START");

        start_game[playerid] = false;//статус игры
      
        KillTimer(player_timer[playerid]);//убираем таймер
    }
    return 1;
}


public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
    if (clickedid == gameTextDraw_all[3]) {
        if(start_game[playerid]) return 1; //запрещаем нажимать 'BET'
        ShowPlayerDialog(playerid, DIALOG_BET_ZEPPELIN, DIALOG_STYLE_INPUT, "Сделайте вашу ставку", " ", "Принять", "Закрыть");
    }
    if (clickedid == gameTextDraw_all[4]) {
        setGame(playerid, start_game[playerid]);
    }
    if(GetPVarInt(playerid, #game)) {

        if(clickedid == Text:INVALID_TEXT_DRAW) {
            showBoxZeppelin(playerid, 0);
            DeletePVar(playerid, #game);
        }
        return 1;
    }
                  
    return 1;
}

createTextDrawToPlayer(playerid)
{
    gameTextDraw_player[playerid][0] = CreatePlayerTextDraw(playerid, 291.2500, 201.9259, "1.00"); //кэф
    PlayerTextDrawLetterSize(playerid, gameTextDraw_player[playerid][0], 0.3908, 3.0577);
    PlayerTextDrawTextSize(playerid, gameTextDraw_player[playerid][0], 348.0000, 0.0000);
    PlayerTextDrawAlignment(playerid, gameTextDraw_player[playerid][0], 1);
    PlayerTextDrawColor(playerid, gameTextDraw_player[playerid][0], -1);
    PlayerTextDrawBackgroundColor(playerid, gameTextDraw_player[playerid][0], 255);
    PlayerTextDrawFont(playerid, gameTextDraw_player[playerid][0], 2);
    PlayerTextDrawSetProportional(playerid, gameTextDraw_player[playerid][0], 1);
    PlayerTextDrawSetShadow(playerid, gameTextDraw_player[playerid][0], 257);


    gameTextDraw_player[playerid][1] = CreatePlayerTextDraw(playerid, 299.1665, 299.9259, "BET________START"); // название для кнопок
    PlayerTextDrawLetterSize(playerid, gameTextDraw_player[playerid][1], 0.3033, 1.3407);
    PlayerTextDrawAlignment(playerid, gameTextDraw_player[playerid][1], 1);
    PlayerTextDrawColor(playerid, gameTextDraw_player[playerid][1],  -2139062017);
    PlayerTextDrawBackgroundColor(playerid, gameTextDraw_player[playerid][1], 255);
    PlayerTextDrawFont(playerid, gameTextDraw_player[playerid][1], 1);
    PlayerTextDrawSetProportional(playerid, gameTextDraw_player[playerid][1], 1);
    PlayerTextDrawSetShadow(playerid, gameTextDraw_player[playerid][1], 0);
}


createTextDrawToAll()
{
    gameTextDraw_all[0] = TextDrawCreate(257.9165, 149.5553, "Box"); // основа
    TextDrawLetterSize(gameTextDraw_all[0], 0.0000, 19.2499);
    TextDrawTextSize(gameTextDraw_all[0], 380.0000, 0.0000);
    TextDrawAlignment(gameTextDraw_all[0], 1);
    TextDrawColor(gameTextDraw_all[0], -1);
    TextDrawUseBox(gameTextDraw_all[0], 1);
    TextDrawBoxColor(gameTextDraw_all[0], 80);
    TextDrawBackgroundColor(gameTextDraw_all[0], 1768516090);
    TextDrawFont(gameTextDraw_all[0], 1);
    TextDrawSetProportional(gameTextDraw_all[0], 1);
    TextDrawSetShadow(gameTextDraw_all[0], 0);

    gameTextDraw_all[1] = TextDrawCreate(257.9167, 158.8886, "Box"); // шапка для названия
    TextDrawLetterSize(gameTextDraw_all[1], 0.0000, 1.1666);
    TextDrawTextSize(gameTextDraw_all[1], 303.0000, 0.0000);
    TextDrawAlignment(gameTextDraw_all[1], 1);
    TextDrawColor(gameTextDraw_all[1], -1);
    TextDrawUseBox(gameTextDraw_all[1], 1);
    TextDrawBoxColor(gameTextDraw_all[1], 96);
    TextDrawBackgroundColor(gameTextDraw_all[1], 255);
    TextDrawFont(gameTextDraw_all[1], 1);
    TextDrawSetProportional(gameTextDraw_all[1], 1);
    TextDrawSetShadow(gameTextDraw_all[1], 0);

    gameTextDraw_all[2] = TextDrawCreate(260.4165, 158.3701, "ZEPPELIN"); // название
    TextDrawLetterSize(gameTextDraw_all[2], 0.2865, 1.1124);
    TextDrawTextSize(gameTextDraw_all[2], -4.0000, 0.0000);
    TextDrawAlignment(gameTextDraw_all[2], 1);
    TextDrawColor(gameTextDraw_all[2], -1);
    TextDrawBackgroundColor(gameTextDraw_all[2], 255);
    TextDrawFont(gameTextDraw_all[2], 1);
    TextDrawSetProportional(gameTextDraw_all[2], 1);
    TextDrawSetShadow(gameTextDraw_all[2], 0);

    gameTextDraw_all[3] = TextDrawCreate(285.4162, 293.9630, "LD_SPAC:white"); // бокс для кнопки start/stop
    TextDrawTextSize(gameTextDraw_all[3], 44.0000, 24.0000);
    TextDrawAlignment(gameTextDraw_all[3], 1);
    TextDrawColor(gameTextDraw_all[3], -1378294017);
    TextDrawBackgroundColor(gameTextDraw_all[4], 255);
    TextDrawFont(gameTextDraw_all[3], 4);
    TextDrawSetProportional(gameTextDraw_all[4], 0);
    TextDrawSetShadow(gameTextDraw_all[3], 0);
    TextDrawSetSelectable(gameTextDraw_all[3], true);

    gameTextDraw_all[4] = TextDrawCreate(331.6663, 293.9630, "LD_SPAC:white"); // бокс для bet
    TextDrawTextSize(gameTextDraw_all[4], 44.0000, 24.0000);
    TextDrawAlignment(gameTextDraw_all[4], 1);
    TextDrawColor(gameTextDraw_all[4], -5963521);
    TextDrawBackgroundColor(gameTextDraw_all[4], 255);
    TextDrawFont(gameTextDraw_all[4], 4);
    TextDrawSetProportional(gameTextDraw_all[4], 0);
    TextDrawSetShadow(gameTextDraw_all[4], 0);
    TextDrawSetSelectable(gameTextDraw_all[4], true);

    gameTextDraw_all[5] = TextDrawCreate(257.9165, 184.8147, "Box"); // белый фонт для надписи с кэфом
    TextDrawLetterSize(gameTextDraw_all[5], 0.0000, 8.0416);
    TextDrawTextSize(gameTextDraw_all[5], 380.0000, 0.0000);
    TextDrawAlignment(gameTextDraw_all[5], 1);
    TextDrawColor(gameTextDraw_all[5], -1);
    TextDrawUseBox(gameTextDraw_all[5], 1);
    TextDrawBoxColor(gameTextDraw_all[5], -1431655872);
    TextDrawBackgroundColor(gameTextDraw_all[5], 255);
    TextDrawFont(gameTextDraw_all[5], 1);
    TextDrawSetProportional(gameTextDraw_all[5], 1);
    TextDrawSetShadow(gameTextDraw_all[5], 0);
}



FS:
 

whale

/proger/
Регистрация
20 Сен 2013
Сообщения
1,076
Реакции
390
  • OLD
В общем - неплохо, интересная работа.
По поводу кода - есть над чем поработать (не столько оптимизация [хотя тоже есть некоторые моменты, которые можно было бы исправить], сколько наименование и непосредственно стиль наименования переменных).

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

В целом - молодец, мне понравилось :)
 

unreal.

Специалист
Пользователь
Регистрация
15 Окт 2015
Сообщения
891
Реакции
532
Адрес
Ростов-на-Дону
  • Помощник
В общем - неплохо, интересная работа.
По поводу кода - есть над чем поработать (не столько оптимизация [хотя тоже есть некоторые моменты, которые можно было бы исправить], сколько наименование и непосредственно стиль наименования переменных).

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

В целом - молодец, мне понравилось :)
Я скучал whale.
Жду от тебя вариантов :)
Спасибо.
 

Manek

• Зарегистрированный •
Регистрация
5 Июн 2020
Сообщения
1
Реакции
0
Неплохо!
 

PIRU

•Architect•
Administrator
Регистрация
10 Ноя 2010
Сообщения
1,206
Реакции
1,974
Адрес
СССР
Веб-сайт
pawno-info.ru
  • Герой PI
Интересная задумка, но как быть с теми, кто например напишет lua-скрипты, где просто будет делать ставку и забирать каждые допустим 1.5 секунды (можно и секунду). Получается просто НЕРЕАЛЬНО прибыльная для себя лозейка. Подумай над этим. Но идя я в целом интересная.
Я бы предложил чуть другой вариант. Основанный например на таком виде игрищь как форекс.
Есть шкала, которая падает и поднимается. Ты вводишь команду - видишь как там идет +2, -1, +5, -7, и так далее. В момент твоей ставки - то, что сейчас - приравнивается к 0. А ты выбираешь - будет ли оно выше или ниже того, когда ты сделал ставку Далее ты делаешь таймер, например на 1 минуту. Если по окончанию значение выше 0, и ты делал выше - ты забрал выигрыш, если ниже - проиграл. Обмануть - нереально. Никак. Подумай над таким Казиком :D
 

unreal.

Специалист
Пользователь
Регистрация
15 Окт 2015
Сообщения
891
Реакции
532
Адрес
Ростов-на-Дону
  • Помощник
Интересная задумка, но как быть с теми, кто например напишет lua-скрипты, где просто будет делать ставку и забирать каждые допустим 1.5 секунды (можно и секунду). Получается просто НЕРЕАЛЬНО прибыльная для себя лозейка. Подумай над этим. Но идя я в целом интересная.
Я бы предложил чуть другой вариант. Основанный например на таком виде игрищь как форекс.
Есть шкала, которая падает и поднимается. Ты вводишь команду - видишь как там идет +2, -1, +5, -7, и так далее. В момент твоей ставки - то, что сейчас - приравнивается к 0. А ты выбираешь - будет ли оно выше или ниже того, когда ты сделал ставку Далее ты делаешь таймер, например на 1 минуту. Если по окончанию значение выше 0, и ты делал выше - ты забрал выигрыш, если ниже - проиграл. Обмануть - нереально. Никак. Подумай над таким Казиком :D

Да, хороший вариант :)

По поводу поставить на каждую секунду снимать: 1 сек = 20 итераций шанс проигрыша тоже велик.
Можно добавить фичу что при коэффициенте меньше 2.0 шанс проигрыша не 1 к 99, а 1 к 69 к примеру.
 
  • Мне нравится
Реакции: PIRU

PIRU

•Architect•
Administrator
Регистрация
10 Ноя 2010
Сообщения
1,206
Реакции
1,974
Адрес
СССР
Веб-сайт
pawno-info.ru
  • Герой PI
Да, хороший вариант :)

По поводу поставить на каждую секунду снимать: 1 сек = 20 итераций шанс проигрыша тоже велик.
Можно добавить фичу что при коэффициенте меньше 2.0 шанс проигрыша не 1 к 99, а 1 к 69 к примеру.
Да, можно и фичу, но судя из жизненного опыта, в любом случае будет в плюсе. Нужно использовать варианты - неподконтрольные скриптам извне. Ну это мнение "опыта". Все, куда можно засунуть скрипты - все губительно. Иначе бы не придумывали собейты ))) И всякую ерунду.
 

yan2348

Интересующийся
Пользователь
Регистрация
17 Апр 2020
Сообщения
13
Реакции
0
Приколдесно, в будущем понадобится
 

Реклама

shape1
shape2
shape3
shape4
shape7
shape8
Сверху