Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±

    Грамотное использование switch и if

    Когда-то давно я сделал систему инвентаря, но не очень оптимизированную - вся она строилась на if проверках
    Вспомнив про switch и его превосходство над if, я решил переделать мою систему инвентаря под switch, старавшись грамотно его использовать
    Нормально ли выглядит код? (P.S. я знаю, что переменную инвентаря можно сделать двухмерной и записывать в каждую меру (или как это назвать?)
    1. new aaa[4];
    2. aaa[0] = 1; // мера [0], значение в мере 0 - 1
    3. aaa[1] = 2; // мера [1], значение 2
    4. aaa[2] = 3; // etc
    5. aaa[3] = 4;
    значения слота, но как записывать такую конструкцию в бд? 3 ячейками на вид предмета и 3 ячейками на запас? сомневаюсь)

    Сама система:
      Открыть/закрыть
    1. case 12: // Инвентарь
    2. {
    3. if(response)
    4. {
    5. switch(listitem)
    6. {
    7. case 0:
    8. {
    9. switch(player[playerid][pItem1])
    10. {
    11. case 0:
    12. {
    13. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    14. !"\
    15. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    16. ");
    17. return true;
    18. }
    19. default:
    20. {
    21. player[playerid][pItemSelect] = 1;
    22. static
    23. fmt_str[] = "{00C0FF}%s";
    24. new
    25. string[sizeof(fmt_str)-2+20+8+1];
    26. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem1]]);
    27.  
    28. SPD(playerid, 13, DSL, string,
    29. !"\
    30. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    31. ");
    32. }
    33. }
    34. }
    35. case 1:
    36. {
    37. switch(player[playerid][pItem2])
    38. {
    39. case 0:
    40. {
    41. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    42. !"\
    43. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    44. ");
    45. return true;
    46. }
    47. default:
    48. {
    49. player[playerid][pItemSelect] = 2;
    50. static
    51. fmt_str[] = "{00C0FF}%s";
    52. new
    53. string[sizeof(fmt_str)-2+20+8+1];
    54. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem2]]);
    55.  
    56. SPD(playerid, 13, DSL, string,
    57. !"\
    58. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    59. ");
    60. }
    61. }
    62. }
    63. case 2:
    64. {
    65. switch(player[playerid][pItem3])
    66. {
    67. case 0:
    68. {
    69. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    70. !"\
    71. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    72. ");
    73. return true;
    74. }
    75. default:
    76. {
    77. player[playerid][pItemSelect] = 3;
    78. static
    79. fmt_str[] = "{00C0FF}%s";
    80. new
    81. string[sizeof(fmt_str)-2+20+8+1];
    82. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem3]]);
    83.  
    84. SPD(playerid, 13, DSL, string,
    85. !"\
    86. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    87. ");
    88. }
    89. }
    90. }
    91. }
    92. }
    93. }
    94. case 13:
    95. {
    96. if(response)
    97. {
    98. switch(listitem)
    99. {
    100. case 0:
    101. {
    102. switch(player[playerid][pItemSelect])
    103. {
    104. case 1:
    105. {
    106. switch(player[playerid][pItem1])
    107. {
    108. case 1:
    109. {
    110. new Float:health_eat;
    111. GetPlayerHealth(playerid, health_eat);
    112. if(health_eat >= 100.0)
    113. SCM(playerid, COLOR_YELLOW, !"Вы сыты");
    114. else
    115. {
    116. SCM(playerid, COLOR_YELLOW, !"Вы съели бургер, ваше здоровье пополнилось на 20 единиц");
    117. SetPlayerHealth(playerid, health_eat+20.0);
    118. if(player[playerid][pItemAmmo1] >= 2)
    119. {
    120. player[playerid][pItemAmmo1]--;
    121. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    122. }
    123. else
    124. {
    125. player[playerid][pItem1] = 0;
    126. player[playerid][pItemAmmo1] = 0;
    127. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    128. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    129. }
    130. static
    131. fmt_str[] = "*%s съел бургер";
    132. new
    133. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    134. format(string, sizeof(string), fmt_str, GetName(playerid));
    135. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    136. }
    137. return true;
    138. }
    139. case 2:
    140. {
    141. new Float:health_drink;
    142. GetPlayerHealth(playerid, health_drink);
    143. if(health_drink >= 100.0)
    144. SCM(playerid, COLOR_YELLOW, !"Вы не имеете жажды");
    145. else
    146. {
    147. SCM(playerid, COLOR_YELLOW, !"Вы выпили Пепси-Колу, ваше здоровье пополнилось на 10 единиц");
    148. SetPlayerHealth(playerid, health_drink+10.0);
    149. if(player[playerid][pItemAmmo1] >= 2)
    150. {
    151. player[playerid][pItemAmmo1]--;
    152. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    153. }
    154. else
    155. {
    156. player[playerid][pItem1] = 0;
    157. player[playerid][pItemAmmo1] = 0;
    158. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    159. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    160. }
    161. static
    162. fmt_str[] = "*%s выпил Пепси-Колу";
    163. new
    164. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    165. format(string, sizeof(string), fmt_str, GetName(playerid));
    166. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    167. }
    168. return true;
    169. }
    170. case 7:
    171. {
    172. GivePlayerWeapon(playerid, 5, 1);
    173. player[playerid][pItem1] = 0;
    174. player[playerid][pItemAmmo1] = 0;
    175. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    176. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    177. static
    178. fmt_str[] = "*%s достал из-за пазухи биту";
    179. new
    180. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    181. format(string, sizeof(string), fmt_str, GetName(playerid));
    182. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    183. return true;
    184. }
    185. default:
    186. {
    187. DialogTakePatrons(playerid);
    188. return true;
    189. }
    190. }
    191. }
    192. case 2:
    193. {
    194. switch(player[playerid][pItem2])
    195. {
    196. case 1:
    197. {
    198. new Float:health_eat;
    199. GetPlayerHealth(playerid, health_eat);
    200. if(health_eat >= 100.0)
    201. SCM(playerid, COLOR_YELLOW, !"Вы сыты");
    202. else
    203. {
    204. SCM(playerid, COLOR_YELLOW, !"Вы съели бургер, ваше здоровье пополнилось на 20 единиц");
    205. SetPlayerHealth(playerid, health_eat+20.0);
    206. if(player[playerid][pItemAmmo2] >= 2)
    207. {
    208. player[playerid][pItemAmmo2]--;
    209. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    210. }
    211. else
    212. {
    213. player[playerid][pItem2] = 0;
    214. player[playerid][pItemAmmo2] = 0;
    215. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    216. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    217. }
    218. static
    219. fmt_str[] = "*%s съел бургер";
    220. new
    221. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    222. format(string, sizeof(string), fmt_str, GetName(playerid));
    223. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    224. }
    225. return true;
    226. }
    227. case 2:
    228. {
    229. new Float:health_drink;
    230. GetPlayerHealth(playerid, health_drink);
    231. if(health_drink >= 100.0)
    232. SCM(playerid, COLOR_YELLOW, !"Вы не имеете жажды");
    233. else
    234. {
    235. SCM(playerid, COLOR_YELLOW, !"Вы выпили Пепси-Колу, ваше здоровье пополнилось на 10 единиц");
    236. SetPlayerHealth(playerid, health_drink+10.0);
    237. if(player[playerid][pItemAmmo2] >= 2)
    238. {
    239. player[playerid][pItemAmmo2]--;
    240. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    241. }
    242. else
    243. {
    244. player[playerid][pItem2] = 0;
    245. player[playerid][pItemAmmo2] = 0;
    246. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    247. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    248. }
    249. static
    250. fmt_str[] = "*%s выпил Пепси-Колу";
    251. new
    252. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    253. format(string, sizeof(string), fmt_str, GetName(playerid));
    254. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    255. }
    256. return true;
    257. }
    258. case 7:
    259. {
    260. GivePlayerWeapon(playerid, 5, 1);
    261. player[playerid][pItem2] = 0;
    262. player[playerid][pItemAmmo2] = 0;
    263. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    264. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    265. static
    266. fmt_str[] = "*%s достал из-за пазухи биту";
    267. new
    268. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    269. format(string, sizeof(string), fmt_str, GetName(playerid));
    270. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    271. return true;
    272. }
    273. default:
    274. {
    275. DialogTakePatrons(playerid);
    276. return true;
    277. }
    278. }
    279. }
    280. case 3:
    281. {
    282. switch(player[playerid][pItem3])
    283. {
    284. case 1:
    285. {
    286. new Float:health_eat;
    287. GetPlayerHealth(playerid, health_eat);
    288. if(health_eat >= 100.0)
    289. SCM(playerid, COLOR_YELLOW, !"Вы сыты");
    290. else
    291. {
    292. SCM(playerid, COLOR_YELLOW, !"Вы съели бургер, ваше здоровье пополнилось на 20 единиц");
    293. SetPlayerHealth(playerid, health_eat+20.0);
    294. if(player[playerid][pItemAmmo3] >= 2)
    295. {
    296. player[playerid][pItemAmmo3]--;
    297. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    298. }
    299. else
    300. {
    301. player[playerid][pItem3] = 0;
    302. player[playerid][pItemAmmo3] = 0;
    303. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    304. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    305. }
    306. static
    307. fmt_str[] = "*%s съел бургер";
    308. new
    309. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    310. format(string, sizeof(string), fmt_str, GetName(playerid));
    311. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    312. }
    313. return true;
    314. }
    315. case 2:
    316. {
    317. new Float:health_drink;
    318. GetPlayerHealth(playerid, health_drink);
    319. if(health_drink >= 100.0)
    320. SCM(playerid, COLOR_YELLOW, !"Вы не имеете жажды");
    321. else
    322. {
    323. SCM(playerid, COLOR_YELLOW, !"Вы выпили Пепси-Колу, ваше здоровье пополнилось на 10 единиц");
    324. SetPlayerHealth(playerid, health_drink+10.0);
    325. if(player[playerid][pItemAmmo3] >= 2)
    326. {
    327. player[playerid][pItemAmmo3]--;
    328. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    329. }
    330. else
    331. {
    332. player[playerid][pItem3] = 0;
    333. player[playerid][pItemAmmo3] = 0;
    334. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    335. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    336. }
    337. static
    338. fmt_str[] = "*%s выпил Пепси-Колу";
    339. new
    340. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    341. format(string, sizeof(string), fmt_str, GetName(playerid));
    342. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    343. }
    344. return true;
    345. }
    346. case 7:
    347. {
    348. GivePlayerWeapon(playerid, 5, 1);
    349. player[playerid][pItem3] = 0;
    350. player[playerid][pItemAmmo3] = 0;
    351. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    352. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    353. static
    354. fmt_str[] = "*%s достал из-за пазухи биту";
    355. new
    356. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    357. format(string, sizeof(string), fmt_str, GetName(playerid));
    358. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    359. return true;
    360. }
    361. default:
    362. {
    363. DialogTakePatrons(playerid);
    364. return true;
    365. }
    366. }
    367. }
    368. }
    369. }
    370. case 1:
    371. {
    372. SPD(playerid, 14, DSM, !"{00C0FF}Внимание",
    373. !"{00C0FF}Вы действительно хотите выбросить предмет/оружие из инвентаря? Оно будет потеряно навсегда!",
    374. !"{00C0FF}Да", !"{00C0FF}Нет");
    375. return true;
    376. }
    377. }
    378. }
    379. else
    380. {
    381. callcmd::invent(playerid);
    382. return true;
    383. }
    384. }


    UPD: Нашел кучу логических ошибок, видимо, когда я писал этот код, я что-то употреблял

    Вот код:

      Открыть/закрыть
    1. case 12: // Инвентарь
    2. {
    3. if(response)
    4. {
    5. switch(listitem)
    6. {
    7. case 0:
    8. {
    9. switch(player[playerid][pItem1])
    10. {
    11. case 0:
    12. {
    13. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    14. !"\
    15. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    16. ");
    17. return true;
    18. }
    19. default:
    20. {
    21. player[playerid][pItemSelect] = 1;
    22. static
    23. fmt_str[] = "{00C0FF}%s";
    24. new
    25. string[sizeof(fmt_str)-2+20+8+1];
    26. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem1]]);
    27.  
    28. SPD(playerid, 13, DSL, string,
    29. !"\
    30. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    31. ");
    32. }
    33. }
    34. }
    35. case 1:
    36. {
    37. switch(player[playerid][pItem2])
    38. {
    39. case 0:
    40. {
    41. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    42. !"\
    43. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    44. ");
    45. return true;
    46. }
    47. default:
    48. {
    49. player[playerid][pItemSelect] = 2;
    50. static
    51. fmt_str[] = "{00C0FF}%s";
    52. new
    53. string[sizeof(fmt_str)-2+20+8+1];
    54. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem2]]);
    55.  
    56. SPD(playerid, 13, DSL, string,
    57. !"\
    58. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    59. ");
    60. }
    61. }
    62. }
    63. case 2:
    64. {
    65. switch(player[playerid][pItem3])
    66. {
    67. case 0:
    68. {
    69. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    70. !"\
    71. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    72. ");
    73. return true;
    74. }
    75. default:
    76. {
    77. player[playerid][pItemSelect] = 3;
    78. static
    79. fmt_str[] = "{00C0FF}%s";
    80. new
    81. string[sizeof(fmt_str)-2+20+8+1];
    82. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem3]]);
    83.  
    84. SPD(playerid, 13, DSL, string,
    85. !"\
    86. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    87. ");
    88. }
    89. }
    90. }
    91. }
    92. }
    93. }
    94. case 13:
    95. {
    96. if(response)
    97. {
    98. switch(listitem)
    99. {
    100. case 0:
    101. {
    102. switch(player[playerid][pItemSelect])
    103. {
    104. case 1:
    105. {
    106. switch(player[playerid][pItem1])
    107. {
    108. case 1:
    109. {
    110. new Float:health_eat;
    111. GetPlayerHealth(playerid, health_eat);
    112. if(health_eat >= 100.0)
    113. SCM(playerid, COLOR_YELLOW, !"Вы сыты");
    114. else
    115. {
    116. SCM(playerid, COLOR_YELLOW, !"Вы съели бургер, ваше здоровье пополнилось на 20 единиц");
    117. SetPlayerHealth(playerid, health_eat+20.0);
    118. if(player[playerid][pItemAmmo1] >= 2)
    119. player[playerid][pItemAmmo1]--;
    120. else
    121. {
    122. player[playerid][pItem1] = 0;
    123. player[playerid][pItemAmmo1] = 0;
    124. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    125. }
    126. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    127. static
    128. fmt_str[] = "*%s съел бургер";
    129. new
    130. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    131. format(string, sizeof(string), fmt_str, GetName(playerid));
    132. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    133. }
    134. return true;
    135. }
    136. case 2:
    137. {
    138. new Float:health_drink;
    139. GetPlayerHealth(playerid, health_drink);
    140. if(health_drink >= 100.0)
    141. SCM(playerid, COLOR_YELLOW, !"Вы не имеете жажды");
    142. else
    143. {
    144. SCM(playerid, COLOR_YELLOW, !"Вы выпили Пепси-Колу, ваше здоровье пополнилось на 10 единиц");
    145. SetPlayerHealth(playerid, health_drink+10.0);
    146. if(player[playerid][pItemAmmo1] >= 2)
    147. player[playerid][pItemAmmo1]--;
    148. else
    149. {
    150. player[playerid][pItem1] = 0;
    151. player[playerid][pItemAmmo1] = 0;
    152. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    153. }
    154. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    155. static
    156. fmt_str[] = "*%s выпил Пепси-Колу";
    157. new
    158. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    159. format(string, sizeof(string), fmt_str, GetName(playerid));
    160. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    161. }
    162. return true;
    163. }
    164. case 7:
    165. {
    166. GivePlayerWeapon(playerid, 5, 1);
    167. if(player[playerid][pItemAmmo1] >= 2)
    168. player[playerid][pItemAmmo1]--;
    169. else
    170. {
    171. player[playerid][pItem1] = 0;
    172. player[playerid][pItemAmmo1] = 0;
    173. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    174. }
    175. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    176. static
    177. fmt_str[] = "*%s достал из-за пазухи биту";
    178. new
    179. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    180. format(string, sizeof(string), fmt_str, GetName(playerid));
    181. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    182. return true;
    183. }
    184. default:
    185. {
    186. DialogTakePatrons(playerid);
    187. return true;
    188. }
    189. }
    190. }
    191. case 2:
    192. {
    193. switch(player[playerid][pItem2])
    194. {
    195. case 1:
    196. {
    197. new Float:health_eat;
    198. GetPlayerHealth(playerid, health_eat);
    199. if(health_eat >= 100.0)
    200. SCM(playerid, COLOR_YELLOW, !"Вы сыты");
    201. else
    202. {
    203. SCM(playerid, COLOR_YELLOW, !"Вы съели бургер, ваше здоровье пополнилось на 20 единиц");
    204. SetPlayerHealth(playerid, health_eat+20.0);
    205. if(player[playerid][pItemAmmo2] >= 2)
    206. player[playerid][pItemAmmo2]--;
    207. else
    208. {
    209. player[playerid][pItem2] = 0;
    210. player[playerid][pItemAmmo2] = 0;
    211. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    212. }
    213. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    214. static
    215. fmt_str[] = "*%s съел бургер";
    216. new
    217. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    218. format(string, sizeof(string), fmt_str, GetName(playerid));
    219. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    220. }
    221. return true;
    222. }
    223. case 2:
    224. {
    225. new Float:health_drink;
    226. GetPlayerHealth(playerid, health_drink);
    227. if(health_drink >= 100.0)
    228. SCM(playerid, COLOR_YELLOW, !"Вы не имеете жажды");
    229. else
    230. {
    231. SCM(playerid, COLOR_YELLOW, !"Вы выпили Пепси-Колу, ваше здоровье пополнилось на 10 единиц");
    232. SetPlayerHealth(playerid, health_drink+10.0);
    233. if(player[playerid][pItemAmmo2] >= 2)
    234. player[playerid][pItemAmmo2]--;
    235. else
    236. {
    237. player[playerid][pItem2] = 0;
    238. player[playerid][pItemAmmo2] = 0;
    239. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    240. }
    241. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    242. static
    243. fmt_str[] = "*%s выпил Пепси-Колу";
    244. new
    245. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    246. format(string, sizeof(string), fmt_str, GetName(playerid));
    247. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    248. }
    249. return true;
    250. }
    251. case 7:
    252. {
    253. GivePlayerWeapon(playerid, 5, 1);
    254. if(player[playerid][pItemAmmo2] >= 2)
    255. player[playerid][pItemAmmo2]--;
    256. else
    257. {
    258. player[playerid][pItem2] = 0;
    259. player[playerid][pItemAmmo2] = 0;
    260. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    261. }
    262. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    263. static
    264. fmt_str[] = "*%s достал из-за пазухи биту";
    265. new
    266. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    267. format(string, sizeof(string), fmt_str, GetName(playerid));
    268. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    269. return true;
    270. }
    271. default:
    272. {
    273. DialogTakePatrons(playerid);
    274. return true;
    275. }
    276. }
    277. }
    278. case 3:
    279. {
    280. switch(player[playerid][pItem3])
    281. {
    282. case 1:
    283. {
    284. new Float:health_eat;
    285. GetPlayerHealth(playerid, health_eat);
    286. if(health_eat >= 100.0)
    287. SCM(playerid, COLOR_YELLOW, !"Вы сыты");
    288. else
    289. {
    290. SCM(playerid, COLOR_YELLOW, !"Вы съели бургер, ваше здоровье пополнилось на 20 единиц");
    291. SetPlayerHealth(playerid, health_eat+20.0);
    292. if(player[playerid][pItemAmmo3] >= 2)
    293. player[playerid][pItemAmmo3]--;
    294. else
    295. {
    296. player[playerid][pItem3] = 0;
    297. player[playerid][pItemAmmo3] = 0;
    298. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    299. }
    300. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    301. static
    302. fmt_str[] = "*%s съел бургер";
    303. new
    304. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    305. format(string, sizeof(string), fmt_str, GetName(playerid));
    306. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    307. }
    308. return true;
    309. }
    310. case 2:
    311. {
    312. new Float:health_drink;
    313. GetPlayerHealth(playerid, health_drink);
    314. if(health_drink >= 100.0)
    315. SCM(playerid, COLOR_YELLOW, !"Вы не имеете жажды");
    316. else
    317. {
    318. SCM(playerid, COLOR_YELLOW, !"Вы выпили Пепси-Колу, ваше здоровье пополнилось на 10 единиц");
    319. SetPlayerHealth(playerid, health_drink+10.0);
    320. if(player[playerid][pItemAmmo3] >= 2)
    321. player[playerid][pItemAmmo3]--;
    322. else
    323. {
    324. player[playerid][pItem3] = 0;
    325. player[playerid][pItemAmmo3] = 0;
    326. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    327. }
    328. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    329. static
    330. fmt_str[] = "*%s выпил Пепси-Колу";
    331. new
    332. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    333. format(string, sizeof(string), fmt_str, GetName(playerid));
    334. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    335. }
    336. return true;
    337. }
    338. case 7:
    339. {
    340. GivePlayerWeapon(playerid, 5, 1);
    341. if(player[playerid][pItemAmmo3] >= 2)
    342. player[playerid][pItemAmmo3]--;
    343. else
    344. {
    345. player[playerid][pItem3] = 0;
    346. player[playerid][pItemAmmo3] = 0;
    347. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    348. }
    349. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    350. static
    351. fmt_str[] = "*%s достал из-за пазухи биту";
    352. new
    353. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    354. format(string, sizeof(string), fmt_str, GetName(playerid));
    355. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    356. return true;
    357. }
    358. default:
    359. {
    360. DialogTakePatrons(playerid);
    361. return true;
    362. }
    363. }
    364. }
    365. }
    366. }
    367. case 1:
    368. {
    369. SPD(playerid, 14, DSM, !"{00C0FF}Внимание",
    370. !"{00C0FF}Вы действительно хотите выбросить предмет/оружие из инвентаря? Оно будет потеряно навсегда!",
    371. !"{00C0FF}Да", !"{00C0FF}Нет");
    372. return true;
    373. }
    374. }
    375. }
    376. else
    377. {
    378. callcmd::invent(playerid);
    379. return true;
    380. }
    381. }
    382. case 14:
    383. {
    384. if(response)
    385. {
    386. switch(player[playerid][pItemSelect])
    387. {
    388. case 1:
    389. {
    390. player[playerid][pItem1] = 0;
    391. player[playerid][pItemAmmo1] = 0;
    392. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    393. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    394. callcmd::invent(playerid);
    395. return true;
    396. }
    397. case 2:
    398. {
    399. player[playerid][pItem2] = 0;
    400. player[playerid][pItemAmmo2] = 0;
    401. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    402. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    403. callcmd::invent(playerid);
    404. return true;
    405. }
    406. case 3:
    407. {
    408. player[playerid][pItem3] = 0;
    409. player[playerid][pItemAmmo3] = 0;
    410. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    411. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    412. callcmd::invent(playerid);
    413. return true;
    414. }
    415. default:
    416. {
    417. SPD(playerid, 9284, DSM, !"{00C0FF}Ошибка", !"{00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"");
    418. callcmd::invent(playerid);
    419. return true;
    420. }
    421.  
    422. }
    423. return true;
    424. }
    425. }
    426. case 15:
    427. {
    428. if(response)
    429. {
    430. new
    431. len = strlen(inputtext),
    432. val = strval(inputtext);
    433. if(!len)
    434. {
    435. SCM(playerid, COLOR_GREY, !"Вы ничего не ввели!");
    436. DialogTakePatrons(playerid);
    437. return true;
    438. }
    439. switch(inputtext[len])
    440. {
    441. case 'А'..'Я', 'а'..'я', 'A'..'Z', 'a'..'z':
    442. {
    443. SCM(playerid, COLOR_GREY, !"Введите количество патрон!");
    444. DialogTakePatrons(playerid);
    445. return true;
    446. }
    447. }
    448. if(val <= 0)
    449. {
    450. SCM(playerid, COLOR_GREY, !"Вы не можете зарядить меньше, чем 1 патрон!");
    451. DialogTakePatrons(playerid);
    452. return true;
    453. }
    454. switch(player[playerid][pItemSelect])
    455. {
    456. case 1:
    457. {
    458. if(val > player[playerid][pItemAmmo1])
    459. {
    460. SCM(playerid, COLOR_GREY, !"Введите количество патрон, которое имеется у вас в инвентаре!");
    461. DialogTakePatrons(playerid);
    462. return true;
    463. }
    464. switch(player[playerid][pItem1])
    465. {
    466. case 3:
    467. {
    468. GivePlayerWeapon(playerid, WEAPON_DEAGLE, GetPlayerAmmo(playerid)+val);
    469. if(val < player[playerid][pItemAmmo1])
    470. {
    471. player[playerid][pItemAmmo1]-=val;
    472. }
    473. else
    474. {
    475. player[playerid][pItemAmmo1] = 0;
    476. player[playerid][pItem1] = 0;
    477. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    478. }
    479. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    480. static
    481. fmt_str[] = "*%s достал из кобуры пистолет Desert Eagle";
    482. new
    483. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    484. format(string, sizeof(string), fmt_str, GetName(playerid));
    485. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    486. return true;
    487. }
    488. case 4:
    489. {
    490. GivePlayerWeapon(playerid, WEAPON_SHOTGUN, GetPlayerAmmo(playerid)+val);
    491. if(val < player[playerid][pItemAmmo1])
    492. {
    493. player[playerid][pItemAmmo1]-=val;
    494. }
    495. else
    496. {
    497. player[playerid][pItemAmmo1] = 0;
    498. player[playerid][pItem1] = 0;
    499. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    500. }
    501. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    502. static
    503. fmt_str[] = "*%s достал из-за пазухи дробовик";
    504. new
    505. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    506. format(string, sizeof(string), fmt_str, GetName(playerid));
    507. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    508. return true;
    509. }
    510. case 5:
    511. {
    512. GivePlayerWeapon(playerid, WEAPON_M4, GetPlayerAmmo(playerid)+val);
    513. if(val < player[playerid][pItemAmmo1])
    514. {
    515. player[playerid][pItemAmmo1]-=val;
    516. }
    517. else
    518. {
    519. player[playerid][pItemAmmo1] = 0;
    520. player[playerid][pItem1] = 0;
    521. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    522. }
    523. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    524. static
    525. fmt_str[] = "*%s достал из-за пазухи карабин M4A1";
    526. new
    527. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    528. format(string, sizeof(string), fmt_str, GetName(playerid));
    529. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    530. return true;
    531. }
    532. case 6:
    533. {
    534. GivePlayerWeapon(playerid, WEAPON_AK47, GetPlayerAmmo(playerid)+val);
    535. if(val < player[playerid][pItemAmmo1])
    536. {
    537. player[playerid][pItemAmmo1]-=val;
    538. }
    539. else
    540. {
    541. player[playerid][pItemAmmo1] = 0;
    542. player[playerid][pItem1] = 0;
    543. SavePlayer(playerid, "Item1", player[playerid][pItem1], "d");
    544. }
    545. SavePlayer(playerid, "ItemAmmo1", player[playerid][pItemAmmo1], "d");
    546. static
    547. fmt_str[] = "*%s достал из-за пазухи винтовку AK-47";
    548. new
    549. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    550. format(string, sizeof(string), fmt_str, GetName(playerid));
    551. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    552. return true;
    553. }
    554. }
    555. }
    556. case 2:
    557. {
    558. if(val > player[playerid][pItemAmmo2])
    559. {
    560. SCM(playerid, COLOR_GREY, !"Введите количество патрон, которое имеется у вас в инвентаре!");
    561. DialogTakePatrons(playerid);
    562. return true;
    563. }
    564. switch(player[playerid][pItem2])
    565. {
    566. case 3:
    567. {
    568. GivePlayerWeapon(playerid, WEAPON_DEAGLE, GetPlayerAmmo(playerid)+val);
    569. if(val < player[playerid][pItemAmmo2])
    570. {
    571. player[playerid][pItemAmmo2]-=val;
    572. }
    573. else
    574. {
    575. player[playerid][pItemAmmo2] = 0;
    576. player[playerid][pItem2] = 0;
    577. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    578. }
    579. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    580. static
    581. fmt_str[] = "*%s достал из кобуры пистолет Desert Eagle";
    582. new
    583. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    584. format(string, sizeof(string), fmt_str, GetName(playerid));
    585. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    586. return true;
    587. }
    588. case 4:
    589. {
    590. GivePlayerWeapon(playerid, WEAPON_SHOTGUN, GetPlayerAmmo(playerid)+val);
    591. if(val < player[playerid][pItemAmmo2])
    592. {
    593. player[playerid][pItemAmmo2]-=val;
    594. }
    595. else
    596. {
    597. player[playerid][pItemAmmo2] = 0;
    598. player[playerid][pItem2] = 0;
    599. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    600. }
    601. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    602. static
    603. fmt_str[] = "*%s достал из-за пазухи дробовик";
    604. new
    605. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    606. format(string, sizeof(string), fmt_str, GetName(playerid));
    607. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    608. return true;
    609. }
    610. case 5:
    611. {
    612. GivePlayerWeapon(playerid, WEAPON_M4, GetPlayerAmmo(playerid)+val);
    613. if(val < player[playerid][pItemAmmo2])
    614. {
    615. player[playerid][pItemAmmo2]-=val;
    616. }
    617. else
    618. {
    619. player[playerid][pItemAmmo2] = 0;
    620. player[playerid][pItem2] = 0;
    621. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    622. }
    623. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    624. static
    625. fmt_str[] = "*%s достал из-за пазухи карабин M4A1";
    626. new
    627. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    628. format(string, sizeof(string), fmt_str, GetName(playerid));
    629. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    630. return true;
    631. }
    632. case 6:
    633. {
    634. GivePlayerWeapon(playerid, WEAPON_AK47, GetPlayerAmmo(playerid)+val);
    635. if(val < player[playerid][pItemAmmo2])
    636. {
    637. player[playerid][pItemAmmo2]-=val;
    638. }
    639. else
    640. {
    641. player[playerid][pItemAmmo2] = 0;
    642. player[playerid][pItem2] = 0;
    643. SavePlayer(playerid, "Item2", player[playerid][pItem2], "d");
    644. }
    645. SavePlayer(playerid, "ItemAmmo2", player[playerid][pItemAmmo2], "d");
    646. static
    647. fmt_str[] = "*%s достал из-за пазухи винтовку AK-47";
    648. new
    649. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    650. format(string, sizeof(string), fmt_str, GetName(playerid));
    651. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    652. return true;
    653. }
    654. }
    655. }
    656. case 3:
    657. {
    658. if(val > player[playerid][pItemAmmo3])
    659. {
    660. SCM(playerid, COLOR_GREY, !"Введите количество патрон, которое имеется у вас в инвентаре!");
    661. DialogTakePatrons(playerid);
    662. return true;
    663. }
    664. switch(player[playerid][pItem3])
    665. {
    666. case 3:
    667. {
    668. GivePlayerWeapon(playerid, WEAPON_DEAGLE, GetPlayerAmmo(playerid)+val);
    669. if(val < player[playerid][pItemAmmo3])
    670. {
    671. player[playerid][pItemAmmo3]-=val;
    672. }
    673. else
    674. {
    675. player[playerid][pItemAmmo3] = 0;
    676. player[playerid][pItem3] = 0;
    677. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    678. }
    679. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    680. static
    681. fmt_str[] = "*%s достал из кобуры пистолет Desert Eagle";
    682. new
    683. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    684. format(string, sizeof(string), fmt_str, GetName(playerid));
    685. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    686. return true;
    687. }
    688. case 4:
    689. {
    690. GivePlayerWeapon(playerid, WEAPON_DEAGLE, GetPlayerAmmo(playerid)+val);
    691. if(val < player[playerid][pItemAmmo3])
    692. {
    693. player[playerid][pItemAmmo3]-=val;
    694. }
    695. else
    696. {
    697. player[playerid][pItemAmmo3] = 0;
    698. player[playerid][pItem3] = 0;
    699. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    700. }
    701. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    702. static
    703. fmt_str[] = "*%s достал из-за пазухи дробовик";
    704. new
    705. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    706. format(string, sizeof(string), fmt_str, GetName(playerid));
    707. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    708. return true;
    709. }
    710. case 5:
    711. {
    712. GivePlayerWeapon(playerid, WEAPON_M4, GetPlayerAmmo(playerid)+val);
    713. if(val < player[playerid][pItemAmmo3])
    714. {
    715. player[playerid][pItemAmmo3]-=val;
    716. }
    717. else
    718. {
    719. player[playerid][pItemAmmo3] = 0;
    720. player[playerid][pItem3] = 0;
    721. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    722. }
    723. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    724. static
    725. fmt_str[] = "*%s достал из-за пазухи карабин M4A1";
    726. new
    727. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    728. format(string, sizeof(string), fmt_str, GetName(playerid));
    729. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    730. return true;
    731. }
    732. case 6:
    733. {
    734. GivePlayerWeapon(playerid, WEAPON_AK47, GetPlayerAmmo(playerid)+val);
    735. if(val < player[playerid][pItemAmmo3])
    736. {
    737. player[playerid][pItemAmmo3]-=val;
    738. }
    739. else
    740. {
    741. player[playerid][pItemAmmo3] = 0;
    742. player[playerid][pItem3] = 0;
    743. SavePlayer(playerid, "Item3", player[playerid][pItem3], "d");
    744. }
    745. SavePlayer(playerid, "ItemAmmo3", player[playerid][pItemAmmo3], "d");
    746. static
    747. fmt_str[] = "*%s достал из-за пазухи винтовку AK-47";
    748. new
    749. string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
    750. format(string, sizeof(string), fmt_str, GetName(playerid));
    751. ProxDetector(playerid, 20.0, COLOR_ACTION, string);
    752. return true;
    753. }
    754. }
    755. }
    756. }
    757. }
    758. }
    Последний раз редактировалось SteveStage; 26.11.2019 в 02:05.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Не совсем понятно в чём заключается вопрос.
    Подробнее о том, в каких случаях switch шустрее if, можно почитать тут - https://ziggi.org/pawn-operatory/
    А если вопрос про качество кода, то вообще у тебя много повторяющихся кусков, которые можно объединить, помещаяя всякие названия предметов и т.п. в массивы. Впрочем, это усложнит код, так что пока лучше просто делай так, как делал.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Подробнее о том, в каких случаях switch шустрее if, можно почитать тут - https://ziggi.org/pawn-operatory/.
    Спасибо, но vwv (или как там его) делал подобную тему со сравнениями, но конкретно про switch vs if

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Не совсем понятно в чём заключается вопрос. А если вопрос про качество кода, то вообще у тебя много повторяющихся кусков, которые можно объединить, помещаяя всякие названия предметов и т.п. в массивы. Впрочем, это усложнит код, так что пока лучше просто делай так, как делал.
    Вопрос: будет ли так работать быстрее, чем тоже самое, но через if? Вдруг я не учел какой-нибудь момент, и там можно было заменить switch на if, и код бы работал быстрее. Но как я понял, таких моментов там нету (я не перечислял значения вовсе, да и зачем - есть default, просто на значения с уникальным диалогом надо написать свой case, а остальные switch возьмет под default). Просто хотел узнать мнение о данном коде.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    А если вопрос про качество кода, то вообще у тебя много повторяющихся кусков, которые можно объединить, помещаяя всякие названия предметов и т.п. в массивы. Впрочем, это усложнит код, так что пока лучше просто делай так, как делал.
    Ты намекаешь, что можно сделать проверки быстрее и производительнее? Вроде доступ к массиву медленнее, чем к той же переменной
    Последний раз редактировалось SteveStage; 26.11.2019 в 17:11.

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Спасибо, но vwv (или как там его) делал подобную тему со сравнениями, но конкретно про switch vs if
    И в этой же теме я, вроде, отписывался, кидая ссылку на статью Ziggi =) Замеры там идентичные получились.


    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Вопрос: будет ли так работать быстрее, чем тоже самое, но через if? Вдруг я не учел какой-нибудь момент, и там можно было заменить switch на if, и код бы работал быстрее. Но как я понял, таких моментов там нету (я не перечислял значения вовсе, да и зачем - есть default, просто на значения с уникальным диалогом надо написать свой case, а остальные switch возьмет под default). Просто хотел узнать мнение о данном коде.
    В твоём коде вообще не будет существенной разницы между switch и if. Я тебе не просто так кинул тему с замерами и пояснением того, в каких ситуациях switch выигрывает/проигрывает.
    Ну либо можно просто знать, что основной прирост скорость у switch происходит за счёт того, что данные из переменной берутся один раз, в отличии от if, в которой проверяется несколько значений. Соответственно, ощутимый прирост будет только тогда, когда в switch будет множество отдельных значений сверяться, а не всего несколько штук. Если значений будет мало, то if и switch по скорости существенно отличаться не будут, а вот места switch занимать будет в разы больше.
    Ну и так же если в switch указать промежуток значений ("case 0..10:"), то switch будет сверять значение переменной с каждым значением из промежутка, а не только с начальным и конечным (то бишь, в этом случае if будет быстрее).


    Единственное, что тут можно сделать - это, как я уже ранее писал, объединить идентичный код.
    Последний раз редактировалось DeimoS; 26.11.2019 в 17:17.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #5
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    В твоём коде вообще не будет существенной разницы между switch и if. Я тебе не просто так кинул тему с замерами и пояснением того, в каких ситуациях switch выигрывает/проигрывает.
    Единственное, что тут можно сделать - это, как я уже ранее писал, объединить идентичный код.
    Да, посмотрел зиги, там конструкция
    1. if(i == 40) return true;


    идентична

    1. switch(i)
    2. {
    3. case 40: return true;
    4. }

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Я дополнил предыдущий пост. Перепрочти.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    И в этой же теме я, вроде, отписывался, кидая ссылку на статью Ziggi =) Замеры там идентичные получились.
    Странно, я говорил про это


    Там я не нашел ссылки на статью зиги...

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я дополнил предыдущий пост. Перепрочти.
    Знаю, не стоит использовать диапазон значений, но эта система может быть дополнена дополнительными значениями в связи с вводом на сервер дополнительных доступных предметов в инвентарь, и тогда не придется все переписывать с if на switch, а просто вписать новый case
    Последний раз редактировалось SteveStage; 26.11.2019 в 17:22.

  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Странно, я говорил про это


    Там я не нашел ссылки на статью зиги...
    А, да. Ссылку на ziggi я ему в вк кидал в конфе.

    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Знаю, не стоит использовать диапазон значений, но эта система может быть дополнена дополнительными значениями в связи с вводом на сервер дополнительных доступных предметов в инвентарь, и тогда не придется все переписывать с if на switch, а просто вписать новый case
    Ну вот подобного рода условия:
    1. switch(player[playerid][pItem2])
    2. {
    3. case 0:
    4. {
    5. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    6. !"\
    7. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    8. ");
    9. return true;
    10. }
    11. default:
    12. {
    13. player[playerid][pItemSelect] = 2;
    14. static
    15. fmt_str[] = "{00C0FF}%s";
    16. new
    17. string[sizeof(fmt_str)-2+20+8+1];
    18. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem2]]);
    19.  
    20. SPD(playerid, 13, DSL, string,
    21. !"\
    22. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    23. ");
    24. }
    25. }

    Это точно извращение. Да и зачем дублировать эту проверку для каждого case, если ничего, кроме switch, в диалоге нет? Собственно, как я уже писал, у тебя много дублирующегося кода, который можно объединить.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну вот подобного рода условия:
    1. switch(player[playerid][pItem2])
    2. {
    3. case 0:
    4. {
    5. SPD(playerid, 9365, DSM, !"{00C0FF}Ошибка",
    6. !"\
    7. {00C0FF}Данный слот пуст!", !"{00C0FF}Понятно", !"\
    8. ");
    9. return true;
    10. }
    11. default:
    12. {
    13. player[playerid][pItemSelect] = 2;
    14. static
    15. fmt_str[] = "{00C0FF}%s";
    16. new
    17. string[sizeof(fmt_str)-2+20+8+1];
    18. format(string, sizeof(string), fmt_str, invent_items[player[playerid][pItem2]]);
    19.  
    20. SPD(playerid, 13, DSL, string,
    21. !"\
    22. {00C0FF}Использовать\n{00C0FF}Выбросить", !"{00C0FF}Далее", !"{00C0FF}Назад\
    23. ");
    24. }
    25. }

    Это точно извращение. Да и зачем дублировать эту проверку для каждого case, если ничего, кроме switch, в диалоге нет? Собственно, как я уже писал, у тебя много дублирующегося кода, который можно объединить.
    Ты не заметил, что для каждого слота есть своя переменная в энуме игрока?

    1. player[playerid][pItem1] // Предмет в 1 слоте
    2. player[playerid][pItem2] // Во 2 слоте
    3. player[playerid][pItem3] // В третьем

    И как я объединю проверки?

    Вот сам энум, там 3 переменные для слотов и 3 для запаса

    1. enum pInfo {
    2. pPass[50+1], pMail[60+1], pMoney, pLevel, pAge, pNational, pSkin, pSex, pID, pReferal[MAX_PLAYER_NAME+1], pDateReg[10+1], pExp,
    3. pDeath, pNockout, pItem1, pItem2, pItem3, pItemAmmo1, pItemAmmo2, pItemAmmo3, pItemSelect, pAdmin, pMute, pWarn, pJail,
    4. Float:pX, Float:pY, Float:pZ, Float:pA
    5. }
    6. new
    7. player[MAX_PLAYERS][pInfo];

  10. #10
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Ну так подогнать Item1, Item2, Item3 под массив не вариант? Здесь проще переписать саму логику системы и вопрос профита от if/switch отпадет сам по себе.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •