Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 27

Тема: [SCR] [ALL] Система забегов от Администрации

  1. #1
    Активный пользователь Аватар для anonimniy
    Регистрация
    20.08.2011
    Адрес
    St. Petersburg
    Сообщений
    466
    Репутация: 28

    Звание: на пути к лучшему

    [SCR] [ALL] Система забегов от Администрации


    Суть и принцип работы:

    Администратор прописывает команду, указывая в ней взнос, затем игрокам высвечивается сообщение о старте забега. Игроки пишут /rzone, с них берется взнос и они телепортируются. Кто первый возьмет последний чекпоинт - тот и победитель. Победителю достаются все деньги со взносов. Т.е. если участников было 10, а взнос 500, то победитель получит 4500 прибыли.

    Это очень важно:

    1. Используется стадион от Martin`a, эти объекты обязательно стоит вставить, ибо бегать по пустому пляжу вряд ли кому-то понравится. Ссылочка: http://pawno.su/showthread.php?t=108...E0%E4%E8%EE%ED
    2. Команды написаны на DC_CMD.
    3. pAdmin - переменная админки, замените на свою. pCash - переменная денег, замените на свою.
    4. Если у вас в моде не даются каждую секунду деньги из pInfo[playerid][pCash] то строки с выдачей денег замените на GivePlayerMoney. Или же просто строки с выдачей/отбиранием денег сделайте по аналогии в вашем моде.
    5. Если у Вас нет foreach, то строки с foreach(Player,i) замените на for(new i = 0; i < MAX_PLAYERS; i++)

    Код:

    К дефайнам:

    PHP код:
    #define COLOR_ADM           0xFF6347AA 
    Ко всем переменным:

    PHP код:
    new CPash[MAX_PLAYERS], ZabegOpen,ZabegVznos,Members,NaZabege[MAX_PLAYERS];
    new 
    Float:mass[11][3] = {
    {
    242.6150,-1798.7765,4.5835},
    {
    274.0659,-1796.0232,4.5818},
    {
    290.0310,-1806.2958,4.5845},
    {
    283.4669,-1822.1028,4.5843},
    {
    263.8086,-1824.0033,4.5846},
    {
    241.9038,-1821.6470,4.5852},
    {
    240.1996,-1801.2089,4.5851},
    {
    267.7746,-1795.9835,4.5847},
    {
    289.9263,-1807.8026,4.5842},
    {
    279.7703,-1823.4070,4.5851},
    {
    242.3655,-1824.6104,4.5816}
    }; 
    В OnPlayerConnect:

    PHP код:
    CPash[playerid] = 0,NaZabege[playerid] = 0
    Команды:

    PHP код:
    CMD:rstart(playerid,params[])
    {
        if(
    pInfo[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Недостаточно прав.");
        if(
    ZabegOpen == 1) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Забег уже начался.");
        if(
    sscanf(params,"d",params[0])) return SendClientMessage(playerid,-1,"{00CCCC}[Использование]{FFFFFF} /rstart [Взнос]");
        if(
    params[0] < || params[0] > 1000) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Взнос не может быть меньше 1 и больше 1000.");
        new 
    string[144];
        if(
    pInfo[playerid][pAdmin] == 5format(string,sizeof(string),"Главный Администратор %s объявил Забег | Для участия введи /rzone | Взнос $%d | Старт через 20 секунд",pInfo[playerid][pName],params[0]);
        if(
    pInfo[playerid][pAdmin] == 4format(string,sizeof(string),"Главный Модератор %s объявил Забег | Для участия введи /rzone | Взнос $%d | Старт через 20 секунд",pInfo[playerid][pName],params[0]);
        if(
    pInfo[playerid][pAdmin] == 3format(string,sizeof(string),"Модератор %s объявил Забег | Для участия введи /rzone | Взнос $%d | Старт через 20 секунд",pInfo[playerid][pName],params[0]);
        
    SendClientMessageToAll(COLOR_ADM,string);
        
    ZabegVznos params[0];
        
    ZabegOpen 1;
        
    SetTimer("ZabegStart",10000,false);
        return 
    true;
    }
    CMD:rzone(playerid,params[])
    {
        if(
    ZabegOpen == 0) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Никто не начинал забег.");
        if(
    Members == 12) return SendClientMessage(playerid,-1,"{FF0000}x{FFFFFF} Свободных мест нет.");
        new 
    Float:x,Float:y,Float:z,Float:a;
        
    GetPlayerPos(playeridx,y,z);
        
    GetPlayerFacingAngle(playerida);
        
    SetPVarFloat(playerid"ObrX"x);
        
    SetPVarFloat(playerid"ObrY"y);
        
    SetPVarFloat(playerid"ObrZ"z);
        
    SetPVarFloat(playerid"ObrA"a);
        
    SetPVarInt(playerid"ObrInt"GetPlayerInterior(playerid));
        
    SetPVarInt(playerid"ObrVirt"GetPlayerVirtualWorld(playerid));
        
    SetPlayerVirtualWorld(playerid,901);
        
    SetPlayerInterior(playerid,0);
        
    SetPlayerFacingAngle(playerid,90.0);
        switch(
    Members)
        {
            case 
    0SetPlayerPos(playerid,261.7,-1826.0776,4.5819);
            case 
    1SetPlayerPos(playerid,261.7,-1824.0649,4.5822);
            case 
    2SetPlayerPos(playerid,261.7,-1822.3625,4.5821);
            case 
    3SetPlayerPos(playerid,266.7,-1826.0776,4.5819);
            case 
    4SetPlayerPos(playerid,266.7,-1824.0649,4.5822);
            case 
    5SetPlayerPos(playerid,266.7,-1822.3625,4.5821);
            case 
    6SetPlayerPos(playerid,271.7,-1826.0776,4.5819);
            case 
    7SetPlayerPos(playerid,271.7,-1824.0649,4.5822);
            case 
    8SetPlayerPos(playerid,271.7,-1822.3625,4.5821);
            case 
    9SetPlayerPos(playerid,276.7,-1826.0776,4.5819);
            case 
    10SetPlayerPos(playerid,276.7,-1824.0649,4.5822);
            case 
    11SetPlayerPos(playerid,276.7,-1822.3625,4.5821);
        }
        
    TogglePlayerControllable(playerid,0);
        
    SetPlayerHealth(playerid,100);
        
    ResetPlayerWeapons(playerid);
        
    NaZabege[playerid] = 1;
        
    pInfo[playerid][pCash] -= ZabegVznos;
        
    Members++;
        
    SetCameraBehindPlayer(playerid);
        return 
    true;

    В конец мода:

    PHP код:
    forward ZabegStart();
    public 
    ZabegStart()
    {
        if(
    Members 3)
        {
            
    SendClientMessageToAll(COLOR_ADM,"Забег был отменен из-за нехватки участников.");
            
    Members 0;
            
    ZabegOpen 0;
            foreach(
    Player,i)
            {
                if(
    NaZabege[i] == 1)
                {
                    
    NaZabege[i] = 0;
                    
    pInfo[i][pCash] += ZabegVznos;
                    
    TogglePlayerControllable(i,1);
                    
    SetPlayerPos(iGetPVarFloat(i"ObrX"), GetPVarFloat(i"ObrY"), GetPVarFloat(i"ObrZ"));
                    
    SetPlayerFacingAngle(iGetPVarFloat(i"ObrA"));
                    
    SetPlayerVirtualWorld(iGetPVarInt(i"ObrVirt"));
                    
    SetPlayerInterior(iGetPVarInt(i"ObrInt"));
                    
    DeletePVar(i"ObrX");
                    
    DeletePVar(i"ObrY");
                    
    DeletePVar(i"ObrZ");
                    
    DeletePVar(i"ObrA");
                    
    DeletePVar(i"ObrInt");
                    
    DeletePVar(i"ObrVirt");
                }
            }
            
    ZabegVznos 0;
            return 
    true;
        }
        foreach(
    Player,i)
        {
            if(
    NaZabege[i] == 1)
            {
                
    TogglePlayerControllable(i,1);
                
    CPash[i] = 60;
                
    DisablePlayerCheckpoint(i);
                
    SetPlayerCheckpoint(i,240.0337,-1819.6104,4.58383.0);
            }
        }
        
    SendClientMessageToAll(COLOR_ADM,"Забег начался. Участникам желаем удачи.");
        return 
    true;

    В OnPlayerEnterCheckpoint:

    PHP код:
    switch(CPash[playerid])
        {
            case 
    60..70:
            {
                
    PlayerPlaySound(playerid11390.0,0.0,0.0);
                
    DisablePlayerCheckpoint(playerid);
                new 
    pos CPash[playerid] - 60 ;
                
    SetPlayerCheckpoint(playeridmass[pos][0], mass[pos][1], mass[pos][2], 3.0);
                
    CPash[playerid]++;
            }
            case 
    71:
            {
                
    pInfo[playerid][pCash] += ZabegVznos*Members;
                new 
    string[100];
                
    format(string,sizeof(string),"%s[%d] стал победителем Забега. Поздравляем!",pInfo[playerid][pName],playerid);
                
    SendClientMessageToAll(COLOR_ADM,string);
                foreach(
    Player,i)
                {
                    if(
    NaZabege[i] == 1)
                    {
                        
    NaZabege[i] = 0;
                        
    TogglePlayerControllable(i,1);
                        
    SetPlayerPos(iGetPVarFloat(i"ObrX"), GetPVarFloat(i"ObrY"), GetPVarFloat(i"ObrZ"));
                        
    SetPlayerFacingAngle(iGetPVarFloat(i"ObrA"));
                        
    SetPlayerVirtualWorld(iGetPVarInt(i"ObrVirt"));
                        
    SetPlayerInterior(iGetPVarInt(i"ObrInt"));
                        
    DeletePVar(i"ObrX");
                        
    DeletePVar(i"ObrY");
                        
    DeletePVar(i"ObrZ");
                        
    DeletePVar(i"ObrA");
                        
    DeletePVar(i"ObrInt");
                        
    DeletePVar(i"ObrVirt");
                        
    CPash[i] = 0;
                        
    DisablePlayerCheckpoint(i);
                    }
                }
                
    Members 0ZabegOpen 0ZabegVznos 0;
                return 
    true;
            }
        } 

  2. 3 пользователей сказали cпасибо anonimniy за это полезное сообщение:

    Amfy (12.08.2015), georJik (24.07.2015), kayeezy (24.07.2015)

  3. #2
    Проверенный Аватар для georJik
    Регистрация
    07.07.2013
    Сообщений
    1,370
    Репутация: 427

    Звание: - очень-очень хороший человек

    Re: [SCR] [ALL] Система забегов от Администрации

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

  4. #3
    Активный пользователь Аватар для anonimniy
    Регистрация
    20.08.2011
    Адрес
    St. Petersburg
    Сообщений
    466
    Репутация: 28

    Звание: на пути к лучшему

    Re: [SCR] [ALL] Система забегов от Администрации

    Цитата Сообщение от georJik Посмотреть сообщение
    Оформил хорошо, молодец, хорошо что указал что используешь чьи-то работы в своей, это ценится.
    Но вот с кодом небольшой арбуз. Сейчас чутка помогу тебе его улучшить.
    Спасибо. Давай. Но я только сейчас понял, что лучше на switch/case сделать. Сейчас займусь.

  5. #4
    Проверенный Аватар для georJik
    Регистрация
    07.07.2013
    Сообщений
    1,370
    Репутация: 427

    Звание: - очень-очень хороший человек

    Re: [SCR] [ALL] Система забегов от Администрации

    Цитата Сообщение от anonimniy Посмотреть сообщение
    Спасибо. Давай. Но я только сейчас понял, что лучше на switch/case сделать. Сейчас займусь.
    Правильно

  6. #5
    Активный пользователь Аватар для anonimniy
    Регистрация
    20.08.2011
    Адрес
    St. Petersburg
    Сообщений
    466
    Репутация: 28

    Звание: на пути к лучшему

    Re: [SCR] [ALL] Система забегов от Администрации

    Обновил.

  7. #6
    Активный пользователь
    Регистрация
    05.10.2011
    Сообщений
    430
    Репутация: 65

    Звание: скоро придёт к известности

    Re: [SCR] [ALL] Система забегов от Администрации

    PHP код:
     format(string,sizeof(string),"%s[%d] ñòàë ïîáåäèòåëåì Çàáåãà. Ïîçäðàâëÿåì!",pInfo[playerid][pName],playerid); 
    Исправь строку

  8. #7
    Активный пользователь Аватар для anonimniy
    Регистрация
    20.08.2011
    Адрес
    St. Petersburg
    Сообщений
    466
    Репутация: 28

    Звание: на пути к лучшему

    Re: [SCR] [ALL] Система забегов от Администрации

    Цитата Сообщение от 7Zip Посмотреть сообщение
    Исправь строку
    Поправил, спасибо.

  9. #8
    Истеричка
    Регистрация
    11.12.2011
    Возраст
    27
    Сообщений
    2,324
    Репутация: 323

    Звание: как роза среди колючек

    Re: [SCR] [ALL] Система забегов от Администрации

    switch(CPash[playerid])
    {
    case 60:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 61;
    SetPlayerCheckpoint(playerid,242.6150,-1798.7765,4.5835,3.0);
    return true;
    }
    case 61:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 62;
    SetPlayerCheckpoint(playerid,274.0659,-1796.0232,4.5818,3.0);
    return true;
    }
    case 62:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 63;
    SetPlayerCheckpoint(playerid,290.0310,-1806.2958,4.5845,3.0);
    return true;
    }
    case 63:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 64;
    SetPlayerCheckpoint(playerid,283.4669,-1822.1028,4.5843,3.0);
    return true;
    }
    case 64:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 65;
    SetPlayerCheckpoint(playerid,263.8086,-1824.0033,4.5846,3.0);
    return true;
    }
    case 65:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 66;
    SetPlayerCheckpoint(playerid,241.9038,-1821.6470,4.5852,3.0);
    return true;
    }
    case 66:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 67;
    SetPlayerCheckpoint(playerid,240.1996,-1801.2089,4.5851,3.0);
    return true;
    }
    case 67:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 68;
    SetPlayerCheckpoint(playerid,267.7746,-1795.9835,4.5847,3.0);
    return true;
    }
    case 68:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 69;
    SetPlayerCheckpoint(playerid,289.9263,-1807.8026,4.5842,3.0);
    return true;
    }
    case 69:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 70;
    SetPlayerCheckpoint(playerid,279.7703,-1823.4070,4.5851,3.0);
    return true;
    }
    case 70:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    CPash[playerid] = 71;
    SetPlayerCheckpoint(playerid,242.3655,-1824.6104,4.5816,3.0);
    return true;
    }
    case 71:
    {
    PlayerPlaySound(playerid, 1139, 0.0,0.0,0.0);
    pInfo[playerid][pCash] += ZabegVznos*Members;
    new string[100];
    format(string,sizeof(string),"%s[%d] стал победителем Забега. Поздравляем!",pInfo[playerid][pName],playerid);
    SendClientMessageToAll(COLOR_ADM,string);
    DisablePlayerCheckpoint(playerid);
    foreach(Player,i)
    {
    if(NaZabege[i] == 1)
    {
    NaZabege[i] = 0;
    TogglePlayerControllable(i,1);
    SetPlayerPos(i, GetPVarFloat(i, "ObrX"), GetPVarFloat(i, "ObrY"), GetPVarFloat(i, "ObrZ"));
    SetPlayerFacingAngle(i, GetPVarFloat(i, "ObrA"));
    SetPlayerVirtualWorld(i, GetPVarInt(i, "ObrVirt"));
    SetPlayerInterior(i, GetPVarInt(i, "ObrInt"));
    DeletePVar(i, "ObrX");
    DeletePVar(i, "ObrY");
    DeletePVar(i, "ObrZ");
    DeletePVar(i, "ObrA");
    DeletePVar(i, "ObrInt");
    DeletePVar(i, "ObrVirt");
    CPash[i] = 0;
    DisablePlayerCheckpoint(i);
    }
    }
    Members = 0;
    ZabegOpen = 0;
    ZabegVznos = 0;
    return true;
    }
    }
    С этим делом можно пошаманить хорошенько.
    Даже нужно.
    Как вариант - координаты для чекпоинтов записать в массив и действовать через switch.
    Как пример:
    PHP код:

    new massколичество строк ][ кол-во координат в строкев твоем случае 3 ] = {
    {
    0.0,0.0,0.0},
    {
    0.0,0.0,0.0}//etc
    };

    switch(
    CPash[playerid]){
    case 
    60..70:{
    PlayerPlaySound(playerid11390.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    new 
    pos CPash[playerid] - 60 ;
    SetPlayerCheckpoint(playeridmasspos ][ ], masspos ][ ], masspos ][ ] ,3.0);
    CPash[playerid]++;
    }
    case 
    71:{
    //твой код
    }

    Пример не идеальный, но всё же.

  10. #9
    Активный пользователь Аватар для anonimniy
    Регистрация
    20.08.2011
    Адрес
    St. Petersburg
    Сообщений
    466
    Репутация: 28

    Звание: на пути к лучшему

    Re: [SCR] [ALL] Система забегов от Администрации

    Цитата Сообщение от Seregamil Посмотреть сообщение
    С этим делом можно пошаманить хорошенько.
    Даже нужно.
    Как вариант - координаты для чекпоинтов записать в массив и действовать через switch.
    Как пример:
    PHP код:

    new massколичество строк ][ кол-во координат в строкев твоем случае 3 ] = {
    {
    0.0,0.0,0.0},
    {
    0.0,0.0,0.0}//etc
    };

    switch(
    CPash[playerid]){
    case 
    60..70:{
    PlayerPlaySound(playerid11390.0,0.0,0.0);
    DisablePlayerCheckpoint(playerid);
    new 
    pos CPash[playerid] - 60 ;
    SetPlayerCheckpoint(playeridmasspos ][ ], masspos ][ ], masspos ][ ] ,3.0);
    CPash[playerid]++;
    }
    case 
    71:{
    //твой код
    }

    Пример не идеальный, но всё же.
    А смысл? Мы же эти координаты используем только один раз.

    upd. все, понял про что ты.

    ________________ Сообщение добавлено в [17:17] ________ Предыдущее сообщение в [15:55] ________________

    Обновил.

  11. #10
    Активный пользователь Аватар для kayeezy
    Регистрация
    15.11.2011
    Адрес
    LA
    Возраст
    31
    Сообщений
    482
    Репутация: 52

    Звание: скоро придёт к известности

    Re: [SCR] [ALL] Система забегов от Администрации

    Годно. foreach не стандартная функция :bn:

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

Похожие темы

  1. [ALL] Вайп для Администрации сервера
    от Yung Lean в разделе Интересные команды
    Ответов: 6
    Последнее сообщение: 08.06.2015, 22:28
  2. Обращение к администрации Adv*nce-RP
    от PawnoKokolotov в разделе Видео
    Ответов: 1
    Последнее сообщение: 17.08.2014, 12:57
  3. [Набор] Набор администрации.
    от Дымок в разделе Вакансии
    Ответов: 25
    Последнее сообщение: 15.10.2013, 20:22

Ваши права

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