PDA

Просмотр полной версии : [Вопрос] FS veh radio



vovandolg
14.12.2015, 17:26
Ставил когда скрипт этот себе и заметил что всё хорошо кроме одного..
Суть скрипта: Радио в авто, радио слышно кому то когда он стоит не далеко от кара в котором играет музыка
Так вот когда уходишь в афк я заметил в чате время всё зацикливается и когда выходишь оно одинаковое
допустим я ушёл в афк и у других в чате это так выглядит:

00:01 Ушёл в афк
00:02 На сервере что то случилось
00:03 Ещё что то
00:04 Вышел с афк

А у меня это вот так выглядит:


00:01 Ушёл в афк
00:04 На сервере что то случилось
00:04 Ещё что то
00:04 Вышел с афк

(Сам вопрос)>То есть зацикливается на одном времени, вот так и с радио этим пока ушёл в афк оно то подъехало то отъехало и радио включалось выключалось овер9000 раз, при том ещё глюк бывает что не проходит и музыка флудом в чате сто раз воспроизводит и приходится перезаходить на сервер...

Вот сам FS этого радио:



#include <a_samp>
#define MAX_RAD_NAME (16) /// ìàêñ. èìÿ ðàäèî ( íå ññûëêà )
#define MAX_RADIO (7) /// ìàêñ. ðàäèî
#define L_DIAG (9200) /// èçïîëüçóåìûé äèàëîã
#define TIME_UPDATE (1500) /// âðåìÿ îáíîâëåíèÿ òàéìåðà
//-------------------------------------
enum vehplayer {
Float:Poos[3],
SeeVehicle,
} ;
new VPInfo [ MAX_PLAYERS ] [ vehplayer ] ;
//------------------------------------------
new RadioVeh [ MAX_VEHICLES ] = { -1, ... },
MaxPlayers,
timer
;
new Radio [ MAX_RADIO ] [ 2 ] [ 288 ] = {
{ "Track: Êàñòà", "http://rghost.ru/download/75RxL2fgd/b871cb41a4012d04ada78975805c480217e150cf/Kasta.mp3" },
{ "Track: ßðìàê", "http://rghost.ru/download/7N5V72nwW/9fbedcbfa2e1b54627f2942808cacab7e2446e6c/Yarmak.mp3" },
{ "Track: Ãàìîðà", "http://ucontent.mobi/ucontent/u3048301/f1146233/52a1b3d8c43c36520ceaac86192bfff0/Gamora_-_YAd_128kbps.mp3" },
{ "Radio: KaZanTip", "http://live26.kiwi.kz:8000/radiokazantip" },
{ "Radio: Rock", "http://radio.zaycev.fm:9002/alternative/ZaycevFM(96)" },
{ "Radio: Club", "http://radio.zaycev.fm:9002/electronic/ZaycevFM(96)" },
{ "Radio: RnB", "http://radio.zaycev.fm:9002/rnb/ZaycevFM(96)" }
} ;
//==============================================================================
public OnFilterScriptInit ( ) {
MaxPlayers = GetMaxPlayers() - 1;
timer = SetTimer("Global", true, TIME_UPDATE ) ;
return true ;
}
public OnFilterScriptExit ( ) KillTimer ( timer ) ;

public OnPlayerConnect ( playerid ) {
VPInfo [playerid] [SeeVehicle] = -1;
return true ;
}
public OnPlayerCommandText( playerid, cmdtext[] )
{
if(!strcmp(cmdtext[1], "autoradio", true))
{
if(!IsPlayerInAnyVehicle(playerid) ) return true ;
new _str [ MAX_RADIO * MAX_RAD_NAME + 2] ;
for( new _r; _r < MAX_RADIO ; ++ _r) strcat( _str, Radio[_r][0] ), strcat( _str,"\n" );
strcat( _str,"Вырубить\n" );
ShowPlayerDialog(playerid, L_DIAG, DIALOG_STYLE_LIST, "La1ghter", _str, "КЛац", "Офф");
return true ;
}
return false ;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if( dialogid == L_DIAG && response )
{
if ( listitem < MAX_RADIO )
{
RadioVeh[GetPlayerVehicleID(playerid)] = listitem;
for (new i; i <= MaxPlayers ; ++ i) {
if(!IsPlayerConnected(i) || GetPlayerVehicleID(i) != GetPlayerVehicleID(playerid)) continue;
PlayAudioStreamForPlayer(i, Radio [ listitem ] [ 1 ]);
}
}
else if ( listitem >= MAX_RADIO )
{
RadioVeh[GetPlayerVehicleID(playerid)] = -1 ;
for (new i; i <= MaxPlayers ; ++ i) {
if(!IsPlayerConnected(i) || GetPlayerVehicleID(i) != GetPlayerVehicleID(playerid)) continue;
StopAudioStreamForPlayer(i) ;
}
}
return true ;
}
return false;
}
public OnPlayerExitVehicle ( playerid, vehicleid ) {
if ( RadioVeh[vehicleid] != -1 ) StopAudioStreamForPlayer(playerid);
return true ;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) {
if( RadioVeh[GetPlayerVehicleID(playerid)] != -1) {
StopAudioStreamForPlayer(playerid),
VPInfo[playerid] [SeeVehicle] = -1 ;
PlayAudioStreamForPlayer(playerid, Radio [ RadioVeh [GetPlayerVehicleID(playerid)] ] [ 1 ] );
}
}
return true ;
}
Global() ;
public Global ( )
{
new
vehid, bool: find = false, Float: Ve[3]
;
for (new playerid; playerid <= MaxPlayers ; ++ playerid)
{
if( !IsPlayerConnected(playerid) || IsPlayerInAnyVehicle(playerid) || GetPlayerInterior(playerid) || GetPlayerVirtualWorld(playerid) ) continue ;
if( VPInfo[playerid] [SeeVehicle] != -1 )
{
GetVehiclePos (VPInfo[playerid] [SeeVehicle], Ve[0],Ve[1],Ve[2] ) ;
if( !IsPlayerInRangeOfPoint(playerid, 7.0, VPInfo[playerid][Poos] [0],VPInfo[playerid][Poos][1],VPInfo[playerid][Poos][2]) || !IsPlayerInRangeOfPoint(playerid, 7.0, Ve[0],Ve[1],Ve[2]) )
{
StopAudioStreamForPlayer(playerid) ;
VPInfo[playerid] [SeeVehicle] = -1 ;
}
}
for( new _v = 1; _v < MAX_VEHICLES ; ++ _v ) {
if ( RadioVeh[_v] == -1 || !IsVehicleStreamedIn(_v, playerid) ) continue ;
GetVehiclePos( _v, Ve[0],Ve[1],Ve[2] ) ;
if( !IsPlayerInRangeOfPoint(playerid, 7.0,Ve[0],Ve[1],Ve[2]) ) continue ;
for (new z; z != 3; ++ z) VPInfo[playerid] [Poos] [z] = Ve[z] ;
vehid = _v, find = true ;
break ;
}
if( vehid != VPInfo[playerid] [SeeVehicle] && find && !IsPlayerInAnyVehicle(playerid) ) {
VPInfo[playerid] [SeeVehicle] = vehid ;
PlayAudioStreamForPlayer(playerid, Radio [RadioVeh[vehid]][1], VPInfo[playerid] [Poos] [0],VPInfo[playerid][Poos][1],VPInfo[playerid] [Poos][2],7.0,1);
}
}
return true ;
}

VVWVV
14.12.2015, 17:43
1. Поставьте проверку на «AFK», после чего отключайте стрим потока.
2. Используйте OnPlayerStreamIn, OnPlayerStreamOut, OnVehicleStreamIn, OnVehicleStreamOut, а не функцию IsVehicleStreamedIn в секундном таймере.
3. Прочитайте темы по оптимизации, а также Мифы от Danial’a.
4. Цикл (перебор всех игроков) в цикле (перебор всех машин) — не очень хорошая идея (Улучшить производительность: См. п. 2).
5. Очень много не нужных переменных.

vovandolg
19.12.2015, 21:23
Перечислю 50 рублей тому кто доведёт мне этот скрипт до ума :ok:
Помогите по братски)