PDA

Просмотр полной версии : [Вопрос] Скрытие тд



Vasya_Pupkin
01.08.2016, 20:21
Всем привет.
вот код в нем когда ты в ходишь в зеленую зону появляется надпись а когда покидаешь она не удаляется как сделать чтобы удалялась

if(GetPlayerWeapon(playerid) != 0)
{
for(new x; x<MAX_GREEN_ZONE; x++)
{
if(green_zone_info[x][gz_distance] == 0.0) continue;
if(GetPlayerVirtualWorld(playerid) != green_zone_info[x][gz_virtualworld] || !PlayerToPoint(50.0,playerid,green_zone_info[x][gz_pos_x],green_zone_info[x][gz_pos_y],green_zone_info[x][gz_pos_z])) continue;
TextDrawShowForPlayer(playerid, greenzone);
SetPlayerArmedWeapon(playerid, 0);
break;
}
}


строчка удаления

TextDrawHideForPlayer(playerid, greenzone);

$continue$
01.08.2016, 20:49
Как работает распознавание зеленой зоны? Через динамические зоны?

Vasya_Pupkin
01.08.2016, 21:01
Как работает распознавание зеленой зоны? Через динамические зоны?

да вот

!PlayerToPoint(50.0,playerid,green_zone_info[x][gz_pos_x],green_zone_info[x][gz_pos_y],green_zone_info[x][gz_pos_z])) continue;

_lizard
01.08.2016, 21:17
Вот вам вариант по-лучше:



new green_zone[MAX_GREEN_ZONE]; // Ко всем глобальным переменным
for(new x = 0; x < MAX_GREEN_ZONE; x++) green_zone[x] = CreateDynamicSphere(green_zone_info[x][gz_pos_x],green_zone_info[x][gz_pos_y],green_zone_info[x][gz_pos_z], 50.0);

public OnPlayerEnterDynamicArea(playerid, STREAMER_TAG_AREA areaid)
{
if(0 < STREAMER_TAG_AREA areaid < green_zone[MAX_GREEN_ZONE])
{
TextDrawShowForPlayer(playerid, greenzone);
SetPlayerArmedWeapon(playerid, 0);
}
return 1;
}
public OnPlayerLeaveDynamicArea(playerid, STREAMER_TAG_AREA areaid)
{
if(0 < STREAMER_TAG_AREA areaid < green_zone[MAX_GREEN_ZONE]) TextDrawHideForPlayer(playerid, greenzone);
return 1;
}

Vasya_Pupkin
01.08.2016, 21:32
error 032: array index out of bounds (variable "green_zone")

if(0 < STREAMER_TAG_AREA areaid < green_zone[MAX_GREEN_ZONE]) TextDrawHideForPlayer(playerid, greenzone);


error 032: array index out of bounds (variable "green_zone")

if(0 < STREAMER_TAG_AREA areaid < green_zone[MAX_GREEN_ZONE])

ошибки


в #define MAX_GREEN_ZONE 100
стоит

Vasya_Pupkin
01.08.2016, 22:49
Вот добавил в секундный таймер (т.к в OnGameModeInit) не работало, а в секундном таймере заработало

//==========================================================================
for(new x = 0; x < MAX_GREEN_ZONE; x++) green_zone[x] = CreateDynamicSphere(green_zone_info[x][gz_pos_x],green_zone_info[x][gz_pos_y],green_zone_info[x][gz_pos_z], green_zone_info[x][gz_distance]);
//==========================================================================

В OnPlayerLeaveDynamicArea


//==========================================================================
for(new x = 0; x < MAX_GREEN_ZONE; x++)
{
if(0 < STREAMER_TAG_AREA areaid < green_zone[x]) TextDrawHideForPlayer(playerid, greenzone);
}
//==========================================================================

В OnPlayerEnterDynamicArea

//==========================================================================
for(new x = 0; x < MAX_GREEN_ZONE; x++)
{
if(0 < STREAMER_TAG_AREA areaid < green_zone[x])
{
TextDrawShowForPlayer(playerid, greenzone);
SetPlayerArmedWeapon(playerid, 0);
}
}
//==========================================================================
и потом

Появляется это и отсоединяет меня от сервера

[warning] client exceeded 'ackslimit' *.*.*.*:**** (7641) Limit: 3000/sec

vovandolg
01.08.2016, 23:35
Вот добавил в секундный таймер (т.к в OnGameModeInit) не работало, а в секундном таймере заработало

Ты же таймер без повтора сделал я надеюсь?

Vasya_Pupkin
02.08.2016, 01:14
Ты же таймер без повтора сделал я надеюсь?

С повтором, уже переделал ) все работает спс))

vovandolg
02.08.2016, 02:07
Ты просто по сути создавал количество сфер за 1 секунду в кол-ве MAX_GREEN_ZONE, и чем больше серв работал тем больше и нагрузки ловил, а когда ты оказался в этих сферах проходило много инфы между тобой и сервером, вот и кикало тебя как возможного ддосера)