PDA

Просмотр полной версии : [Вопрос] Крашь диалога



_Dizel_
04.08.2014, 15:41
Всем привет, помогите мне с диалогами!!! Почему крашит.

if(listitem == 4)
{
if (House_PlayerIsOwner(playerid, HouseID) == 1)
{
for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
if (AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
HouseHasCars = true;
if (HouseHasCars == true)
{
for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] == 0)
{
BuyableCarIndex = VehicleBuyable_GetIndex(GetVehicleModel(AHouseData[HouseID][VehicleIDs][CarSlot]));
format(VehicleList, 500, "%s{00FF00}%s: $%i{FFFFFF}\n", VehicleList, ABuyableVehicles[BuyableCarIndex][CarName], ABuyableVehicles[BuyableCarIndex][Price] / 2);
}
else format(VehicleList, 500, "%s{FFFFFF}Ñëîò ïóñò{FFFFFF}\n", VehicleList);
} ShowPlayerDialog(playerid, 5558, DIALOG_STYLE_LIST, "Âûáåðèòå àâòîìîáèëü, ÷òîáû ïðîäàòü:", VehicleList, "Âûáðàòü", "Îòìåíà");
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Ýòîò äîì íå èìååò òðàíñïîðòíûõ ñðåäñòâ");
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Òîëüêî âëàäåëåö äîìà ìîæåò èñïîëüçîâàòü ýòîò ïàðàìåòð");
}

L0ndl3m
04.08.2014, 15:58
Если честно, я ничего не понял. Распишите подробнее, в чём проблема-то? И код бы следовало сделать опрятнее.

$continue$
04.08.2014, 16:05
Что крашит то? Сервер дилогом через "%d, %s и т.д"
Или pawno от кода?

_Dizel_
04.08.2014, 16:07
Когда вводишь команду для вызова меню дома, то крашиться диалог, именно из-за этого кода, а убрать я его не могу, он нужен, мне нужно как то его переделать!

if(listitem == 4)
{
if (House_PlayerIsOwner(playerid, HouseID) == 1)
{
for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
if (AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
HouseHasCars = true;
if (HouseHasCars == true)
{
for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if (AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
{
BuyableCarIndex = VehicleBuyable_GetIndex(GetVehicleModel(AHouseData[HouseID][VehicleIDs][CarSlot]));
format(VehicleList,500,"%s{00FF00}%s:$%i{FFFFFF}\n",VehicleList,ABuyableVehicles[BuyableCarIndex[CarName], ABuyableVehicles[BuyableCarIndex][Price] / 2);
}
else format(VehicleList, 500, "%s{FFFFFF}Слот пуст{FFFFFF}\n", VehicleList);
} ShowPlayerDialog(playerid, 5558, DIALOG_STYLE_LIST, "Выберите автомобиль, чтобы продать:", VehicleList, "Выбрать", "Отмена");
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Этот дом не имеет транспортных средств");
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Только владелец дома может использовать этот параметр");
}

- - - Добавлено - - -

Это говорит лог

[16:35:10] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
[16:35:10] [debug] Stack pointer (STK) is 0x763324, heap pointer (HEA) is 0x7633E0
[16:35:10] [debug] AMX backtrace:
[16:35:10] [debug] #0 ???????? in public OnDialogResponse () from RSDS.amx
[16:35:13] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
[16:35:13] [debug] Stack pointer (STK) is 0x763324, heap pointer (HEA) is 0x7633E8
[16:35:13] [debug] AMX backtrace:
[16:35:13] [debug] #0 ???????? in public OnDialogResponse () from RSDS.amx
[16:35:16] [part] _Dizel_ has left the server (0:1)
А окно просто выключатся!

#ball
04.08.2014, 16:11
Сам вряд ли помогу,но вот ребятки вам нормально читабельный код.


if(listitem == 4)
{
if(House_PlayerIsOwner(playerid, HouseID) == 1)
{
for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
HouseHasCars = true;
if(HouseHasCars == true)
{
for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
{
BuyableCarIndex = VehicleBuyable_GetIndex(GetVehicleModel(AHouseData[HouseID][VehicleIDs][CarSlot]));
format(VehicleList,500,"%s{00FF00}%s:$%i{FFFFFF}\n",VehicleList,ABuyableVehicles[BuyableCarIndex[CarName], ABuyableVehicles[BuyableCarIndex][Price] / 2);
}
else format(VehicleList, 500, "%s{FFFFFF}Слот пуст{FFFFFF}\n", VehicleList);
}
ShowPlayerDialog(playerid, 5558, DIALOG_STYLE_LIST, "Выберите автомобиль, чтобы продать:", VehicleList, "Выбрать", "Отмена");
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Этот дом не имеет транспортных средств");
}
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Только владелец дома может использовать этот параметр");
}

L0ndl3m
04.08.2014, 16:14
[16:35:10] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
[16:35:10] [debug] Stack pointer (STK) is 0x763324, heap pointer (HEA) is 0x7633E0
[16:35:10] [debug] AMX backtrace:
[16:35:10] [debug] #0 ???????? in public OnDialogResponse () from RSDS.amx
[16:35:13] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
[16:35:13] [debug] Stack pointer (STK) is 0x763324, heap pointer (HEA) is 0x7633E8
[16:35:13] [debug] AMX backtrace:
[16:35:13] [debug] #0 ???????? in public OnDialogResponse () from RSDS.amx
[16:35:16] [part] _Dizel_ has left the server (0:1)
А окно просто выключатся!
Что и следовало ожидать. Покажите инициализацию массива VehicleList.

#ball
04.08.2014, 16:15
Не в этом ли проблема?

if(listitem == 4)
{
if(House_PlayerIsOwner(playerid, HouseID) == 1)
{
for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
HouseHasCars = true;
if(HouseHasCars == true)
{
for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)
{
BuyableCarIndex = VehicleBuyable_GetIndex(GetVehicleModel(AHouseData[HouseID][VehicleIDs][CarSlot]));
format(VehicleList,500,"%s{00FF00}%s:$%i{FFFFFF}\n",VehicleList,ABuyableVehicles[BuyableCarIndex[CarName], ABuyableVehicles[BuyableCarIndex][Price] / 2);
}
else format(VehicleList, 500, "%s{FFFFFF}Слот пуст{FFFFFF}\n", VehicleList);
}
ShowPlayerDialog(playerid, 5558, DIALOG_STYLE_LIST, "Выберите автомобиль, чтобы продать:", VehicleList, "Выбрать", "Отмена");
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Этот дом не имеет транспортных средств");
}
}
else SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}Только владелец дома может использовать этот параметр");
}

- - - Добавлено - - -

У него циклы не бесконечные будут?

_Dizel_
04.08.2014, 16:24
Ну так что?

L0ndl3m
04.08.2014, 16:25
Ну так что?

Покажите инициализацию массива VehicleList.
Вы посты читаете?

_Dizel_
04.08.2014, 16:36
Это как? :boredom:

L0ndl3m
04.08.2014, 16:51
new VehicleList[?];
Там где вопросительный знак, что там у вас?

_Dizel_
04.08.2014, 17:19
Вы посты читаете?
Скажи что нужно! Я не понял! :dash2:

#Vito
04.08.2014, 17:26
new VehicleList скинь

_Dizel_
04.08.2014, 17:27
new VehicleList[500]

L0ndl3m
04.08.2014, 17:37
for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)

замените на:


for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(strlen(VehicleList) > sizeof(VehicleList) - 1)
break;

if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)

_Dizel_
04.08.2014, 18:03
for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)

замените на:


for(CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(strlen(VehicleList) > sizeof(VehicleList) - 1)
break;

if(AHouseData[HouseID][VehicleIDs][CarSlot] != 0)

Все так же

L0ndl3m
04.08.2014, 18:37
for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] == 0)
{

также замените на


for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(strlen(VehicleList) > sizeof(VehicleList) - 1)
break;

if(AHouseData[HouseID][VehicleIDs][CarSlot] == 0)
{

_Dizel_
04.08.2014, 18:44
for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(AHouseData[HouseID][VehicleIDs][CarSlot] == 0)
{

также замените на


for (CarSlot = 0; CarSlot < AHouseData[HouseID][CarSlots]; CarSlot++)
{
if(strlen(VehicleList) > sizeof(VehicleList) - 1)
break;

if(AHouseData[HouseID][VehicleIDs][CarSlot] == 0)
{

Глухо

L0ndl3m
04.08.2014, 19:04
А если

new VehicleList[500];
допустим, на

new VehicleList[300];
и каждые

format(VehicleList, 500
на

format(VehicleList, 300
?

_Dizel_
04.08.2014, 19:15
А если

new VehicleList[500];
допустим, на

new VehicleList[300];
и каждые

format(VehicleList, 500
на

format(VehicleList, 300
?
Попробую

- - - Добавлено - - -




[20:14:33] [debug] Run time error 4: "Array index out of bounds"
[20:14:33] [debug] Accessing element at negative index -1
[20:14:33] [debug] AMX backtrace:
[20:14:33] [debug] #0 0009d3e4 in public OnDialogResponse (0x00000000, 0x000015af, 0x00000001, 0x00000004, 0x007633ac) from RSDS.amx

- - - Добавлено - - -

Теперь такой крашь!

L0ndl3m
04.08.2014, 19:21
Получите строку, на которой происходит ошибка, как это сделать написано здесь: Тык (http://pro-pawn.ru/showthread.php?2991) ( параметр -d3 ).

Кстати, по-моему уже догадываюсь где ошибка: HouseID.

if (House_PlayerIsOwner(playerid, HouseID) == 1)
Попробуйте заменить на

if (HouseID > -1 && House_PlayerIsOwner(playerid, HouseID) == 1)

_Dizel_
04.08.2014, 20:21
Ну что?

- - - Добавлено - - -


Получите строку, на которой происходит ошибка, как это сделать написано здесь: Тык (http://pro-pawn.ru/showthread.php?2991) ( параметр -d3 ).

Кстати, по-моему уже догадываюсь где ошибка: HouseID.

if (House_PlayerIsOwner(playerid, HouseID) == 1)
Попробуйте заменить на

if (HouseID > -1 && House_PlayerIsOwner(playerid, HouseID) == 1)

Не каких изминений!

underwoker
04.08.2014, 21:01
Ну что?

- - - Добавлено - - -



Не каких изминений!
Эм, вам сказали же "Получите строку, на которой ошибка"
Почему вы не читаете что вам пишут?

_Dizel_
04.08.2014, 21:19
Эм, вам сказали же "Получите строку, на которой ошибка"
Почему вы не читаете что вам пишут?
Я всё вижу что пишут!!!!
И я написал не каких изменений нет, значит их нет! Вот лог:

[21:20:27] [debug] AMX backtrace:
[21:20:27] [debug] #0 000b1888 in ?? (0x00000000, 0x00000001) from RSDS.amx
[21:20:27] [debug] #1 0009c4d4 in public OnDialogResponse (0x00000000, 0x000015af, 0x00000001, 0x00000001, 0x007633ac) from RSDS.amx
[21:20:34] [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
[21:20:34] [debug] Stack pointer (STK) is 0x763428, heap pointer (HEA) is 0x7633F0

underwoker
04.08.2014, 22:17
Я всё вижу что пишут!!!!
И я написал не каких изменений нет, значит их нет! Вот лог:
Значит вы не сделали то что от вас просили, (-d3)
Вам должно было вывести строку с ошибкой.

_Dizel_
04.08.2014, 23:03
Значит вы не сделали то что от вас просили, (-d3)
Вам должно было вывести строку с ошибкой.
и -d3 тоже сделал!

underwoker
05.08.2014, 00:17
и -d3 тоже сделал!
Таак, пойдем сложным путем. Что как вы сделали -d3? Все действия опишите.

_Dizel_
05.08.2014, 14:41
Таак, пойдем сложным путем. Что как вы сделали -d3? Все действия опишите.
Зашёл в павно(папку), открыл settings, ввел так
Params=-d3

underwoker
05.08.2014, 17:35
Зашёл в павно(папку), открыл settings, ввел так
А теперь прочтите что написано в мануале по CrashDetect и сравните, что сделали вы, и что там написано:

1.Открыть блокнот и ввести "-d3" (без кавычек).
2.Сохранить файл как "pawn.cfg" (под именем указать параметр "Все файлы") в папку с Pawno.
3.Заново скомпилировать мод.

_Dizel_
05.08.2014, 18:06
А теперь прочтите что написано в мануале по CrashDetect и сравните, что сделали вы, и что там написано:

1.Открыть блокнот и ввести "-d3" (без кавычек).
2.Сохранить файл как "pawn.cfg" (под именем указать параметр "Все файлы") в папку с Pawno.
3.Заново скомпилировать мод.
Что открыть?

underwoker
05.08.2014, 18:09
Что открыть?
Блокнот