×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [мини игра lua] Мафия
1 / 2 › »
[мини игра lua] Мафия
Deff83
« Citoyen »
1546474800000
    • Deff83#0000
    • Profil
    • Derniers messages
    • Tribu
#1
  3
Мафия
Мафия может заразить мышку, доктор будет предлагать прибыть в больницу, и делая вечерний обход может вас вылечить или убить с некоторой вероятностью, при этом зараженный каждое время суток может умереть с определенной вероятностью.
Полиция может посадить одного из участников в тюрьму - и при достижении количества заключенных равному количеству мафии - наступает утро казни, где народ выбирает кого казнить. Цель мафии - убить жителей, полицейских и доктора. Полицейские должны задерживать мафию. Доктор лечить больных смертельным вирусом. Жители просто должны выжить.
Для запуска смените поле adm = свойник#хештег
Для новогоднего оформления смените поле new_years с false на true (new_years = true)
Для оформления Animeska6#0000 смените поле bool_animeska_maps с false на true (bool_animeska_maps = true)
Авторы Deff83#0000 и Ilyamikheev#4068
Большое спасибо Илье Михееву за помощь и оформление игры. Пишите в комменты что добавить к мини-игре мафия.
Добавлено окно для более простого выбора участников. Приятной игры.
https://pp.userapi.com/c848520/v848520526/f350e/FYUMd9CpJ5c.jpg
https://pp.userapi.com/c848520/v848520526/f3517/rCVExc3WaHo.jpg
https://pp.userapi.com/c848520/v848520526/f3520/sXF-sDWLZ1o.jpg
Добавлен информационный чат. Изменено описание правил игры, доступно на кнопку help.
Добавлено дневное событие голосования для всех мышек.
Добавлен автостарт игры 30 сек.
Код для копирования
(Deff83 на Github)
Код lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
---------------------- PROPERTIES ----------------------
--adm = "<admin nickname with hash>"
adm = "Deff83#0000"
per_kill_virus = 25 -------------in %
per_kill_doctor = 30 -------------in %
random_event_chance_start = 40 -------------in %
next_day_delay = 30 --- in seconds
new_years = false --- true for Christmas decoration
bool_animeska_maps = false ---maps of Animeska6#0000
bool_post_get = true --add left mouse
bool_auto_start = true--bool autostart
timer_start_auto = 30--time auto start in second
------------------ ADVANCED PROPERTIES -----------------
-- WARNING
-- If automatic sort is on, mafia, police, villager list and the doctor field MUST BE EMPTY.
-- Recommended to use automatic sort if you can.
automatic_sort = true
mafia_list = {}
police_list = {}
villager_list = {}
doctor = ""
doctor_count = 0
random_event_chance = random_event_chance_start

die_virus = 0
die_doctor = 0
changeboolg = true

--------------------- DO NOT TOUCH ---------------------
--------------------- GAME STATES ---------------------
infected = {}
criminals = {}
hospital = {}
ignormice = {} ---------security kill
rolewin = {}
stringwin = ""

massinfo = {}
massinfoplus = {}-----mouseinfo plus

math.randomseed(os.time())
-- Screen size 800x400
users = {}
start = false
viselebool = false
kill = 0
superadm = adm
tfm.exec.disableAutoScore(true)
tfm.exec.disableAutoShaman(true)
tfm.exec.disableAutoNewGame(true)
tfm.exec.disableAfkDeath(true)
tfm.exec.newGame("@7544429")
tfm.exec.setGameTime(0);

maps_deff = {"@7542886",--DAY
"@7544426",--EVENING
"@7544429",--NIGHT
"@7544428"}--MORNING

maps = maps_deff

maps_animeska = {"@7696886", "@7696889", "@7696890", "@7696874"}
maps_new_year = {"@7548278", "@7548281", "@7548283", "@7548280"}

if new_years then
maps = maps_new_year
end

if bool_animeska_maps then
maps = maps_animeska
end

time = 0
day_cycle = 1
day = 1

for nick in pairs(tfm.get.room.playerList) do
tfm.exec.setPlayerScore(nick,0,false)
end

mapName = "<VP>Мафия<BL> | <N>Время: <V>%ds</V><BL> | <N>Мышь: <V>%d<N>/<V>%d<N> <BL> | <N>Создатели: <BV>Deff83#0000, Ilyamikheev#4068\n"


ui.addTextArea(-1, "<p align='center'> <a href='event:start'>Запустить!", adm, 120, 350, 100, 20, 1, 0x00ff00, 0.7,true)
ui.addTextArea(-2, "<p align='center'> <a href='event:game'>Участвовать", nil, 10, 350, 100, 20, 1, 0xffffff, 0.7,true)
ui.addTextArea(-65, "<p align='center'> Конкурс \"Мафия\"!", nil, 10, 27, 700, 20, 1, 0x0000ff, 0.7,true)
ui.addTextArea(-66, "<a href='event:help'>help", nil, 725, 27, 50, 20, 1, 0x0000ff, 0.7,true)

ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)

tfm.exec.addPhysicObject(0, 390, 650, {type=10, width=20, height=120})
tfm.exec.addPhysicObject(1, 390, 510, {type=0, width=20, height=150})


-----rule

function show_rule(pl)
ui.addPopup(-10000, 0, "<p align='center'><font size='40px' color='#ffff00'>Конкурс \"Мафия\"</font><br><font size='14px'><font color='#00ff00'>авторы Deff83#0000 и Ilyamikheev#4068</font><br><font color='red'>Мафия</font> может заразить мышку, и при попадании в больницу вечером делают укол который может вас вылечить или убить с вероятностью ".. per_kill_doctor .."%, при этом <font color='#ff0000'>зараженный</font> каждое время суток может умереть с вероятностью ".. per_kill_virus .."%. <br><font color='#ffffff'>Доктор</font> утром получает возможность лечить любого игрока, кроме себя<br><font color='#0000ff'>Полиция</font> может посадить одного из участников в тюрьму - и при <br>достижении количества <font color='#ff0000'>заключенных</font> равному или большему чем количество <font color='#ff0000'>мафии</font> - наступает утро казни, где народ выбирает кого казнить, остальные не выбранные будут помилованы. Цель <font color='#ff0000'>мафии</font> - убить <font color='#00ff00'>жителей</font>, <font color='#0000ff'>полицейских</font> и доктора. <font color='#0000ff'>Полицейские</font> должны задерживать <font color='#ff0000'>мафию</font>. Доктор лечить больных смертельным вирусом. <font color='#00ff00'>Жители</font> просто должны выжить.<br>При наступлении дня голосования - <font color='#00ff00'>все игроки</font> (в том числе и умершие) могут голосовать или за то что посадить кого-то (<font color='#0000ff'>polise</font>), или заразить (<font color='#ff0000'>mafia</font>).<br>В случае если мафия вся умрет повышается процент дневного события до <font color='#ffaa00'>100%</font> (Эпидемия, Амнистия или Голосование) </font></p>", pl, 100, 50, 600, true)
end
show_rule(nil)

function countElements(table)
count = 0
for n, __ in pairs(table) do
if not isContains(ignormice, n) then
count = count + 1
end
end
return count
end

function getAllPlayers()
result = {}
for n, v in pairs(villager_list) do
result[n] = v
end
for n, v in pairs(police_list) do
result[n] = v
end
for n, v in pairs(mafia_list) do
result[n] = v
end
for i=1, doctor_count do
result[doctor] = {}
end
return result
end

function isContains(table, element)
for p, val in pairs(table) do
if p == element then

return true
end
end
return false
end

function string.split(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result;
end

function string.starts(str, start)
return str:sub(1, #start) == start
end

function eventNewGame()
------Wall--------------
------------------------
-- Moved to the eventLoop and changeMap
for nick in pairs(tfm.get.room.playerList) do
tfm.exec.setPlayerScore(nick,0,false)
end
end

function changeMap(map)
users_coords = {}
doctor_count = 0
for p, i in pairs(tfm.get.room.playerList) do
user = {}
user.x = i.x
user.y = i.y
users_coords[p] = user
end
tfm.exec.newGame(map)

if doctor ~= "" then
doctor_count = 1
else
doctor_count = 0
end
for n, i in pairs(users_coords) do
-- print(n, i.x, i.y)
tfm.exec.movePlayer(n, i.x, i.y, false, 0, 0, true)
end
tfm.exec.addPhysicObject(0, 390, 650, {type=10, width=20, height=120})
tfm.exec.addPhysicObject(1, 390, 510, {type=0, width=20, height=150})
--tfm.exec.addPhysicObject(2, 1500, 550, {type=tfm.enum.ground.invisible, width=500, height=200})
end
-- Magic. Do not touch.
victims = {}
suspect = {}
function eventPopupAnswer(id, p, cmd)
---------------mafia choose----------------
print(id)
if id == -58100 then--message admin
if cmd ~= "" then
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]:"..cmd.."</font>"
messageinfo(nil)
end
end

if id == -58200 then--virus per
if cmd ~= "" then
if type(tonumber(cmd)) == 'number' then
if tonumber(cmd) <= 100 and tonumber(cmd)>=0 then
per_kill_virus = tonumber(cmd)
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]:Изменил процент смерти от вируса: "..cmd.."%</font>"
messageinfo(nil)
else
ui.addPopup(-58200, 0, "<p align='center'>введите число в диапазоне от 0 до 100", adm, 200, 200, 400, true)
end
else
ui.addPopup(-58200, 0, "<p align='center'>введите число", adm, 200, 200, 400, true)
end

end
end
if id == -58300 then--doctor per
if cmd ~= "" then
if type(tonumber(cmd)) == 'number' then
if tonumber(cmd) <= 100 and tonumber(cmd)>=0 then
per_kill_doctor = tonumber(cmd)
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]:Изменил процент смерти от укола: "..cmd.."%</font>"
messageinfo(nil)
else
ui.addPopup(-58300, 0, "<p align='center'>введите число в диапазоне от 0 до 100", adm, 200, 200, 400, true)
end
else
ui.addPopup(-58300, 0, "<p align='center'>введите число", adm, 200, 200, 400, true)
end
end
end
if id == -58400 then--event per
if cmd ~= "" then
if type(tonumber(cmd)) == 'number' then
if tonumber(cmd) <= 100 and tonumber(cmd)>=0 then
random_event_chance = tonumber(cmd)
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]:Изменил процент вероятности дневного события: "..cmd.."%</font>"
messageinfo(nil)
else
ui.addPopup(-58300, 0, "<p align='center'>введите число в диапазоне от 0 до 100", adm, 200, 200, 400, true)
end
else
ui.addPopup(-58300, 0, "<p align='center'>введите число", adm, 200, 200, 400, true)
end
end
end


--if id > -3100 and id < -3000 then
-- print(cmd)
-- if isContains(victims, cmd) then
-- victims[cmd] = victims[cmd] + 1
-- else
-- victims[cmd] = 1
-- end
--end
--if id>-4200 and id<-4100 then
-- print(cmd)
-- if isContains(suspect, cmd) then
-- suspect[cmd] = suspect[cmd] + 1
-- else
-- suspect[cmd] = 1
-- end
--end
--if id==-4400 then
-- if cmd ~= p then
-- infected[cmd] = nil
-- else
-- ui.addPopup(-4400, 2, "<p align='center'>Вы не можете вылечить себя! ^_^. Введите другую мышку.</p>", p, 200, 200, 400, true)
-- end
--end
end
function eventNewPlayer(playerName)
tfm.exec.respawnPlayer (playerName)
tfm.exec.setNameColor(playerName, 0xFFFFFF)
ui.addTextArea(-65, "<p align='center'> Конкурс \"Мафия\"!", playerName, 10, 27, 700, 20, 1, 0x0000ff, 0.7,true)
ui.addTextArea(-66, "<a href='event:help'>help", nil, 725, 27, 50, 20, 1, 0x0000ff, 0.7,true)
if start then
-- Nothing for watch is here.
if bool_post_get then
massinfo[#massinfo+1] = "<font color='#777777'>["..playerName.."]:".."Присоединился к игре!</font>"
end
ui.addPopup(-90000, 0, "<p align='center'>Вы можете участвовать тока в событии дневного голосования.", playerName, 200, 200, 400, true)
else
local ji = 1
for i, n in pairs(users) do
ji = ji + 1

ui.addTextArea(ji, "<p align='center'>" .. users[i].player, playerName, ((ji-1)%8)*100+5, math.floor((ji-1)/8)*30+100, 90, 20, 1, 1, 0.8, true)

end

ui.addTextArea(-2, "<p align='center'> <a href='event:game'>Участвовать", playerName, 10, 350, 100, 20, 1, 0xffffff, 0.7,true)
show_rule(playerName)
end

tfm.exec.setPlayerScore(playerName,0,false)

if playerName==superadm then
adm = playerName
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
end


if start then
ui.removeTextArea(-2, nil)
else
if playerName==superadm then
adm = playerName
ui.removeTextArea(-1, nil)
ui.addTextArea(-1, "<p align='center'> <a href='event:start'>Запустить!", adm, 120, 350, 100, 20, 1, 0x00ff00, 0.7,true)
end
end

end


function eventPlayerDied(nick)
tfm.exec.respawnPlayer(nick)
end




function playerChoice(id, player, prompt, cancelable, showself)
message = "<p align='center'><b>" .. prompt .. "</b><br>"
x = 0
for i, j in pairs(getAllPlayers()) do
if i ~= player or showself then
message = message .. "<a href='event:" .. i .. "'>" .. i .. " </a>"
x = x + 1
if x % 2 == 0 then
message = message .. "<br>"
else
message = message .. " "
end
end
end
if cancelable then
message = message .. "<br><br><a href='event:nil'>Отмена</a>"
end
message = message .. "</p>"
ui.addTextArea(id, message, player, 190, 150, 400, nil, 1, 1, 1, true)
end

viselvibr = {}

iter = 0
vote_side_polish = 0
vote_side_mafia = 0

function initGame()

time = 0
time_auto = 0

massinfo = {}
random_event_chance = random_event_chance_start
changeboolg = true
die_virus = 0
die_doctor = 0
if countElements(users) < 4 and automatic_sort then
ui.addPopup(-64, 0, "<p align='center'><font color='#ff0000'>Ошибка!</font><br>Нужно минимум четыре игрока для старта</p>", adm, 300, 200, nil, true)
return
end

massinfo[#massinfo+1] = "<font color='#ffff00'>START GAME</font>"

ui.removeTextArea(-8, nil)

for nick in pairs(tfm.get.room.playerList) do
tfm.exec.setPlayerScore(nick,0,false)
end

start = true
ui.removeTextArea(-1, nil)
ui.removeTextArea(-2, nil)
ui.removeTextArea(-8, nil)
ui.removeTextArea(-9, nil)

counter = 1
for i, _ in pairs(users) do
ui.removeTextArea(counter, nil)
counter = counter + 1
end

if automatic_sort then
sh_users = {}
for i, val in pairs(users) do
table.insert(sh_users, math.random(1, countElements(sh_users) + 1), i)
end
doctor = sh_users[1]
table.remove(sh_users, 1)
target = 0
for _, i in pairs(sh_users) do
if target == 0 then
villager_list[i] = {}
elseif target == 1 then
police_list[i] = {}
elseif target == 2 then
mafia_list[i] = {}
end
target = target + 1
if target > 2 then
target = 0
end
end
end

---------------------------------First Day--------------------
changeMap(maps[1])
ui.addTextArea(27100, "<p align='right'><font color='#00ff00'>Жители: " .. countElements(villager_list) .. "</font><br><font color='#0000ff'>Полиция: " .. countElements(police_list) .. "</font><br><font color='#ff0000'>Мафия: " .. countElements(mafia_list) .. "</font><br>Доктора: " .. doctor_count .. "</p>", nil, 670, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
ui.updateTextArea (-65, "<p align='center'>День знакомств..." , nil )
---------------------------TEXT FOR MAFIA-------------------------------
dialog_text = "Мафия:<br>"
textwho = "<p align='center'>ваша роль<br><font size='30px' color='#ff0000'>Мафия</font><br>Ваша цель - убить всех жителей, полицейских, и доктора.<br></p>"
for p, x in pairs(mafia_list) do
dialog_text = dialog_text .. "<font color='#ff0000'>" .. p .. "</font><br>"
end
i = 0
for p, val in pairs(mafia_list) do
i = i+1
ui.addTextArea(-100+i, dialog_text .. "</p>", p, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 1, true)
ui.addTextArea(-1100+i, textwho .. "</p>", p, 210, 60, 300, nil, 0x000001, 0xFFFFFF, 1, true)
end
---------------------------TEXT FOR Polis-------------------------------
dialog_text = "Полиция:<br>"
textwho = "<p align='center'>ваша роль<br><font size='30px' color='#0000ff'>Полицейский</font><br>Ваша цель - задержать всех членов мафии.<br></p>"
for p, x in pairs(police_list) do
dialog_text = dialog_text .. "<font color='#0000ff'>" .. p .. "</font><br>"
end
i = 0
for p, val in pairs(police_list) do
i = i+1
ui.addTextArea(-200+i, dialog_text .. "</p>", p, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
ui.addTextArea(-1200+i, textwho .. "</p>", p, 210, 60, 300, nil, 0x000001, 0xFFFFFF, 1, true)
end

---------------------------TEXT FOR Vilige-------------------------------
dialog_text = "Вы житель"
textwho = "<p align='center'>ваша роль<br><font size='30px' color='#00ff00'>Мирный житель</font><br>Ваша цель - выжить в этом городе<br>"
i = 0
for p, val in pairs(villager_list) do
i = i+1
ui.addTextArea(-300+i, dialog_text .. "</p>", p, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
ui.addTextArea(-1300+i, textwho .. "</p>", p, 210, 60, 300, nil, 0x000001, 0xFFFFFF, 1, true)
end
---------------------------TEXT FOR Doctor-------------------------------
dialog_text = "<p align='center'>ваша роль<br><font size='30px' color='#ffffff'>Доктор</font><br>Ваша цель - брать на лечение и лечить больных<br>"
ui.addTextArea(-1400, dialog_text .. "</p>", doctor, 210, 60, 300, nil, 0x000001, 0xFFFFFF, 0.7, true)
ui.addTextArea(-400, "Вы доктор</p>", doctor, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
end


function getSwitch(boolt)
if boolt then
return "вкл"
else
return "выкл"
end
end

function eventTextAreaCallback(id, p, cmd)

if cmd == "help" then
show_rule(p)
end

if cmd == "adminpanel" then
ui.addTextArea(-58100, "<br><a href='event:adminmessage'>Написать сообщение в чат</a><br><a href='event:adminchange_per_kill_virus'>Поменять процент смерти от вируса</a><br><a href='event:adminchange_per_kill_doctor'>Поменять процент смерти от укола</a><br><a href='event:adminchange_per_event'>Поменять процент вероятности дневного события</a><br><a href='event:adminchange_style_maps'>Поменять стиль карт</a><br><a href='event:bool_auto_start'>Автостарт:"..getSwitch(bool_auto_start).."</a><br><br><a href='event:adminchange_close'>Close</a>", adm, 100, 150, 600, nil, 1, 1, 1, true)
end

if cmd == "adminmessage" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addPopup(-58100, 2, "<p align='center'>Введите сообщение!", adm, 200, 200, 400, true)
end
if cmd == "adminchange_per_kill_virus" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addPopup(-58200, 2, "<p align='center'>Введите значение процента смерти от вируса:", adm, 200, 200, 400, true)
end
if cmd == "adminchange_per_kill_doctor" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addPopup(-58300, 2, "<p align='center'>Введите значение процента смерти от укола:", adm, 200, 200, 400, true)
end
if cmd == "adminchange_per_event" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addPopup(-58400, 2, "<p align='center'>Введите значение процента вероятности дневного события:", adm, 200, 200, 400, true)
end
if cmd == "adminchange_style_maps" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addTextArea(-58100, "<br><a href='event:style1'>Основной стиль Deff83</a><br><a href='event:style2'>Новогодний стиль</a><br><a href='event:style3'>Стиль розовый Animeska6#0000</a><>br<br><a href='event:adminchange_close'>Close</a>", adm, 100, 150, 600, nil, 1, 1, 1, true)
end

if cmd == "bool_auto_start" then
bool_auto_start = not bool_auto_start
if bool_auto_start then
time = 0
time_auto = 0
end
ui.addTextArea(-58100, "<br><a href='event:adminmessage'>Написать сообщение в чат</a><br><a href='event:adminchange_per_kill_virus'>Поменять процент смерти от вируса</a><br><a href='event:adminchange_per_kill_doctor'>Поменять процент смерти от укола</a><br><a href='event:adminchange_per_event'>Поменять процент вероятности дневного события</a><br><a href='event:adminchange_style_maps'>Поменять стиль карт</a><br><a href='event:bool_auto_start'>Автостарт:"..getSwitch(bool_auto_start).."</a><br><br><a href='event:adminchange_close'>Close</a>", adm, 100, 150, 600, nil, 1, 1, 1, true)
end
if cmd == "adminchange_close" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
end
if cmd == "style1" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
maps = maps_deff
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]: включен основной стиль оформления</font>"
messageinfo(nil)
end
if cmd == "style2" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
maps = maps_new_year
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]: включен новогодний стиль оформления</font>"
messageinfo(nil)
end
if cmd == "style3" then
ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)
maps = maps_animeska
massinfo[#massinfo+1] = "<font color='#ff33ff'>[ADMIN]: включен розовый стиль оформления</font>"
messageinfo(nil)

end

if cmd == "golos_polish" then
ui.removeTextArea(-59000, p)
ui.removeTextArea(-59100, p)
if isContains(police_list, p)==false and isContains(mafia_list, p)==false then
playerChoice(-61000+iter, p, "Выберите мафию", true, false)
end
iter = iter + 1
end
if cmd == "golos_mafia" then
ui.removeTextArea(-59000, p)
ui.removeTextArea(-59100, p)
if isContains(police_list, p)==false and isContains(mafia_list, p)==false then
playerChoice(-60000+iter, p, "Выберите жертву", true, false)
end
iter = iter + 1
end


if cmd == "plusinfo" then
ui.removeTextArea(-57000, p)
ui.removeTextArea(-57100, p)
if isContains(massinfoplus, p) then

else
massinfoplus[p] = 1
end
messageinfo(p)
end
if cmd == "plusinfom" then
ui.removeTextArea(-57000, p)
ui.removeTextArea(-57100, p)
if isContains(massinfoplus, p) then
massinfoplus[p] = nil
else

end
messageinfo(p)
end

if cmd == "nil" then
ui.removeTextArea(id, p)
elseif id > -3100 and id < -3000 then
if isContains(victims, cmd) then
victims[cmd] = victims[cmd] + 1
else
victims[cmd] = 1
end
ui.removeTextArea(id, p)
elseif id == -4400 then
infected[cmd] = nil
massinfo[#massinfo+1]="[Доктор]:Вылечил "..cmd
ui.removeTextArea(id, p)
elseif id > -7200 and id < -7100 then
if isContains(suspect, cmd) then
suspect[cmd] = suspect[cmd] + 1
else
suspect[cmd] = 1
end
ui.removeTextArea(id, p)

elseif id >= -60000 and id < -59900 then--golos_mafia
if isContains(victims, cmd) then
victims[cmd] = victims[cmd] + 1
else
victims[cmd] = 1
end
ui.removeTextArea(id, p)
vote_side_mafia = vote_side_mafia + 1
elseif id >= -61000 and id < -60900 then--golos_polish
if isContains(suspect, cmd) then
suspect[cmd] = suspect[cmd] + 1
else
suspect[cmd] = 1
end
ui.removeTextArea(id, p)
vote_side_polish = vote_side_polish + 1
elseif cmd == "game" then

ui.removeTextArea(-2, p)
local propust = true

for i, n in pairs(users) do
if users[i].player == p then
propust = false
end
end

if propust then
local user = {}
user.player = p
users[p] = user
local num = countElements(users)
ui.addTextArea(num, "<p align='center'>" .. p, nil, ((num-1)%8)*100+5, math.floor((num-1)/8)*30+100, 90, 20, 1, 1, 0.8, true)
end

end
if cmd == "start" then
initGame()
end
if cmd == "viselitsa" then
-----------------------------------------------------------
for i=0, countmapa(mafia_list) do

for x = 0, countmapa(criminals) do
ui.removeTextArea(-4100-i-(x+1)*10000, p)
end
end
for i=0, countmapa(police_list) do

for x = 0, countmapa(criminals) do
ui.removeTextArea(-4200-i-(x+1)*10000, p)
end
end
for i=0, countmapa(villager_list) do
ui.removeTextArea(-4300+i, p)
for x = 0, countmapa(criminals) do
ui.removeTextArea(-4300-i-(x+1)*10000, p)
end
end

for x = 0, countmapa(criminals) do
ui.removeTextArea(-4400-(x+1)*10000, p)
end


local viselitsa_id = math.abs(math.floor(id/10000)+1)
print(viselitsa_id)
for p, val in pairs(criminals) do
if val.id == viselitsa_id then
print(p)

if isContains(viselvibr, p) then
viselvibr[p] = viselvibr[p] + 1
else
viselvibr[p] = 1
end
end
end
end
if cmd == "gotodoctor" then
ui.removeTextArea(5100, p)
tfm.exec.movePlayer(p,250,490,false,0,0,false)
hospital[p] = {}
infected[p] = nil
tfm.exec.setNameColor(p, 0xffff00)

end
end

function eventPlayerLeft(pName)
if bool_post_get then
massinfo[#massinfo+1] = "<font color='#777777'>["..pName.."]:".."Покинул комнату!</font>"
end
delplayer(pName)
if pName == adm then

for nick in pairs(tfm.get.room.playerList) do
adm = nick
if start == false then
ui.addTextArea(-1, "<p align='center'> <a href='event:start'>Запустить!", adm, 120, 350, 100, 20, 1, 0x00ff00, 0.7,true)
end
return
end
end
end


function randomEvent()
if math.random(0, 100) <= random_event_chance then
event = math.random(0, 2)
if changeboolg == false then
event = math.random(0, 6)
if event > 2 then
event = 2
end
end
if event == 0 then
all_users = {}
for p, _ in pairs(mafia_list) do
table.insert(all_users, p)
end
for p, _ in pairs(villager_list) do
table.insert(all_users, p)
end
for p, _ in pairs(police_list) do
table.insert(all_users, p)
end
table.insert(all_users, doctor)
for _, p in pairs(all_users) do
if not (isContains(hospital, p) or isContains(criminals, p)) then
tfm.exec.setNameColor(p, 0xff0000)
infected[p] = 1
end
end
ui.updateTextArea (-65, "<p align='center'><font color='#ff0000'>День эпидемии! Все жители города заражены смертельным вирусом.</font></p>" , nil )
massinfo[#massinfo+1] = "<font color='#ff0000'>ЭПИДЕМИЯ!!! все заражены</font>"
elseif event == 1 then
criminals = {}
tfm.exec.removePhysicObject(0)
ui.updateTextArea (-65, "<p align='center'><font color='#ffff00'>День амнистии! Всех заключенных выпустили.</font></p>" , nil )
massinfo[#massinfo+1] = "<font color='#ffff00'>АМНИСТИЯ!!! выходите из тюрьмы для избежания казни.</font>"
elseif event == 2 then
ui.updateTextArea (-65, "<p align='center'><font color='#ffff00'>День голосования! Выберите сторону и проголосуйте.</font></p>" , nil )
massinfo[#massinfo+1] = "<font color='#ffff00'>День голосования! Выберите сторону и проголосуйте.</font>"
--------------------------------------------------------------------------------------------
ui.addTextArea(-59000, "<font color='#ff0000'><a href='event:golos_mafia'>Mafia</a></font>", nil, 1150, 720, 150, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addTextArea(-59100, "<font color='#0000ff'><a href='event:golos_polish'>Police</a></font>", nil, 1150, 750, 150, nil, 0x000001, 0xFFFFFF, 0.7, false)

end
else
ui.updateTextArea (-65, "<p align='center'>День...</p>" , nil )
end
end

obnovmessageinfo = 2*1
allPlayer = -1


time = 0

time_auto = 0

function eventLoop()
if not start then--non start
if bool_auto_start then

if time_auto == 0 then
time_auto = os.time()+timer_start_auto*1000
end
TIME = math.ceil(os.difftime(time_auto,os.time())/1000)
ui.setMapName(string.format(mapName, TIME, countElements(users), countElements(tfm.get.room.playerList)))
if TIME<1 then
time_auto = 0
initGame()
end
end



return
end
if allPlayer == -1 then
allPlayer = countElements(getAllPlayers())
end
ui.setMapName(string.format(mapName, (next_day_delay - (time % next_day_delay)), countElements(getAllPlayers()), allPlayer))
time = time + 0.5
for p, val in pairs(criminals) do
if isContains(val, "lock_position") then
tfm.exec.movePlayer(p, val.lock_position[1], val.lock_position[2], false, 0, 0, false)
tfm.exec.addPhysicObject(val.lock_platform_ids[1], val.lock_position[1]-15, val.lock_position[2], {width=5, height=50, friction=100, type=tfm.enum.ground.invisible})
tfm.exec.addPhysicObject(val.lock_platform_ids[2], val.lock_position[1]+15, val.lock_position[2], {width=5, height=50, friction=100, type=tfm.enum.ground.invisible})
tfm.exec.addPhysicObject(val.lock_platform_ids[3], val.lock_position[1], val.lock_position[2]+15, {width=50, height=5, friction=100, type=tfm.enum.ground.invisible})
tfm.exec.addPhysicObject(val.lock_platform_ids[4], val.lock_position[1], val.lock_position[2]-15, {width=50, height=5, friction=100, type=tfm.enum.ground.invisible})
end
end
if countmapa(ignormice) > 0 then
removeareax()
for p, _ in pairs(ignormice) do
delplayer(p)
end
ignormice = {}
addareatext()
end

if time % obnovmessageinfo == 0 then
messageinfo(nil)
end

if time % next_day_delay == 0 then
day_cycle = day_cycle + 1
if day_cycle > 4 then
day_cycle = 1
end
changeMap(maps[day_cycle])
tfm.exec.addPhysicObject(0, 390, 650, {type=10, width=20, height=120})
tfm.exec.addPhysicObject(1, 390, 510, {type=0, width=20, height=150})
--tfm.exec.addPhysicObject(2, 1500, 550, {type=tfm.enum.ground.invisible, width=500, height=200})
------------------------------DAY CHANGE---------------------------
for i=0, countmapa(mafia_list) do
ui.removeTextArea(-3100+i, nil)
end
for i=0, countmapa(police_list) do
ui.removeTextArea(-7200+i, nil)
end
ui.removeTextArea(-4400, nil)
-------------infected---------
for p, _ in pairs(tfm.get.room.playerList) do
tfm.exec.setNameColor(p, 0xffffff)
end
for p, _ in pairs(mafia_list) do
tfm.exec.setNameColor(p, 0xffff00)
end
for p, _ in pairs(villager_list) do
tfm.exec.setNameColor(p, 0xffff00)
end
for p, _ in pairs(police_list) do
tfm.exec.setNameColor(p, 0xffff00)
end
tfm.exec.setNameColor(doctor, 0xffff00)

for p, val in pairs(infected) do
tfm.exec.setNameColor(p, 0xff0000)
local booldie = killpers(per_kill_virus, p, "Вы умерли от смертельного вируса", "no")
if booldie then
die_virus = die_virus + 1
end
end
ui.addTextArea(5100, "<a href='event:gotodoctor'>Вы заражены смертельным вирусом и можете умереть.<br> Нажмите сюда, чтобы проследовать в больницу. Или ждите когда доктор вылечит.</p>", nil, 210, 60, 400, nil, 0x000001, 0xFFFFFF, 0.7, true)
for nick in pairs(tfm.get.room.playerList) do
if (not isContains(infected, nick)) or isContains(criminals, nick) then
ui.removeTextArea(5100, nick)
end
end

ui.addTextArea(-58100, "<a href='event:adminpanel'>Admin panel", adm, 320, 720, 100, nil, 0x000001, 0xFFFFFF, 0.7, false)

if day_cycle == 0 then

----------------------------------------------DAY--------------------------
elseif day_cycle == 1 then
-- Day indicator line was moved to the bottom of the day
--ui.addPopup(-4400, 0, "<p align='center'>Уже наступил день!", doctor, -200, -200, 400, true)
ui.removeTextArea(-4400, doctor)
for i=0, countmapa(mafia_list) do
ui.removeTextArea(-4100+i, nil)
for x = 0, countmapa(criminals) do
ui.removeTextArea(-4100-i-(x+1)*10000, nil)
end
end
for i=0, countmapa(police_list) do
ui.removeTextArea(-4200+i, nil)
for x = 0, countmapa(criminals) do
ui.removeTextArea(-7200-i-(x+1)*10000, nil)
end
end

local i = 0
for p, val in pairs(police_list) do
i = i + 1
--ui.addPopup(-4200+i, 0, "<p align='center'>Уже наступил день!", p, -200, -200, 400, true)
ui.removeTextArea(-4200+i, nil)
end
for i=0, countmapa(villager_list) do
ui.removeTextArea(-4300+i, nil)
for x = 0, countmapa(criminals) do
ui.removeTextArea(-4300-i-(x+1)*10000, nil)
end
end
ui.removeTextArea(-4400, nil)
for x = 0, countmapa(criminals) do
ui.removeTextArea(-4400-(x+1)*10000, nil)
end
----------viselitsa------------
if viselebool then
local viselvibrkill = ""
local viselvibrkill_count = 0
for p, val in pairs(viselvibr) do
print(p)
if val > viselvibrkill_count then
viselvibrkill = p
viselvibrkill_count = val
end
end
if viselvibrkill ~= "" then
killpers(100, viselvibrkill, "Путем городского голосования, было принято решение вас казнить. Вы умерли.", "no")
end
local pomil = ""
for p, val in pairs(criminals) do
if p ~= viselvibrkill then
pomil = pomil..""..p..", "
end
end
if pomil~="" then
massinfo[#massinfo+1] = "[Игроки]: помиловали "..pomil
end

criminals = {}
viselvibr = {}
viselebool = false
end
suspect_fun(nil)
for n, _ in pairs(criminals) do
ui.removeTextArea(5100, n)
end
randomEvent()
--------------------------------------EVENING-------------------------
elseif day_cycle == 2 then
ui.updateTextArea (-65, "<p align='center'> Вечер... " , nil )

for i=0, countmapa(mafia_list) do
ui.removeTextArea(-1100+i, nil)
end
for i=0, countmapa(police_list) do
ui.removeTextArea(-1200+i, nil)
end
for i=0, countmapa(villager_list) do
ui.removeTextArea(-1300+i, nil)
end
ui.removeTextArea(-1400, nil)
ui.removeTextArea(-59000, p)
ui.removeTextArea(-59100, p)

for i=0, iter do
ui.removeTextArea(-60000+i, nil)
ui.removeTextArea(-61000+i, nil)
end

if vote_side_mafia > vote_side_polish then
-----------------------------------------------------------------------------------------------------------------------------------------------
victim_fun("vote")
victims = {}
suspect = {}
else
suspect_fun("vote")
victims = {}
suspect = {}
end
vote_side_mafia = 0
vote_side_polish = 0

for p, val in pairs(hospital) do
tfm.exec.movePlayer(p,700,700,false,0,0,false)
local booldie = killpers(per_kill_doctor, p, "Укол оказался смертельным, вы умерли", "Вас вылечили!")
if booldie then
die_doctor = die_doctor + 1
end
end
hospital = {}
for n, v in pairs(tfm.get.room.playerList) do
if isContains(getAllPlayers(), n) and v.x < 400 and v.y > 590 and not isContains(criminals, n) then
criminals[n] = {}
ui.addPopup(-9000, 0, "<p align='center'>Вас посадили в тюрьму!", n, 200, 200, 400, true)
tfm.exec.movePlayer(n,250,650,false,0,0,false)

end
end
----------------------------------NIGHT---------------------------------
elseif day_cycle == 3 then
ui.updateTextArea (-65, "<p align='center'>Ночь. Город засыпает, просыпается мафия..." , nil )
for i=0, countmapa(mafia_list) do
ui.removeTextArea(-2100+i, nil)
end
for i=0, countmapa(police_list) do
ui.removeTextArea(-2200+i, nil)
end
for i=0, countmapa(villager_list) do
ui.removeTextArea(-2300+i, nil)
end
ui.removeTextArea(-2400, nil)
--if countmapa(mafia_list) > countmapa(criminals) then
local i = 0
for p, val in pairs(mafia_list) do
i = i +1
if isContains(criminals, p) == false then
if isContains(hospital, p) == false then
if isContains(ignormice, p)==false then
--ui.addPopup(-3100+i, 2, "<p align='center'>Введите жертву! (ник игрока вместе с хэштегом)", p, 200, 200, 400, true)
playerChoice(-3100+i, p, "Выберите жертву!", true, false)
end
end
end
end
--else
--end

----------------------------MORNING----------------------------------
elseif day_cycle == 4 then
print(day)
day = day + 1
ui.updateTextArea (-65, "<p align='center'>Утро..." , nil )
i = 0
for p, val in pairs(mafia_list) do
i = i + 1
--ui.addPopup(-3100+i, 0, "<p align='center'>Уже наступило утро!", p, -200, -200, 400, true)
ui.removeTextArea(-3100+i, nil)
end
for i=0, countmapa(police_list) do
ui.removeTextArea(-3200+i, nil)
end
for i=0, countmapa(villager_list) do
ui.removeTextArea(-3300+i, nil)
end
ui.removeTextArea(-3400, nil)
victim_fun(nil)
if isContains(criminals, doctor) == false then
if isContains(hospital, doctor) == false then
if isContains(ignormice, doctor)==false then
--ui.addPopup(-4400, 2, "<p align='center'>Введите, кого вылечить! (Ник игрока вместе с хэштегом)</p>", doctor, 200, 200, 400, true)
playerChoice(-4400, doctor, "Выберите, кого вылечить!", true, false)
end
end
end
------------chose police--------------
print(countmapa(mafia_list))
print(countmapa(criminals))
if countmapa(mafia_list) > countmapa(criminals) and countmapa(criminals)<=6 then
local i = 0
for p, val in pairs(police_list) do
i = i +1
if isContains(criminals, p) == false then
if isContains(hospital, p) == false then
if isContains(ignormice, p)==false then
--ui.addPopup(-4200+i, 2, "<p align='center'>Введите преступника! (Ник игрока вместе с хэштегом)", p, 200, 200, 400, true)
playerChoice(-7200+i, p, "Выберите, кого арестовать!", true, false)
end
end
end
end
elseif countmapa(mafia_list) == 0 and countmapa(criminals) == 0 then
local i = 0
for p, val in pairs(police_list) do
i = i +1
if isContains(criminals, p) == false then
if isContains(hospital, p) == false then
if isContains(ignormice, p)==false then
--ui.addPopup(-4200+i, 2, "<p align='center'>Введите преступника! (Ник игрока вместе с хэштегом)", p, 200, 200, 400, true)
playerChoice(-7200+i, p, "Выберите, кого арестовать!", true, false)
end
end
end
end
else
if countmapa(criminals)>0 then
viselebool = true
ui.updateTextArea (-65, "<p align='center'>Утро казни..." , nil )
local i=0
for p, val in pairs(criminals) do

i=i+1

local lock = {}


lock.lock_platform_ids = {600 + i, 650+i, -600-i, -650-i}
tfm.exec.movePlayer(p,1250+50*i,575,false,0,0,false)
lock.lock_position = {1250+50*i, 575}
lock.id = i
criminals[p] = lock
----------------------------Watch button--------------------
local j = 0
for p, val in pairs(mafia_list) do

if isContains(criminals, p) == false then

if isContains(hospital, p) == false then
j = j +1
ui.addTextArea(-4100-j-i*10000, "<a href='event:viselitsa'>"..i .. "</p>", p, 1250+50*i, 635, 10, nil, 0x000001, 0xFFFFFF, 1, false)

end
end
end
local j = 0

for p, val in pairs(police_list) do

if isContains(criminals, p) == false then


if isContains(hospital, p) == false then
j = j +1
ui.addTextArea(-4200-j-i*10000, "<a href='event:viselitsa'>"..i .. "</p>", p, 1250+50*i, 635, 10, nil, 0x000001, 0xFFFFFF, 1, false)
end
end

end

local j = 0
for p, val in pairs(villager_list) do
if isContains(criminals, p) == false then

if isContains(hospital, p) == false then
j = j +1
ui.addTextArea(-4300-j-i*10000, "<a href='event:viselitsa'>"..i .. "</p>", p, 1250+50*i, 635, 10, nil, 0x000001, 0xFFFFFF, 1, false)
end
end
end

if isContains(criminals, doctor) == false then

if isContains(hospital, doctor) == false then
ui.addTextArea(-4400-i*10000, "<a href='event:viselitsa'>"..i .. "</p>", doctor, 1250+50*i, 635, 10, nil, 0x000001, 0xFFFFFF, 1, false)
end
end

end
end
end
end
ui.addTextArea(27100, "<p align='right'><font color='#00ff00'>Жители: " .. countElements(villager_list) .. "</font><br><font color='#0000ff'>Полиция: " .. countElements(police_list) .. "</font><br><font color='#ff0000'>Мафия: " .. countElements(mafia_list) .. "</font><br>Доктора: " .. doctor_count .. "</p>", nil, 690, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
rolewin = {}
summcount = countElements(villager_list) + countElements(police_list) + countElements(mafia_list) + doctor_count
if countElements(villager_list) == summcount then
rolewin = villager_list
stringwin = "Выиграли мирные жители!"
winplayer()
end
if countElements(police_list) == summcount then
rolewin = police_list
stringwin = "Выиграла полиция!"
winplayer()
end
if countElements(mafia_list) == summcount then
rolewin = mafia_list
stringwin = "Выиграла мафия!"
winplayer()
end
if doctor_count == summcount then
rolewin[doctor] = 1
stringwin = "Выиграл доктор!"
winplayer()
end
if summcount == 0 then
stringwin = "Все умерли"
winplayer()
end
end
end

function victim_fun(who)
----------victim------------
local victim = ""
local victim_count = 0
for p, val in pairs(victims) do
print(p)
if val > victim_count then
victim = p
end
end
victims = {}
if isContains(users, victim) then
-----------------------if mafia chose infected------------------
if isContains(hospital, victim) == false then
if isContains(infected, victim) and isContains(criminals, victim)==false then
tfm.exec.movePlayer(victim,250,490,false,0,0,false)
hospital[victim] = {}
infected[victim] = nil
tfm.exec.setNameColor(victim, 0xffffff)
if who == "vote" then
ui.addPopup(-9100, 0, "<p align='center'>Вы зараженный и на вас напали Жители - вы отправляетесь в больницу !</p>", victim, 200, 200, 400, true)
massinfo[#massinfo+1] = "["..victim.."]:".."Вы зараженный и на вас напала Жители - вы отправляетесь в больницу !"
else
ui.addPopup(-9100, 0, "<p align='center'>Вы зараженный и на вас напала мафия - вы отправляетесь в больницу !</p>", victim, 200, 200, 400, true)
massinfo[#massinfo+1] = "["..victim.."]:".."Вы зараженный и на вас напала мафия - вы отправляетесь в больницу !"
end
else
infected[victim] = 1
if who == "vote" then
massinfo[#massinfo+1] = "["..victim.."]:".."На вас напали Жители, вы заражен!"
else
massinfo[#massinfo+1] = "["..victim.."]:".."На вас напала мафия, вы заражен!"
end
end
else
massinfo[#massinfo+1] = "[Доктор]:Попытка заразить неудачна, жертва в больнице!"
end
end
end

function suspect_fun(who)
----------criminal------------
local criminal = ""
local criminal_count = 0
for p, val in pairs(suspect) do
print(p)
if val > criminal_count then
criminal = p
end
end
suspect = {}
if isContains(users, criminal) then
-----------------------crim vibr------------------
if isContains(criminals, criminal) then
else
local lock = {}


lock.lock_platform_ids = nil

lock.lock_position = nil
lock.id = 0
criminals[criminal] = lock
if who == "vote" then
ui.addPopup(-9000, 0, "<p align='center'>Вас посадили в тюрьму Жители!", criminal, 200, 200, 400, true)
massinfo[#massinfo+1] = "["..criminal.."]:".."Вас посадили в тюрьму Жители!"
else
ui.addPopup(-9000, 0, "<p align='center'>Вас посадили в тюрьму!", criminal, 200, 200, 400, true)
massinfo[#massinfo+1] = "["..criminal.."]:".."Вас посадили в тюрьму!"
end
tfm.exec.movePlayer(criminal,250,650,false,0,0,false)
end
end
end

function winplayer()
start = false
ui.removeTextArea(5100, nil)
ui.updateTextArea (-65, stringwin , nil )
massinfo[#massinfo+1] = "[<font color='#ffff00'>".."WIN!!!".."]:"..stringwin.."</font>"
listwintext = stringwin .. "<br>"
for p, x in pairs(rolewin) do
listwintext = listwintext .. p .. "<br>"
end
ui.addPopup(28100, 0, listwintext, nil, 200, 200, 400, true)
messageinfo(nil)
vosstan()

end
function countmapa(massiv)
i=0
for p, x in pairs(massiv) do
i=i+1
end
return i
end
function delplayer(p) ---not security WRANG
if isContains(criminals, p) then
criminals[p] = nil
massinfo[#massinfo+1] = "["..p.."]".."Был в тюрьме"
end
if isContains(users, p) then
users[p] = nil
end
if isContains(mafia_list, p) then
mafia_list[p] = nil
massinfo[#massinfo+1] = "[<font color='#ff0000'>"..p.."</font>]".."Был мафия!"
if countmapa(mafia_list) == 0 then
massinfo[#massinfo+1] = "<font color='#ffaa00'>Мафии больше нет, процент дневного события повышен до 100%</font>"
random_event_chance = 100
end
end
if isContains(police_list, p) then
police_list[p] = nil
massinfo[#massinfo+1] = "[<font color='#0000ff'>"..p.."</font>]".."Был полиция!"
end
if isContains(villager_list, p) then
villager_list[p] = nil
massinfo[#massinfo+1] = "[<font color='#00ff00'>"..p.."</font>]".."Был мирный житель!"
end
if isContains(infected, p) then
infected[p] = nil
end
if isContains(hospital, p) then
hospital[p] = nil
end
if isContains(viselvibr, p) then
viselvibr[p] = nil
end


if isContains(victims, p) then
victims[p] = nil
end
if isContains(suspect, p) then
suspect[p] = nil
end
if doctor == p then
doctor = ""
massinfo[#massinfo+1] = "[<font color='#ffffff'>"..p.."</font>]".."Был доктор!"
end

if countElements(getAllPlayers()) < 7 and changeboolg then
massinfo[#massinfo+1] = "<font color='#ffaa00'>Число игроков стало меньше 7, повышены процент от смертности</font>"
per_kill_virus = 50
per_kill_doctor = 50
changeboolg = false
end

tfm.exec.killPlayer(p)
ui.removeTextArea(5100, p)
tfm.exec.respawnPlayer (p)
ui.addTextArea(27100, "<p align='right'><font color='#00ff00'>Жители: " .. countElements(villager_list) .. "</font><br><font color='#0000ff'>Полиция: " .. countElements(police_list) .. "</font><br><font color='#ff0000'>Мафия: " .. countElements(mafia_list) .. "</font><br>Доктора: " .. doctor_count .. "</p>", nil, 690, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
end
function killpers(pers, player, killd, notkill)
local i = math.random(0, 100)
local bool_die = false
if i > pers then
kill = kill + 1
if notkill == "no" then
else
ui.addPopup(-8200+kill, 0, notkill, player, 200, 200F, 400, true)
massinfo[#massinfo+1]="["..player.."]:"..notkill
end
else
bool_die = true
ignormice[player] = {}
kill = kill + 1
ui.addPopup(-8200+kill, 0, killd, player, 200, 200, 400, true)
tfm.exec.setNameColor(player, 0xffffff)

massinfo[#massinfo+1]="["..player.."]:"..killd
end
return bool_die
end
function removeareax()
for i=0, countmapa(police_list)+5 do
ui.removeTextArea(-200+i, nil)
end
for i=0, countmapa(mafia_list)+5 do
ui.removeTextArea(-100+i, nil)
end
for i=0, countmapa(villager_list)+5 do
ui.removeTextArea(-300+i, nil)
end
ui.removeTextArea(-400, nil)
end
function addareatext()
removeareax()
dialog_text = "Полиция:<br>"
for p, x in pairs(police_list) do
dialog_text = dialog_text .. "<font color='#0000ff'>" .. p .. "</font><br>"
end
i = 0
for p, val in pairs(police_list) do
i = i+1
ui.addTextArea(-200+i, dialog_text .. "</p>", p, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
end
dialog_text = "Мафия:<br>"
for p, x in pairs(mafia_list) do
dialog_text = dialog_text .. "<font color='#ff0000'>" .. p .. "</font><br>"
end
i = 0
for p, val in pairs(mafia_list) do
i = i+1
ui.addTextArea(-100+i, dialog_text .. "</p>", p, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
end

dialog_text = "Вы житель"
i = 0
for p, val in pairs(villager_list) do
i = i+1
ui.addTextArea(-300+i, dialog_text .. "</p>", p, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
end
ui.addTextArea(-400, "Вы доктор</p>", doctor, 10, 60, 100, nil, 0x000001, 0xFFFFFF, 0.7, true)
end



--massinfo[#massinfo+1] = "test"



--показывает информацию
function messageinfo(pl)

infoper()

local stringinfo = ""

for i=1, countmapa(massinfo) do
if i<5 then
stringinfo = stringinfo..massinfo[countmapa(massinfo)-i+1]
if i <= countmapa(massinfo)-1 then
stringinfo = stringinfo.."<br>"
end
end
end


local stringinfoplus = ""

for i=1, countmapa(massinfo) do
if i<21 then
stringinfoplus = stringinfoplus..massinfo[countmapa(massinfo)-i+1]
if i <= countmapa(massinfo)-1 then
stringinfoplus = stringinfoplus.."<br>"
end
end
end

if pl ~= nil then
ui.addTextArea(-57000, stringinfo, pl, 500, 720, 400, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addTextArea(-57100, "<a href='event:plusinfo'>+", pl, 470, 720, 20, nil, 0x000001, 0xFFFFFF, 0.7, false)

for p, val in pairs(massinfoplus) do
ui.addTextArea(-57000, stringinfoplus, p, 500, 480, 400, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addTextArea(-57100, "<a href='event:plusinfom'>-", p, 470, 480, 20, nil, 0x000001, 0xFFFFFF, 0.7, false)
end
return
end

ui.addTextArea(-57000, stringinfo, nil, 500, 720, 400, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addTextArea(-57100, "<a href='event:plusinfo'>+", nil, 470, 720, 20, nil, 0x000001, 0xFFFFFF, 0.7, false)

for p, val in pairs(massinfoplus) do
ui.addTextArea(-57000, stringinfoplus, p, 500, 480, 400, nil, 0x000001, 0xFFFFFF, 0.7, false)
ui.addTextArea(-57100, "<a href='event:plusinfom'>-", p, 470, 480, 20, nil, 0x000001, 0xFFFFFF, 0.7, false)
end

end

function infoper()
local stringinfo = "Проценты: (умер)<br>"
if per_kill_virus > 49 then
stringinfo = stringinfo.."<font color='#ffaa00'>смерть от вируса: "..per_kill_virus.."% ("..die_virus..")</font><br>"
else
stringinfo = stringinfo.."смерть от вируса: "..per_kill_virus.."% ("..die_virus..")<br>"
end
if per_kill_doctor > 49 then
stringinfo = stringinfo.."<font color='#ffaa00'>смерть от укола: "..per_kill_doctor.."% ("..die_doctor..")</font><br>"
else
stringinfo = stringinfo.."смерть от укола: "..per_kill_doctor.."% ("..die_doctor..")<br>"
end

if random_event_chance > 89 then
stringinfo = stringinfo.."<font color='#ffaa00'>дневное событие: "..random_event_chance.."%</font>"
else
stringinfo = stringinfo.."дневное событие: "..random_event_chance.."%"
end
ui.addTextArea(-58000, stringinfo, nil, 940, 720, 170, nil, 0x000001, 0xFFFFFF, 0.4, false)
end


function vosstan()
messageinfo(nil)
users = {}
viselebool = false
kill = 0
allPlayer = -1
mafia_list = {}
police_list = {}
villager_list = {}
doctor = ""
infected = {}
criminals = {}
hospital = {}
ignormice = {}
rolewin = {}
stringwin = ""
time = 0
day_cycle = 1
day = 1

for nick in pairs(tfm.get.room.playerList) do
tfm.exec.setPlayerScore(nick,0,false)
end


ui.addTextArea(-1, "<p align='center'> <a href='event:start'>Запустить!", adm, 120, 350, 100, 20, 1, 0x00ff00, 0.7,true)
ui.addTextArea(-2, "<p align='center'> <a href='event:game'>Участвовать", nil, 10, 350, 100, 20, 1, 0xffffff, 0.7,true)


tfm.exec.addPhysicObject(0, 390, 650, {type=10, width=20, height=120})
tfm.exec.addPhysicObject(1, 390, 510, {type=0, width=20, height=150})
end

Dernière modification le 1586958300000
Zigwin
« Citoyen »
1546505580000
    • Zigwin#0000
    • Profil
    • Derniers messages
    • Tribu
#2
  0
Сделайте нормальное оформление кода (пожалуйста).
Код

Вам что так трудно сделать да. Пишешь :
1
2
3
[code]
print("Hello, world")
[ /code]
Для удобства кидаешь в спойлер
1
2
3
4
5
[spoiler=Мой код]
[code]
print("Hello, world")
[/ code]
[/ spoiler]

Можешь еще на pastebin.com залить для удобства. (Чтобы скопировать было легче код)

Я бы посоветовал залить на какой-нибудь другой хостинг изображений картинки
Так как не у всех Micepix работает или у меня одного

Upd.
Теперь все хорошо

Dernière modification le 1546615200000
Smgxxx
« Citoyen »
1546506600000
    • Smgxxx#0000
    • Profil
    • Derniers messages
    • Tribu
#3
  0
Micepix, только в России не работает, и то не у всех так, это все тянется еще с войн за телеграм
Miroslavchik
« Consul »
1546531680000
    • Miroslavchik#0000
    • Profil
    • Derniers messages
    • Tribu
#4
  0
не работает
Deff83
« Citoyen »
1546552080000
    • Deff83#0000
    • Profil
    • Derniers messages
    • Tribu
#5
  0
Спс, исправил.
Wenter
« Citoyen »
1549779780000
    • Wenter#9568
    • Profil
    • Derniers messages
#6
  2
Мне понравилось лучшее что я когда либо пробовал для луа
Vanessa
« Citoyen »
1549785960000
    • Vanessa#0221
    • Profil
    • Derniers messages
#7
  0
Мне луа был чуть сложнее сделать только отправила она уже заработала! Спасибо вам что вы сделали луа чтобы племени был игры луа! Сама луа сделала.
Pro_681
« Citoyen »
1561206000000
    • Pro_681#2605
    • Profil
    • Derniers messages
#9
  0
Не работаёт.

Dernière modification le 1561276800000
Wenter
« Citoyen »
1561983960000
    • Wenter#9568
    • Profil
    • Derniers messages
#10
  0
Pro_681 a dit :
Не работаёт.

про ты не умеешь врубать луа?
Olechka
« Citoyen »
1564411020000
    • Olechka#7767
    • Profil
    • Derniers messages
    • Tribu
#11
  0
работает

Dernière modification le 1585330800000
Wenter
« Citoyen »
1564936320000
    • Wenter#9568
    • Profil
    • Derniers messages
#12
  0
У мня всё рабит
Artem_mine37
« Citoyen »
1565461560000
    • Artem_mine37#3520
    • Profil
    • Derniers messages
#13
  0
Всё работает.

Тест в племени есть.
Wenter
« Citoyen »
1565605080000
    • Wenter#9568
    • Profil
    • Derniers messages
#14
  0
ууугу.
Parok
« Citoyen »
1566709380000
    • Parok#3421
    • Profil
    • Derniers messages
#15
  1
Капитан у нас всё работает!!!!

Dernière modification le 1567586940000
Wenter
« Citoyen »
1567139820000
    • Wenter#9568
    • Profil
    • Derniers messages
#16
  0
те кто умеет - рабит,те кто не умеет - не рабит.
Parok
1567587240000
    • Parok#3421
    • Profil
    • Derniers messages
#17
[Modéré par Centr, raison : оффтоп]

Dernière modification le 1567588380000
Deff83
« Citoyen »
1574520360000
    • Deff83#0000
    • Profil
    • Derniers messages
    • Tribu
#18
  0
Добавлен более простой выбор участников в процессе игры
Wenter
« Citoyen »
1574576280000
    • Wenter#9568
    • Profil
    • Derniers messages
#19
  0
спасибо дефф,он очень прикольный)
Deff83
« Citoyen »
1585664220000
    • Deff83#0000
    • Profil
    • Derniers messages
    • Tribu
#20
  0
Добавлен информационный чат. Изменено описание правил игры, доступно на кнопку help.
Добавлено дневное событие голосования для всех мышек.
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [мини игра lua] Мафия
1 / 2 › »
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27