Ошибка , которая привела к крашу сервера !
|
|
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 игроков тоже . Спасибо ! Я в упор смотрел на ошибку но не замечал ее ! Спасибо еще раз !!!
|
|
| |