Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Ошибка , которая привела к крашу сервера !
panorama Дата: Пятница, 16.08.2013, 06:36:26 | Сообщение # 1
Сообщений: 203
Репутация: 2 [ +/- ]
Здравствуйте , буквально сегодня впервые за полтора месяца упал сервер , с постоянно повторяющейся ошибкой .
Код
L 08/15/2013 - 22:20:33: [SM] Plugin encountered error 15: Array index is out of bounds
L 08/15/2013 - 22:20:33: [SM] Displaying call stack trace for plugin "zombie-plague.smx":
L 08/15/2013 - 22:20:33: [SM]   [0]  Line 404, ue/lasermine.inc::RemoveBeamEntity()
L 08/15/2013 - 22:20:33: [SM]   [1]  Line 368, ue/lasermine.inc::EntOut_OnTouchPole()

Вот эта ошибка повторяется буквально каждую секунду .
Код

L 08/15/2013 - 22:24:30: [SM] Plugin encountered error 15: Array index is out of bounds
L 08/15/2013 - 22:24:30: [SM] Displaying call stack trace for plugin "zombie-plague.smx":
L 08/15/2013 - 22:24:30: [SM]   [0]  Line 404, zplague/lasermine.inc::RemoveBeamEntity()
L 08/15/2013 - 22:24:30: [SM]   [1]  Line 384, zplague/lasermine.inc::OnTakeDamageLaser()

Выдается она именно при удалении мины .

Код

RemoveBeamEntity(beam_ent)
{
     if (IsValidEntity(beam_ent))
     {
         UnhookSingleEntityOutput(beam_ent, "OnTouchedByEntity", EntOut_OnTouchPole);

         AcceptEntityInput(beam_ent, "Kill");
         g_SavedEntityRef[beam_ent] = 0;
         g_TripmineOfBeam[beam_ent] = 0;
     }
}
 
Scarface_slv Дата: Пятница, 16.08.2013, 11:09:36 | Сообщение # 2
Сообщений: 737
Репутация: 61 [ +/- ]
В ошибке так Array index is out of bounds - Индекс массива выходит за границы
Либо beam_ent не правильно задан, большой. Либо массив в переменной маловат


Сообщение отредактировал Scarface_slv - Пятница, 16.08.2013, 11:13:52
 
panorama Дата: Пятница, 16.08.2013, 14:03:50 | Сообщение # 3
Сообщений: 203
Репутация: 2 [ +/- ]
Цитата (Scarface_slv)
В ошибке так Array index is out of bounds - Индекс массива выходит за границы
Либо beam_ent не правильно задан, большой. Либо массив в переменной маловат

Но при выполнении данной функции все срабатывает как было задумано !
Вряд Ли beam_ent неправильный .
Цитата (Scarface_slv)
Либо массив в переменной маловат
Как это понять ? В смысле массив маловат ?
 
ThRunningMan Дата: Пятница, 16.08.2013, 14:21:39 | Сообщение # 4
Сообщений: 140
Репутация: 12 [ +/- ]
Скорее не правильно задан массив должен быть 2048 ентитей

Добавлено (16.08.2013, 14:21:39)
---------------------------------------------
делаешь опрделение в начале
#define MAXENTITIES 2048
new index_mine[MAXENTITIES+1];
возможно нужно так...хотя также возможно ошибка не в том что ты выложил а в функции EntOut_OnTouchPole()
Ибо компилятор просто тебе указывает так сказать путь

 
panorama Дата: Пятница, 16.08.2013, 14:21:49 | Сообщение # 5
Сообщений: 203
Репутация: 2 [ +/- ]
Цитата (ThRunningMan)
Скорее не правильно задан массив должен быть 2048 ентитей

Нет массив правильный
Код
#define MAXENTITIES     2048
 
ThRunningMan Дата: Пятница, 16.08.2013, 14:26:05 | Сообщение # 6
Сообщений: 140
Репутация: 12 [ +/- ]
В таком случае, если это плагин мин, он очень динамический, возможно просто перполнение массива ентитей в самой контре, в такой случае когда убиваешь убивай ее полностью все ее подобия и так далее, я эт оиспользовал в своей плагине мин и в других плагинах также делают AcceptEntityInput(beam_ent, "KillHierarchy"); вместо AcceptEntityInput(beam_ent, "Kill");
Ентити также убьется все будет также, но она удалится полностью
 
panorama Дата: Пятница, 16.08.2013, 14:45:57 | Сообщение # 7
Сообщений: 203
Репутация: 2 [ +/- ]
Цитата (ThRunningMan)
В таком случае, если это плагин мин, он очень динамический, возможно просто перполнение массива ентитей в самой контре, в такой случае когда убиваешь убивай ее полностью все ее подобия и так далее, я эт оиспользовал в своей плагине мин и в других плагинах также делают AcceptEntityInput(beam_ent, "KillHierarchy"); вместо AcceptEntityInput(beam_ent, "Kill");
Ентити также убьется все будет также, но она удалится полностью

Я попробую сейчас и отпишусь !

Добавлено (16.08.2013, 14:45:29)
---------------------------------------------
В итоге получается вот

Код

L 08/16/2013 - 18:44:41: [SM] Plugin encountered error 15: Array index is out of bounds
L 08/16/2013 - 18:44:41: [SM] Displaying call stack trace for plugin "mines.smx":
L 08/16/2013 - 18:44:41: [SM]   [0]  Line 404, lasermine.inc::RemoveBeamEntity()
L 08/16/2013 - 18:44:41: [SM]   [1]  Line 384, lasermine.inc::OnTakeDamageLaser()

Добавлено (16.08.2013, 14:45:57)
---------------------------------------------
Удаляю мину вот так

Код


RemoveBeamEntity(beam_ent)
{
     if (IsValidEntity(beam_ent))
     {
         UnhookSingleEntityOutput(beam_ent, "OnTouchedByEntity", EntOut_OnTouchPole);

         // RemoveEdict(beam_ent);
   AcceptEntityInput(beam_ent, "KillHierarchy");
         g_SavedEntityRef[beam_ent] = 0;
         g_TripmineOfBeam[beam_ent] = 0;
     }
}
 
ThRunningMan Дата: Пятница, 16.08.2013, 14:55:28 | Сообщение # 8
Сообщений: 140
Репутация: 12 [ +/- ]
Замени везде где у тебя убивается мина киллов на киллхерарчи
На самом деле сложно быт ьэкстрасенсом и догадыватсья чт оу тебя там за код...
Я не прошу его выкладывать, но и гадать тоже не хочется мне, я лишь предполагаю что может быть и не более того, ты можеш ьприменять их, а может и нет...


Сообщение отредактировал ThRunningMan - Пятница, 16.08.2013, 14:57:39
 
panorama Дата: Пятница, 16.08.2013, 15:16:21 | Сообщение # 9
Сообщений: 203
Репутация: 2 [ +/- ]
Цитата (ThRunningMan)
Замени везде где у тебя убивается мина киллов на киллхерарчи
На самом деле сложно быт ьэкстрасенсом и догадыватсья чт оу тебя там за код...
Я не прошу его выкладывать, но и гадать тоже не хочется мне, я лишь предполагаю что может быть и не более того, ты можеш ьприменять их, а может и нет...

Ладно как смогу так распишу

Убиваем мину и ее луч если стреляет свой !
Код

public Action:OnTakeDamageLaser(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
     if (IsValidEntity(victim))
     {
         if (1 <= attacker <= MaxClients)
         {
             new mine_laser = g_UnSavedEntityRef[victim];
             new client = GetEntPropEnt(mine_laser, Prop_Data, "m_hOwnerEntity");
             if (GetClientTeam(client) != GetClientTeam(attacker) || client == attacker)
             {
                 RemoveMineEntity(victim);
                 RemoveBeamEntity(mine_laser);
                 return Plugin_Continue;
             }else{
                 return Plugin_Handled;
             }
         }
     }
      
     return Plugin_Continue;
}



Код

RemoveBeamEntity(beam_ent)
{
     if (IsValidEntity(beam_ent))
     {
         UnhookSingleEntityOutput(beam_ent, "OnTouchedByEntity", EntOut_OnTouchPole);

         // RemoveEdict(beam_ent);
         AcceptEntityInput(beam_ent, "KillHierarchy");
         g_SavedEntityRef[beam_ent] = 0;
         g_TripmineOfBeam[beam_ent] = 0;
     }
}

RemoveMineEntity(mine_ent)
{
     if (mine_ent > 0 && IsValidEntity(mine_ent))
     {
         SDKUnhook(mine_ent, SDKHook_OnTakeDamage, OnTakeDamageLaser);
         AcceptEntityInput(mine_ent, "Break");
         g_UnSavedEntityRef[mine_ent] = 0;
     }
}


Вот я выписал код который уничтожает мину при выстреле по ней
 
ThRunningMan Дата: Пятница, 16.08.2013, 15:25:49 | Сообщение # 10
Сообщений: 140
Репутация: 12 [ +/- ]
g_UnSavedEntityRef[victim];
g_UnSavedEntityRef[mine_ent]
так какой именно ты используешь массив, игроков или ентитей?
 
panorama Дата: Пятница, 16.08.2013, 16:25:09 | Сообщение # 11
Сообщений: 203
Репутация: 2 [ +/- ]
Цитата (ThRunningMan)
g_UnSavedEntityRef[victim];
g_UnSavedEntityRef[mine_ent]
так какой именно ты используешь массив, игроков или ентитей?

Я использую массив ENTITIES .
Цитата (ThRunningMan)
g_UnSavedEntityRef[victim];

Я понял суть ошибки !
В этом примере я ловил index мины но не учел что он отловит и index игроков тоже .
Спасибо !
Я в упор смотрел на ошибку но не замечал ее !
Спасибо еще раз !!!
 
  • Страница 1 из 1
  • 1
Поиск: