Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для Syme
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.06.2016
    Адрес
    Panopticum
    Сообщений
    1
    Репутация:
    0 ±

    Система однорукого бандита | Слот-машина(Аналог Advance-RP)

    Здравствуйте, уважаемые посетители портала Pro-Pawn. Это моя давняя работа, которую я делал знакомому 1,5 года назад, но она осталась невостребованной, поэтому я её слегка доработал и выкладываю в паблик для наработки собственного портфолио.

    Идея была позаимствована у Advance RP, однако она не просто скопирована, а усовершенствована доп.функционалом.

    Посмотреть данную систему в действии можно в видео:
      Открыть/закрыть


    Слот-машины созданы в интерьере казино "Калигула".

    Ресурсы:
      Открыть/закрыть
    PHP код:
    #include                                 <a_samp>
    #include                                 <streamer> 


    Дефайны коэффициентов выигрыша:

      Открыть/закрыть
    PHP код:
    #define COMBO_DOUBLE_GOLD                1
    #define COMBO_GOLD                        2
    #define COMBO_CHERRY                    3
    #define COMBO_BELL                        4
    #define COMBO_69                        5
    #define COMBO_GRAPES                    6


    #define sm_count                        6 // кол-во слот-машин 


    Переменные:

      Открыть/закрыть
    PHP код:
    /* Массивы координат rotx соответствующие своей картинке на слот-барабане */

    new Floatimage_rot [ ] ={ 3.0023.0043.0063.0083.00103.00123.00143.00163.00183.00203.00223.00243.00263.00283.00303.00323.00343.00363.00 } ;
    new 
    Floatcherry_combo ] ={ 23.00163.00223.00343.00 } ;
    new 
    Floatgold_combo ] ={ 183.00303.00 } ;
    new 
    Floatbell_combo ] ={ 63.00103.00243.00323.00 } ;
    new 
    Floatgrapes_combo ] ={ 3.0083.00143.00283.00363.00 } ;
    new 
    Floatsn_combo ] ={ 43.00123.00263.00 } ;

    /* Стат автомата */

    new sm_used sm_count char ] ; // переменная для записи статуса автомата(занят/свободен)

    /* Ручки автоматов */

    new sm_hand ] ; // переменная для записи ID объекта ручки нашей слот-машины
    new Floatsm_hand_coord ] [ ] ={ // массив координат объекта ручки слот-машины
        
    2255.270511609.618041005.8167815.000000.000000.00000 },
        { 
    2255.230471610.118041005.8167815.000000.00000180.00000 },
        { 
    2255.270511613.657961005.8167815.000000.000000.00000 },
        { 
    2255.230471614.157961005.8167815.000000.00000180.00000 },
        { 
    2255.270511617.557981005.8167815.000000.000000.00000 },
        { 
    2255.230471618.057981005.8167815.000000.00000180.00000 }
     } ;
     
    /*    Слот-механизмы автоматов */

    new sm_slot sm_count ] ; // переменная под запись id объекта слота
    new Floatsm_slot_coord sm_count ] [ ] ={ // массив координат для объектов слотов
        
    2255.150391609.702151006.72223,   3.000000.000000.00000 },
        { 
    2255.260501609.702151006.72223,   3.000000.000000.00000 },
        { 
    2255.370611609.702151006.72223,   3.000000.000000.00000 },
        
        { 
    2255.35991610.03871006.7222,   3.000000.00000180.00000 },
        { 
    2255.250001610.038701006.72223,   3.000000.00000180.00000 },
        { 
    2255.139891610.038701006.72223,   3.000000.00000180.00000 },

        { 
    2255.150391613.742071006.72223,   3.000000.000000.00000 },
        { 
    2255.260501613.742071006.72223,   3.000000.000000.00000 },
        { 
    2255.370611613.742071006.72223,   3.000000.000000.00000 },
        
        { 
    2255.359861614.078741006.72223,   3.000000.00000180.00000 },
        { 
    2255.250001614.078741006.72223,   3.000000.00000180.00000 },
        { 
    2255.139891614.078741006.72223,   3.000000.00000180.00000 },
        
        { 
    2255.150391617.642091006.72223,   3.000000.000000.00000 },
        { 
    2255.260501617.642091006.72223,   3.000000.000000.00000 },
        { 
    2255.370611617.642091006.72223,   3.000000.000000.00000 },
        
        { 
    2255.359861617.978761006.72223,   3.000000.00000180.00000 },
        { 
    2255.250001617.978761006.72223,   3.000000.00000180.00000 },
        { 
    2255.139891617.978761006.72223,   4.000000.00000180.00000 }
    } ;    

    /*    Зона использования автомата */

    new Floatsm_coord sm_count ] [ ] = { // массив с координатами расположения зоны использования слот-машины
        
    2255.35381608.28961006.1860 },
        { 
    2255.20341611.26281006.1797 },
        { 
    2255.30301612.67761006.1797 },
        { 
    2255.18601615.44291006.1797 },
        { 
    2255.23611616.55981006.1797 },
        { 
    2255.28341618.92811006.1797 }
     } ;

     
    /* TextDraws */
     
     
    new Textsm_td ] ; 
     new 
    PlayerTextsm_ptd MAX_PLAYERS ] = {PlayerText:-1, ...} ; 


    Далее нам нужно создать объекты наших слот-машин, для этого вставляем в OnGameModeInit:
      Открыть/закрыть
    PHP код:
    /*    Коробки автоматов */
        
    CreateDynamicObject 19482255.225101609.665771006.73523,   0.000000.000000.00000 ) ;
        
    CreateDynamicObject 19482255.285161610.075811006.73523,   0.000000.00000180.00000 ) ; 
        
    CreateDynamicObject 19482255.225101613.705931006.73523,   0.000000.000000.00000 ) ;
        
    CreateDynamicObject 19482255.285161614.115841006.73523,   0.000000.00000180.00000 ) ;
        
    CreateDynamicObject 19482255.225101617.605961006.73523,   0.000000.000000.00000 ) ;
        
    CreateDynamicObject 19482255.285161618.015871006.73523,   0.000000.00000180.00000 ) ;
            
    /*    Ручки автоматов */

        
    for ( new sm_count++ )
        {
            
    sm_hand ] = CreateDynamicObject 1832sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ] ) ;
            
    SetDynamicObjectMaterial sm_hand ], 0, -1"none""none"255 ) ; // т.к отдельный объект ручки мной не был найден, пришлось изобрести её
            
    SetDynamicObjectMaterial sm_hand ], 2, -1"none""none"255 ) ;
        }
        
    /*    Слот-механизмы автоматов */

        
    for ( new sm_count 3++ )
        {
            
    sm_slot ] = CreateDynamicObject 2349sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
        }

    /*  Текстдравы */
        
    sm_td ] = TextDrawCreate 276.000000355.000000"    SET" ) ;
        
    TextDrawBackgroundColor sm_td ], 255 ) ;
        
    TextDrawFont sm_td ], ) ;
        
    TextDrawLetterSize sm_td ], 0.4199992.099999 ) ;
        
    TextDrawColor sm_td ], -2711041 ) ;
        
    TextDrawSetOutline sm_td ], ) ;
        
    TextDrawSetProportional sm_td ], ) ;
        
    TextDrawSetShadow sm_td ], ) ;
        
    TextDrawBoxColor sm_td ], 255 ) ;
        
    TextDrawTextSize sm_td ], 336.00000012.000000 ) ;
        
    TextDrawSetSelectable sm_td ], ) ;

        
    sm_td ] = TextDrawCreate 375.000000355.000000" RESET" ) ;
        
    TextDrawBackgroundColor sm_td ], 255 ) ;
        
    TextDrawFont sm_td ], ) ;
        
    TextDrawLetterSize sm_td ], 0.4199992.099999 ) ;
        
    TextDrawColor sm_td ], -2711041 ) ;
        
    TextDrawSetOutline sm_td ], ) ;
        
    TextDrawSetProportional sm_td ], ) ;
        
    TextDrawSetShadow sm_td ], ) ;
        
    TextDrawBoxColor sm_td ], 255 ) ;
        
    TextDrawTextSize sm_td ], 436.00000012.000000 ) ;
        
    TextDrawSetSelectable sm_td ], ) ;

        
    sm_td ] = TextDrawCreate 182.000000355.000000"   ~r~Exit" ) ;
        
    TextDrawBackgroundColor sm_td ], 255 ) ;
        
    TextDrawFont sm_td ], ) ;
        
    TextDrawLetterSize sm_td ], 0.4199992.099999 ) ;
        
    TextDrawColor sm_td ], -2711041 ) ;
        
    TextDrawSetOutline sm_td ], ) ;
        
    TextDrawSetProportional sm_td ], ) ;
        
    TextDrawSetShadow sm_td ], ) ;
        
    TextDrawBoxColor sm_td ], 255 ) ;
        
    TextDrawTextSize sm_td ], 244.00000012.000000 ) ;
        
    TextDrawSetSelectable sm_td ], ) ;

        
    sm_td ] = TextDrawCreate 554.000000123.000000"slot hand" ) ;
        
    TextDrawBackgroundColor sm_td ], ) ;
        
    TextDrawFont sm_td ], ) ;
        
    TextDrawLetterSize sm_td ], 0.5000001.000000 ) ;
        
    TextDrawColor sm_td ], 16711935 ) ;
        
    TextDrawSetOutline sm_td ], ) ;
        
    TextDrawSetProportional sm_td ], ) ;
        
    TextDrawSetShadow sm_td ], ) ;
        
    TextDrawUseBox sm_td ], ) ;
        
    TextDrawBoxColor sm_td ], 255 ) ;
        
    TextDrawTextSize sm_td ], 86.000000260.000000 ) ;
        
    TextDrawSetPreviewModel sm_td ], ) ;
        
    TextDrawSetPreviewRot sm_td ], -16.0000000.000000, -55.000000, -1.000000 ) ;
        
    TextDrawSetSelectable sm_td ], ) ; 


    Дефолтные слот-машины мешали при установке новых, поэтому в OnPlayerConnect нужно использовать следующую функцию:

      Открыть/закрыть
    PHP код:
    RemoveDefaultSm playerid ) ; 


    Сама функция:
      Открыть/закрыть
    PHP код:

    stock RemoveDefaultSm 
    playerid )
    {
        
    RemoveBuildingForPlayer(playerid18362253.12501609.64061006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid23252255.15631609.60161006.76560.25 ) ;
        
    RemoveBuildingForPlayer(playerid18362257.24221609.64061006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid18372253.10161610.11721006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid18372257.25001610.11721006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid23252255.18751610.12501006.76560.25 ) ;
        
    RemoveBuildingForPlayer(playerid18372253.10161614.16411006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid18362253.12501613.68751006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid23252255.15631613.64841006.76560.25 ) ;
        
    RemoveBuildingForPlayer(playerid18372257.25001614.16411006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid18362257.24221613.68751006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid23252255.18751614.17191006.76560.25 ) ;
        
    RemoveBuildingForPlayer(playerid18362253.12501617.57811006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid18362257.24221617.57811006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid23252255.15631617.54691006.76560.25 ) ;
        
    RemoveBuildingForPlayer(playerid18372253.10161618.05471006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid18372257.25001618.05471006.00000.25 ) ;
        
    RemoveBuildingForPlayer(playerid23252255.18751618.07031006.76560.25 ) ;
        return 
    ;



    Теперь мы переходим к самой активации слот-машин. Я сделал использование через клавишу "ALT", но Вы, естественно, можете изменить на удобный для Вас вариант. В OnPlayerKeyStateChange:
      Открыть/закрыть
    PHP код:
        if ( GetPlayerState playerid ) == PLAYER_STATE_ONFOOT )
        {
            if ( 
    newkeys == KEY_WALK )
            {
                if ( 
    GetPlayerInterior playerid ) != ) return // у Калигулы 1 id интерьера
                
    if ( GetPVarInt playerid"p_sm_used" ) != ) return // Проверяем использует уже игрок какую-либо слот-машину или нет
                
    for ( new sm 0sm sm_count sm ++ ) 
                {
                    if ( 
    sm_used sm } != ) continue ; // Проверяем занята слот-машина или нет
                    
    if ( ! IsPlayerInRangeOfPoint playerid1.50sm_coord sm ] [ ], sm_coord sm ] [ ], sm_coord sm ] [ ] ) ) continue ; // Проверяем на нахождение в площади активации слот-машины
                    
    SetPVarInt playerid"p_sm_used"sm ) ;
                    
    TogglePlayerControllable playeridfalse ) ;
                    
                    
    sm_used sm } = ;

                    
    sm_ptd playerid ]  = CreatePlayerTextDraw playerid266.000000272.000000"BET:  0$" ) ;
                    
    PlayerTextDrawBackgroundColor playeridsm_ptd playerid ] , 255 ) ;
                    
    PlayerTextDrawFont playeridsm_ptd playerid ] , ) ;
                    
    PlayerTextDrawLetterSize playeridsm_ptd playerid ] , 0.3100002.700000 ) ;
                    
    PlayerTextDrawColor playeridsm_ptd playerid ] , -2711041 ) ;
                    
    PlayerTextDrawSetOutline playeridsm_ptd playerid ] , ) ;
                    
    PlayerTextDrawSetProportional playeridsm_ptd playerid ] , ) ;
                    
    PlayerTextDrawSetSelectable playeridsm_ptd playerid ] , ) ;

                    for ( new 
    ++ )
                    {
                        
    TextDrawShowForPlayer playeridsm_td ] ) ;
                    }
                    
    PlayerTextDrawShow playeridsm_ptd playerid ] ) ;
                    
    SelectTextDraw playerid0xFFDA82FF ) ;
                    
                                    
    // так получилось, что слот-машины стоят парами, поэтому для вычисления позиции камеры игрока я сделал проверку на чётность игрового автомата, чтобы ничего не придумывать с координатами поворота игрового автомата.
                    
    if ( sm == SetPlayerCameraPos(playeridsm_hand_coord sm ] [ ], sm_hand_coord sm ] [ ] - 0.65sm_hand_coord sm ] [ ] + ), SetPlayerCameraLookAt playeridsm_hand_coord sm ] [ ], sm_hand_coord sm ] [ ] + 1sm_hand_coord sm ] [ ] + 0.6 ) ;
                    else 
    SetPlayerCameraPos(playeridsm_hand_coord sm ] [ ], sm_hand_coord sm ] [ ] + 0.65sm_hand_coord sm ] [ ] + ), SetPlayerCameraLookAt playeridsm_hand_coord sm ] [ ], sm_hand_coord sm ] [ ] - 1sm_hand_coord sm ] [ ] + 0.6 ) ;
                    break ;
                }    
            }
        } 


    Манипуляции слот-машиной осуществляются на кликабельных текстдравах. В OnPlayerClickTextDraw вставляем следующее:
      Открыть/закрыть
    PHP код:
        if ( GetPVarInt playerid"p_sm_used" ) )
        {
            if(!(
    _:clickedid 0xFFFF))return SelectTextDraw playerid0xFFDA82FF ) ;
        }
        if ( 
    clickedid == sm_td ] ) // Выход
        
    {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return // В момент кручения барабана и движения ручки нельзя выйти
            
    SetCameraBehindPlayer playerid ) ;
            
    TogglePlayerControllable playeridtrue ) ;
            
    CancelSelectTextDraw playerid ) ;
            
    PlayerTextDrawDestroy playeridsm_ptd playerid ] ) ;
            
    sm_ptd playerid ] = PlayerText:INVALID_TEXT_DRAW ;
            for ( new 
    ++ )
            {
                
    TextDrawHideForPlayer playeridsm_td ] ) ;
            }
            
    sm_used GetPVarInt playerid"p_sm_used" ) - } = ;
            
    DeletePVar playerid"p_sm_used" ) ;
            return 
    ;
        }
        else if ( 
    clickedid == sm_td ] )
        {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return // В момент кручения барабана и движения ручки нельзя изменить ставку
            
    ShowPlayerDialog playerid1DIALOG_STYLE_INPUT"{FFFFFF}Размер ставки""{FFFFFF}Введите размер Вашей ставки:""Принять""Отмена" ) ;
            return 
    ;
        }
        else if ( 
    clickedid == sm_td ] ) // сброс информации слот-машины
        
    {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return // В момент кручения барабана и движения ручки нельзя сбросить инфу слот-машины
            
    DeletePVar playerid"sm_bet" ) ;
            
            new 
    = ( GetPVarInt playerid"p_sm_used" ) * + ( GetPVarInt playerid"p_sm_used" ) - ) ) - ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    PlayerTextDrawSetString playeridsm_ptd playerid ], "bet:  0$" ) ;
            return 
    ;
        }
        else if ( 
    clickedid == sm_td ] ) // Ручка слот-машины.
        
    {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return ;  // В момент кручения барабана и движения ручки нельзя ещё раз дёрнуть ручку
            
    if ( GetPVarInt playerid"sm_bet" ) == ) return SendClientMessage playerid, -1"* Вы не сделали ставку!" ) ;
            
    SetPVarInt playerid"sm_started") ;
            new 
    GetPVarInt playerid"p_sm_used" ) - ;
            
            if (
    == MoveDynamicObject sm_hand ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ] - 0.301sm_hand_coord ] [ ] + 20sm_hand_coord ] [ ], sm_hand_coord ] [ ] ) ;
            else 
    MoveDynamicObject sm_hand ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ] - 0.301sm_hand_coord ] [ ] + 20sm_hand_coord ] [ ], sm_hand_coord ] [ ] ) ;
            
    SetTimerEx "BackSmHand"1000false"idd"playeridsm_hand ], i  ) ;
            
          } 


    Далее следуют таймеры, которые необходимы для корректной работы системы:

      Открыть/закрыть
    PHP код:
    forward BackSmHand playeridobjectid) ;
    public 
    BackSmHand playeridobjectid)
    {
        
    MoveDynamicObject objectidsm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], 2sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ] ) ;
        
    = ( ( ) * + ( ( ) - ) ) - ;
        
    SetTimerEx "MoveSmSlot"348false"id"playerid) ;
        return 
    ;
    }

    forward MoveSmSlot playerid) ;
    public 
    MoveSmSlot playerid)
    {
        new 
    Floatobj_pos_z ;
        new 
    sm_move_time ;
        
    GetDynamicObjectPos sm_slot ], obj_pos_zobj_pos_zobj_pos_z ) ;
        if ( 
    sm_slot_coord ] [ ] != obj_pos_z )
        {
            
    sm_move_time MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 0.04image_rot random sizeof image_rot ) ) ],  sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 0.04image_rot random sizeof image_rot ) ) ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 0.04image_rot random sizeof image_rot ) ) ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
        }
        else 
        {
            
    sm_move_time MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] + 0.020.04image_rot random sizeof image_rot ) ) ],  sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] + 0.020.04image_rot random sizeof image_rot ) ) ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] + 0.020.04image_rot random sizeof image_rot ) ) ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
        }
        
    SetTimerEx "ChechSmResult"sm_move_time 100false"iddd"playeridsm_slot ], sm_slot ], sm_slot ] ) ;
        return 
    ;
    }

    forward ChechSmResult playeridobj_1obj_2obj_3 ) ;
    public 
    ChechSmResult playeridobj_1obj_2obj_3 )
    {
        if ( 
    GetPVarInt playerid"sm_bet" ) == ) return ;
        new 
    result GetSmResult obj_1obj_2obj_3 ) ;
        if ( ! 
    result )
        {
            
    PlayerTextDrawSetString playeridsm_ptd playerid ], "bet:  0$" ) ;
            
    GivePlayerMoney playerid, - GetPVarInt playerid"sm_bet" ) ) ;
            
    DeletePVar playerid"sm_bet" ) ;
            
    SendClientMessage playerid, -1"* Вы ничего не выиграли!" ) ;
            
    GameTextForPlayer(playerid"~r~LOSE"5000) ;
        }
        else
        {
            new 
    sm_win_cash GetPVarInt playerid"sm_bet" )  * ( result ) ;
            
    GivePlayerMoney playeridsm_win_cash ) ;
            
    SendClientMessage playerid, -1"* Вы выиграли!" ) ;
            
    DeletePVar playerid"sm_bet" ) ;
            new 
    gt_string 18 ] ;
            
    format gt_string18"~g~WIN: %d$"sm_win_cash ) ;
            
    GameTextForPlayer(playeridgt_string5000) ;

            
    PlayerTextDrawSetString playeridsm_ptd playerid ], "bet:  0$" ) ;
        }
        
    DeletePVar playerid"sm_started" ) ;
        return 
    ;



    Нельзя обойтись без диалога, в котором указывается размер ставки:

      Открыть/закрыть
    PHP код:
        if ( dialogid == )
        {
            if ( ! 
    response ) return ;
            new 
    bet_amount strval inputtext ) ;
            if ( 
    bet_amount || bet_amount 100000 ) return SendClientMessage playerid, -1"* Размер ставки не может быть меньше 0$ или больше 100000$!" ) ;
            if ( 
    GetPlayerMoney playerid ) < bet_amount ) return SendClientMessage playerid, -1"* У Вас нет такого количества денег!" ) ;
            
    SetPVarInt playerid"sm_bet"bet_amount ) ;
            new 
    td_string 14 ] ;
            
    format td_string14"bet:  %d$"bet_amount ) ;
            
    PlayerTextDrawSetString playeridsm_ptd playerid ], td_string ) ;
        } 


    Теперь мы переходим к ключевой функции данной системы. Как-раз она подводит результаты игры в слот-машине.

      Открыть/закрыть
    PHP код:
    stock GetSmResult obj_1obj_2obj_3 )
    {
        new 
    Floatrot_pos ];
        
    GetDynamicObjectRot obj_1rot_pos ], rot_pos ], rot_pos ] ) ;
        
    GetDynamicObjectRot obj_2rot_pos ], rot_pos ], rot_pos ] ) ;
        
    GetDynamicObjectRot obj_3rot_pos ], rot_pos ], rot_pos ] ) ;

        if ( 
    rot_pos ] == rot_pos ] && rot_pos ] == rot_pos ] && rot_pos ] && rot_pos ] == 200 ) return COMBO_DOUBLE_GOLD;
        new 
    combo_points 0;

        for ( new 
    0sizeof cherry_combo ) ; i++ )
        {
            for ( new 
    0sizeof rot_pos ) - 1f++ )
            {
                if ( 
    rot_pos ] == cherry_combo ] )combo_points ++ ;
            }
        }
        if ( 
    combo_points == ) return COMBO_CHERRY;
        
    combo_points 0;
        for ( new 
    0sizeof gold_combo ) ; i++ )
        {
            for ( new 
    0sizeof rot_pos ) - 1f++ )
            {
                if ( 
    rot_pos ] == gold_combo ] )combo_points ++ ;
            }
        }
        if ( 
    combo_points == ) return COMBO_GOLD;
        
    combo_points 0;
        for ( new 
    0sizeof bell_combo ) ; i++ )
        {
            for ( new 
    0sizeof rot_pos ) - 1f++ )
            {
                if ( 
    rot_pos ] == bell_combo ] )combo_points ++ ;
            }
        }
        if ( 
    combo_points == ) return COMBO_BELL;
        
    combo_points 0;
        for ( new 
    0sizeof grapes_combo ) ; i++ )
        {
            for ( new 
    0sizeof rot_pos ) - 1f++ )
            {
                if ( 
    rot_pos ] == grapes_combo ] )combo_points ++ ;
            }
        }
        if ( 
    combo_points == ) return COMBO_GRAPES;
        
    combo_points 0;
        for ( new 
    0sizeof sn_combo ) ; i++ )
        {
            for ( new 
    0sizeof rot_pos ) - 1f++ )
            {
                if ( 
    rot_pos ] == sn_combo ] )combo_points ++ ;
            }
        }
        if ( 
    combo_points == ) return COMBO_69;
        return 
    false;



    Важно не забыть о возможности отключения игрока при игре в слот-машине. В OnPlayerDisconnect:
      Открыть/закрыть
    PHP код:
        if ( GetPVarInt playerid"p_sm_used" ) )
        {
            
    PlayerTextDrawDestroy playeridsm_ptd playerid ] ) ;
            
    sm_ptd playerid ] = PlayerText:INVALID_TEXT_DRAW ;
            for ( new 
    ++ )
            {
                
    TextDrawHideForPlayer playeridsm_td ] ) ;
            }
            new 
    p_sm GetPVarInt playerid"p_sm_used" ) ;
            new 
    = ( p_sm + ( p_sm ) ) - ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;

            
    sm_used p_sm } = ;
        } 


    Команда для телепортации к слот-машине:
      Открыть/закрыть
    PHP код:
        if (strcmp("/gotocasino"cmdtexttrue10) == 0)
        {
            
    SetPlayerPos playerid2255.35381608.28961006.1860 ) ;
            
    SetPlayerInterior playerid) ;
            return 
    1;
        } 


    О возможных проблемах:
    -- Следует изменить id диалога ставки ( if ( dialogid == 1 ) )
    -- Следует заменить все функции денег на свои


    Эта система - основа, Вы можете увеличить кол-во слот-машин, добавить ещё различные комбинации слотов и иной интересный функционал. Не ограничивайтесь простым копированием.

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

    new.pwn, на котором я тестил, можно взять тут: https://gist.github.com/anonymous/96...13ddff52140a08

    Автор: Syme
    Последний раз редактировалось Syme; 02.07.2016 в 19:13.

  2. #2
    Аватар для Syme
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.06.2016
    Адрес
    Panopticum
    Сообщений
    1
    Репутация:
    0 ±
    Подкорректировал код. Тема вверх.

  3. #3
    Аватар для arzumanov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.10.2015
    Сообщений
    3
    Репутация:
    0 ±
    Отличная работа

  4. #4
    Аватар для Browze
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.07.2016
    Сообщений
    0
    Репутация:
    0 ±
    Неплохо, спасибо.

  5. #5
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Мне кажется это лишняя проверка
    PHP код:
    if ( GetPlayerState playerid ) == PLAYER_STATE_ONFOOT 
    Ведь кнопка KEY_WALK только пешком работает.

  6. #6
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    77
    Репутация:
    0 ±
    А как сделать чтобы барабан крутился секунд 4-6 ?

  7. #7
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от Vasya_Pupkin Посмотреть сообщение
    А как сделать чтобы барабан крутился секунд 4-6 ?
    Цитата Сообщение от Syme Посмотреть сообщение
    Манипуляции слот-машиной осуществляются на кликабельных текстдравах. В OnPlayerClickTextDraw вставляем следующее:
      Открыть/закрыть
    PHP код:
        if ( GetPVarInt playerid"p_sm_used" ) )
        {
            if(!(
    _:clickedid 0xFFFF))return SelectTextDraw playerid0xFFDA82FF ) ;
        }
        if ( 
    clickedid == sm_td ] ) // Выход
        
    {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return // В момент кручения барабана и движения ручки нельзя выйти
            
    SetCameraBehindPlayer playerid ) ;
            
    TogglePlayerControllable playeridtrue ) ;
            
    CancelSelectTextDraw playerid ) ;
            
    PlayerTextDrawDestroy playeridsm_ptd playerid ] ) ;
            
    sm_ptd playerid ] = PlayerText:INVALID_TEXT_DRAW ;
            for ( new 
    ++ )
            {
                
    TextDrawHideForPlayer playeridsm_td ] ) ;
            }
            
    sm_used GetPVarInt playerid"p_sm_used" ) - } = ;
            
    DeletePVar playerid"p_sm_used" ) ;
            return 
    ;
        }
        else if ( 
    clickedid == sm_td ] )
        {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return // В момент кручения барабана и движения ручки нельзя изменить ставку
            
    ShowPlayerDialog playerid1DIALOG_STYLE_INPUT"{FFFFFF}Размер ставки""{FFFFFF}Введите размер Вашей ставки:""Принять""Отмена" ) ;
            return 
    ;
        }
        else if ( 
    clickedid == sm_td ] ) // сброс информации слот-машины
        
    {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return // В момент кручения барабана и движения ручки нельзя сбросить инфу слот-машины
            
    DeletePVar playerid"sm_bet" ) ;
            
            new 
    = ( GetPVarInt playerid"p_sm_used" ) * + ( GetPVarInt playerid"p_sm_used" ) - ) ) - ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    MoveDynamicObject sm_slot ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ], 1sm_slot_coord ] [ ], sm_slot_coord ] [ ], sm_slot_coord ] [ ] ) ;
            
    PlayerTextDrawSetString playeridsm_ptd playerid ], "bet:  0$" ) ;
            return 
    ;
        }
        else if ( 
    clickedid == sm_td ] ) // Ручка слот-машины.
        
    {
            if ( 
    GetPVarInt playerid"sm_started" ) ) return ;  // В момент кручения барабана и движения ручки нельзя ещё раз дёрнуть ручку
            
    if ( GetPVarInt playerid"sm_bet" ) == ) return SendClientMessage playerid, -1"* Вы не сделали ставку!" ) ;
            
    SetPVarInt playerid"sm_started") ;
            new 
    GetPVarInt playerid"p_sm_used" ) - ;
            
            if (
    == MoveDynamicObject sm_hand ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ] - 0.301sm_hand_coord ] [ ] + 20sm_hand_coord ] [ ], sm_hand_coord ] [ ] ) ;
            else 
    MoveDynamicObject sm_hand ], sm_hand_coord ] [ ], sm_hand_coord ] [ ], sm_hand_coord ] [ ] - 0.301sm_hand_coord ] [ ] + 20sm_hand_coord ] [ ], sm_hand_coord ] [ ] ) ;
            
    SetTimerEx "BackSmHand"1000false"idd"playeridsm_hand ], i  ) ;
            
          } 
    Последним идёт таймер(SetTimerEx) вторым параметром которого является интервал(1000 миллисекунд это секунда), тебе необходимо от 4 до 6 секунд, то делай так.
    PHP код:
    SetTimerEx "BackSmHand"1000*(random(2)+4), false"idd"playeridsm_hand ], i  ) ; 

  8. #8
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    Последним идёт таймер(SetTimerEx) вторым параметром которого является интервал(1000 миллисекунд это секунда), тебе необходимо от 4 до 6 секунд, то делай так.
    PHP код:
    SetTimerEx "BackSmHand"1000*(random(2)+4), false"idd"playeridsm_hand ], i  ) ; 
    Поправочка:
    PHP код:
    1000 * (random(3) + 4
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  9. #9
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    А ну да, спасибо что подправил.

  10. #10
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    77
    Репутация:
    0 ±
    Это таймер ручки) а нужно чтобы барабан крутился(ид обьекта 2349) до 6 секунд

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •