Advertisement
Guest User

crash

a guest
Feb 23rd, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.23 KB | None | 0 0
  1. /*
  2.     Наш краш-лог.
  3.  
  4.     Краш вызвался в 51 диалоге, когда игрок ввёл цифру 2.
  5.     Краш на строке номер 21165.
  6. */
  7. [08:51:42] [debug] Run time error 4: "Array index out of bounds"
  8. [08:51:42] [debug]  Accessing element at negative index -1
  9. [08:51:42] [debug] AMX backtrace:
  10. [08:51:42] [debug] #0 00190760 in public ac_OnDialogResponse (playerid=140, dialogid=51, response=1, listitem=-1, inputtext[]=@01353a80 "2") at C:\Users\Admin\Desktop\Flin RP\gamemodes\gm.pwn:21165
  11. [08:51:42] [debug] #1 0001b1d4 in public OnDialogResponse (playerid=140, dialogid=51, response=1, listitem=-1, inputtext[]=@01353a80 "2") at C:\Users\Admin\Desktop\Flin RP\pawno\include\nex-ac.inc:3635
  12.  
  13. /*
  14.     Из этой функции посылается информация DBizitem[playerid] в 51 диалог
  15. */
  16. stock list_delivery(playerid)
  17. {
  18.     new
  19.         string[944],
  20.         str[944],
  21.         num = 0;
  22.  
  23.     for(new i = 0; i < 10; i ++)
  24.         DBizitem[playerid][i] = -1;
  25.  
  26.     strcat(str,"   Заказчик:\tКуда:\tЗаработок:\tСтатус заказа:\n");
  27.  
  28.     new
  29.         vehicleid = GetPlayerVehicleID(playerid);
  30.  
  31.     if(!IsValidVehicle(vehicleid))
  32.         return 1;
  33.  
  34.     if(veh_info[vehicleid][v_npoType] == NPO_JOB && veh_info[vehicleid][v_npoId] == JOB_DELIVERY)
  35.     {
  36.         new
  37.             coef;
  38.  
  39.         if(farm_info[f_Seed] < 9000 && num == 0)
  40.         {
  41.             f(string, "[1]"W"Ферма [Государство]\t1000$\n");
  42.             DBizitem[playerid][0] = 999;
  43.             num++;
  44.         }
  45.  
  46.         for(new h = 0; h < totalbizz; h++)
  47.         {
  48.             if(num >= 10)
  49.                 break;
  50.  
  51.             if(b_info[h][_zakaz] == 0)
  52.                 continue;
  53.  
  54.             coef = b_info[h][_tip] == 4 ? 2 : 6;
  55.  
  56.             f(string, "%s [%i]"W"%s\t%s\t%d$\t%s\n",
  57.                 string,
  58.                 num + 1,
  59.                 b_info[h][_owner],
  60.                 b_info[h][_name],
  61.                 b_info[h][_zakaz] * coef,
  62.                 b_info[h][_status] ? "{BE2D2D}Выполняется"W"" : "{42B02C}Свободен"W"");
  63.  
  64.             DBizitem[playerid][num] = h;
  65.             num++;
  66.         }
  67.     }
  68.     else
  69.     {
  70.         return SendErrorMessage(playerid, "Вы должны находиться в рабочем транспорте.");
  71.     }
  72.  
  73.     strcat(str,string);
  74.  
  75.     if(num > 0)
  76.         ShowPlayerDialog(playerid, 51, DIALOG_STYLE_INPUT, "Заказы", str, "Принять", "Закрыть");
  77.     else
  78.         SendClientMessage(playerid, error,"Заказов не найдено");
  79.  
  80.     return 1;
  81. }
  82.  
  83. /*
  84.     А вот и наш 51 диалог.
  85. */
  86. case 51:
  87. {
  88.     if(response)
  89.     {
  90.         if(isnums(inputtext)) // Тут я, кстати, проебался с проверкой, тут должно быть if(0 == isnums(inputtext)), но, даже если так, игрока бы просто не пустило дальше.
  91.             return SendClientMessage(playerid, COLOR_ERROR, "[Ошибка] {ffffff}Вводить нужно только цифру пункта!");
  92.  
  93.         new
  94.             fix_listitem = strval(inputtext); // игрок ввёл цифру 2
  95.  
  96.         if(!(1 <= fix_listitem <= 10)) // проверка успешно пройдена, 1 <= 2 <= 10
  97.             return 1;
  98.  
  99.         fix_listitem--; // 2 - 1 = 1
  100.  
  101.         new
  102.             str[164];
  103.  
  104.         if(DBizitem[playerid][0] == 999 && fix_listitem == 0) // проверка не пройдена, fix_listitem (1) != 0
  105.         {
  106.             SetPVarInt(playerid, "biz_zakaz", DBizitem[playerid][0]); // IMPORTANT: А ВОТ, СОБСТВЕННО, НАША 21165 СТРОКА. wtf? Сначала идёт проверка DBizitem[playerid][0] == 999, а потом мы это же значение передаём в PVar,
  107.                 // тогда как там может быть -1?
  108.             SetPVarInt(playerid, "zakaz", 1000);
  109.             SetPlayerRaceCheckpoint(playerid, 1, -116.9392,-316.1367,2.7646, -116.9392,-316.1367,2.7646, 8.0);
  110.             SetPVarInt(playerid, "biz_load",0+1);
  111.             return 1;
  112.         }
  113.  
  114.         if(b_info[DBizitem[playerid][fix_listitem]][_status] == 1) // b_info[DBizitem[playerid][1]][_status] == 1 - IMPORTANT: неизвестно, что у нас в DBizitem[playerid][1]
  115.         {
  116.             SendClientMessage(playerid, error, "Данный заказ уже выполняется кем-то");
  117.             return list_delivery(playerid);
  118.         }
  119.  
  120.         b_info[DBizitem[playerid][fix_listitem]][_status] = 1; // IMPORTANT: неизвестно, что у нас в DBizitem[playerid][1]
  121.  
  122.         f(str, "Вы приняли заказ "W"'%s [%d], заработок %d$'"I" загрузите сначало продукты на заводе и отправляйтесь на контрольную точку",
  123.             b_info[DBizitem[playerid][fix_listitem]][_name], // IMPORTANT: неизвестно, что у нас в DBizitem[playerid][1]
  124.             DBizitem[playerid][fix_listitem], // IMPORTANT: неизвестно, что у нас в DBizitem[playerid][1]
  125.             b_info[DBizitem[playerid][fix_listitem]][_zakaz] * 3); // IMPORTANT: неизвестно, что у нас в DBizitem[playerid][1]
  126.  
  127.         SendClientMessage(playerid, info, str);
  128.  
  129.         SetPVarInt(playerid, "biz_zakaz", DBizitem[playerid][fix_listitem]);
  130.         SetPVarInt(playerid, "zakaz", b_info[DBizitem[playerid][fix_listitem]][_zakaz]);
  131.         SetPlayerRaceCheckpoint(playerid, 1, -116.9392,-316.1367,2.7646, -116.9392,-316.1367,2.7646, 8.0);
  132.         SetPVarInt(playerid, "biz_load", fix_listitem + 1);
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement