Страница 1 из 11
Модератор форума: dr40 
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Вопросы по скриптингу » Real Discoteka (Дискотека, музыка из интернета, работа диджея)
Real Discoteka
Ребят, я вот себе сделал на пляже ЛС танцпол с диджеевским пультом, лазерами :), но я бы хотел еще что-то типа роботы диджея там сделать, чтобы там один человек, который хочет побыть диджеем, подходил к пикапу возле танцпола, ему менялся скин на диджея (например, на ID 19), и он мог подходить к своему пульту, там вводить какую-то команду (например, /playdj), ему появляется окошко, где он вводит прямую ссылку на музыку в Интернете, и эта музыка будет играть на всем танцполе. В инете нигде этого не нашел, к сожалению(( Помогите пожалуйста это сделать, буду очень-очень-очень благодарен!)
06.07.2014 в 21:01
Для начала создай пикап и присвой его переменной

Код

new dancepick;//ко всем new
new playerdj[MAX_PLAYERS];//для проверки на диджея

dancepick = CreatePickup(...)//в OnGameModeInit


Ко всем #define добавь это
Код

#define DJ_URL 2014


Далее в OnPlayerPickupPickup сделай проверку стоит ли игрок у пикапа или нет
Код

if(pickupid == dancepick)
{
SetPlayerSkin(playerid,19);//установка скина
playerdj[playerid] = 1;//для проверки на диджея при вводе команды
}


Далее в OnPlayerCommandText
Код

if(strcmp(cmd, "/playdj", true) == 0)    
{
if(IsPlayerInRangeOfPoint(playerid,Float:range, Float:x, Float:y, Float:z) && playerdj[playerid] == 1)
    {
    ShowPlayerDialog(playerid,DJ_URL,DIALOG_STYLE_INPUT,"Выбор трека","Введите URL вашего трека, чтобы его услышали все!!!\n\n","Ок","Отмена");
    }
}


В OnDialogResponse

Код

if(dialogid == DJ_URL)
{
    if(response)
    {
    for(new i=0; i<MAX_PLAYERS;i++)
     {
     if(IsPlayerInRangeOfPoint(i,Float:range, Float:x, Float:y, Float:z))
       {
        PlayAudioStreamForPlayer(i, inputtext);
       }
     }
    }
}


В общем, система не сложная, главное понять что как работает.
Если код не рабочий, пиши.
06.07.2014 в 21:59
У меня вот такая ошибка вылеает при компилировании:

C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(3248) : error 017: undefined symbol "range"
C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(25975) : error 017: undefined symbol "range"
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

2 Errors.
07.07.2014 в 21:41
В IsPlayerInRangeOfPoint Float:Range замени на 1.0 или 2.0
07.07.2014 в 22:14
хм, у меня такого паблика в павно вообще нет..

Добавлено (07.07.2014, 22:50)
---------------------------------------------
[S]ilverbac[k], напиши пожалуйста сюда или в лс свой скайп, там подумаем smile

07.07.2014 в 22:50
IsPlayerInRangeOfPoint это не паблик это функция которую я в своем примере использовал, там указано id игрока, радиус действия и коорды.
Float:Range и есть радиус действия, просто вместо Float:Range поставь 1.0 или 2.0

p.s.: В скайпе не отвечаю.
07.07.2014 в 23:09
Сделал так как Вы сказали, но:

C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(3248) : error 017: undefined symbol "x"
C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(25975) : error 017: undefined symbol "x"
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

2 Errors.
07.07.2014 в 23:23
Вместо Float:x,Float:y,Float:z нужно поставить свои координаты
07.07.2014 в 23:31
Ура, все получилось! smile
Сделайте пожалуйста еще такое:
1) Эту музыку с танцплощадки слышно аж до мерии :), а как можно ограничить радиус звучания (чтобы звучало только в некотором радиусе от танцпола или пульта)?;
2) Когда я подхожу к пульту в обычном скине и набираю команду /playdj, то окошко, где вводится ссылка песни, всеравно выскакивает, а как сделать, чтобы оно выскакивало только у диджея, который переоделся (сменил скин) у пикапа?;
3) Какой код еще нужно вставить, чтобы человек, который на тот момент был dj-ем, снова подошел к тому же пикапу, и эму вернулся тот же скин, что был до этого? Ну и чтобы у него не было права доступа к пульту (тоесть чтобы ему не выскакивало окошко, где вводится URL песни);
4) Ну и чтобы на танцполе был только один диджей, тоесть, чтобы когда там он уже есть, то когда другой человек подходит к пикапу, ему не меняется скин на dj-я, а в чате пишет что-то типа, что там dj уже есть (или без этого).
Помогите пожалуйста с этим. smile
P.S. и еще такое: когда тот игрок, который устроился диджеем, отошел на достаточно большое расстояние от пульта и танцпола, то чтобы его работа dj-я автоматически прекрашщалась, ему на месте возвращался его скин, и чтобы другой игрок возле танцпола смог наступить на тот же пикап, и уже ему выдавался скин и работа dj-я. smile
08.07.2014 в 00:14
В OnDialogResponse Float:range надо установить примерно 15.0

Ограничение кол-ва диджеев:

Ко всем new

Код

new bool:dj;


Вместо старой команды:

Код

if(strcmp(cmd, "/playdj", true) == 0)      
{   
if(dj == true)   
   {
   SendClientMessage(playerid,0xFF0000FF,"Место диджея уже занято!!!");
   }
if(playerdj[playerid] == 1)
   {
   if(IsPlayerInRangeOfPoint(playerid,Float:range, Float:x, Float:y, Float:z))   
      {   
      ShowPlayerDialog(playerid,DJ_URL,DIALOG_STYLE_INPUT,"Выбор трека","Введите URL вашего трека, чтобы его услышали все!!!\n\n","Ок","Отмена");   
      }   
   }
}   


Для возврата прежнего скина:

Ко всем new

Код

new playerskinvar[MAX_PLAYERS];
new backskinpick;


В OnGameModeInit

Код

backskinpick = CreatePickup(...);//пикап для возврата прежнего скина


В OnPlayerPickUpPickup вместо предыдущей части кода

Код

if(pickupid == dancepick)   
{   
playerskinvar[playerid] = GetPlayerSkin(playerid);
SetPlayerSkin(playerid,19);//установка скина   
playerdj[playerid] = 1;//для проверки на диджея при вводе команды   
dj = true;
}   
else if(pickupid == backskinpick)
{
SetPlayerSkin(playerid,playerskinvar[playerid]);//возврат старого скина
playerdj[playerid] = 0;//игрок больше не диджей
dj = false;
}
08.07.2014 в 00:34
Все вроде бы правильно вписал, но вот: sad

C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(18321) : error 033: array must be indexed (variable "dancepick")
C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(18328) : error 033: array must be indexed (variable "backskinpick")
C:\Users\D\Desktop\Real World RP\gamemodes\realworld.pwn(25993) : warning 202: number of arguments does not match definition
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

2 Errors.
08.07.2014 в 01:10
Скинь строку 25993
08.07.2014 в 11:37
Этой строки вообще нету в моде, даже самого числа 25993 нет.. Тоже самое с 18321 и 18328 - этих числ нету в моде.
08.07.2014 в 16:00
08.07.2014 в 16:24
Тема исчерпала себя . Закрыто !!!!
20.07.2014 в 17:32
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Вопросы по скриптингу » Real Discoteka (Дискотека, музыка из интернета, работа диджея)
Страница 1 из 11
Поиск: