Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для bredvix
    Старичок

    Статус
    Оффлайн
    Регистрация
    01.08.2013
    Адрес
    Нижний Новгород
    Сообщений
    480
    Репутация:
    183 ±

    Система рыбалки

    Ко всем new добавляем:
    PHP код:
    #define FISHING_ROD_ATTACHID 0 // если данный ID уже используется, смените на свой
    #define DLG_FISH_MARKET 4095 // изменить на свой значение, если ID диалога уже используется

    new fishing_market_pickup;
    new 
    fishing_info_pickup;
    new 
    fishing_rod_state[MAX_PLAYERS];
    new 
    fishing_busy[MAX_PLAYERS];
    new 
    fishing_bait[MAX_PLAYERS];
    new 
    fishing_line[MAX_PLAYERS];
    new 
    fishing_timer[MAX_PLAYERS]; 
    После добавляем в OnGameModeInit:
    PHP код:
    Create3DTextLabel("{FFA500}Информация: {00BFFF}Рыбалка",0x00FFFFDD,382.4216,-2080.1860,7.8359,20.0,0,1);
    fishing_info_pickup CreatePickup(12392382.4216,-2080.1860,7.8359, -1);
    Create3DTextLabel("{FFA500}Магазин: {00BFFF}Рыбный рынок",0x00FFFFDD,359.3295,-2032.0739,7.8359,20.0,0,1);
    fishing_market_pickup CreatePickup(13182359.3295,-2032.0739,7.8359, -1);
    CreateDynamicMapIcon(377.1194, -2121.7058, -0.53289, -1); 
    Далее идём в OnPlayerCommandText и добавляем:
    PHP код:
        if(strcmp("/fishinfo"cmdtexttrue) == 0)
            return 
    ShowFishingInfo(playerid);
        if(
    strcmp("/rod"cmdtexttrue) == 0)
        {
            if(
    fishing_rod_state[playerid] == 0)
                return 
    SendClientMessage(playerid, -1"У Вас нет удочки!");
            if(
    fishing_rod_state[playerid] == 1)
            {
                
    fishing_rod_state[playerid] = 2;
                return 
    SetPlayerAttachedObject(playeridFISHING_ROD_ATTACHID18632,6,0.079376,0.037070,0.007706,181.482910,0.000000,0.000000,1.000000,1.000000,1.000000);
            }
            if(
    fishing_busy[playerid])
                return 
    SendClientMessage(playerid, -1"Вы ловите рыбу. Чтобы завершить рыбалку, используйте /fish");
            
    fishing_rod_state[playerid] = 1;
            return 
    RemovePlayerAttachedObject(playeridFISHING_ROD_ATTACHID);
        }
        if(
    strcmp("/fish"cmdtexttrue) == 0)
        {
            if(
    fishing_busy[playerid])
            {
                
    KillTimer(fishing_timer[playerid]);
                
    fishing_busy[playerid] = 0;
                
    TogglePlayerControllable(playerid1);
                
    ApplyAnimation(playerid"CARRY""crry_prtial"2.000000);
                
    GameTextForPlayer(playerid"~w~Fishing ~r~stopped"30003);
                return 
    SendClientMessage(playerid, -1"Рыбалка остановлена");
            }
            if(!
    VaildFishingPlace(playerid) || IsPlayerInAnyVehicle(playerid))
                return 
    SendClientMessage(playerid, -1"В этом месте запрещена рыбалка!");
            if(
    fishing_bait[playerid] < 1)
                return 
    SendClientMessage(playerid, -1"У Вас нет приманок в запасе!");
            if(
    fishing_line[playerid] < 1)
                return 
    SendClientMessage(playerid, -1"У Вас нет лесок в запасе!");
            if(
    fishing_rod_state[playerid] != 2)
                return 
    SendClientMessage(playerid, -1"Возмите удочку в руки! (/rod)");
            
    TogglePlayerControllable(playerid0);
            
    ApplyAnimation(playerid"SWORD""sword_block"50.001011);
            
    fishing_busy[playerid] = 1;
            
    KillTimer(fishing_timer[playerid]);
            
    fishing_timer[playerid] = SetTimerEx("FishTimer"50000false"i"playerid);
            
    SendClientMessage(playerid, -1"Вы начали рыбачить!");
            
    GameTextForPlayer(playerid,"~w~Fishing ~g~started"490003);
        } 
    После ищем OnPlayerPickUpPickup(playerid, pickupid) и вставляем:
    PHP код:
        if(pickupid == fishing_market_pickup)
            return 
    ShowPlayerDialog(playeridDLG_FISH_MARKETDIALOG_STYLE_LIST"Рыбный рынок""Удочка (50$)\nПриманка (35$)\nЛеска (15$)\nПолный комплект (100$)""Купить""Отмена");
        if(
    pickupid == fishing_info_pickup)
            return 
    ShowFishingInfo(playerid); 
    Далее в OnDialogResponse:
    PHP код:
        if(dialogid == DLG_FISH_MARKET)
        {
            if(
    response == 0)
                return 
    1;
            if(
    IsPlayerInRangeOfPoint(playerid2359.3295,-2032.0739,7.8359) == 0)
                return 
    SendClientMessage(playerid, -1"Вы не у рыбного рынка.");
            switch(
    listitem)
            {
                case 
    0:
                {
                    if(
    GetPlayerMoney(playerid) < 50)
                        return 
    SendClientMessage(playerid, -1"Недостаточно денег.");
                    if(
    fishing_rod_state[playerid])
                        return 
    SendClientMessage(playerid, -1"Вы уже купили удочку!");
                    
    fishing_rod_state[playerid] = 1;
                    
    SendClientMessage(playerid, -1"Удочка куплена!");
                    
    GameTextForPlayer(playerid"~r~-50$"12001);
                    return 
    GivePlayerMoney(playerid, -50);
                }
                case 
    1:
                {
                    if(
    GetPlayerMoney(playerid) < 35)
                        return 
    SendClientMessage(playerid, -1"Недостаточно денег.");
                    if(
    fishing_bait[playerid])
                        return 
    SendClientMessage(playerid, -1"Вы уже купили приманку!");
                    
    fishing_bait[playerid] = 1;
                    
    SendClientMessage(playerid, -1"Приманка куплена!");
                    
    GameTextForPlayer(playerid"~r~-35$"12001);
                    return 
    GivePlayerMoney(playerid, -35);
                }
                case 
    2:
                {
                    if(
    GetPlayerMoney(playerid) < 15)
                        return 
    SendClientMessage(playerid, -1"Недостаточно денег.");
                    if(
    fishing_line[playerid])
                        return 
    SendClientMessage(playerid, -1"Вы уже купили леску!");
                    
    fishing_line[playerid] = 1;
                    
    SendClientMessage(playerid, -1"Леска куплена!");
                    
    GameTextForPlayer(playerid"~r~-15$"12001);
                    return 
    GivePlayerMoney(playerid, -15);
                }
                default: 
    //case 3:
                
    {
                    if(
    GetPlayerMoney(playerid) < 100)
                        return 
    SendClientMessage(playerid, -1"Недостаточно денег.");
                    if(
    fishing_line[playerid])
                        return 
    SendClientMessage(playerid, -1"Вы уже купили леску!");
                    if(
    fishing_bait[playerid])
                        return 
    SendClientMessage(playerid, -1"Вы уже купили приманку!");
                    if(
    fishing_rod_state[playerid] != 0)
                        return 
    SendClientMessage(playerid, -1"Вы уже купили удочку, приманку и леску!");
                    
    fishing_line[playerid] = 1;
                    
    fishing_bait[playerid] = 1;
                    
    fishing_rod_state[playerid] = 1;
                    
    GameTextForPlayer(playerid"~r~-100$"12001);
                    
    GivePlayerMoney(playerid, -100);
                    return 
    SendClientMessage(playerid, -1"{00FF00}x{FFFFFF} Удочка, приманка и леска куплены!");
                }
            }
        } 
    В самом конце мы вставляем это:
    PHP код:
    ShowFishingInfo(playerid)
    {
        
    SendClientMessage(playerid0xC0C0C0FF"=================[ {FFFFFF}Рыбалка{C0C0C0} ]================");
        
    SendClientMessage(playerid0xC0C0C0FF"/rod {FFFFFF}- взять/убрать удочку");
        return 
    SendClientMessage(playerid0xC0C0C0FF"/fish {FFFFFF}- начать/остановить рыбалку");
    }

    VaildFishingPlace(playerid)
    {
        if(!
    IsPlayerConnected(playerid))
            return 
    0;
        if(
    IsPlayerInRangeOfPoint(playerid4,403.8266,-2088.7598,7.8359) || IsPlayerInRangeOfPoint(playerid4,398.7553,-2088.7490,7.8359))
            return 
    1;
        if(
    IsPlayerInRangeOfPoint(playerid4,396.2197,-2088.6692,7.8359) || IsPlayerInRangeOfPoint(playerid4,391.1094,-2088.7976,7.8359))
            return 
    1;
        if(
    IsPlayerInRangeOfPoint(playerid4,383.4157,-2088.7849,7.8359) || IsPlayerInRangeOfPoint(playerid4,374.9598,-2088.7979,7.8359))
            return 
    1;
        if(
    IsPlayerInRangeOfPoint(playerid4,369.8107,-2088.7927,7.8359) || IsPlayerInRangeOfPoint(playerid4,367.3637,-2088.7925,7.8359))
            return 
    1;
        if(
    IsPlayerInRangeOfPoint(playerid4,362.2244,-2088.7981,7.8359) || IsPlayerInRangeOfPoint(playerid4,354.5382,-2088.7979,7.8359))
            return 
    1;
        return 
    0;
    }

    forward FishTimer(playerid);
    public 
    FishTimer(playerid)
    {
        if(!
    VaildFishingPlace(playerid))
        {
            
    fishing_busy[playerid] = 0;
            
    SetCameraBehindPlayer(playerid);
            return 
    ApplyAnimation(playerid"CARRY""crry_prtial"2.000000);
        }
        static const 
    FishNames[][8] =
        {
            {
    "Ерша"},
            {
    "Окуня"},
            {
    "Карася"},
            {
    "Щуку"},
            {
    "Белугу"},
            {
    "Кету"},
            {
    "Горбушу"},
            {
    "Семгу"},
            {
    "Нерку"},
            {
    "Лосося"}
        };
        
    TogglePlayerControllable(playerid1);
        
    fishing_busy[playerid] = 0;
        new 
    fish random(sizeof(FishNames)+1)-1;
        if(
    fish == -1)
            return 
    fishing_line[playerid] = 0SendClientMessage(playerid, -1"Рыба сорвалась и порвала леску!");
        static const 
    fmt_str[] = "{00FF00}х {FFFFFF}Вы поймали {88AA88}%s {FFFFFF}и продали на рынке за {88AA88}%d${FFFFFF}!";
        new 
    string[sizeof(fmt_str)-2+sizeof(FishNames[])-2+11];
        new 
    money fish*3+1;
        
    GivePlayerMoney(playeridmoney);
        
    format(stringsizeof(string), "~g~+%d$"money);
        
    GameTextForPlayer(playeridstring12001);
        
    format(stringsizeof(string), fmt_strFishNames[fish], money);
        return 
    SendClientMessage(playerid, -1string);

    Вот и всё.

     Скриншоты





    Автор: Pro-Pawn Team
    Последний раз редактировалось L0ndl3m; 11.01.2015 в 18:24. Причина: fixed

  2. 7 пользователя(ей) сказали cпасибо:
    Brendan (29.07.2015) Chery* (14.04.2014) gangzone.ini (11.01.2015) RedFox (04.05.2014) Trender (16.06.2014) [ForD] (31.01.2014) Серёжа Шардин (27.06.2014)
  3. #2
    Аватар для RedFox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.05.2014
    Сообщений
    7
    Репутация:
    0 ±
    Спасибо + твой

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

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    Класс)

 

 

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

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

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

Ваши права

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