Guest User

Nokia3310 zmija igrica by Ciwot

a guest
Apr 6th, 2021
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.49 KB | None | 0 0
  1. //============================= By Ciwot v1.0 ==================================
  2. //==================== Vjerovatno nece biti v1.1 ... plaky =====================
  3. #include <a_samp>
  4. #include ..\plugins\streamer.inc
  5.  
  6. #undef MAX_PLAYERS
  7. #define MAX_PLAYERS 5
  8.  
  9. #define DEFAULT_X 1328.4181
  10. #define DEFAULT_Y 2132.8904
  11. #define DEFAULT_Z 11.1
  12. #define DEFAULT_SIZE 3
  13. #define DEFAULT_VWORLD 1500
  14. #define DEFAULT_DIALOGID 1000
  15. #define DEFAULT_TIME 300
  16.  
  17. #define CAMERA_HEIGHT 28.0
  18. #define CAMERA_INCLINE 0.001
  19.  
  20. #define MAX_ZONE_WIDTH 35
  21. #define MAX_ZONE_HEIGHT 20
  22.  
  23. #define MAX_BARRIER_SIZE (MAX_ZONE_WIDTH * MAX_ZONE_HEIGHT) * 5 / 100
  24. #define MAX_ZONE_SIZE (MAX_ZONE_WIDTH * 2) + (MAX_ZONE_HEIGHT * 2) - 4
  25. #define MAX_SNAKE_SIZE (MAX_ZONE_WIDTH - 2) * (MAX_ZONE_HEIGHT - 2)
  26. //================== Boje ukoliko budes dodavao SendClientMesagge ==============
  27. #define CRVENA "{F81414}"
  28. #define BIJELA "{FFFFFF}"
  29.  
  30. enum player_info {
  31. bool: player_start,
  32. player_timer,
  33. bool: player_pause,
  34. player_key1,
  35. player_key2,
  36. bool: player_barrier,
  37. bool: player_collision,
  38. bool: player_fperson,
  39. player_afk
  40. }
  41. new PlayerInfo[MAX_PLAYERS][player_info];
  42.  
  43. new ZoneObject[MAX_PLAYERS][MAX_ZONE_SIZE];
  44. new ZoneText[MAX_PLAYERS];
  45.  
  46. enum snake_info {
  47. Float: snake_x,
  48. Float: snake_y,
  49. snake_object,
  50. Float: snake_oldx,
  51. Float: snake_oldy,
  52. bool: snake_collision
  53. }
  54. new SnakeInfo[MAX_PLAYERS][MAX_SNAKE_SIZE][snake_info];
  55. new SnakeSize[MAX_PLAYERS];
  56.  
  57. enum item_info {
  58. Float: item_x,
  59. Float: item_y,
  60. item_object
  61. }
  62. new ItemInfo[MAX_PLAYERS][item_info];
  63.  
  64. enum barrier_info {
  65. Float: barrier_x,
  66. Float: barrier_y,
  67. barrier_object
  68. }
  69. new BarrierInfo[MAX_PLAYERS][MAX_BARRIER_SIZE][barrier_info];
  70.  
  71. public OnPlayerUpdate(playerid) {
  72. if(PlayerInfo[playerid][player_start] && PlayerInfo[playerid][player_timer]) {
  73. new keys, updown, leftright;
  74. GetPlayerKeys(playerid, keys, updown, leftright);
  75.  
  76. PlayerInfo[playerid][player_afk] = GetTickCount();
  77.  
  78. if(keys == 32) {
  79. if(PlayerInfo[playerid][player_pause]) {
  80. PlayerInfo[playerid][player_pause] = false;
  81. } else {
  82. PlayerInfo[playerid][player_pause] = true;
  83. }
  84. PlayerPlaySound(playerid, 17001, 0.0, 0.0, 0.0);
  85. }
  86.  
  87. if(!PlayerInfo[playerid][player_pause]) {
  88. if(PlayerInfo[playerid][player_fperson]) {
  89. new Float:angle;
  90. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, SnakeInfo[playerid][0][snake_object], E_STREAMER_R_Z, angle);
  91. if(angle == -90.0) {
  92. if(leftright == KEY_LEFT) {
  93. PlayerInfo[playerid][player_key1] = 1;
  94. } else if(leftright == KEY_RIGHT) {
  95. PlayerInfo[playerid][player_key1] = 0;
  96. }
  97. } else if(angle == 90.0) {
  98. if(leftright == KEY_LEFT) {
  99. PlayerInfo[playerid][player_key1] = 0;
  100. } else if(leftright == KEY_RIGHT) {
  101. PlayerInfo[playerid][player_key1] = 1;
  102. }
  103. } else if(angle == 0.0) {
  104. if(leftright == KEY_LEFT) {
  105. PlayerInfo[playerid][player_key1] = 3;
  106. } else if(leftright == KEY_RIGHT) {
  107. PlayerInfo[playerid][player_key1] = 2;
  108. }
  109. } else if(angle == 180.0) {
  110. if(leftright == KEY_LEFT) {
  111. PlayerInfo[playerid][player_key1] = 2;
  112. } else if(leftright == KEY_RIGHT) {
  113. PlayerInfo[playerid][player_key1] = 3;
  114. }
  115. }
  116. } else {
  117. if(updown == KEY_UP && PlayerInfo[playerid][player_key2] != 1) { // Goram
  118. PlayerInfo[playerid][player_key1] = 0;
  119. } else if(updown == KEY_DOWN && PlayerInfo[playerid][player_key2] != 0) { // Dolam
  120. PlayerInfo[playerid][player_key1] = 1;
  121. } else if(leftright == KEY_LEFT && PlayerInfo[playerid][player_key2] != 3) { // Lijevo
  122. PlayerInfo[playerid][player_key1] = 2;
  123. } else if(leftright == KEY_RIGHT && PlayerInfo[playerid][player_key2] != 2) { // Desno
  124. PlayerInfo[playerid][player_key1] = 3;
  125. }
  126. }
  127. }
  128. }
  129. return 1;
  130. }
  131.  
  132. public OnPlayerSpawn(playerid) {
  133. StopGame(playerid, false);
  134. return 1;
  135. }
  136.  
  137. public OnPlayerDeath(playerid, killerid, reason) {
  138. StopGame(playerid, false);
  139. return 1;
  140. }
  141.  
  142. public OnPlayerDisconnect(playerid, reason) {
  143. StopGame(playerid, false);
  144. return 1;
  145. }
  146.  
  147. public OnPlayerCommandText(playerid, cmdtext[]) {
  148. if(strcmp("/nokia3310", cmdtext, true, 10) == 0) { // Komanda je /nokia3310 ukoliko budes mijenjao podesi ovo 10 sto pise u koliko ima znakova tvoja nova komanda
  149. if(PlayerInfo[playerid][player_start]) {
  150. PlayerInfo[playerid][player_pause] = true;
  151. ShowPlayerDialog(playerid, DEFAULT_DIALOGID + 1, DIALOG_STYLE_LIST, "Snake", "- Resetuj pozicije\n- Izadji iz mini igre", "Odaberi", "Nista");
  152. } else {
  153. ShowPlayerDialog(playerid, DEFAULT_DIALOGID + 0, DIALOG_STYLE_TABLIST_HEADERS, "Snake", "Izaberite mod:\n- Normalni mod\n- Expert mod\n- Trening mod\n- Prvo lice", "Odaberi", "Izlaz");
  154. }
  155. return 1;
  156. }
  157. return 0;
  158. }
  159.  
  160. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  161. switch(dialogid) {
  162. case DEFAULT_DIALOGID + 0: {
  163. if(response) {
  164. StartGame(playerid, listitem);
  165. GameTextForPlayer(playerid, "~k~~PED_JUMPING~", 3000, 4);
  166. }
  167. return 1;
  168. }
  169. case DEFAULT_DIALOGID + 1: {
  170. if(response) {
  171. if(listitem == 0) {
  172. RestartGame(playerid);
  173. GameTextForPlayer(playerid, "~k~~PED_JUMPING~", 3000, 4);
  174. } else {
  175. StopGame(playerid);
  176. }
  177. }
  178. return 1;
  179. }
  180. case DEFAULT_DIALOGID + 2: {
  181. if(response) {
  182. RestartGame(playerid);
  183. GameTextForPlayer(playerid, "~k~~PED_JUMPING~", 3000, 4);
  184. } else {
  185. StopGame(playerid);
  186. }
  187. return 1;
  188. }
  189. }
  190. return 1;
  191. }
  192.  
  193. stock StartGame(playerid, mode = 1) {
  194. if(!PlayerInfo[playerid][player_start]) {
  195. switch(mode) {
  196. case 0: {
  197. PlayerInfo[playerid][player_barrier] = false;
  198. PlayerInfo[playerid][player_collision] = false;
  199. PlayerInfo[playerid][player_fperson] = false;
  200. }
  201. case 1: {
  202. PlayerInfo[playerid][player_barrier] = true;
  203. PlayerInfo[playerid][player_collision] = false;
  204. PlayerInfo[playerid][player_fperson] = false;
  205. }
  206. case 2: {
  207. PlayerInfo[playerid][player_barrier] = false;
  208. PlayerInfo[playerid][player_collision] = true;
  209. PlayerInfo[playerid][player_fperson] = false;
  210. }
  211. case 3: {
  212. PlayerInfo[playerid][player_barrier] = false;
  213. PlayerInfo[playerid][player_collision] = false;
  214. PlayerInfo[playerid][player_fperson] = true;
  215. }
  216. }
  217.  
  218. for(new a, Float:x = DEFAULT_X, Float:y = DEFAULT_Y, index; a < MAX_ZONE_HEIGHT; a++) {
  219. for(new b; b < MAX_ZONE_WIDTH; b++) {
  220. if(a == 0 || a == (MAX_ZONE_HEIGHT - 1) || b == 0 || b == (MAX_ZONE_WIDTH - 1)) {
  221. ZoneObject[playerid][index] = CreateDynamicObject(19789, x, y, DEFAULT_Z, 0.0, 0.0, 0.0, DEFAULT_VWORLD, 0, playerid);
  222. SetDynamicObjectMaterial(ZoneObject[playerid][index], 0, 10931, "traingen_sfse", "metpat64", 0xFFFFFFFF);
  223. index++;
  224. }
  225. x += 1.0;
  226. }
  227. x = DEFAULT_X;
  228. y += 1.0;
  229. }
  230.  
  231. ZoneText[playerid] = CreateDynamicObject((PlayerInfo[playerid][player_fperson] ? 19476 : 19483), DEFAULT_X + MAX_ZONE_WIDTH - 1.80, DEFAULT_Y + 0.1, DEFAULT_Z + 1.01, 180.0, 90.0, 90.0, DEFAULT_VWORLD, 0, playerid);
  232.  
  233. CreateSnake(playerid);
  234. if(PlayerInfo[playerid][player_barrier]) {
  235. CreateBarrier(playerid);
  236. }
  237. CreateItem(playerid);
  238.  
  239. new Float:x = DEFAULT_X + MAX_ZONE_WIDTH / 2.0 - 0.5;
  240. new Float:y = DEFAULT_Y + MAX_ZONE_HEIGHT / 2.0 - 0.5;
  241. TogglePlayerControllable(playerid, 0);
  242. SetPlayerVirtualWorld(playerid, DEFAULT_VWORLD);
  243. SetPlayerInterior(playerid, 0);
  244. SetPlayerPos(playerid, x, y, DEFAULT_Z + CAMERA_HEIGHT + 10.0);
  245. if(PlayerInfo[playerid][player_fperson]) {
  246. UpdatePlayerCamera(playerid);
  247. } else {
  248. SetPlayerCameraPos(playerid, x, y - CAMERA_INCLINE, DEFAULT_Z + CAMERA_HEIGHT);
  249. SetPlayerCameraLookAt(playerid, x, y, DEFAULT_Z);
  250. }
  251.  
  252. Streamer_Update(playerid, STREAMER_TYPE_OBJECT);
  253.  
  254. PlayerInfo[playerid][player_pause] = true;
  255. PlayerInfo[playerid][player_start] = true;
  256. PlayerInfo[playerid][player_timer] = SetTimerEx("OnPlayerSnakeUpdate", DEFAULT_TIME, true, "d", playerid);
  257. }
  258. }
  259.  
  260. stock StopGame(playerid, respawn = true) {
  261. if(PlayerInfo[playerid][player_start]) {
  262. if(respawn && IsPlayerConnected(playerid)) {
  263. SpawnPlayer(playerid);
  264. SetCameraBehindPlayer(playerid);
  265. }
  266.  
  267. KillTimer(PlayerInfo[playerid][player_timer]);
  268. PlayerInfo[playerid][player_timer] = 0;
  269. PlayerInfo[playerid][player_pause] = false;
  270. PlayerInfo[playerid][player_start] = false;
  271. PlayerInfo[playerid][player_key1] = 0;
  272. PlayerInfo[playerid][player_key2] = 0;
  273. PlayerInfo[playerid][player_barrier] = false;
  274. PlayerInfo[playerid][player_collision] = false;
  275. PlayerInfo[playerid][player_fperson] = false;
  276.  
  277. for(new i; i < MAX_ZONE_SIZE; i++) {
  278. if(IsValidDynamicObject(ZoneObject[playerid][i])) {
  279. DestroyDynamicObject(ZoneObject[playerid][i]);
  280. }
  281. ZoneObject[playerid][i] = 0;
  282. }
  283.  
  284. if(IsValidDynamicObject(ZoneText[playerid])) {
  285. DestroyDynamicObject(ZoneText[playerid]);
  286. }
  287. ZoneText[playerid] = 0;
  288.  
  289. SnakeSize[playerid] = 0;
  290. for(new i; i < MAX_SNAKE_SIZE; i++) {
  291. if(IsValidDynamicObject(SnakeInfo[playerid][i][snake_object])) {
  292. DestroyDynamicObject(SnakeInfo[playerid][i][snake_object]);
  293. }
  294. SnakeInfo[playerid][i][snake_object] = 0;
  295. SnakeInfo[playerid][i][snake_x] = 0.0;
  296. SnakeInfo[playerid][i][snake_y] = 0.0;
  297. SnakeInfo[playerid][i][snake_oldx] = 0.0;
  298. SnakeInfo[playerid][i][snake_oldy] = 0.0;
  299. SnakeInfo[playerid][i][snake_collision] = false;
  300. }
  301.  
  302. if(IsValidDynamicObject(ItemInfo[playerid][item_object])) {
  303. DestroyDynamicObject(ItemInfo[playerid][item_object]);
  304. }
  305. ItemInfo[playerid][item_object] = 0;
  306. ItemInfo[playerid][item_x] = 0.0;
  307. ItemInfo[playerid][item_y] = 0.0;
  308.  
  309. for(new i; i < MAX_BARRIER_SIZE; i++) {
  310. if(IsValidDynamicObject(BarrierInfo[playerid][i][barrier_object])) {
  311. DestroyDynamicObject(BarrierInfo[playerid][i][barrier_object]);
  312. }
  313. BarrierInfo[playerid][i][barrier_object] = 0;
  314. }
  315. }
  316. }
  317.  
  318. stock RestartGame(playerid) {
  319. if(PlayerInfo[playerid][player_start]) {
  320. CreateSnake(playerid);
  321. if(PlayerInfo[playerid][player_barrier]) {
  322. CreateBarrier(playerid);
  323. }
  324. CreateItem(playerid);
  325.  
  326. if(PlayerInfo[playerid][player_fperson]) {
  327. UpdatePlayerCamera(playerid);
  328. }
  329.  
  330. Streamer_Update(playerid, STREAMER_TYPE_OBJECT);
  331.  
  332. PlayerInfo[playerid][player_pause] = true;
  333.  
  334. KillTimer(PlayerInfo[playerid][player_timer]);
  335. PlayerInfo[playerid][player_timer] = SetTimerEx("OnPlayerSnakeUpdate", DEFAULT_TIME, true, "d", playerid);
  336. }
  337. }
  338.  
  339. stock CreateSnake(playerid) {
  340. PlayerInfo[playerid][player_key1] = 3;
  341. PlayerInfo[playerid][player_key2] = 3;
  342. SnakeSize[playerid] = DEFAULT_SIZE;
  343.  
  344. new Float:y = DEFAULT_Y + 2.0 + random(MAX_ZONE_HEIGHT - 4);
  345. for(new i; i < MAX_SNAKE_SIZE; i++) {
  346. if(IsValidDynamicObject(SnakeInfo[playerid][i][snake_object])) {
  347. DestroyDynamicObject(SnakeInfo[playerid][i][snake_object]);
  348. }
  349.  
  350. if(i < SnakeSize[playerid]) {
  351. SnakeInfo[playerid][i][snake_x] = SnakeInfo[playerid][i][snake_oldx] = DEFAULT_X + DEFAULT_SIZE - i + 1.0;
  352. SnakeInfo[playerid][i][snake_y] = SnakeInfo[playerid][i][snake_oldy] = y;
  353.  
  354. SnakeInfo[playerid][i][snake_object] = CreateDynamicObject(19789, SnakeInfo[playerid][i][snake_x], SnakeInfo[playerid][i][snake_y], DEFAULT_Z, 0.0, 0.0, 90.0, DEFAULT_VWORLD, 0, playerid);
  355. if(i == 0) {
  356. SetDynamicObjectMaterial(SnakeInfo[playerid][i][snake_object], 0, 17079, "cuntwland", "ws_freeway4", 0xFFFFFFFF);
  357. } else {
  358. SetDynamicObjectMaterial(SnakeInfo[playerid][i][snake_object], 0, 8538, "vgsrailroad", "concreteyellow256 copy", 0xFFFFFFFF);
  359. }
  360. } else {
  361. SnakeInfo[playerid][i][snake_object] = 0;
  362. SnakeInfo[playerid][i][snake_x] = SnakeInfo[playerid][i][snake_oldx] = 0.0;
  363. SnakeInfo[playerid][i][snake_y] = SnakeInfo[playerid][i][snake_oldy] = 0.0;
  364. }
  365. SnakeInfo[playerid][i][snake_collision] = false;
  366. }
  367. }
  368.  
  369. stock CreateItem(playerid) {
  370. create: {
  371. ItemInfo[playerid][item_x] = DEFAULT_X + 1.0 + random(MAX_ZONE_WIDTH - 2);
  372. ItemInfo[playerid][item_y] = DEFAULT_Y + 1.0 + random(MAX_ZONE_HEIGHT - 2);
  373.  
  374. for(new i = SnakeSize[playerid] - 1; i >= 0; i--) {
  375. if(ItemInfo[playerid][item_x] == SnakeInfo[playerid][i][snake_x]
  376. && ItemInfo[playerid][item_y] == SnakeInfo[playerid][i][snake_y]) {
  377. goto create;
  378. }
  379. }
  380.  
  381. if(PlayerInfo[playerid][player_barrier]) {
  382. for(new i; i < MAX_BARRIER_SIZE; i++) {
  383. if(ItemInfo[playerid][item_x] == BarrierInfo[playerid][i][barrier_x]
  384. && ItemInfo[playerid][item_y] == BarrierInfo[playerid][i][barrier_y]) {
  385. goto create;
  386. }
  387. }
  388. }
  389. }
  390.  
  391. if(IsValidDynamicObject(ItemInfo[playerid][item_object])) {
  392. DestroyDynamicObject(ItemInfo[playerid][item_object]);
  393. }
  394. ItemInfo[playerid][item_object] = CreateDynamicObject(19789, ItemInfo[playerid][item_x], ItemInfo[playerid][item_y], DEFAULT_Z, 0.0, 0.0, 0.0, DEFAULT_VWORLD, 0, playerid);
  395. switch(random(5)) {
  396. case 0: SetDynamicObjectMaterial(ItemInfo[playerid][item_object], 0, 8839, "vgsecarshow", "lightblue2_32", 0xFFFFFFFF);
  397. case 1: SetDynamicObjectMaterial(ItemInfo[playerid][item_object], 0, 8839, "vgsecarshow", "lightblue_64", 0xFFFFFFFF);
  398. case 2: SetDynamicObjectMaterial(ItemInfo[playerid][item_object], 0, 8839, "vgsecarshow", "lightgreen2_32", 0xFFFFFFFF);
  399. case 3: SetDynamicObjectMaterial(ItemInfo[playerid][item_object], 0, 8839, "vgsecarshow", "lightpurple2_32", 0xFFFFFFFF);
  400. case 4: SetDynamicObjectMaterial(ItemInfo[playerid][item_object], 0, 8839, "vgsecarshow", "lightred2_32", 0xFFFFFFFF);
  401. }
  402. }
  403.  
  404. stock CreateBarrier(playerid) {
  405. if(PlayerInfo[playerid][player_barrier]) {
  406. for(new a; a < MAX_BARRIER_SIZE; a++) {
  407. create: {
  408. BarrierInfo[playerid][a][barrier_x] = DEFAULT_X + 2.0 + random(MAX_ZONE_WIDTH - 4);
  409. BarrierInfo[playerid][a][barrier_y] = DEFAULT_Y + 2.0 + random(MAX_ZONE_HEIGHT - 4);
  410.  
  411. for(new b; b < a; b++) {
  412. if((BarrierInfo[playerid][a][barrier_x] == BarrierInfo[playerid][b][barrier_x] || BarrierInfo[playerid][a][barrier_x] == (BarrierInfo[playerid][b][barrier_x] + 1.0))
  413. && (BarrierInfo[playerid][a][barrier_y] == BarrierInfo[playerid][b][barrier_y] || BarrierInfo[playerid][a][barrier_y] == (BarrierInfo[playerid][b][barrier_y] - 1.0))) {
  414. goto create;
  415. }
  416. }
  417.  
  418. for(new i = SnakeSize[playerid]; i >= 0; i--) {
  419. if(BarrierInfo[playerid][a][barrier_x] == SnakeInfo[playerid][i][snake_x]
  420. && BarrierInfo[playerid][a][barrier_y] == SnakeInfo[playerid][i][snake_y]) {
  421. goto create;
  422. }
  423. }
  424.  
  425. if(BarrierInfo[playerid][a][barrier_x] == (SnakeInfo[playerid][0][snake_x] + 1.0)
  426. && BarrierInfo[playerid][a][barrier_y] == SnakeInfo[playerid][0][snake_y]) {
  427. goto create;
  428. }
  429.  
  430. if(BarrierInfo[playerid][a][barrier_x] == ItemInfo[playerid][item_x]
  431. && BarrierInfo[playerid][a][barrier_y] == ItemInfo[playerid][item_y]) {
  432. goto create;
  433. }
  434. }
  435.  
  436. if(IsValidDynamicObject(BarrierInfo[playerid][a][barrier_object])) {
  437. DestroyDynamicObject(BarrierInfo[playerid][a][barrier_object]);
  438. }
  439. BarrierInfo[playerid][a][barrier_object] = CreateDynamicObject(19789, BarrierInfo[playerid][a][barrier_x], BarrierInfo[playerid][a][barrier_y], DEFAULT_Z, 0.0, 0.0, 0.0, DEFAULT_VWORLD, 0, playerid);
  440. SetDynamicObjectMaterial(BarrierInfo[playerid][a][barrier_object], 0, 10931, "traingen_sfse", "metpat64", 0xFFFFFFFF);
  441. }
  442. }
  443. }
  444.  
  445. stock GetSnakeScore(playerid) {
  446. if(PlayerInfo[playerid][player_start]) {
  447. return SnakeSize[playerid] - DEFAULT_SIZE;
  448. }
  449. return 0;
  450. }
  451.  
  452. stock GetSnakeMaxScore(playerid) {
  453. if(PlayerInfo[playerid][player_start]) {
  454. if(PlayerInfo[playerid][player_barrier]) {
  455. return MAX_SNAKE_SIZE - MAX_BARRIER_SIZE;
  456. }
  457. return MAX_SNAKE_SIZE;
  458. }
  459. return 0;
  460. }
  461.  
  462. stock UpdatePlayerCamera(playerid) {
  463. new Float:angle;
  464. Streamer_GetFloatData(STREAMER_TYPE_OBJECT, SnakeInfo[playerid][0][snake_object], E_STREAMER_R_Z, angle);
  465.  
  466. SetPlayerCameraPos(playerid, SnakeInfo[playerid][0][snake_x] + (2.7 * floatsin(-angle, degrees)), SnakeInfo[playerid][0][snake_y] + (2.7 * floatcos(-angle, degrees)), (DEFAULT_Z + 2.0));
  467. SetPlayerCameraLookAt(playerid, SnakeInfo[playerid][0][snake_x] + (-5.0 * floatsin(-angle, degrees)), SnakeInfo[playerid][0][snake_y] + (-5.0 * floatcos(-angle, degrees)), (DEFAULT_Z + 0.5), 2);
  468.  
  469. SetDynamicObjectPos(ZoneText[playerid], SnakeInfo[playerid][0][snake_x] + (1.2 * floatsin(-angle, degrees)), SnakeInfo[playerid][0][snake_y] + (1.2 * floatcos(-angle, degrees)), (DEFAULT_Z + 1.15));
  470. SetDynamicObjectRot(ZoneText[playerid], 0.0, -15.0, angle + 90.0);
  471. }
  472.  
  473. forward OnPlayerSnakeUpdate(playerid);
  474. public OnPlayerSnakeUpdate(playerid) {
  475. if(PlayerInfo[playerid][player_start]) {
  476. if(!PlayerInfo[playerid][player_pause]) {
  477. if(GetTickCount() - PlayerInfo[playerid][player_afk] > 1000) {
  478. PlayerInfo[playerid][player_pause] = true;
  479. } else {
  480. for(new i = SnakeSize[playerid]; i > 0; i--) {
  481. SnakeInfo[playerid][i][snake_x] = SnakeInfo[playerid][i - 1][snake_x];
  482. SnakeInfo[playerid][i][snake_y] = SnakeInfo[playerid][i - 1][snake_y];
  483. SnakeInfo[playerid][i][snake_collision] = SnakeInfo[playerid][i - 1][snake_collision];
  484. }
  485. if(PlayerInfo[playerid][player_key1] == 0) {
  486. SnakeInfo[playerid][0][snake_y] += 1.0;
  487. } else if(PlayerInfo[playerid][player_key1] == 1) {
  488. SnakeInfo[playerid][0][snake_y] -= 1.0;
  489. } else if(PlayerInfo[playerid][player_key1] == 2) {
  490. SnakeInfo[playerid][0][snake_x] -= 1.0;
  491. } else if(PlayerInfo[playerid][player_key1] == 3) {
  492. SnakeInfo[playerid][0][snake_x] += 1.0;
  493. }
  494. PlayerInfo[playerid][player_key2] = PlayerInfo[playerid][player_key1];
  495.  
  496. if(PlayerInfo[playerid][player_collision]) {
  497. if(SnakeInfo[playerid][0][snake_x] > (MAX_ZONE_WIDTH + DEFAULT_X - 2.0)) {
  498. SnakeInfo[playerid][0][snake_x] = DEFAULT_X + 1.0;
  499. SnakeInfo[playerid][0][snake_collision] = true;
  500. } else if(SnakeInfo[playerid][0][snake_x] < (DEFAULT_X + 1.0)) {
  501. SnakeInfo[playerid][0][snake_x] = MAX_ZONE_WIDTH + DEFAULT_X - 2.0;
  502. SnakeInfo[playerid][0][snake_collision] = true;
  503. } else if(SnakeInfo[playerid][0][snake_y] > (MAX_ZONE_HEIGHT + DEFAULT_Y - 2.0)) {
  504. SnakeInfo[playerid][0][snake_y] = DEFAULT_Y + 1.0;
  505. SnakeInfo[playerid][0][snake_collision] = true;
  506. } else if(SnakeInfo[playerid][0][snake_y] < (DEFAULT_Y + 1.0)) {
  507. SnakeInfo[playerid][0][snake_y] = MAX_ZONE_HEIGHT + DEFAULT_Y - 2.0;
  508. SnakeInfo[playerid][0][snake_collision] = true;
  509. } else {
  510. SnakeInfo[playerid][0][snake_collision] = false;
  511. }
  512. } else {
  513. if(SnakeInfo[playerid][0][snake_x] > (MAX_ZONE_WIDTH + DEFAULT_X - 2.0)
  514. || SnakeInfo[playerid][0][snake_x] < (DEFAULT_X + 1.0)
  515. || SnakeInfo[playerid][0][snake_y] > (MAX_ZONE_HEIGHT + DEFAULT_Y - 2.0)
  516. || SnakeInfo[playerid][0][snake_y] < (DEFAULT_Y + 1.0)) {
  517. SetDynamicObjectMaterialText(ZoneText[playerid], 0, "Game Over", 40, "Ariel", 25, 1, 0xFFDC143C, 0, 1);
  518. KillTimer(PlayerInfo[playerid][player_timer]);
  519. PlayerInfo[playerid][player_timer] = 0;
  520. PlayerPlaySound(playerid, 14408, 0.0, 0.0, 0.0);
  521. new string[64 + 1];
  522. format(string, sizeof string, "Igra zavrsena, pokupio si: %d", GetSnakeScore(playerid));
  523. ShowPlayerDialog(playerid, DEFAULT_DIALOGID + 2, DIALOG_STYLE_MSGBOX, "Izaberi", string, "Igraj opet", "Izlaz");
  524. }
  525. }
  526.  
  527. if(SnakeSize[playerid] > 4) {
  528. for(new i = SnakeSize[playerid] - 1; i > 0; i--) {
  529. if(SnakeInfo[playerid][0][snake_x] == SnakeInfo[playerid][i][snake_x]
  530. && SnakeInfo[playerid][0][snake_y] == SnakeInfo[playerid][i][snake_y]) {
  531. SetDynamicObjectMaterialText(ZoneText[playerid], 0, "Game Over", 40, "Ariel", 25, 1, 0xFFDC143C, 0, 1);
  532. KillTimer(PlayerInfo[playerid][player_timer]);
  533. PlayerInfo[playerid][player_timer] = 0;
  534. PlayerPlaySound(playerid, 14408, 0.0, 0.0, 0.0);
  535. new string[64 + 1];
  536. format(string, sizeof string, "Igra zavrsena, pokupio si: %d", GetSnakeScore(playerid));
  537. ShowPlayerDialog(playerid, DEFAULT_DIALOGID + 2, DIALOG_STYLE_MSGBOX, "Izaberi", string, "Igraj opet", "Izlaz");
  538. }
  539. }
  540. }
  541.  
  542. if(PlayerInfo[playerid][player_barrier]) {
  543. for(new i; i < MAX_BARRIER_SIZE; i++) {
  544. if(SnakeInfo[playerid][0][snake_x] == BarrierInfo[playerid][i][barrier_x]
  545. && SnakeInfo[playerid][0][snake_y] == BarrierInfo[playerid][i][barrier_y]) {
  546. SetDynamicObjectMaterialText(ZoneText[playerid], 0, "Game Over", 40, "Ariel", 25, 1, 0xFFDC143C, 0, 1);
  547. KillTimer(PlayerInfo[playerid][player_timer]);
  548. PlayerInfo[playerid][player_timer] = 0;
  549. PlayerPlaySound(playerid, 14408, 0.0, 0.0, 0.0);
  550. new string[64 + 1];
  551. format(string, sizeof string, "Igra zavrsena, pojeo si: %d", GetSnakeScore(playerid));
  552. ShowPlayerDialog(playerid, DEFAULT_DIALOGID + 2, DIALOG_STYLE_MSGBOX, "Izaberi", string, "Igraj opet", "Izlaz");
  553. }
  554. }
  555. }
  556.  
  557. if(SnakeInfo[playerid][0][snake_x] == ItemInfo[playerid][item_x]
  558. && SnakeInfo[playerid][0][snake_y] == ItemInfo[playerid][item_y]) {
  559. SnakeSize[playerid]++;
  560. if(SnakeSize[playerid] >= GetSnakeMaxScore(playerid)) {
  561. SetDynamicObjectMaterialText(ZoneText[playerid], 0, "Bravo", 40, "Ariel", 25, 1, 0xFF32CD32, 0, 1);
  562. KillTimer(PlayerInfo[playerid][player_timer]);
  563. PlayerInfo[playerid][player_timer] = 0;
  564. PlayerPlaySound(playerid, 31205, 0.0, 0.0, 0.0);
  565. new string[64 + 1];
  566. format(string, sizeof string, "Igra zavrsena, pojeo si : %d", GetSnakeScore(playerid));
  567. ShowPlayerDialog(playerid, DEFAULT_DIALOGID + 2, DIALOG_STYLE_MSGBOX, "Izaberi", string, "Igraj opet", "Izlaz");
  568. } else {
  569. CreateItem(playerid);
  570. PlayerPlaySound(playerid, 21002, 0.0, 0.0, 0.0);
  571. }
  572. }
  573.  
  574. if(PlayerInfo[playerid][player_timer]) {
  575. for(new i; i < SnakeSize[playerid]; i++) {
  576. if(IsValidDynamicObject(SnakeInfo[playerid][i][snake_object])) {
  577. new Float:angle;
  578. if(SnakeInfo[playerid][i][snake_oldx] < SnakeInfo[playerid][i][snake_x]) { // desno
  579. angle = 90.0;
  580. } else if(SnakeInfo[playerid][i][snake_oldx] > SnakeInfo[playerid][i][snake_x]) { // lijevo
  581. angle = -90.0;
  582. } else if(SnakeInfo[playerid][i][snake_oldy] < SnakeInfo[playerid][i][snake_y]) { // gore
  583. angle = 180.0;
  584. } else { // dole
  585. angle = 0.0;
  586. }
  587. if(SnakeInfo[playerid][i][snake_collision]) {
  588. angle += 180.0;
  589. }
  590. SetDynamicObjectPos(SnakeInfo[playerid][i][snake_object], SnakeInfo[playerid][i][snake_x], SnakeInfo[playerid][i][snake_y], DEFAULT_Z);
  591. SetDynamicObjectRot(SnakeInfo[playerid][i][snake_object], 0.0, 0.0, angle);
  592. } else {
  593. SnakeInfo[playerid][i][snake_object] = CreateDynamicObject(19789, SnakeInfo[playerid][i][snake_x], SnakeInfo[playerid][i][snake_y], DEFAULT_Z, 0.0, 0.0, 0.0, DEFAULT_VWORLD, 0, playerid);
  594. SetDynamicObjectMaterial(SnakeInfo[playerid][i][snake_object], 0, 8538, "vgsrailroad", "concreteyellow256 copy", 0xFFFFFFFF);
  595. }
  596.  
  597. SnakeInfo[playerid][i][snake_oldx] = SnakeInfo[playerid][i][snake_x];
  598. SnakeInfo[playerid][i][snake_oldy] = SnakeInfo[playerid][i][snake_y];
  599. }
  600.  
  601. new string[32 + 1];
  602. format(string, sizeof string, "Pojeo: %d", GetSnakeScore(playerid));
  603. SetDynamicObjectMaterialText(ZoneText[playerid], 0, string, 40, "Ariel", 25, 1, 0xFFFFFFFF, 0, 1);
  604.  
  605. if(PlayerInfo[playerid][player_fperson]) {
  606. UpdatePlayerCamera(playerid);
  607. }
  608.  
  609. Streamer_Update(playerid, STREAMER_TYPE_OBJECT);
  610. }
  611. }
  612. } else {
  613. SetDynamicObjectMaterialText(ZoneText[playerid], 0, "Start", 40, "Ariel", 25, 1, 0xFF0000CD, 0, 1);
  614. }
  615. }
  616. }
  617. // Ostavi credits... ako si ckapi prepisi ih sebi :D
  618.  
Advertisement
Add Comment
Please, Sign In to add comment