Просмотр полной версии : [Вопрос] Пропадают объекты
Приветствую всех
Вопрос такой
Имеется таймер на 250мс, который повторяется и внутри которого код:
switch(color_rainbow)
{
case 1:
{
if(IsValidDynamicObject(object_rainbow_player[playerid][0])) DestroyDynamicObject(object_rainbow_player[playerid][0]);
if(IsValidDynamicObject(object_rainbow_player[playerid][1])) DestroyDynamicObject(object_rainbow_player[playerid][1]);
GetPlayerPos(playerid, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2]);
object_rainbow_player[playerid][0] = CreateDynamicObject(19297, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
object_rainbow_player[playerid][1] = CreateDynamicObject(19298, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
color_rainbow = 2;
}
case 2:
{
if(IsValidDynamicObject(object_rainbow_player[playerid][2])) DestroyDynamicObject(object_rainbow_player[playerid][2]);
GetPlayerPos(playerid, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5]);
object_rainbow_player[playerid][2] = CreateDynamicObject(19298, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5], 0.0, 0.0, 0.0);
color_rainbow = 1;
}
Соответственно меняется объекты каждые 250мс. Спустя примерно 2-3 минуты работы данного таймера - начинают понемногу исчезать объекты
Как я понимаю - скорее всего лимит превышается, но не понимаю каким образом, ведь объекты то я удаляю перед созданием
Надеюсь на вашу помощь
Попробуй создать объект и проверить значение, которое вернёт IsValidDynamicObject.
Объекты точно удаляются?
Проверял, точно удаляются
Скинь полностью код системы в личку. Желательно в виде рабочего FS. Ну или подожди ещё кого. Мож найдётся тот, кто сможет по этому куску кода причину найти
MISTER_GONWIK
02.05.2017, 10:47
добавь break; в самый конец case 1:
switch(color_rainbow)
{
case 1:
{
if(IsValidDynamicObject(object_rainbow_player[playerid][0])) DestroyDynamicObject(object_rainbow_player[playerid][0]);
if(IsValidDynamicObject(object_rainbow_player[playerid][1])) DestroyDynamicObject(object_rainbow_player[playerid][1]);
GetPlayerPos(playerid, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2]);
object_rainbow_player[playerid][0] = CreateDynamicObject(19297, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
object_rainbow_player[playerid][1] = CreateDynamicObject(19298, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
color_rainbow = 2;
break;
}
case 2:
{
if(IsValidDynamicObject(object_rainbow_player[playerid][2])) DestroyDynamicObject(object_rainbow_player[playerid][2]);
GetPlayerPos(playerid, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5]);
object_rainbow_player[playerid][2] = CreateDynamicObject(19298, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5], 0.0, 0.0, 0.0);
color_rainbow = 1;
}
}
vasyok28
02.05.2017, 13:38
Возможно в зоне стрима много обьектов, пробуй создать обьекты без стриммера
добавь break; в самый конец case 1:
Это ж не цикл, зачем
- - - Добавлено - - -
Возможно в зоне стрима много обьектов, пробуй создать обьекты без стриммера
Создавал, не менялось ничего
Уверен, что таймер всегда 1 работает? Может где-то повторно запускаешь?
Ну вот тебе простая команда
if (strcmp("/count", cmdtext, true) == 0)
{
new string[11];
format(string, sizeof(string), "%d", CountDynamicObjects());
SendClientMessage(playerid, -1, string);
return 1;
}
Введи её при запуске таймера и когда объекты начнут пропадать.
[15:59:07] 6682
[15:59:09] 6682
[15:59:15] 6691
[15:59:17] 6690
[15:59:20] 6685
[15:59:22] 6676
[15:59:26] 6672
[15:59:28] 6670
6682 - это короче пока не включал систему, то бишь - все объектов на сервере сколько есть
дальше - уже с включенной системой
MISTER_GONWIK
02.05.2017, 17:27
Это ж не цикл, зачем
- - - Добавлено - - -
Создавал, не менялось ничего
ну потому что если не прервать case то будут срабатывать и другие case (или ты хочешь сказать что у павн с этим всё норм?)
ну потому что если не прервать case то будут срабатывать и другие case (или ты хочешь сказать что у павн с этим всё норм?)
Если ты оператор switch будешь останавливать break - то у тебя вылезет ошибка:
: error 024: "break" or "continue" is out of context
vasyok28
02.05.2017, 18:03
Логируй координаты создание обьекта, возможно создаються на 0.0
- - - Добавлено - - -
ну потому что если не прервать case то будут срабатывать и другие case (или ты хочешь сказать что у павн с этим всё норм?)
В пхп сработает другие, в павн работает как else if
Логируй координаты создание обьекта, возможно создаються на 0.0
Погляди, я там выше скинул результаты подсчётов объектов до включения системы и после
Удаляются лишние объекты видимо, хотя по коду вроде как всё верно
vasyok28
02.05.2017, 18:24
Блин не заметил сразу, после удаление обьектов object_rainbow_player[playerid][0] = INVALID_OBJECT_ID;, ...
[17:28:10] 6677
[17:28:11] 6677
[17:28:12] 6677
[17:28:14] 6677
[17:28:17] 6677
[17:28:18] 6677
[17:28:24] 6677
[17:28:30] 6685
[17:28:32] 6684
[17:28:34] 6678
[17:28:36] 6675
[17:28:40] 6671
[17:28:43] 6665
[17:28:49] 6658
[17:28:52] 6650
[17:28:58] 6642
[17:29:07] 6614
[17:29:11] 6612
[17:29:12] 6612
[17:29:14] 6612
[17:29:18] 6612
vasyok28
02.05.2017, 18:34
[17:28:10] 6677
[17:28:11] 6677
[17:28:12] 6677
[17:28:14] 6677
[17:28:17] 6677
[17:28:18] 6677
[17:28:24] 6677
[17:28:30] 6685
[17:28:32] 6684
[17:28:34] 6678
[17:28:36] 6675
[17:28:40] 6671
[17:28:43] 6665
[17:28:49] 6658
[17:28:52] 6650
[17:28:58] 6642
[17:29:07] 6614
[17:29:11] 6612
[17:29:12] 6612
[17:29:14] 6612
[17:29:18] 6612
Так сделал?
switch(color_rainbow)
{
case 1:
{
if(IsValidDynamicObject(object_rainbow_player[playerid][0]))
{
DestroyDynamicObject(object_rainbow_player[playerid][0]);
object_rainbow_player[playerid][0] = INVALID_OBJECT_ID;
}
if(IsValidDynamicObject(object_rainbow_player[playerid][1]))
{
DestroyDynamicObject(object_rainbow_player[playerid][1]);
object_rainbow_player[playerid][1] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2]);
object_rainbow_player[playerid][0] = CreateDynamicObject(19297, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
object_rainbow_player[playerid][1] = CreateDynamicObject(19298, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
color_rainbow = 2;
}
case 2:
{
if(IsValidDynamicObject(object_rainbow_player[playerid][2]))
{
DestroyDynamicObject(object_rainbow_player[playerid][2]);
object_rainbow_player[playerid][2] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5]);
object_rainbow_player[playerid][2] = CreateDynamicObject(19298, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5], 0.0, 0.0, 0.0);
color_rainbow = 1;
}
Сделай вот так
new Float:player_pos_rainbow[MAX_PLAYERS][18],
object_rainbow_player[MAX_PLAYERS][9];
public OnPlayerConnect(playerid)
{
if(GetPVarInt(playerid, "RainbowTimer"))
{
for(new i; i < sizeof(object_rainbow_player[]); i++)
{
if(object_rainbow_player[playerid][i] == INVALID_OBJECT_ID)
continue;
DestroyDynamicObject(object_rainbow_player[playerid][i]);
object_rainbow_player[playerid][i] = INVALID_OBJECT_ID;
}
}
return 1;
}
stock ToggleRainbowTimerForPlayer(playerid)
{
if(GetPVarInt(playerid, "RainbowTimer"))
{
DeletePVar(playerid, "RainbowTimer");
for(new i; i < sizeof(object_rainbow_player[]); i++)
{
if(object_rainbow_player[playerid][i] == INVALID_OBJECT_ID)
continue;
DestroyDynamicObject(object_rainbow_player[playerid][i]);
object_rainbow_player[playerid][i] = INVALID_OBJECT_ID;
}
}
else
{
SetTimerEx("change_color_rainbow", 100, false, "ii", playerid, 1);
SetPVarInt(playerid, "RainbowTimer", 1);
}
return 1;
}
forward change_color_rainbow(playerid, color_rainbow);
public change_color_rainbow(playerid, color_rainbow)
{
if(!GetPVarInt(playerid, "RainbowTimer"))
return 1;
switch(color_rainbow)
{
case 1:
{
if(object_rainbow_player[playerid][2] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][2]);
object_rainbow_player[playerid][2] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5]);
object_rainbow_player[playerid][2] = CreateDynamicObject(19298, player_pos_rainbow[playerid][3], player_pos_rainbow[playerid][4], player_pos_rainbow[playerid][5], 0.0, 0.0, 0.0);
}
case 2:
{
if(object_rainbow_player[playerid][7] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][7]);
object_rainbow_player[playerid][7] = INVALID_OBJECT_ID;
}
if(object_rainbow_player[playerid][8] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][8]);
object_rainbow_player[playerid][8] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][15], player_pos_rainbow[playerid][16], player_pos_rainbow[playerid][17]);
object_rainbow_player[playerid][7] = CreateDynamicObject(19296, player_pos_rainbow[playerid][15], player_pos_rainbow[playerid][16], player_pos_rainbow[playerid][17], 0.0, 0.0, 0.0);
object_rainbow_player[playerid][8] = CreateDynamicObject(19298, player_pos_rainbow[playerid][15], player_pos_rainbow[playerid][16], player_pos_rainbow[playerid][17], 0.0, 0.0, 0.0);
}
case 3:
{
if(object_rainbow_player[playerid][4] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][4]);
object_rainbow_player[playerid][4] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][9], player_pos_rainbow[playerid][10], player_pos_rainbow[playerid][11]);
object_rainbow_player[playerid][4] = CreateDynamicObject(19296, player_pos_rainbow[playerid][9], player_pos_rainbow[playerid][10], player_pos_rainbow[playerid][11], 0.0, 0.0, 0.0);
}
case 4:
{
if(object_rainbow_player[playerid][5] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][5]);
object_rainbow_player[playerid][5] = INVALID_OBJECT_ID;
}
if(object_rainbow_player[playerid][6] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][6]);
object_rainbow_player[playerid][6] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][12], player_pos_rainbow[playerid][13], player_pos_rainbow[playerid][14]);
object_rainbow_player[playerid][5] = CreateDynamicObject(19296, player_pos_rainbow[playerid][12], player_pos_rainbow[playerid][13], player_pos_rainbow[playerid][14], 0.0, 0.0, 0.0);
object_rainbow_player[playerid][6] = CreateDynamicObject(19297, player_pos_rainbow[playerid][12], player_pos_rainbow[playerid][13], player_pos_rainbow[playerid][14], 0.0, 0.0, 0.0);
}
case 5:
{
if(object_rainbow_player[playerid][3] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][3]);
object_rainbow_player[playerid][3] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][6], player_pos_rainbow[playerid][7], player_pos_rainbow[playerid][8]);
object_rainbow_player[playerid][3] = CreateDynamicObject(19297, player_pos_rainbow[playerid][6], player_pos_rainbow[playerid][7], player_pos_rainbow[playerid][8], 0.0, 0.0, 0.0);
}
case 6:
{
if(object_rainbow_player[playerid][0] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][0]);
object_rainbow_player[playerid][0] = INVALID_OBJECT_ID;
}
if(object_rainbow_player[playerid][1] != INVALID_OBJECT_ID)
{
DestroyDynamicObject(object_rainbow_player[playerid][1]);
object_rainbow_player[playerid][1] = INVALID_OBJECT_ID;
}
GetPlayerPos(playerid, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2]);
object_rainbow_player[playerid][0] = CreateDynamicObject(19297, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
object_rainbow_player[playerid][1] = CreateDynamicObject(19298, player_pos_rainbow[playerid][0], player_pos_rainbow[playerid][1], player_pos_rainbow[playerid][2], 0.0, 0.0, 0.0);
}
}
SetTimerEx("change_color_rainbow", 100, false, "ii", playerid, (++color_rainbow > 6 ? 1 : color_rainbow));
return 1;
}
Стартуй таймер так
ToggleRainbowTimerForPlayer(playerid)
Если и после этого будет исчезать, значит дело в чём-то другом, ибо у этот код число объектов оставляет преждним даже после отключения таймера с помощью повторного вызова ToggleRainbowTimerForPlayer
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot