Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±

    Динамические пикапы

    Ух, как же я люблю делать динамические системы, а потом бомбить почему оно не работает.

    Добрый вечер, джентельмены, уже хрен знает сколько времени пытаюсь сделать динамическую систему пикапов, но вечно выходит какой-то казус. То оно все работает, создается пикап - но не телепортирует когда использую клавишу, то не создает пикап. Я в отчаянии и прошу Вашей помощи, ибо по-другому скорей всего пробью себе череп чем-то острым, или мой ноутбук попадет в гроб для железок.

    Собственно, паблики загрузки/создания/обновления и команды для создания/удаления/редактирования


      Открыть/закрыть
    1. new ENTER_COUNT = 0;
    2. const MAX_ENTER_NAME = 32;
    3. const MAX_ENTERS = 500;
    4.  
    5. enum enters_headers
    6. {
    7. e_id,
    8. e_name[MAX_ENTER_NAME],
    9. Float:e_coordX,
    10. Float:e_coordY,
    11. Float:e_coordZ,
    12. Float:e_coordA,
    13. Float:e_int_coordX,
    14. Float:e_int_coordY,
    15. Float:e_int_coordZ,
    16. Float:e_int_coordA,
    17. e_exterior_vw,
    18. e_exterior_int,
    19. e_interior,
    20. e_virtual_world,
    21. e_pickup,
    22. e_locked,
    23. e_model,
    24. e_author
    25. };
    26. new enter_sys[MAX_ENTERS][enters_headers];
    27.  
    28. stock MySQL_Enter_SaveInt(enterid, const row[], const int)
    29. {
    30. static query[45 - 6 + 25 + 11 + 1];
    31. format(query,sizeof(query),"UPDATE `enters` SET `%s` = '%i' WHERE id = '%i'",
    32. row,
    33. int,
    34. enter_sys[enterid][id]);
    35. mysql_query(mysql_connect_id, query, false);
    36. }
    37.  
    38. stock MySQL_Enter_SaveFloat(enterid, const row[], const Float:int)
    39. {
    40. static query[45 - 6 + 25 + 11 + 1];
    41. format(query,sizeof(query),"UPDATE `enters` SET `%s` = '%f' WHERE id = '%i'",
    42. row,
    43. int,
    44. enter_sys[enterid][id]);
    45. mysql_query(mysql_connect_id, query, false);
    46. }
    47.  
    48. stock MySQL_Enter_SaveString(enterid, const row[], const text[])
    49. {
    50. static query[45 - 6 + 25 + 128 + 1];
    51. format(query,sizeof(query),"UPDATE `enters` SET `%s` = '%s' WHERE id = '%i'",
    52. row,
    53. text,
    54. enter_sys[enterid][id]);
    55. mysql_query(mysql_connect_id, query, false);
    56. }
    57. void EnterLoad_CallBack()
    58. {
    59. new i = 0;
    60. cache_get_row_count(ENTER_COUNT);
    61.  
    62. if(ENTER_COUNT > MAX_ENTERS){
    63. print("[Enters_System]: Предупреждение. Увеличьте размер MAX_ENTERS, чтобы система могла загрузить все данные с БД.");
    64. return 1;
    65. }
    66.  
    67. while(ENTER_COUNT > 0)
    68. {
    69. cache_get_value_index_int(i, 0, enter_sys[i][e_id]);
    70. cache_get_value_index(i, 1, enter_sys[i][e_name]);
    71. cache_get_value_index_float(i, 2, enter_sys[i][e_coordX]);
    72. cache_get_value_index_float(i, 3, enter_sys[i][e_coordY]);
    73. cache_get_value_index_float(i, 4, enter_sys[i][e_coordZ]);
    74. cache_get_value_index_float(i, 5, enter_sys[i][e_coordA]);
    75. cache_get_value_index_float(i, 6, enter_sys[i][e_int_coordX]);
    76. cache_get_value_index_float(i, 7, enter_sys[i][e_int_coordY]);
    77. cache_get_value_index_float(i, 8, enter_sys[i][e_int_coordZ]);
    78. cache_get_value_index_float(i, 9, enter_sys[i][e_int_coordA]);
    79. cache_get_value_index_int(i, 10, enter_sys[i][e_exterior_int]);
    80. cache_get_value_index_int(i, 11, enter_sys[i][e_exterior_vw]);
    81. cache_get_value_index_int(i, 12, enter_sys[i][e_interior]);
    82. cache_get_value_index_int(i, 13, enter_sys[i][e_virtual_world]);
    83. cache_get_value_index_int(i, 14, enter_sys[i][e_locked]);
    84. cache_get_value_index_int(i, 15, enter_sys[i][e_model]);
    85. Enter_Refresh(i);
    86. i++;
    87. }
    88. printf("[Enters_System]: Загружено. Всего динамических пикапов: %i", ENTER_COUNT);
    89. return 1;
    90. }
    91. void Enter_Create(playerid, enter_model, const enter_name[])
    92. {
    93. if(ENTER_COUNT > MAX_ENTERS)
    94. {
    95. SCM(playerid,-1,!""Error" Для того чтобы создать пикап, вам необходимо увеличить константу MAX_ENTERS!");
    96. return 1;
    97. }
    98.  
    99. ENTER_COUNT++;
    100.  
    101. static
    102. enteradd_query[264 + MAX_ENTER_NAME + 8 + 8 + 8 + 8 + MAX_PLAYER_NAME + 2 + 10 + 5 + 1],
    103. Float:point_x,
    104. Float:point_y,
    105. Float:point_z,
    106. Float:point_a;
    107.  
    108. GetPlayerPos(playerid, point_x, point_y, point_z);
    109. GetPlayerFacingAngle(playerid, point_a);
    110. mysql_format(
    111. mysql_connect_id,
    112. enteradd_query,
    113. sizeof(enteradd_query),
    114. "INSERT INTO `enters` ( \
    115. `id`, `e_model`, `e_name`, \
    116. `e_coordX`, `e_coordY`, `e_coordZ`, `e_coordA`, \
    117. `e_exterior_vw`, `e_exterior_int`, \
    118. `author` \
    119. ) \
    120. VALUES (\
    121. '%i', '%i', '%e', \
    122. '%.4f', '%.4f', '%.4f', '%.4f', \
    123. '%i', '%i',\
    124. '%e')",
    125. ENTER_COUNT, enter_model, enter_name,
    126. point_x, point_y, point_z, point_a,
    127. player[playerid][pName]
    128. );
    129. new Cache: addenter_cache = mysql_query(mysql_connect_id, enteradd_query);
    130.  
    131. if(cache_is_valid(addenter_cache))
    132. {
    133. SendClientMessage(playerid, -1, ""Notice"Вы успешно создали пикап!");
    134. printf("[Enters_System]: %s создал пикап на координатах %.2f, %.2f, %.2f, %.2f| Название: %s | Модель пикапа: %i| ID: %i |",
    135. player[playerid][pName],
    136. point_x, point_y, point_z, point_a,
    137. enter_name,
    138. enter_model,
    139. ENTER_COUNT
    140. );
    141.  
    142. Enter_Refresh(ENTER_COUNT - 1);
    143.  
    144. /* enter_sys[ENTER_COUNT - 1][id] = ENTER_COUNT - 1;
    145.   enter_sys[ENTER_COUNT - 1][e_coord_x] = point_x;
    146.   enter_sys[ENTER_COUNT - 1][e_coord_y] = point_y;
    147.   enter_sys[ENTER_COUNT - 1][e_coord_z] = point_z;
    148.   enter_sys[ENTER_COUNT - 1][e_coord_a] = point_a;
    149.   strcat(enter_sys[ENTER_COUNT - 1][e_name], enter_name);
    150.   enter_sys[ENTER_COUNT - 1][e_model] = enter_model;*/
    151. }
    152. cache_delete(addenter_cache);
    153. return 1;
    154. }
    155. void Enter_Refresh(enterid)
    156. {
    157. if (enterid != -1)
    158. {
    159. if (IsValidDynamicPickup(enter_sys[enterid][e_pickup])) DestroyDynamicPickup(enter_sys[enterid][e_pickup]);
    160.  
    161. enter_sys[enterid][e_pickup] = CreateDynamicPickup(19197, 23, enter_sys[enterid][e_coordX], enter_sys[enterid][e_coordY], enter_sys[enterid][e_coordZ], enter_sys[enterid][e_exterior_vw]);
    162. }
    163. return 1;
    164. }
    165. void Enter_Delete(playerid, enterid)
    166. {
    167. new enterdel_query[36+11+1],
    168. result,
    169. Cache: delenter_cache;
    170.  
    171. mysql_format(
    172. mysql_connect_id,
    173. enterdel_query,
    174. sizeof(enterdel_query),
    175. "DELETE FROM enters WHERE id = %i",
    176. enterid
    177. );
    178.  
    179. delenter_cache = mysql_query(mysql_connect_id, enterdel_query);
    180. cache_get_result_count(result);
    181. if(result)
    182. {
    183. SCM(playerid, -1, ""Notice"Пикап был удален.");
    184. printf("[Enter System]: Пикап был удален.");
    185.  
    186. //if (IsValidDynamic3DTextLabel(enter_sys[enterid][h_text])) DestroyDynamic3DTextLabel(enter_sys[enterid][h_text]);
    187. if (IsValidDynamicPickup(enter_sys[enterid][e_pickup])) DestroyDynamicPickup(enter_sys[enterid][e_pickup]);
    188. }
    189. else
    190. {
    191. SCM(playerid, -1, ""Error"Пикап не найден.");
    192. printf("[Enter System]: Пикап не найден.");
    193. }
    194. cache_delete(delenter_cache);
    195. return 1;
    196. }
    197. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    198. {
    199. if (PRESSED(KEY_WALK)) {
    200. for(new i = 0; i < ENTER_COUNT; i++) {
    201. if (IsPlayerInRangeOfPoint(playerid, 2.5, enter_sys[i][e_coordX], enter_sys[i][e_coordY], enter_sys[i][e_coordZ]))
    202. {
    203. //LoadingStreamer(playerid, 4000);
    204. SetPlayerPosEx(playerid, enter_sys[i][e_int_coordX], enter_sys[i][e_int_coordY], enter_sys[i][e_int_coordZ] + 1.0);
    205. SetPlayerFacingAngle(playerid, enter_sys[i][e_int_coordA]);
    206.  
    207. SetPlayerInterior(playerid, enter_sys[i][e_interior]);
    208. SetPlayerVirtualWorld(playerid, enter_sys[i][e_virtual_world]);
    209.  
    210. return 1;
    211. }
    212. }
    213. }
    214. #if defined enters_OnPlayerKeyStateChange // "урезаем" название до 31 символа
    215. enters_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
    216. #endif
    217. return 1;
    218. }
    219. #if defined _ALS_OnPlayerKeyStateChange // "урезаем" название до 31 символа
    220. #undef OnPlayerKeyStateChange
    221. #else
    222. #define _ALS_OnPlayerKeyStateChange
    223. #endif
    224. #define OnPlayerKeyStateChange enters_OnPlayerKeyStateChange
    225. #if defined enters_OnPlayerKeyStateChange
    226. forward enters_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
    227. CMD:createenter(playerid, const params[])
    228. {
    229. new
    230. enter_model,
    231. enter_id,
    232. enter_name[MAX_ENTER_NAME],
    233. string[144+1];
    234.  
    235. if (sscanf(params, "is[36]", enter_model, enter_name)) return SendClientMessageEx(playerid, -1, "/createenter [model] [name]");
    236.  
    237. for (new i = 0; i != MAX_ENTERS; i ++) if (!strcmp(enter_sys[i][e_name], enter_name, true))
    238. {
    239. format(string, sizeof(string), "Название \"%s\" используется (ID: %d).", enter_name, i);
    240. SendClientMessageEx(playerid, -1, string);
    241. }
    242. enter_id = Enter_Create(playerid, enter_model, enter_name);
    243.  
    244. if (enter_id == -1) return SendClientMessageEx(playerid, -1, "Сервер достиг лимит динамических пикапов.");
    245.  
    246. format(string, sizeof(string), "Вы успешно создали пикап под ID: %i | Название: %s.", enter_id, enter_name);
    247. SendClientMessageEx(playerid, -1, string);
    248. return 1;
    249. }
    250.  
    251. CMD:destroyenter(playerid, const params[])
    252. {
    253. new string[40], number;
    254.  
    255. //if (player[playerid][pAdmin] < 5) return SendClientMessageEx(playerid, "У вас нет прав использовать эту команду.");
    256.  
    257. if (sscanf(params, "i", number)) return SendClientMessageEx(playerid, -1, "/destroyenter [enter id]");
    258.  
    259. if (number < -1 || number >= MAX_ENTERS) return SendClientMessageEx(playerid, -1, "Вы указали недопустимый ID пикапа");
    260.  
    261. Enter_Delete(playerid, number);
    262. format(string, sizeof(string), "Вы успешно удалили пикап под ID: %i.", number);
    263. SendClientMessageEx(playerid, -1, string);
    264. return 1;
    265. }
    266. CMD:editenter(playerid, const params[])
    267. {
    268. new
    269. enterid,
    270. type[24],
    271. string[128];
    272.  
    273. //if (player[playerid][pAdmin] < 5)
    274. // return SendClientMessageEx(playerid, -1, ""Error"Недостаточно полномочий.");
    275.  
    276. if (sscanf(params, "is[24]S()[128]", enterid, type, string))
    277. {
    278. SendClientMessageEx(playerid, -1, "/editenter [id] [params]");
    279. SendClientMessageEx(playerid, -1, "[Параметры]:{FFFFFF} location, interior, model, name");
    280. return true;
    281. }
    282. if (enterid < 0 || enterid >= MAX_ENTERS)
    283. return SendClientMessageEx(playerid, -1, "Вы указали недопустимый ID дома.");
    284.  
    285. if (!strcmp(type, "location", true))
    286. {
    287. GetPlayerPos(playerid, enter_sys[enterid][e_coordX], enter_sys[enterid][e_coordY], enter_sys[enterid][e_coordZ]);
    288. GetPlayerFacingAngle(playerid, enter_sys[enterid][e_coordA]);
    289.  
    290. enter_sys[enterid][e_exterior_vw] = GetPlayerVirtualWorld(playerid);
    291. enter_sys[enterid][e_exterior_int] = GetPlayerInterior(playerid);
    292.  
    293. MySQL_Enter_SaveFloat(enterid, "e_coordX", enter_sys[enterid][e_coordX]);
    294. MySQL_Enter_SaveFloat(enterid, "e_coordY", enter_sys[enterid][e_coordY]);
    295. MySQL_Enter_SaveFloat(enterid, "e_coordZ", enter_sys[enterid][e_coordZ]);
    296. MySQL_Enter_SaveFloat(enterid, "e_coordA", enter_sys[enterid][e_coordA]);
    297. MySQL_Enter_SaveInt(enterid, "e_exterior_vw", enter_sys[enterid][e_exterior_vw]);
    298. MySQL_Enter_SaveInt(enterid, "e_exterior_int", enter_sys[enterid][e_exterior_int]);
    299.  
    300. Enter_Refresh(enterid);
    301.  
    302. format(string, sizeof(string), "[ADMIN]: %s изменил местоположение пикапа ID: %i.", player[playerid][pName], enterid);
    303. SendClientMessageEx(playerid, -1, string);
    304. }
    305. else if (!strcmp(type, "interior", true))
    306. {
    307. GetPlayerPos(playerid, enter_sys[enterid][e_int_coordX], enter_sys[enterid][e_int_coordY], enter_sys[enterid][e_int_coordZ]);
    308. GetPlayerFacingAngle(playerid, enter_sys[enterid][e_int_coordA]);
    309.  
    310. enter_sys[enterid][e_interior] = GetPlayerInterior(playerid);
    311. enter_sys[enterid][e_virtual_world] = GetPlayerVirtualWorld(playerid);
    312.  
    313. foreach (new i : Player)
    314. {
    315. if (player[i][pProperty_House] == enter_sys[enterid][e_id])
    316. {
    317. SetPlayerPos(i, enter_sys[enterid][e_int_coordX], enter_sys[enterid][e_int_coordY], enter_sys[enterid][e_int_coordZ]);
    318. SetPlayerFacingAngle(i, enter_sys[enterid][e_int_coordA]);
    319.  
    320. SetPlayerInterior(i, enter_sys[enterid][e_interior]);
    321. SetPlayerVirtualWorld(i, enter_sys[enterid][e_virtual_world]);
    322. }
    323. }
    324. MySQL_Enter_SaveFloat(enterid, "e_int_coordX", enter_sys[enterid][e_int_coordX]);
    325. MySQL_Enter_SaveFloat(enterid, "e_int_coordY", enter_sys[enterid][e_int_coordY]);
    326. MySQL_Enter_SaveFloat(enterid, "e_int_coordZ", enter_sys[enterid][e_int_coordZ]);
    327. MySQL_Enter_SaveFloat(enterid, "e_int_coordA", enter_sys[enterid][e_int_coordA]);
    328. MySQL_Enter_SaveInt(enterid, "e_interior", enter_sys[enterid][e_interior]);
    329. MySQL_Enter_SaveInt(enterid, "e_virtual_world", enter_sys[enterid][e_virtual_world]);
    330.  
    331. format(string, sizeof(string), "[ADMIN]: %s изменил точку выхода пикапа ID: %i.", player[playerid][pName], enterid);
    332. SendClientMessageEx(playerid, -1, string);
    333. }
    334. else if (!strcmp(type, "model", true))
    335. {
    336. new new_model;
    337.  
    338. if (sscanf(string, "i", new_model))
    339. return SendClientMessageEx(playerid, -1, "/editenter [id] [new model]");
    340.  
    341. enter_sys[enterid][e_model] = new_model;
    342.  
    343. MySQL_Enter_SaveInt(enterid, "e_model", enter_sys[enterid][e_model]);
    344. Enter_Refresh(enterid);
    345.  
    346. format(string, sizeof(string), "[ADMIN]: %s изменил модель пикапа ID: %i на %d.", player[playerid][pName], enterid, new_model);
    347. SendClientMessageEx(playerid, -1, string);
    348. }
    349. else if (!strcmp(type, "name", true))
    350. {
    351. new new_name[32];
    352.  
    353. if (sscanf(string, "s[32]", new_name))
    354. return SendClientMessageEx(playerid, -1, "/editenter [id] [new name]");
    355.  
    356. enter_sys[enterid][e_name] = new_name;
    357.  
    358. MySQL_Enter_SaveString(enterid, "e_name", enter_sys[enterid][e_name]);
    359. Enter_Refresh(enterid);
    360.  
    361. format(string, sizeof(string), "[ADMIN]: %s изменил название пикапа ID: %i на \"%s\".", player[playerid][pName], enterid, new_name);
    362. SendClientMessageEx(playerid, -1, string);
    363. }
    364. return true;
    365. }


    Надеюсь, на Вашу помощь и подробное описание, где мои кривые руки использовали что-то неверно, потому что просто скинуть фикс - будет слишком легко, я хочу понять, в чем моя ошибка. Спасибо <3

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

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

    Хотя уже то, что ты каждую переменную сохраняешь отдельным запросом, вместо того, чтоб составить один большой запрос - крайне сомнительное решение. Да и для реализации того, что ты задумал, достаточно хранить ID пикапа, а всё остальное уже изменять напрямую в памяти стримера через эти функции:
    1. // Natives (Data Manipulation)
    2.  
    3. native Streamer_GetFloatData(type, STREAMER_ALL_TAGS id, data, &Float:result);
    4. native Streamer_SetFloatData(type, STREAMER_ALL_TAGS id, data, Float:value);
    5. native Streamer_GetIntData(type, STREAMER_ALL_TAGS id, data);
    6. native Streamer_SetIntData(type, STREAMER_ALL_TAGS id, data, value);
    7. native Streamer_GetArrayData(type, STREAMER_ALL_TAGS id, data, dest[], maxdest = sizeof dest);
    8. native Streamer_SetArrayData(type, STREAMER_ALL_TAGS id, data, const src[], maxsrc = sizeof src);
    9. native Streamer_IsInArrayData(type, STREAMER_ALL_TAGS id, data, value);
    10. native Streamer_AppendArrayData(type, STREAMER_ALL_TAGS id, data, value);
    11. native Streamer_RemoveArrayData(type, STREAMER_ALL_TAGS id, data, value);
    12. native Streamer_GetUpperBound(type);

    Тогда и пересоздавать пикап не нужно будет постоянно.
    В общем, гораздо проще будет заказать у кого-то систему с нуля, чем ждать, что кто-то подскажет тебе исправление твоей системы, ибо сейчас ты предлагаешь вслепую определить какую-то проблему, которую ты толком не описал (не описал как вызвать баг и т.п.)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ты, конечно, можешь понадеяться, что кто-то потратит определённое количество своего времени, чтоб сначала разобраться в твоём коде, а потом найти ошибку, но я сомневаюсь, что такие люди найдутся. Уж очень большая у тебя система для подобного рода помощи. Тут тебе только заказ исправления системы за деньги может помочь.

    Хотя уже то, что ты каждую переменную сохраняешь отдельным запросом, вместо того, чтоб составить один большой запрос - крайне сомнительное решение. Да и для реализации того, что ты задумал, достаточно хранить ID пикапа, а всё остальное уже изменять напрямую в памяти стримера через эти функции:
    1. // Natives (Data Manipulation)
    2.  
    3. native Streamer_GetFloatData(type, STREAMER_ALL_TAGS id, data, &Float:result);
    4. native Streamer_SetFloatData(type, STREAMER_ALL_TAGS id, data, Float:value);
    5. native Streamer_GetIntData(type, STREAMER_ALL_TAGS id, data);
    6. native Streamer_SetIntData(type, STREAMER_ALL_TAGS id, data, value);
    7. native Streamer_GetArrayData(type, STREAMER_ALL_TAGS id, data, dest[], maxdest = sizeof dest);
    8. native Streamer_SetArrayData(type, STREAMER_ALL_TAGS id, data, const src[], maxsrc = sizeof src);
    9. native Streamer_IsInArrayData(type, STREAMER_ALL_TAGS id, data, value);
    10. native Streamer_AppendArrayData(type, STREAMER_ALL_TAGS id, data, value);
    11. native Streamer_RemoveArrayData(type, STREAMER_ALL_TAGS id, data, value);
    12. native Streamer_GetUpperBound(type);

    Тогда и пересоздавать пикап не нужно будет постоянно.
    В общем, гораздо проще будет заказать у кого-то систему с нуля, чем ждать, что кто-то подскажет тебе исправление твоей системы, ибо сейчас ты предлагаешь вслепую определить какую-то проблему, которую ты толком не описал (не описал как вызвать баг и т.п.)
    Баг в том и заключается, что система ИЛИ не создает пикап (но, в базе есть данные), ИЛИ пикап создается, но когда я жму на клавишу, чтобы перейти по коордам - не срабатывает.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну так логируй ID только что созданного пикапа в случае, если он не создаётся. Если ID будет, значит косяк с координатами или виртуальным миром.
    То же самое и с действием на кнопку: логируй координаты всех пикапов и смотри координаты того, который должен был сработать, но не срабатывает.

    К слову, цикл, который срабатывает на кнопку, хорошо бы снабдить проверкой на виртуальный мир перед тем, как ты координаты проверяешь. Сверить виртуальный мир будет быстрее, чем вызвать IsPlayerInRangeOfPoint. А этим ты приличное число пикапов сразу отсеешь.

    Ну и немного субъективщины: имхо, но гораздо удобнее было бы реализовать ту твою команду с редактированием пикапа через диалог. Там можно и текущие значения удобно отобразить, и сразу несколько значений изменить, и отменить изменения, в случае чего.
    Последний раз редактировалось DeimoS; 02.11.2018 в 12:36.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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