Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- from https://www.lua.org/pil/11.4.html
- local List = {}
- function List.new ()
- return {first = 0, last = -1}
- end
- function List.pushleft (list, value)
- local first = list.first - 1
- list.first = first
- list[first] = value
- end
- function List.pushright (list, value)
- local last = list.last + 1
- list.last = last
- list[last] = value
- end
- function List.popleft (list)
- local first = list.first
- if first > list.last then
- return nil
- end
- local value = list[first]
- list[first] = nil -- to allow garbage collection
- list.first = first + 1
- return value
- end
- function List.popright (list)
- local last = list.last
- if list.first > last then
- return nil
- end
- local value = list[last]
- list[last] = nil -- to allow garbage collection
- list.last = last - 1
- return value
- end
- -- the lib
- local timerList = {}
- local timersPool = List.new()
- function addTimer(callback, ms, loops, label, ...)
- local id = List.popleft(timersPool)
- if id then
- local timer = timerList[id]
- timer.callback = callback
- timer.label = label
- timer.arguments = {...}
- timer.time = ms
- timer.currentTime = 0
- timer.currentLoop = 0
- timer.loops = loops or 1
- timer.isComplete = false
- timer.isPaused = false
- timer.isEnabled = true
- else
- id = #timerList+1
- timerList[id] = {
- callback = callback,
- label = label,
- arguments = {...},
- time = ms,
- currentTime = 0,
- currentLoop = 0,
- loops = loops or 1,
- isComplete = false,
- isPaused = false,
- isEnabled = true,
- }
- end
- return id
- end
- function getTimerId(label)
- local found
- for id = 1, #timerList do
- local timer = timerList[id]
- if timer.label == label then
- found = id
- break
- end
- end
- return found
- end
- function pauseTimer(id)
- if type(id) == 'string' then
- id = getTimerId(id)
- end
- if timerList[id] and timerList[id].isEnabled then
- timerList[id].isPaused = true
- return true
- end
- return false
- end
- function resumeTimer(id)
- if type(id) == 'string' then
- id = getTimerId(id)
- end
- if timerList[id] and timerList[id].isPaused then
- timerList[id].isPaused = false
- return true
- end
- return false
- end
- function removeTimer(id)
- if type(id) == 'string' then
- id = getTimerId(id)
- end
- if timerList[id] and timerList[id].isEnabled then
- timerList[id].isEnabled = false
- List.pushright(timersPool, id)
- return true
- end
- return false
- end
- function clearTimers()
- local timer
- repeat
- timer = List.popleft(timersPool)
- if timer then
- table.remove(timerList, timer)
- end
- until timer == nil
- end
- function timersLoop()
- for id = 1, #timerList do
- local timer = timerList[id]
- if timer.isEnabled and timer.isPaused == false then
- if not timer.isComplete then
- timer.currentTime = timer.currentTime + 500
- if timer.currentTime >= timer.time then
- timer.currentTime = 0
- timer.currentLoop = timer.currentLoop + 1
- if timer.loops > 0 then
- if timer.currentLoop >= timer.loops then
- timer.isComplete = true
- if eventTimerComplete ~= nil then
- eventTimerComplete(id, timer.label)
- end
- removeTimer(id)
- end
- end
- if timer.callback ~= nil then
- timer.callback(timer.currentLoop, table.unpack(timer.arguments))
- end
- end
- end
- end
- end
- end
- tfm.exec.disableAutoShaman(true)
- tfm.exec.disableAutoNewGame(true)
- tfm.exec.disableAutoScore (true)
- tfm.exec.disableAutoTimeLeft (true)
- tfm.exec.disablePhysicalConsumables (true)
- tfm.exec.disableAfkDeath (true)
- tfm.exec.setRoomMaxPlayers (16)
- system.disableChatCommandDisplay (nil, true)
- tfm.exec.disableMortCommand(true)
- local admins = {
- ["Refletz#6472"] = true,
- ["Soristl1#0000"] = true
- }
- local gameVersion = "V1.1.0"
- local gameStats = {
- gameImages = {
- [1] = "180c9201a6c.png",
- [2] = "180c91fc481.png",
- [3] = "180c9206cad.png",
- [4] = "180c920bee7.png",
- [5] = "180c9211111.png",
- [6] = "180c9216364.png"
- },
- gameStorageImages = {},
- textAreaIdValue = 9358291239,
- textAreaIdStorage = {},
- skipTheVote = 0,
- winGame = false,
- }
- local lang = {}
- lang.br = {
- gameTranslated = "Traduzido para o Idioma PT-BR - Refletz#6472",
- textTimerInit = "<p align='center'><font size='15px'><b>O jogo vai começar em",
- menuOpenText = "<br><br><a href='event:whatsANew'>Novidades</a><br><a href='event:howToPlay'>Como jogar</a><br><a href='event:powers'>Poderes</a><br><a href='event:credits'>Creditos</a><br>",
- helpTitle = "<p align='center'><font size='15px'>Coup - Como jogar",
- whatsANew = "<p align='center'><font size='15px'>Coup - O que há de novo?<br><font size='12px'>("..gameVersion..")<p align='left'><br><br>Adicionado poderes ao jogo, você pode ler mais sobre na página de como jogar",
- helpText = {
- [1] = {text = "<p align='left'><font size='12px'><br><br>É um jogo dividido por cargos como Vítima, <r>Assassino<n>, <vp>Médico<n>, <bv>Detetive<n>, <vi>Vidente<n> e <j>Coringa<n>, com cada um tendo um objetivo em comum ou objetivo específico para ganhar a partida<br><br>Esse jogo pode ser jogado até 16 pessoas", haveImage = false, image = {}},
- [2] = {text = "<p align='left'><font size='12px'><br><br><n> A vítima<n>:<br>é uma pessoa que não possui poderes especiais e tem o objetivo de eliminar os assassinos através do voto<br><br><r> O assassino<n>:<br>O assassino tem o objetivo de eliminar todas os jogadores para vencer o jogo<br><br>Caso você veja o símbolo do assassino (círculo vermelho) em cima de uma pessoa morta, significa que ao anunciar a morte da pessoa o assassino estava perto dela<br><br>Apesar de um objetivo em comum, os assassinos são de facções rivais e podem se matar. Caso mate um outro assassino você terá uma vantagem de descobrir outro cargo de uma pessoa viva", haveImage = true, image = {gameStats.gameImages[1], gameStats.gameImages[2]}, y = {85, 142}},
- [3] = {text = "<p align='left'><font size='12px'><br><br><vp> O médico<n>:<br>O médico tem o poder de salvar uma pessoa de um assassinato em seu momento, seu objetivo também é eliminar os assassinos<br><br><bv> O detetive<n>:<br>O detetive tem o poder do tiro certo, caso acerte quem é o assassino ou o coringa ele segue no jogo, caso ele erre, ele vai morrer junto com o inocente que ele matou, o objetivo também é eliminar todos os assassinos", haveImage = true, image = {gameStats.gameImages[3], gameStats.gameImages[4]}, y = {85, 142}},
- [4] = {text = "<p align='left'><font size='12px'><br><br><vi> O vidente<n>:<br>O vidente tem o poder de descobrir o cargo de uma pessoa na primeira rodada, seu objetivo também é eliminar os assassinos<br><br><j> O coringa<n>:<br>O objetivo do coringa é enganar a todos pensando que ele é um assassino e ser eliminado por votação, se ele conseguir isso ele completa o objetivo e vence a partida", haveImage = true, image = {gameStats.gameImages[5], gameStats.gameImages[6]}, y = {85, 142}},
- },
- powerTitle = "<p align='center'><font size='15px'>Coup - Poderes",
- powersText = {
- [1] = {text = "<p align='left'><font size='12px'><br><br>Existe poderes espalhados pelo mapa, onde seu ratinho pode passar por ele e pegar<br><br> para poderes que precisam do evento do clique<br><br> você deve apertar <j>M<n> para ativar o evento, ai quando você clicar em algum lugar no mapa, vai ativar o poder", haveImage = false, image = {}},
- [2] = {text = "<p align='left'><font size='12px'><br><br> Congelamento em área: ao ativar o evento de clique e clicar no mapa, os ratos que estiverem perto da área que você clicou serão congelados por alguns segundos<br><br><br> Neblina: ao ativar o evento de clique e clicar no mapa, irá se criar uma neblina onde nesse local os ratos não conseguirão ver essa área por alguns segundos", haveImage = true, image = {"18117129395.png", "18117124089.png"}, y = {85, 139}},
- [3] = {text = "<p align='left'><font size='12px'><br><br> Bola de cristal do vidente: Se uma Vítima, <vp>Médico<n>, <bv>Detetive<n> ou <vi>Vidente<n> coletar esta moeda 3 vezes e o vidente estiver vivo, o vidente poderá descobrir o cargo de mais uma pessoa<br><br>Mas se o <j>coringa<n> ou o <r>assassino<n> coletar esta moeda ela não contabilizará para o vidente e a moeda sumirá do mapa", haveImage = true, image = {"180c9211111.png"}, y = {85}},
- },
- creditsText = "<p align='center'><font size='15px'>Coup - Créditos<br><br><p align='left'><font size='12px'>O jogo foi desenvolvido por <ch>Refletz#6472<n> (Soristl)<br><br>criadores da ideia: <ch>Nucador#0000<n>, <ch>Th3_fl4shx#0000<n> e <ch>F4k_edu#8767<n><br><br>com agradecimentos especiais ao <ch>Laaagaado#0000<n>, <ch>Esh#0095<n>, <ch>Gokublacki#9397<n>, <ch>Ashuro#2377<n>.",
- closeUIText = "<p align='center'><font size='12px'><a href='event:closeWindow'>Fechar",
- peopleNeedToInit = "<p align='center'><font size='15px'><b>precisa de cinco pessoas para iniciar o jogo",
- people = "pessoas",
- joinInGame = "<p align='center'><font size='13px'><a href='event:join'>Entrar</a>",
- leaveGame = "<p align='center'><font size='13px'><a href='event:leave'>Sair</a>",
- gispyInfo1 = "Você como vidente, pegou informações do jogador",
- gispyInfo2 = "e o cargo dele é",
- ranks = {
- [1] = "<n>Vítima<n>",
- [2] = "<r>Assassino<n>",
- [3] = "<vp>Médico<n>",
- [4] = "<bv>Detetive<n>",
- [5] = "<vi>Vidente<n>",
- [6] = "<j>Coringa<n>"
- },
- messageAssassin = "O assassino terá 30 segundos para escolher quem ele vai matar",
- messageMedic = "O médico terá 30 segundos para escolher salvar alguém",
- messageDetective = "O detetive terá 30 segundos para tomar alguma atitude ou não",
- messageTitleVote = "<p align='center'>Escolha alguém para votar ou pule a votação",
- messageLogOfVotes = "<p align='center'>Log dos votos",
- previousMessage = "<p align='center'>Voltar",
- nextMessage = "<p align='center'>Próximo",
- titleMessageAssassin = "<p align='center'><font size='12px'>Selecione uma pessoa para você matar",
- titleMessageMedic = "<p align='center'><font size='12px'>Selecione uma pessoa para você salvar",
- titleMessageDetective = "<p align='center'><font size='12px'>Selecione uma pessoa para matar caso você ache ela assassino (caso erre sofrerá as consequências) ou clique em pular para não sofrer nenhuma ação",
- skipMessage = "<p align='center'>Pular",
- timeToTalk = "Vocês terão 30 segundos para discutir",
- voteActions = {[1] = "votou em", [2] = "pulou a votação", [3] = "não votou"},
- voteResult = {[1] = {"O jogador mais votado foi", "recebeu", "votos", "e ele foi morto em praça pública"}, [2] = "A votação foi pulada", [3] = "A votação terminou empatada, ninguém será morto"},
- trollWinnerGame = { [1] = {"O <font color='#BABD2F'>coringa", "venceu a partida"} },
- assassinWinnerGame = "Os <font color='#CB546B'>assassinos</font> venceram a partida",
- victimWinnerGame = "As vítimas venceram a partida",
- gameMessages = {
- titleAssassinPopup = "Mortes",
- assassin = "O assassino",
- detective = "O detetive",
- assassinKillPlayer = "matou o",
- medicSavedPlayer = "tentou matar o jogador, mas o jogador foi salvo pelo <font color='#2EBA7E'>médico</font>",
- assassinAfk = "ficou afk e foi retirado do jogo",
- detectiveKilledAnInnocent = "matou um inocente o",
- detectiveKilledTheAssassin = "descobriu e matou o",
- detectiveSkiped = "não fez nenhuma ação",
- messageSameTarget = "Tentou ir no mesmo alvo, mas viu que estava morto",
- },
- messageAssassinAdvantage = "Você matou outro assassino graças a isso você descobriu uma informação a respeito de outro jogador vivo o"
- }
- lang.en = {
- gameTranslated = "Translated into English language - Darkwolf07#9890",
- textTimerInit = "<p align='center'><font size='15px'><b>The game will begin in",
- menuOpenText = "<br><br><a href='event:whatsANew'>News</a><br><a href='event:howToPlay'>How to play</a><br><a href='event:powers'>Powers</a><br><a href='event:credits'>Credits</a><br>",
- helpTitle = "<p align='center'><font size='15px'>Coup - How to play",
- whatsANew = "<p align='center'><font size='15px'>Coup - What's a new?<br><font size='12px'>("..gameVersion..")<p align='left'><br><br>added powers to the game, you can read more about them in help page",
- helpText = {
- [1] = {text = "<p align='left'><font size='12px'><br><br>Its a game divided by roles like Victm, <r>Murderer<n>, <vp>Doctor<n>, <bv>Detective<n>, <vi>Prophet<n> and <j>Joker<n>, with each one having a goal in common or an especific goal to win the game<br><br>This game has a limit of 16 players per match", haveImage = false, image = {}},
- [2] = {text = "<p align='left'><font size='12px'><br><br><n> The victim<n>:<br>is a person that doesnt have any special powers and gets the goal to eliminate the murderers by voting<br><br><r> The murderer<n>:<br>The murderer has the goal to kill and eliminate all the players for win the match<br><br>In case of seeing the murderer's symbol (a red circle) on a dead person, this means that when announcing the kill the murderer was close to her<br><br>Despite of a purpose in common, the murderers are from different and competing factions and can kill theirselves. In case of killing other murderer, you will get an advantage to find out another role from an alive person", haveImage = true, image = {gameStats.gameImages[1], gameStats.gameImages[2]}, y = {85, 142}},
- [3] = {text = "<p align='left'><font size='12px'><br><br><vp> The doctor<n>:<br>The doctor has the power to save a person of being killed in the moment of the act, the doctor goal its also eliminate the murdereres<br><br><bv> The detective<n>:<br>The detective has the power of decisive shot, if he is correct about the identity of the murderer or the joker he keeps playing, but if he is wrong, he is gonna die with the innocent killed by him, the goal is also to eliminate all the murderers", haveImage = true, image = {gameStats.gameImages[3], gameStats.gameImages[4]}, y = {85, 142}},
- [4] = {text = "<p align='left'><font size='12px'><br><br><vi> The prophet<n>:<br>The prophet has the power of find out a person's role in the first round, his objective is also to eliminate the murderers<br><br><j> The joker<n>:<br>The joker's goal is to troll everyone thinking that he is a murderer and being eliminated by voting, if he succeed he completes his goal and wins the match", haveImage = true, image = {gameStats.gameImages[5], gameStats.gameImages[6]}, y = {85, 142}},
- },
- powerTitle = "<p align='center'><font size='15px'>Coup - Powers",
- powersText = {
- [1] = {text = "<p align='left'><font size='12px'><br><br>There is powers in the map, where your player can pass for it and take it<br><br> for powers that need the click event<br><br> you must press <j>M<n> to active the event, then, when you click somewhere in the map, the power is gonna be activated", haveImage = false, image = {}},
- [2] = {text = "<p align='left'><font size='12px'><br><br> Area freezing: activating the click event and clicking in the map, the players which are close to the area you clicked will all be frozen for some seconds<br><br><br> Fog: activating the click event and clicking in the map, a fog will happen where, in this place, the players wont see the area in some seconds", haveImage = true, image = {"18117129395.png", "18117124089.png"}, y = {85, 139}},
- [3] = {text = "<p align='left'><font size='12px'><br><br> Prophet's magic crystal: If a victim, <vp>Doctor<n>, <bv>Detective<n> or <vi>Prophet<n> colects this coin 3 times and the prophet is alive, the prophet will can find out the role of one more player<br><br>But if the <j>joker<n> or the <r>murderer<n> colects this coin, she wont count to the prophet and the coin will disappear from the map", haveImage = true, image = {"180c9211111.png"}, y = {85}},
- },
- creditsText = "<p align='center'><font size='15px'>Coup - Créditos<br><br><p align='left'><font size='12px'>The game was developed by <ch>Refletz#6472<n> (Soristl)<br><br>idea founders: <ch>Nucador#0000<n>, <ch>Th3_fl4sh#0000<n> and <ch>F4k_edu#8767<n><br><br>with a special thanks to <ch>Laaagaado#0000<n>, <ch>Esh#0095<n>, <ch>Gokublacki#9397<n>, <ch>Ashuro#2377<n>.",
- closeUIText = "<p align='center'><font size='12px'><a href='event:closeWindow'>Close",
- peopleNeedToInit = "<p align='center'><font size='15px'><b>the game needs five people to get started",
- people = "people",
- joinInGame = "<p align='center'><font size='13px'><a href='event:join'>Join</a>",
- leaveGame = "<p align='center'><font size='13px'><a href='event:leave'>Leave</a>",
- gispyInfo1 = "You as prophet, got informations about the player",
- gispyInfo2 = "and his role is",
- ranks = {
- [1] = "<n>Victim<n>",
- [2] = "<r>Murderer<n>",
- [3] = "<vp>Doctor<n>",
- [4] = "<bv>Detective<n>",
- [5] = "<vi>Prophet<n>",
- [6] = "<j>Joker<n>"
- },
- messageAssassin = "The murderer will have 30 seconds to choose who he is killing",
- messageMedic = "The doctor will have 30 seconds to save somebody",
- messageDetective = "The detective will have 30 seconds to take an attitude or not",
- messageTitleVote = "<p align='center'>Choose someone to vote or skip the voting",
- messageLogOfVotes = "<p align='center'>Log of the votes",
- previousMessage = "<p align='center'>Back",
- nextMessage = "<p align='center'>Next",
- titleMessageAssassin = "<p align='center'><font size='12px'>Select a person to be killed",
- titleMessageMedic = "<p align='center'><font size='12px'>Select a person to be saved",
- titleMessageDetective = "<p align='center'><font size='12px'>Select a person to be killed if you think she is the murderer (if you fails on your decision, you will suffer the consequences) or click in SKIP to dont suffer any action",
- skipMessage = "<p align='center'>Skip",
- timeToTalk = "You will have 30 seconds to discuss",
- voteActions = {[1] = "voted in", [2] = "skipped the voting", [3] = "didnt vote"},
- voteResult = {[1] = {"The most voted player was", "has received", "votes", "and was killed in public square"}, [2] = "The voting was skipped", [3] = "The voting ended in a tie, no one is going to die"},
- trollWinnerGame = { [1] = {"The <font color='#BABD2F'>joker", "won the game"} },
- assassinWinnerGame = "The <font color='#CB546B'>murderers</font> won the game",
- victimWinnerGame = "The victims won the game",
- gameMessages = {
- titleAssassinPopup = "Deaths",
- assassin = "The murderer",
- detective = "The detective",
- assassinKillPlayer = "killed",
- medicSavedPlayer = "tried to kill the player, but the player was saved by <font color='#2EBA7E'>doctor</font>",
- assassinAfk = "stayed afk and got expelled from the game",
- detectiveKilledAnInnocent = "killed an innocent who was",
- detectiveKilledTheAssassin = "discovered and killed",
- detectiveSkiped = "didnt make any move",
- messageSameTarget = "tried to go on the same target, but saw it was dead",
- },
- messageAssassinAdvantage = "You killed another murderer. Thanks to that, you discovered an information about another alive player the"
- }
- if tfm.get.room.language == "br" then
- trad = lang.br
- elseif tfm.get.room.language == "en" then
- trad = lang.en
- else
- trad = lang.en
- end
- local textAreaFogsId = {}
- local textAreaFogId = 29999201202
- local storageImagePlayer = {}
- local playerRank = {}
- local playerLanguage = {}
- local playersJoined = {}
- local quantityRanks = {}
- local ranks = {
- victim = 1,
- assassin = 2,
- medic = 3,
- detective = 4,
- gipsy = 5,
- troll = 6
- }
- local mode = ""
- local mapIndex = 1
- local initTimer = os.time() + 20000
- local quantityPlayers = 0
- local playerActions = {}
- local timerAssassin = os.time() + 30000
- local timerMedic = os.time() + 30000
- local timerDetective = os.time() + 30000
- local timerToTalk = os.time() + 30000
- local timerToVote = os.time() + 30000
- local timerLogVote = os.time() + 20000
- local timerWinner = os.time() + 10000
- local listPlayersOnGame = {}
- local maps = {
- [1] = '<C><P L="1600" H="800" F="3" P="" mc="" MEDATA="20,1;;;;-0;0::0,1,2,3,4,5,6,7,8,9:1-"/><Z><S><S T="12" X="1490" Y="420" L="140" H="720" P="0,0,0.3,0.2,0,0,0,0" o="27373f" c="4"/><S T="9" X="1500" Y="1410" L="11" H="270" P="0,0,0,0,0,0,0,0"/><S T="12" X="1490" Y="1535" L="120" H="10" P="1,150,0.3,0.2,1,0,0,0" o="0a7495"/><S T="12" X="1330" Y="720" L="20" H="20" P="1,1,0.3,0.2,1,0,0,0" o="1ffb0e"/><S T="12" X="1490" Y="1525" L="40" H="10" P="1,10000000000,0.3,0.2,1,0,0,0" o="fb870e"/><S T="10" X="1500" Y="790" L="120" H="20" P="1,0.001,0.3,0,180,1,0,0"/><S T="6" X="280" Y="780" L="560" H="40" P="0,0,0.3,0.2,0,0,0,0"/><S T="10" X="660" Y="320" L="80" H="20" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="900" Y="120" L="40" H="120" P="1,-1,0.3,0,0,0,0,0"/><S T="0" X="1490" Y="1545" L="200" H="10" P="1,-1,0.3,0.2,0,0,0,0"/><S T="12" X="1425" Y="1800" L="10" H="700" P="1,0.95,0.3,0.2,0,1,0,0" o="00ff03" c="2"/><S T="12" X="1555" Y="1800" L="10" H="700" P="1,0.95,0.3,0.2,0,1,0,0" o="00ff03" c="2"/><S T="12" X="900" Y="240" L="30" H="30" P="1,0.5,0.3,0.2,0,1,0,0" o="ffffffff" c="2"/><S T="10" X="620" Y="230" L="40" H="400" P="0,0,0.3,0,0,0,0,0"/><S T="12" X="604" Y="600" L="10" H="160" P="0,0,0.3,0.14,0,0,0,0" o="ffffffff" c="2"/><S T="12" X="636" Y="600" L="10" H="160" P="0,0,0.3,-0.14,0,0,0,0" o="ffffffff" c="2"/><S T="10" X="1420" Y="80" L="40" H="160" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="1420" Y="580" L="40" H="200" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="1420" Y="320" L="40" H="200" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="1060" Y="40" L="1040" H="40" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="1580" Y="410" L="40" H="780" P="0,0,20,0.2,0,0,0,0"/><S T="0" X="1495" Y="3035" L="150" H="10" P="0,0,0.3,0.2,0,0,0,0"/><S T="10" X="1020" Y="230" L="760" H="20" P="0,0,0.3,0,0,0,0,0"/><S T="12" X="1195" Y="329" L="53" H="68" P="0,0,0.3,0.2,0,0,0,0" o="281c1b" c="4"/><S T="12" X="899" Y="452" L="100" H="10" P="0,0,0.1,0.35,0,0,0,0" o="ffffffff"/><S T="10" X="1330" Y="720" L="22" H="40" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="1330" Y="460" L="22" H="40" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="660" Y="600" L="80" H="20" P="0,0,0.3,0,0,0,0,0" c="3"/><S T="10" X="1330" Y="200" L="22" H="40" P="0,0,0.3,0,0,0,0,0"/><S T="10" X="620" Y="590" L="40" H="200" P="0,0,0.3,0,0,0,0,0" c="3"/><S T="10" X="820" Y="500" L="1160" H="40" P="0,0,0.3,0,0,0,0,0"/><S T="13" X="396" Y="239" L="132" P="0,0,100,0.2,0,0,0,0" o="ffffffff"/><S T="12" X="900" Y="225" L="40" H="11" P="0,0,0.3,0.2,0,0,0,0" o="ffffffff" c="3"/><S T="10" X="980" Y="770" L="920" H="60" P="0,0,0.3,0,0,0,0,0"/><S T="12" X="1450" Y="1535" L="10" H="10" P="1,348,0.3,0.2,1,0,0,0" o="9a7495" c="2"/><S T="10" X="-11" Y="398" L="22" H="792" P="0,0,0,0.2,0,0,0,0" m=""/><S T="10" X="1490" Y="720" L="132" H="10" P="0,0,0,0.2,-40,0,0,0"/><S T="10" X="1470" Y="520" L="100" H="10" P="0,0,0,0.2,55,0,0,0"/><S T="10" X="1470" Y="260" L="100" H="10" P="0,0,0,0.2,55,0,0,0"/></S><D><P X="1195" Y="377" T="16" P="0,0"/><P X="620" Y="340" T="34" C="5c99be" P="0,0"/><P X="620" Y="60" T="34" C="63a6cf" P="0,0"/><P X="820" Y="220" T="22" P="0,0"/><T X="280" Y="760"/><P X="1050" Y="740" T="15" C="1a4589" P="0,0"/><P X="1170" Y="740" T="19" C="1a4589" P="0,0"/><P X="1050" Y="755" T="17" P="0,0"/><P X="670" Y="590" T="18" C="def0ff,1f77f7" P="1,0"/><P X="800" Y="740" T="20" C="592f0a" P="0,0"/><P X="900" Y="400" T="14" C="3163b1,00113e,cfdcff" P="0,0"/><P X="730" Y="220" T="27" P="0,0"/><P X="1080" Y="590" T="90" C="5d6575" P="0,0"/><P X="750" Y="220" T="24" C="205f96" P="0,0"/><P X="1195" Y="320" T="112" P="0,0"/><P X="990" Y="174" T="114" P="0,0"/><P X="1190" Y="485" T="96" C="807a73" P="0,0"/><P X="900" Y="480" T="95" C="e9e9e9" P="0,0"/><P X="400" Y="480" T="68" P="0,0"/><P X="350" Y="480" T="67" P="0,0"/><P X="450" Y="480" T="67" P="0,1"/><P X="890" Y="740" T="94" C="623b2a,a3468e" P="0,0"/><P X="1389" Y="1545" T="19" C="1a4589" P="0,0"/><P X="85" Y="760" T="67" P="0,0"/><P X="155" Y="760" T="67" P="0,1"/><P X="120" Y="760" T="66" P="0,0"/><P X="1612" Y="1545" T="19" C="1a4589" P="0,0"/><P X="880" Y="740" T="19" C="1a4589" P="0,0"/><P X="1020" Y="480" T="105" C="ffffff,613f29" P="0,0"/><P X="1070" Y="480" T="105" C="ffffff,613f29" P="0,0"/><P X="780" Y="480" T="105" C="ffffff,613f29" P="0,0"/><P X="730" Y="480" T="105" C="ffffff,613f29" P="0,0"/><P X="1060" Y="720" T="52" P="1,0"/><P X="1180" Y="220" T="104" C="757575" P="0,0"/><P X="1220" Y="180" T="100" C="185cff" P="1,0"/><P X="1199" Y="180" T="91" C="0aa7f3" P="1,0"/><P X="1020" Y="720" T="113" P="1,0"/><P X="1140" Y="180" T="130" C="125eff" P="0,0"/><P X="1065" Y="215" T="125" C="0d69cb" P="0,1"/></D><O><O X="280" Y="750" C="36" P="0"/><O X="320" Y="750" C="36" P="0"/><O X="240" Y="750" C="36" P="0"/><O X="260" Y="770" C="36" P="0"/><O X="300" Y="770" C="36" P="0"/><O X="280" Y="790" C="36" P="0"/><O X="260" Y="730" C="36" P="0"/><O X="300" Y="730" C="36" P="0"/><O X="280" Y="710" C="36" P="0"/><O X="260" Y="750" C="36" P="0"/><O X="300" Y="750" C="36" P="0"/><O X="450" Y="550" C="60" nosync="" P="90,1"/><O X="450" Y="530" C="11" P="0"/><O X="360" Y="550" C="60" nosync="" P="90,1"/><O X="360" Y="530" C="11" P="0"/><O X="360" Y="595" C="60" nosync="" P="90,1"/><O X="450" Y="595" C="60" nosync="" P="90,1"/><O X="360" Y="640" C="60" nosync="" P="90,1"/><O X="450" Y="640" C="60" nosync="" P="90,1"/><O X="360" Y="685" C="60" nosync="" P="90,1"/><O X="450" Y="685" C="60" nosync="" P="90,1"/><O X="405" Y="710" C="46" nosync="" P="0"/><O X="360" Y="575" C="14" P="0"/><O X="450" Y="575" C="14" P="0"/><O X="360" Y="620" C="14" P="0"/><O X="450" Y="620" C="14" P="0"/><O X="360" Y="660" C="14" P="0"/><O X="450" Y="660" C="14" P="0"/><O X="360" Y="705" C="14" P="0"/><O X="450" Y="705" C="14" P="0"/></O><L><JP M1="4" M2="9" AXIS="0,1"/><JR/><JR M1="5" M2="9"/><JR M1="5"/><JR M1="10" M2="11"/><JP M1="10" M2="9"/><JP M1="11" M2="9"/><JP M1="24" M2="12"/><JP M1="27" M2="3" AXIS="1,0"/><JR M1="2" M2="34"/></L></Z></C>',
- [2] = '@7384285',
- [3] = '@7384286',
- [4] = '@5753801',
- [5] = '@6756144',
- [6] = '@7904412',
- [7] = '<C><P L="1200" MEDATA="14,1;;;;-0;0:::1-"/><Z><S><S T="0" X="5" Y="0" L="10" H="10" P="0,0,0.3,0.2,0,0,0,0" i="0,0,180b6336772.png"/><S T="4" X="354" Y="179" L="10" H="87" P="0,0,20,0.2,0,0,0,0" m=""/><S T="4" X="438" Y="186" L="10" H="180" P="0,0,20,0.2,60,0,0,0" m=""/><S T="0" X="435" Y="130" L="163" H="10" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="1007" Y="330" L="378" H="10" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="808" Y="315" L="90" H="10" P="0,0,0.3,0.2,35,0,0,0" m=""/><S T="0" X="742" Y="292" L="71" H="10" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="4" X="735" Y="351" L="10" H="83" P="0,0,20,0.2,0,0,0,0" m=""/><S T="1" X="1205" Y="194" L="10" H="403" P="0,0,0,0.2,0,0,0,0" m=""/><S T="1" X="-8" Y="195" L="10" H="403" P="0,0,0,0.2,0,0,0,0" m=""/><S T="1" X="597" Y="-11" L="1222" H="10" P="0,0,0,0.2,0,0,0,0" m=""/><S T="0" X="367" Y="390" L="732" H="10" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="9" X="375" Y="367" L="705" H="40" P="0,0,0,0,0,0,0,0" m=""/><S T="9" X="227" Y="263" L="102" H="19" P="0,0,0,0,0,0,0,0" m=""/><S T="4" X="311" Y="156" L="15" H="10" P="0,0,20,0.2,0,0,0,0" m=""/><S T="4" X="11" Y="236" L="16" H="284" P="0,0,20,0.2,0,0,0,0" m=""/><S T="0" X="36" Y="217" L="10" H="70" P="0,0,0.3,0.2,-40,0,0,0" m=""/><S T="0" X="87" Y="137" L="10" H="109" P="0,0,0.3,0.2,10,0,0,0" m=""/><S T="0" X="28" Y="131" L="30" H="11" P="0,0,0.3,0.2,30,0,0,0" m=""/><S T="0" X="173" Y="81" L="149" H="10" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="165" Y="106" L="133" H="11" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="4" X="245" Y="99" L="10" H="41" P="0,0,20,0.2,30,0,0,0" m=""/><S T="0" X="260" Y="340" L="17" H="20" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="453" Y="319" L="37" H="63" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="414" Y="327" L="35" H="38" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="359" Y="336" L="67" H="24" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="152" Y="339" L="70" H="21" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="108" Y="340" L="19" H="10" P="0,0,0.3,0.2,-30,0,0,0" m=""/><S T="0" X="138" Y="263" L="70" H="27" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="299" Y="266" L="40" H="30" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="225" Y="275" L="100" H="10" P="0,0,0.3,0.2,0,0,0,0" m=""/><S T="0" X="350" Y="270" L="55" H="10" P="0,0,0.3,0.2,30,0,0,0" m=""/><S T="4" X="110" Y="263" L="10" H="20" P="0,0,20,0.2,0,0,0,0" m=""/></S><D><DS X="454" Y="111"/></D><O/><L/></Z></C>',
- [8] = '@7384227'
- }
- local coordinatesLimitsToSpawnPowersOnMaps = {
- [1] = {x = {399, 88, 1326, 1504, 1471, 1193, 895, 401, 397, 1429, 1330, 760}, y = {684, 709, 678, 662, 471, 334, 423, 415, 89, 209, 150, 149}},
- [2] = {x = {72, 315, 487, 718, 1018, 339, 1508, 1338, 886, 1212, 711}, y = {325, 157, 461, 414, 383, 763, 452, 313, 236, 115, 33}},
- [3] = {x = {72, 315, 487, 718, 1018, 339, 1508, 1338, 886, 1212, 711}, y = {325, 157, 461, 414, 383, 763, 452, 313, 236, 115, 33}},
- [4] = {x = {1416, 1196, 797, 421, 191, 792, 490, 1105, 791, 643, 954}, y = {257, 91, 150, 80, 252, 337, 336, 390, 578, 708, 698}},
- [5] = {x = {103, 86, 649, 501, 98, 372, 277, 476}, y = {49, 163, 201, 47, 337, 261, 303, 233}},
- [6] = {x = {798, 351, 346, 91, 593, 886, 1040, 1223}, y = {59, 100, 303, 335, 272, 296, 198, 289}},
- [7] = {x = {169, 427, 226, 151, 451, 584, 741, 1094}, y = {52, 102, 257, 310, 265, 367, 264, 301}},
- [8] = {x = {384, 399, 395, 70, 719, 392, 100, 681, 665}, y = {263, 380, 113, 324, 330, 533, 654, 657, 708}},
- }
- local powersImages = {
- [1] = "18117129395.png",
- [2] = "18117124089.png",
- [3] = "180c9211111.png"
- }
- local powerOnGame = {
- imageId = "",
- }
- local gipsyRole = {quantityFragments = 0}
- local invetory = {}
- local pagesList = {}
- function ui.addWindow(id, text, player, x, y, width, height, alpha, corners, closeButton, buttonText)
- id = tostring(id)
- ui.addTextArea(id.."0", "", player, x+1, y+1, width-2, height-2, 0x8a583c, 0x8a583c, alpha, true)
- ui.addTextArea(id.."00", "", player, x+3, y+3, width-6, height-6, 0x2b1f19, 0x2b1f19, alpha, true)
- ui.addTextArea(id.."000", "", player, x+4, y+4, width-8, height-8, 0xc191c, 0xc191c, alpha, true)
- ui.addTextArea(id.."0000", "", player, x+5, y+5, width-10, height-10, 0x2d5a61, 0x2d5a61, alpha, true)
- ui.addTextArea(id.."00000", text, player, x+5, y+6, width-10, height-12, 0x142b2e, 0x142b2e, alpha, true)
- local imageId = {}
- if corners then
- table.insert(imageId, tfm.exec.addImage("155cbe97a3f.png", "&1", x-7, (y+height)-22, player))
- table.insert(imageId, tfm.exec.addImage("155cbe99c72.png", "&1", x-7, y-7, player))
- table.insert(imageId, tfm.exec.addImage("155cbe9bc9b.png", "&1", (x+width)-20, (y+height)-22, player))
- table.insert(imageId, tfm.exec.addImage("155cbea943a.png", "&1", (x+width)-20, y-7, player))
- end
- if closeButton then
- ui.addTextArea(id.."000000", "", player, x+8, y+height-22, width-16, 13, 0x7a8d93, 0x7a8d93, alpha, true)
- ui.addTextArea(id.."0000000", "", player, x+9, y+height-21, width-16, 13, 0xe1619, 0xe1619, alpha, true)
- ui.addTextArea(id.."00000000", "", player, x+9, y+height-21, width-17, 12, 0x314e57, 0x314e57, alpha, true)
- ui.addTextArea(id.."", buttonText, player, x+9, y+height-24, width-17, nil, 0x314e57, 0x314e57, 0, true)
- end
- return imageId
- end
- function closeWindow(id, name)
- local id = tostring(id)
- local str = "0"
- ui.removeTextArea(id, name)
- for i = 1, 9 do
- ui.removeTextArea(id..""..str.."", name)
- str = ""..str.."0"
- end
- end
- function buttonNextOrPrev(id, name, x, y, width, height, alpha, text)
- id = tostring(id)
- ui.addTextArea(id.."0000000000", "", name, x+8, y+height-22, width-16, 13, 0x7a8d93, 0x7a8d93, alpha, true)
- ui.addTextArea(id.."00000000000", "", name, x+9, y+height-21, width-16, 13, 0xe1619, 0xe1619, alpha, true)
- ui.addTextArea(id.."000000000000", "", name, x+9, y+height-21, width-17, 12, 0x314e57, 0x314e57, alpha, true)
- ui.addTextArea(id.."0000000000000", text, name, x+9, y+height-24, width-17, nil, 0x314e57, 0x314e57, 0, true)
- end
- function closeButtonNextOrPrev(id, name)
- local id = tostring(id)
- local str = "0000000000"
- ui.removeTextArea(id, name)
- for i = 1, 4 do
- ui.removeTextArea(id..""..str.."", name)
- str = ""..str.."0"
- end
- end
- function showTheGameLogo(name)
- local id = {}
- id[name] = tfm.exec.addImage("1810cd85b98.png", "&1", 240, 70, name, 0.5, 0.5)
- gameLogo = addTimer(function(i)
- if i == 1 then
- tfm.exec.removeImage(id[name])
- end
- end, 5000, 1, "gameLogo")
- end
- for name, data in pairs(tfm.get.room.playerList) do
- storageImagePlayer[name] = {}
- invetory[name] = {imageId = "", indexPower = 0, isPowerEnabled = false, canUsePower = false}
- tfm.exec.setPlayerScore(name, 0, false)
- showTheGameLogo(name)
- end
- function init()
- tfm.exec.disableAutoShaman(true)
- tfm.exec.newGame("@7415932")
- initTimer = os.time() + 20000
- gameStats = {
- gameImages = {
- [1] = "180c9201a6c.png",
- [2] = "180c91fc481.png",
- [3] = "180c9206cad.png",
- [4] = "180c920bee7.png",
- [5] = "180c9211111.png",
- [6] = "180c9216364.png"
- },
- gameStorageImages = {},
- textAreaIdValue = 9358291239,
- textAreaIdStorage = {},
- skipTheVote = 0,
- winGame = false,
- }
- gipsyRole = {quantityFragments = 0}
- listPlayersOnGame = {}
- quantityPlayers = 0
- textAreaFogId = 29999201202
- textAreaFogsId = {}
- for name, data in pairs(tfm.get.room.playerList) do
- playerLanguage[name] = {tr = trad, name = name}
- playersJoined[name] = false
- playerRank[name] = {rankName = 0, name = name}
- playerActions[name] = {assassin = {canAssassin = false, playerTarget = {playerName = "", x = "", y = ""}, playerAssassin = {x = "", y = "", listOfPlayers = {}}}, savePlayer = {canSave = false, playerSaved = false, playerTarget = ""}, detectiveAction = {canVote = false, playerTarget = ""}, voteAction = { canVote = false, voteCount = 0, playerName = name, playerTarget = "", voted = false, skiped = false}}
- pagesList[name] = {assassinPage = 1, medicPage = 1, detectivePage = 1, votePage = 1, pageLog = 1, helpPage = 1, powersPage = 1}
- system.bindKeyboard(name, 77, true, true)
- end
- ui.addWindow(23, "<p align='center'><font size='13px'><a href='event:menuOpen'>Menu", nil, 5, 15, 100, 30, 1, false, false, _)
- ui.addTextArea(0, trad.textTimerInit, nil, 200, 100, 400, 100, 0x161616, 0x161616, 0, false)
- ui.addWindow(1, trad.joinInGame, nil, 200, 360, 400, 35, 1, false, false)
- mode = "start"
- end
- function eventTextAreaCallback(id, name, c)
- if c == "join" and not playersJoined[name] and quantityPlayers < 16 then
- playersJoined[name] = true
- quantityPlayers = quantityPlayers + 1
- ui.addWindow(1, playerLanguage[name].tr.leaveGame, name, 200, 360, 400, 35, 1, false, false)
- elseif c == "leave" and playersJoined[name] then
- playersJoined[name] = false
- quantityPlayers = quantityPlayers - 1
- ui.addWindow(1, playerLanguage[name].tr.joinInGame, name, 200, 360, 400, 35, 1, false, false)
- elseif c == "menuOpen" then
- ui.addWindow(23, "<p align='center'><font size='13px'><a href='event:menuClose'>Menu</a>"..playerLanguage[name].tr.menuOpenText, name, 5, 15, 100, 120, 1, false, false, _)
- elseif c == "menuClose" then
- ui.addWindow(23, "<p align='center'><font size='13px'><a href='event:menuOpen'>Menu", name, 5, 15, 100, 30, 1, false, false, _)
- elseif c == "whatsANew" then
- removeImagesOfHelp(name)
- closeWindow(24, name)
- closeButtonNextOrPrev(26, name)
- closeButtonNextOrPrev(25, name)
- ui.addWindow(24, playerLanguage[name].tr.whatsANew, name, 125, 60, 650, 300, 1, false, true, playerLanguage[name].tr.closeUIText)
- elseif c == "howToPlay" then
- removeImagesOfHelp(name)
- pagesList[name].helpPage = 1
- windowForHelp(name, pagesList[name].helpPage, playerLanguage[name].tr.nextMessage, playerLanguage[name].tr.previousMessage)
- elseif c == "powers" then
- removeImagesOfHelp(name)
- pagesList[name].powersPage = 1
- windowForPowers(name, pagesList[name].powersPage, playerLanguage[name].tr.nextMessage, playerLanguage[name].tr.previousMessage)
- elseif string.sub(c, 1, 8) == "nextHelp" then
- removeImagesOfHelp(name)
- pagesList[name].helpPage = tonumber(string.sub(c, 9))
- windowForHelp(name, pagesList[name].helpPage, playerLanguage[name].tr.nextMessage, playerLanguage[name].tr.previousMessage)
- elseif string.sub(c, 1, 8) == "prevHelp" then
- removeImagesOfHelp(name)
- pagesList[name].helpPage = tonumber(string.sub(c, 9))
- windowForHelp(name, pagesList[name].helpPage, playerLanguage[name].tr.nextMessage, playerLanguage[name].tr.previousMessage)
- elseif string.sub(c, 1, 10) == "nextPowers" then
- removeImagesOfHelp(name)
- pagesList[name].powersPage = tonumber(string.sub(c, 11))
- windowForPowers(name, pagesList[name].powersPage, playerLanguage[name].tr.nextMessage, playerLanguage[name].tr.previousMessage)
- elseif string.sub(c, 1, 10) == "prevPowers" then
- removeImagesOfHelp(name)
- pagesList[name].powersPage = tonumber(string.sub(c, 11))
- windowForPowers(name, pagesList[name].powersPage, playerLanguage[name].tr.nextMessage, playerLanguage[name].tr.previousMessage)
- elseif c == "credits" then
- removeImagesOfHelp(name)
- closeWindow(24, name)
- closeButtonNextOrPrev(26, name)
- closeButtonNextOrPrev(25, name)
- ui.addWindow(24, playerLanguage[name].tr.creditsText, name, 125, 60, 650, 300, 1, false, true, playerLanguage[name].tr.closeUIText)
- elseif c == "closeWindow" then
- closeWindow(24, name)
- closeButtonNextOrPrev(26, name)
- closeButtonNextOrPrev(25, name)
- removeImagesOfHelp(name)
- elseif string.sub(c, 2, 9) == "nextPage" then
- if playerRank[name].rankName == 2 then
- pagesList[name].assassinPage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.titleMessageAssassin, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", removeThePlayerInList, pagesList[name].assassinPage, "assassinPlayer")
- elseif playerRank[name].rankName == 3 then
- pagesList[name].medicPage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.titleMessageMedic, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", getPlayerList, pagesList[name].medicPage, "savePlayer")
- elseif playerRank[name].rankName == 4 then
- pagesList[name].detectivePage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.titleMessageDetective, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", removeThePlayerInList, pagesList[name].detectivePage, "detectiveAction")
- end
- if string.sub(c, 1, 1) == "5" then
- pagesList[name].votePage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.messageTitleVote, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", getPlayerList, pagesList[name].votePage, "voteOnPlayer")
- elseif string.sub(c, 1, 1) == "6" then
- pagesList[name].pageLog = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.messageLogOfVotes, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", verifyVotes, pagesList[name].pageLog, "logVote")
- end
- elseif string.sub(c, 2, 9) == "prevPage" then
- if playerRank[name].rankName == 2 then
- pagesList[name].assassinPage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.titleMessageAssassin, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", removeThePlayerInList, pagesList[name].assassinPage, "assassinPlayer")
- elseif playerRank[name].rankName == 3 then
- pagesList[name].medicPage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.titleMessageMedic, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", getPlayerList, pagesList[name].medicPage, "savePlayer")
- elseif playerRank[name].rankName == 4 then
- pagesList[name].detectivePage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.titleMessageDetective, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", removeThePlayerInList, pagesList[name].detectivePage, "detectiveAction")
- end
- if string.sub(c, 1, 1) == "5" then
- pagesList[name].votePage = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.messageTitleVote, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", getPlayerList, pagesList[name].votePage, "voteOnPlayer")
- elseif string.sub(c, 1, 1) == "6" then
- pagesList[name].pageLog = tonumber(string.sub(c, 10))
- windowButtonPlayer(playerLanguage[name].tr.messageLogOfVotes, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", verifyVotes, pagesList[name].pageLog, "logVote")
- end
- elseif string.sub(c, 1, 14) == "assassinPlayer" and playerActions[name].assassin.canAssassin then
- playerActions[name].assassin.canAssassin = false
- playerActions[name].assassin.playerTarget.playerName = string.sub(c, 15)
- giveKeysForVerifyCoordsOfPlayer(string.sub(c, 15), true)
- removeWindowsAndButtons(name)
- elseif string.sub(c, 1, 10) == "savePlayer" and playerActions[name].savePlayer.canSave then
- playerActions[name].savePlayer.canSave = false
- playerActions[name].savePlayer.playerTarget = string.sub(c, 11)
- playerActions[string.sub(c, 11)].savePlayer.playerSaved = true
- removeWindowsAndButtons(name)
- elseif string.sub(c, 1, 15) == "detectiveAction" and playerActions[name].detectiveAction.canVote then
- playerActions[name].detectiveAction.canVote = false
- playerActions[name].detectiveAction.playerTarget = string.sub(c, 16)
- removeWindowsAndButtons(name)
- elseif string.sub(c, 1, 12) == "voteOnPlayer" and playerActions[name].voteAction.canVote then
- playerActions[name].voteAction.canVote = false
- playerActions[name].voteAction.voted = true
- playerActions[string.sub(c, 13)].voteAction.voteCount = playerActions[string.sub(c, 13)].voteAction.voteCount + 1
- playerActions[name].voteAction.playerTarget = string.sub(c, 13)
- removeWindowsAndButtons(name)
- elseif c == "skipDetective" and playerActions[name].detectiveAction.canVote then
- playerActions[name].detectiveAction.canVote = false
- removeWindowsAndButtons(name)
- elseif c == "skipVote" and playerActions[name].voteAction.canVote then
- playerActions[name].voteAction.canVote = false
- playerActions[name].voteAction.voted = true
- playerActions[name].voteAction.skiped = true
- gameStats.skipTheVote = gameStats.skipTheVote + 1
- removeWindowsAndButtons(name)
- end
- end
- function eventKeyboard(name, key, down, x, y, xv, yv)
- tfm.get.room.playerList[name].x = x
- tfm.get.room.playerList[name].y = y
- if playersJoined[name] and key == 77 then
- if not invetory[name].isPowerEnabled then
- local canChange = true
- modes = {"start", "logOfVotes", "vote", "gameWin", ""}
- for i = 1, #modes do
- if mode == modes[i] then
- canChange = false
- ui.addTextArea(1234567890, "", name, 758, 80, 5, 1, 0x161616, 0x161616, 0.5, true)
- invetory[name].isPowerEnabled = false
- system.bindMouse(name, false)
- end
- end
- if canChange then
- invetory[name].isPowerEnabled = true
- invetory[name].canUsePower = true
- system.bindMouse(name, true)
- ui.addTextArea(1234567890, "", name, 758, 80, 5, 1, 0x2ECF73, 0x2ECF73, 0.5, true)
- end
- else
- ui.addTextArea(1234567890, "", name, 758, 80, 5, 1, 0x161616, 0x161616, 0.5, true)
- invetory[name].canUsePower = false
- invetory[name].isPowerEnabled = false
- system.bindMouse(name, false)
- end
- end
- end
- function eventChatCommand(name, message)
- if admins[name] then
- if mode == "timerStoped" and string.lower(message) == "stoptimer" then
- initTimer = os.time() + 15000
- mode = "start"
- return
- end
- if mode == "start" then
- if string.lower(message) == "resettimer" then
- initTimer = os.time() + 15000
- elseif string.lower(string.sub(message, 1, 6)) == "setmap" then
- local valueIndex = tonumber(string.sub(message, 8))
- if valueIndex >= 1 and valueIndex <= #maps then
- mapIndex = valueIndex
- end
- elseif string.lower(message) == "stoptimer" then
- if mode == "start" then
- mode = "timerStoped"
- return
- end
- end
- end
- end
- end
- function windowForHelp(name, pageOfPlayer, textNext, textPrev)
- local pageList = #trad.helpText
- ui.addWindow(24, ""..playerLanguage[name].tr.helpTitle..""..playerLanguage[name].tr.helpText[pageOfPlayer].text.."", name, 125, 60, 650, 300, 1, false, true, playerLanguage[name].tr.closeUIText)
- if pageOfPlayer >= 1 and pageOfPlayer < pageList then
- local page = pageOfPlayer + 1
- buttonNextOrPrev(25, name, 540, 300, 200, 30, 1, "<a href='event:nextHelp"..tostring(page).."'>"..textNext.."</a>")
- else
- buttonNextOrPrev(25, name, 540, 300, 200, 30, 1, "<n2>"..textNext.."")
- end
- if pageOfPlayer > 1 then
- local page = pageOfPlayer - 1
- buttonNextOrPrev(26, name, 160, 300, 200, 30, 1, "<a href='event:prevHelp"..tostring(page).."'>"..textPrev.."</a>")
- else
- buttonNextOrPrev(26, name, 160, 300, 200, 30, 1, "<n2>"..textPrev.."")
- end
- if playerLanguage[name].tr.helpText[pageOfPlayer].haveImage then
- storageImagePlayer[name][#storageImagePlayer[name] + 1] = tfm.exec.addImage(playerLanguage[name].tr.helpText[pageOfPlayer].image[1], "&1", 130, playerLanguage[name].tr.helpText[pageOfPlayer].y[1], name)
- storageImagePlayer[name][#storageImagePlayer[name] + 1] = tfm.exec.addImage(playerLanguage[name].tr.helpText[pageOfPlayer].image[2], "&1", 130, playerLanguage[name].tr.helpText[pageOfPlayer].y[2], name)
- end
- end
- function windowForPowers(name, pageOfPlayer, textNext, textPrev)
- local pageList = #trad.powersText
- ui.addWindow(24, ""..playerLanguage[name].tr.powerTitle..""..playerLanguage[name].tr.powersText[pageOfPlayer].text.."", name, 125, 60, 650, 300, 1, false, true, playerLanguage[name].tr.closeUIText)
- if pageOfPlayer >= 1 and pageOfPlayer < pageList then
- local page = pageOfPlayer + 1
- buttonNextOrPrev(25, name, 540, 300, 200, 30, 1, "<a href='event:nextPowers"..tostring(page).."'>"..textNext.."</a>")
- else
- buttonNextOrPrev(25, name, 540, 300, 200, 30, 1, "<n2>"..textNext.."")
- end
- if pageOfPlayer > 1 then
- local page = pageOfPlayer - 1
- buttonNextOrPrev(26, name, 160, 300, 200, 30, 1, "<a href='event:prevPowers"..tostring(page).."'>"..textPrev.."</a>")
- else
- buttonNextOrPrev(26, name, 160, 300, 200, 30, 1, "<n2>"..textPrev.."")
- end
- if playerLanguage[name].tr.powersText[pageOfPlayer].haveImage then
- for i = 1, #playerLanguage[name].tr.powersText[pageOfPlayer].image do
- storageImagePlayer[name][#storageImagePlayer[name] + 1] = tfm.exec.addImage(playerLanguage[name].tr.powersText[pageOfPlayer].image[i], "&1", 130, playerLanguage[name].tr.powersText[pageOfPlayer].y[i], name)
- end
- end
- end
- function removeImagesOfHelp(name)
- for i = 1, #storageImagePlayer[name] do
- tfm.exec.removeImage(storageImagePlayer[name][i])
- end
- end
- function configPlayerLeft(name)
- if playerRank[name].rankName ~= 0 then
- quantityRanks[playerRank[name].rankName] = quantityRanks[playerRank[name].rankName] - 1
- playerRank[name] = {rankName = 0, name = name}
- playersJoined[name] = false
- verifyQuantityPlayersWithRanks()
- end
- giveKeysForVerifyCoordsOfPlayer(name, false)
- tfm.exec.removeImage(invetory[name].imageId)
- invetory[name] = {imageId = "", indexPower = 0, isPowerEnabled = false, canUsePower = false}
- playersJoined[name] = false
- playerRank[name] = {rankName = 0, name = name}
- playerActions[name] = {assassin = {canAssassin = false, playerTarget = {playerName = "", x = "", y = ""}, playerAssassin = {x = "", y = "", listOfPlayers = {}}}, savePlayer = {canSave = false, playerSaved = false, playerTarget = ""}, detectiveAction = {canVote = false, playerTarget = ""}, voteAction = { canVote = false, voteCount = 0, playerName = name, playerTarget = "", voted = false, skiped = false}}
- pagesList[name] = {assassinPage = 1, medicPage = 1, detectivePage = 1, votePage = 1, pageLog = 1, helpPage = 1, powersPage = 1}
- if mode ~= "start" then
- ui.setMapName(""..trad.ranks[1]..": "..quantityRanks[1].." | "..trad.ranks[2]..": "..quantityRanks[2].." | "..trad.ranks[3]..": "..quantityRanks[3].." | "..trad.ranks[4]..": "..quantityRanks[4].." | "..trad.ranks[5]..": "..quantityRanks[5].." | "..trad.ranks[6]..": "..quantityRanks[6].."<")
- end
- end
- function eventPlayerLeft(name)
- if mode == "start" then
- if playersJoined[name] then
- quantityPlayers = quantityPlayers - 1
- end
- end
- configPlayerLeft(name)
- end
- function eventPlayerDied(name)
- configPlayerLeft(name)
- end
- function eventNewPlayer(name)
- playerLanguage[name] = {tr = trad, name = name}
- playersJoined[name] = false
- playerRank[name] = {rankName = 0, name = name}
- playerActions[name] = {assassin = {canAssassin = false, playerTarget = {playerName = "", x = "", y = ""}, playerAssassin = {x = "", y = "", listOfPlayers = {}}}, savePlayer = {canSave = false, playerSaved = false, playerTarget = ""}, detectiveAction = {canVote = false, playerTarget = ""}, voteAction = { canVote = false, voteCount = 0, playerName = name, playerTarget = "", voted = false, skiped = false}}
- pagesList[name] = {assassinPage = 1, medicPage = 1, detectivePage = 1, votePage = 1, pageLog = 1, helpPage = 1, powersPage = 1}
- storageImagePlayer[name] = {}
- system.bindKeyboard(name, 77, true, true)
- invetory[name] = {imageId = "", indexPower = 0, isPowerEnabled = false, canUsePower = false}
- ui.addWindow(23, "<p align='center'><font size='13px'><a href='event:menuOpen'>Menu", name, 5, 15, 100, 30, 1, false, false, _)
- showTheGameLogo(name)
- if mode == "start" then
- ui.addWindow(1, trad.joinInGame, name, 200, 360, 400, 35, 1, false, false)
- tfm.exec.respawnPlayer(name)
- else
- ui.setMapName(""..trad.ranks[1]..": "..quantityRanks[1].." | "..trad.ranks[2]..": "..quantityRanks[2].." | "..trad.ranks[3]..": "..quantityRanks[3].." | "..trad.ranks[4]..": "..quantityRanks[4].." | "..trad.ranks[5]..": "..quantityRanks[5].." | "..trad.ranks[6]..": "..quantityRanks[6].."<")
- end
- end
- function removeWindowsAndButtons(name)
- for i = 1, 4 do
- ui.removeTextArea(98760 + i, name)
- end
- closeWindow(2, name)
- closeButtonNextOrPrev(2, name)
- closeButtonNextOrPrev(3, name)
- closeButtonNextOrPrev(4, name)
- end
- function eventLoop(elapsedTime, remainingTime)
- timersLoop()
- if mode == "start" then
- local x = math.ceil((initTimer - os.time())/1000)
- local c = string.format("%d", x)
- ui.addTextArea(0, ""..trad.textTimerInit.." "..c.."s <br>"..trad.peopleNeedToInit.."<br><br>"..trad.people.." "..quantityPlayers.."/16<br><br><b>"..trad.gameTranslated.."", nil, 160, 50, 440, 150, 0x161616, 0x161616, 0, false)
- if x == 0 then
- if quantityPlayers >= 5 then
- ui.removeTextArea(0)
- startGame()
- else
- initTimer = os.time() + 15000
- end
- end
- elseif mode == "waitAssassin" then
- local x = math.ceil((timerAssassin - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- resetPages()
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 2 then
- playerActions[name].assassin.canAssassin = true
- windowButtonPlayer(playerLanguage[name].tr.titleMessageAssassin, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", removeThePlayerInList, pagesList[name].assassinPage, "assassinPlayer")
- end
- end
- resetTimerAssassin(30000)
- setMode("assassinPlayer")
- end
- elseif mode == "assassinPlayer" then
- local x = math.ceil((timerAssassin - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- removeWindowsAndButtons(nil)
- resetPages()
- local quantity = 0
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 2 then
- playerActions[name].assassin.canAssassin = false
- giveKeysForVerifyCoordsOfPlayer(name, true)
- elseif playerRank[name].rankName == 3 then
- playerActions[name].savePlayer.canSave = true
- quantity = quantity + 1
- windowButtonPlayer(playerLanguage[name].tr.titleMessageMedic, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", getPlayerList, pagesList[name].medicPage, "savePlayer")
- end
- end
- if quantity >= 1 then
- timerMedic = os.time() + 30000
- else
- timerMedic = os.time() + 15000
- end
- gameMessage("savePlayer", trad.messageMedic)
- end
- elseif mode == "savePlayer" then
- local x = math.ceil((timerMedic - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- removeWindowsAndButtons(nil)
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 3 then
- playerActions[name].savePlayer.canSave = false
- elseif playerRank[name].rankName == 4 then
- playerActions[name].detectiveAction.canVote = true
- end
- end
- timerDetective = os.time() + 30000
- killPlayerWithAssassin()
- end
- elseif mode == "detectiveAction" then
- local x = math.ceil((timerDetective - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- timerToTalk = os.time() + 30000
- killPlayerWithDetective()
- end
- elseif mode == "timeToTalk" then
- local x = math.ceil((timerToTalk - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- timerToVote = os.time() + 30000
- resetPages()
- clearFog()
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 4 then
- playerActions[name].detectiveAction.canVote = true
- end
- if playersJoined[name] then
- playerActions[name].voteAction.canVote = true
- windowButtonPlayer(playerLanguage[name].tr.messageTitleVote, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", getPlayerList, pagesList[name].votePage, "voteOnPlayer")
- end
- end
- setMode("vote")
- end
- elseif mode == "vote" then
- local x = math.ceil((timerToVote - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- timerLogVote = os.time() + 30000
- removeWindowsAndButtons(nil)
- logOfVotes()
- setMode("logOfVotes")
- clearFog()
- end
- elseif mode == "logOfVotes" then
- local x = math.ceil((timerLogVote - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- setMode("")
- removeWindowsAndButtons(nil)
- voteCount()
- end
- elseif mode == "gameWin" then
- local x = math.ceil((timerWinner - os.time())/1000)
- local c = string.format("%d", x)
- if x == 0 then
- ui.removeTextArea(123456789)
- ui.removeTextArea(1234567890)
- setMode("")
- removeTimer("addPowerOnMap")
- resetPages()
- removeTextsAndImages()
- init()
- end
- end
- end
- function logOfVotes()
- resetPages()
- for name, data in pairs(tfm.get.room.playerList) do
- windowButtonPlayer(playerLanguage[name].tr.messageLogOfVotes, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", verifyVotes, pagesList[name].pageLog, "logVote")
- end
- end
- function verifyVotes(t)
- local messageStr = ""
- local logs = {}
- for name, data in pairs(tfm.get.room.playerList) do
- if playerActions[name].voteAction.playerTarget ~= "" and playerRank[name].rankName ~= 0 then
- messageStr = ""..name.." "..trad.voteActions[1].." "..playerActions[name].voteAction.playerTarget..""
- logs[#logs + 1] = messageStr
- messageStr = ""
- else
- if playerActions[name].voteAction.skiped and playerRank[name].rankName ~= 0 then
- messageStr = ""..name.." "..trad.voteActions[2]..""
- logs[#logs + 1] = messageStr
- messageStr = ""
- else
- if playerRank[name].rankName ~= 0 then
- messageStr = ""..name.." "..trad.voteActions[3]..""
- logs[#logs + 1] = messageStr
- messageStr = ""
- end
- end
- end
- end
- return logs
- end
- function voteCount()
- local draw = false
- local first = true
- local mostVotedPlayer = ""
- local countVote = 0
- local tags = {"<N>", "<r>", "<vp>", "<bv>", "<vi>", "<j>"}
- local colors = {"<font color='#C2C2DA'>", "<font color='#CB546B'>", "<font color='#2EBA7E'>", "<font color='#2F7FCC'>", "<font color='#C53DFF'>", "<font color='#BABD2F'>"}
- for name, data in pairs(tfm.get.room.playerList) do
- if first then
- first = false
- mostVotedPlayer = name
- countVote = playerActions[name].voteAction.voteCount
- else
- if playerActions[name].voteAction.voteCount > playerActions[mostVotedPlayer].voteAction.voteCount then
- mostVotedPlayer = name
- countVote = playerActions[name].voteAction.voteCount
- draw = false
- elseif playerActions[name].voteAction.voteCount == playerActions[mostVotedPlayer].voteAction.voteCount then
- draw = true
- end
- end
- end
- if countVote > gameStats.skipTheVote then
- if playerRank[mostVotedPlayer].rankName == 6 and not draw then
- timerWinner = os.time() + 10000
- gameStats.winGame = true
- gameWin(false, false, true, mostVotedPlayer)
- else
- if not draw then
- local rankName = trad.ranks[playerRank[mostVotedPlayer].rankName]
- ui.addPopup(1, 0, ""..trad.voteResult[1][1].." "..string.gsub(rankName, tags[playerRank[mostVotedPlayer].rankName], colors[playerRank[mostVotedPlayer].rankName]).." "..mostVotedPlayer.."</font> "..trad.voteResult[1][2].." "..countVote.." "..trad.voteResult[1][3].." "..trad.voteResult[1][4].."", nil, 200, 100, 400, true)
- tfm.exec.killPlayer(mostVotedPlayer)
- createTextAreaOfKilledPlayer(mostVotedPlayer)
- disableGameFunctions(mostVotedPlayer)
- verifyQuantityPlayersWithRanks()
- end
- end
- end
- if gameStats.skipTheVote > countVote then
- ui.addPopup(1, 0, trad.voteResult[2], nil, 200, 100, 400, true)
- end
- gameStats.skipTheVote = 0
- if draw then
- ui.addPopup(1, 0, trad.voteResult[3], nil, 200, 100, 400, true)
- end
- for name, data in pairs(tfm.get.room.playerList) do
- resetActions(name)
- end
- if not gameStats.winGame then
- resetTimerAssassin(30000)
- mode = "waitAssassin"
- end
- end
- function gameWin(isVictimWinner, isAssassinWinner, isTrollWinner, trollName)
- timerWinner = os.time() + 10000
- mode = "gameWin"
- if isVictimWinner then
- ui.addPopup(5, 0, ""..trad.victimWinnerGame.."", nil, 200, 100, 400, true)
- givePointsToPlayer(true)
- return
- end
- if isAssassinWinner then
- ui.addPopup(5, 0, ""..trad.assassinWinnerGame.."", nil, 200, 100, 400, true)
- givePointsToPlayer(false, true)
- return
- end
- if isTrollWinner then
- ui.addPopup(5, 0, ""..trad.trollWinnerGame[1][1].." "..trollName.."</font> "..trad.trollWinnerGame[1][2].."", nil, 200, 100, 400, true)
- givePointsToPlayer(false, false, true)
- return
- end
- end
- function givePointsToPlayer(isVictimWinner, isAssassinWinner, isTrollWinner)
- if isVictimWinner then
- for i = 1, #listPlayersOnGame do
- if listPlayersOnGame[i].rankName ~= 2 and listPlayersOnGame[i].rankName ~= 6 then
- tfm.exec.setPlayerScore(listPlayersOnGame[i].name, 10, true)
- end
- end
- return
- end
- if isAssassinWinner then
- for i = 1, #listPlayersOnGame do
- if listPlayersOnGame[i].rankName == 2 then
- tfm.exec.setPlayerScore(listPlayersOnGame[i].name, 10, true)
- end
- end
- return
- end
- if isTrollWinner then
- for i = 1, #listPlayersOnGame do
- if listPlayersOnGame[i].rankName == 6 then
- tfm.exec.setPlayerScore(listPlayersOnGame[i].name, 25, true)
- end
- end
- return
- end
- end
- function verifyQuantityPlayersWithRanks()
- quantityAlivesVictim = 0
- quantityAlivesAssassin = 0
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName ~= 2 and playersJoined[name] then
- quantityAlivesVictim = quantityAlivesVictim + 1
- else
- if playersJoined[name] then
- quantityAlivesAssassin = quantityAlivesAssassin + 1
- end
- end
- end
- if quantityAlivesVictim <= quantityAlivesAssassin then
- gameStats.winGame = true
- gameWin(false, true, false)
- end
- if quantityAlivesAssassin == 0 then
- gameStats.winGame = true
- gameWin(true, false, false)
- end
- end
- function killPlayerWithAssassin()
- local messageStr = ""..trad.gameMessages.titleAssassinPopup.."<br>"
- local index = 0
- local tags = {"<N>", "<r>", "<vp>", "<bv>", "<vi>", "<j>"}
- local colors = {"<font color='#C2C2DA'>", "<font color='#CB546B'>", "<font color='#2EBA7E'>", "<font color='#2F7FCC'>", "<font color='#C53DFF'>", "<font color='#BABD2F'>"}
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 2 then
- index = index + 1
- if playerActions[name].assassin.playerTarget.playerName ~= "" then
- if playerRank[playerActions[name].assassin.playerTarget.playerName].rankName ~= 0 then
- local playerTarget = playerActions[name].assassin.playerTarget.playerName
- local rankName = trad.ranks[playerRank[playerTarget].rankName]
- if playerActions[playerTarget].savePlayer.playerSaved then
- messageStr = ""..messageStr.."<font color='#CB546B'>"..trad.gameMessages.assassin.." "..index.."</font> "..trad.gameMessages.medicSavedPlayer.."<br>"
- playerActions[playerTarget].savePlayer.playerSaved = false
- playerActions[name].assassin.playerTarget.playerName = ""
- else
- messageStr = ""..messageStr.."<font color='#CB546B'>"..trad.gameMessages.assassin.." "..index.."</font> "..trad.gameMessages.assassinKillPlayer.." "..string.gsub(rankName, tags[playerRank[playerTarget].rankName], colors[playerRank[playerTarget].rankName]).." "..playerTarget.."</font><br>"
- tfm.exec.killPlayer(playerTarget)
- verifyDistanceOfPlayers(playerTarget, name)
- if playerRank[playerTarget].rankName == 2 then
- assassinAdvantage(name)
- end
- playerActions[name].assassin.playerTarget.playerName = ""
- disableGameFunctions(playerTarget)
- verifyQuantityPlayersWithRanks()
- end
- else
- messageStr = ""..messageStr.."<font color='#CB546B'>"..trad.gameMessages.assassin.." "..index.."</font> "..trad.gameMessages.messageSameTarget.."<br>"
- playerActions[name].assassin.playerTarget.playerName = ""
- end
- else
- messageStr = ""..messageStr.."<font color='#CB546B'>"..trad.gameMessages.assassin.." "..index.."</font> "..trad.gameMessages.assassinAfk.."<br>"
- tfm.exec.killPlayer(name)
- disableGameFunctions(name)
- verifyQuantityPlayersWithRanks()
- giveKeysForVerifyCoordsOfPlayer(name, false)
- end
- end
- end
- verifyQuantityPlayersWithRanks()
- resetPages()
- ui.addPopup(1, 0, messageStr, nil, 200, 100, 400, true)
- messageAssassin = addTimer(function(i)
- if i == 1 then
- if not gameStats.winGame then
- detectiveAction()
- gameMessage("detectiveAction", trad.messageDetective)
- end
- end
- end, 7000, 1, "message")
- end
- function killPlayerWithDetective()
- local messageStr = ""..trad.gameMessages.titleAssassinPopup.."<br>"
- local index = 0
- local tags = {"<N>", "<r>", "<vp>", "<bv>", "<vi>", "<j>"}
- local colors = {"<font color='#C2C2DA'>", "<font color='#CB546B'>", "<font color='#2EBA7E'>", "<font color='#2F7FCC'>", "<font color='#C53DFF'>", "<font color='#BABD2F'>"}
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 4 then
- index = index + 1
- playerActions[name].detectiveAction.canVote = false
- if playerActions[name].detectiveAction.playerTarget ~= "" then
- if playerRank[playerActions[name].detectiveAction.playerTarget].rankName ~= 0 then
- local playerTarget = playerActions[name].detectiveAction.playerTarget
- local rankName = trad.ranks[playerRank[playerTarget].rankName]
- if playerRank[playerTarget].rankName == 2 or playerRank[playerTarget].rankName == 6 then
- tfm.exec.killPlayer(playerTarget)
- messageStr = ""..messageStr.."<font color='#2F7FCC'>"..trad.gameMessages.detective.." "..index.."</font> "..trad.gameMessages.detectiveKilledTheAssassin.." "..string.gsub(rankName, tags[playerRank[playerTarget].rankName], colors[playerRank[playerTarget].rankName]).." "..playerTarget.."</font><br>"
- createTextAreaOfKilledPlayer(playerTarget)
- playerActions[name].detectiveAction.playerTarget = ""
- disableGameFunctions(playerTarget)
- verifyQuantityPlayersWithRanks()
- else
- messageStr = ""..messageStr.."<font color='#2F7FCC'>"..trad.gameMessages.detective.." "..index.."</font> "..trad.gameMessages.detectiveKilledAnInnocent.." "..string.gsub(rankName, tags[playerRank[playerTarget].rankName], colors[playerRank[playerTarget].rankName]).." "..playerTarget.."</font><br>"
- tfm.exec.killPlayer(playerTarget)
- tfm.exec.killPlayer(name)
- createTextAreaOfKilledPlayer(playerTarget)
- createTextAreaOfKilledPlayer(name)
- disableGameFunctions(name)
- disableGameFunctions(playerTarget)
- verifyQuantityPlayersWithRanks()
- end
- else
- messageStr = ""..messageStr.."<font color='#2F7FCC'>"..trad.gameMessages.detective.." "..index.."</font> "..trad.gameMessages.messageSameTarget.."<br>"
- playerActions[name].detectiveAction.playerTarget = ""
- end
- else
- messageStr = ""..messageStr.."<font color='#2F7FCC'>"..trad.gameMessages.detective.." "..index.."</font> "..trad.gameMessages.detectiveSkiped.."<br>"
- end
- end
- end
- verifyQuantityPlayersWithRanks()
- resetPages()
- ui.addPopup(1, 0, messageStr, nil, 200, 100, 400, true)
- messageDetective = addTimer(function(i)
- if i == 1 then
- if not gameStats.winGame then
- ui.addPopup(1, 0, trad.timeToTalk, nil, 200, 100, 400, true)
- mode = "timeToTalk"
- end
- end
- end, 7000, 1, "message")
- end
- function verifyDistanceOfPlayers(playerTarget, playerAssassin)
- local coordsPlayerTarget = {
- xLeft = tfm.get.room.playerList[playerTarget].x - 150,
- xRight = tfm.get.room.playerList[playerTarget].x + 150,
- yUp = tfm.get.room.playerList[playerTarget].y - 100,
- yDown = tfm.get.room.playerList[playerTarget].y + 100,
- }
- local coordsPlayerAssassin = {
- x = tfm.get.room.playerList[playerAssassin].x,
- y = tfm.get.room.playerList[playerAssassin].y
- }
- local tagsColor = {"<N>", "<r>", "<vp>", "<bv>", "<vi>", "<j>"}
- if coordsPlayerAssassin.x + 10 >= coordsPlayerTarget.xLeft and coordsPlayerAssassin.x - 10 <= coordsPlayerTarget.xRight and coordsPlayerAssassin.y + 10 >= coordsPlayerTarget.yUp and coordsPlayerAssassin.y - 10 <= coordsPlayerTarget.yDown then
- gameStats.gameStorageImages[#gameStats.gameStorageImages + 1] = tfm.exec.addImage(gameStats.gameImages[2], "!1", (coordsPlayerTarget.xLeft + 90), (coordsPlayerTarget.yUp - 30), nil)
- end
- ui.addTextArea(gameStats.textAreaIdValue, "<p align='center'>"..tagsColor[playerRank[playerTarget].rankName]..""..playerTarget.."", nil, (coordsPlayerTarget.xLeft + 40), coordsPlayerTarget.yUp, 120, 25, 0x161616, 0x161616, 0.3, false)
- gameStats.textAreaIdStorage[#gameStats.textAreaIdStorage + 1] = gameStats.textAreaIdValue
- gameStats.textAreaIdValue = gameStats.textAreaIdValue + 1
- giveKeysForVerifyCoordsOfPlayer(playerTarget, false)
- giveKeysForVerifyCoordsOfPlayer(playerAssassin, false)
- end
- function createTextAreaOfKilledPlayer(name)
- local tagsColor = {"<N>", "<r>", "<vp>", "<bv>", "<vi>", "<j>"}
- ui.addTextArea(gameStats.textAreaIdValue, "<p align='center'>"..tagsColor[playerRank[name].rankName]..""..name.."", nil, tfm.get.room.playerList[name].x, tfm.get.room.playerList[name].y - 10, 120, 25, 0x161616, 0x161616, 0.3, false)
- gameStats.textAreaIdStorage[#gameStats.textAreaIdStorage + 1] = gameStats.textAreaIdValue
- gameStats.textAreaIdValue = gameStats.textAreaIdValue + 1
- end
- function disableGameFunctions(name)
- quantityRanks[playerRank[name].rankName] = quantityRanks[playerRank[name].rankName] - 1
- playersJoined[name] = false
- tfm.exec.removeImage(invetory[name].imageId)
- invetory[name] = {imageId = "", indexPower = 0, isPowerEnabled = false, canUsePower = false}
- playerRank[name] = {rankName = 0, name = name}
- playerActions[name] = {assassin = {canAssassin = false, playerTarget = {playerName = "", x = "", y = ""}, playerAssassin = {x = "", y = "", listOfPlayers = {}}}, savePlayer = {canSave = false, playerSaved = false, playerTarget = ""}, detectiveAction = {canVote = false, playerTarget = ""}, voteAction = { canVote = false, voteCount = 0, playerName = name, playerTarget = "", voted = false, skiped = false}}
- pagesList[name] = {assassinPage = 1, medicPage = 1, detectivePage = 1, votePage = 1, pageLog = 1, helpPage = 1, powersPage = 1}
- ui.setMapName(""..trad.ranks[1]..": "..quantityRanks[1].." | "..trad.ranks[2]..": "..quantityRanks[2].." | "..trad.ranks[3]..": "..quantityRanks[3].." | "..trad.ranks[4]..": "..quantityRanks[4].." | "..trad.ranks[5]..": "..quantityRanks[5].." | "..trad.ranks[6]..": "..quantityRanks[6].."<")
- end
- function gameMessage(modeGame, message)
- ui.addPopup(1, 0, message, nil, 200, 100, 400, true)
- if not gameStats.winGame then
- messageTimer = addTimer(function(i)
- if i == 1 then
- if not gameStats.winGame then
- mode = modeGame
- end
- end
- end, 7000, 1, "messageTimer")
- end
- end
- function setMode(modeGame)
- if not gameStats.winGame then
- mode = modeGame
- end
- end
- function resetTimerAssassin(value)
- timerAssassin = os.time() + value
- end
- function startGame()
- closeWindow(1, nil)
- mode = ""
- resetTimerAssassin(30000)
- selectMap()
- gameMessage("waitAssassin", trad.messageAssassin)
- ui.setMapName(""..trad.ranks[1]..": "..quantityRanks[1].." | "..trad.ranks[2]..": "..quantityRanks[2].." | "..trad.ranks[3]..": "..quantityRanks[3].." | "..trad.ranks[4]..": "..quantityRanks[4].." | "..trad.ranks[5]..": "..quantityRanks[5].." | "..trad.ranks[6]..": "..quantityRanks[6].."<")
- ui.addTextArea(123456789, "", nil, 740, 30, 40, 40, 0x161616, 0x161616, 0.5, true)
- ui.addTextArea(1234567890, "", nil, 758, 80, 5, 1, 0x161616, 0x161616, 0.5, true)
- funcAddPowerOnMap()
- timerAssassin = os.time() + 10000
- end
- function selectMap()
- if mapIndex == #maps then
- tfm.exec.newGame(maps[mapIndex])
- mapIndex = 1
- else
- mapIndex = mapIndex + 1
- tfm.exec.newGame(maps[mapIndex])
- end
- RanksToPlayers()
- end
- function RanksToPlayers()
- if quantityPlayers <= 8 then
- quantityRanks = {
- [1] = 0,
- [2] = 1,
- [3] = 1,
- [4] = 0,
- [5] = 0,
- [6] = 1
- }
- elseif quantityPlayers <= 13 then
- quantityRanks = {
- [1] = 0,
- [2] = 2,
- [3] = 1,
- [4] = 0,
- [5] = 1,
- [6] = 1
- }
- elseif quantityPlayers >= 14 then
- quantityRanks = {
- [1] = 0,
- [2] = 3,
- [3] = 2,
- [4] = 0,
- [5] = 1,
- [6] = 1
- }
- end
- if quantityPlayers <= 10 then
- quantityRanks[4] = 1
- elseif quantityPlayers > 10 then
- quantityRanks[4] = 2
- end
- giveRanks(quantityRanks)
- end
- function giveRanks(rankList)
- local players = {}
- for name, data in pairs(tfm.get.room.playerList) do
- if playersJoined[name] then
- players[#players + 1] = name
- end
- end
- for i = 2, #rankList do
- for j = 1, rankList[i] do
- if #players >= 1 then
- local index = math.random(1, #players)
- local player = players[index]
- playerRank[player].rankName = i
- gameStats.gameStorageImages[#gameStats.gameStorageImages + 1] = tfm.exec.addImage(gameStats.gameImages[i], "$"..player.."", -15, -100, player)
- listPlayersOnGame[#listPlayersOnGame + 1] = {name = player, rankName = i}
- table.remove(players, index)
- end
- end
- end
- for i = 1, #players do
- if playerRank[players[i]].rankName == 0 and playersJoined[players[i]] then
- playerRank[players[i]].rankName = 1
- gameStats.gameStorageImages[#gameStats.gameStorageImages + 1] = tfm.exec.addImage(gameStats.gameImages[1], "$"..players[i].."", -15, -100, players[i])
- listPlayersOnGame[#listPlayersOnGame + 1] = {name = players[i], rankName = 1}
- quantityRanks[1] = quantityRanks[1] + 1
- end
- end
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 0 then
- tfm.exec.killPlayer(name)
- end
- end
- gipsy()
- end
- function getPlayerList(namePlayer)
- local playerList = {}
- local playerTable = {}
- for name, data in pairs(tfm.get.room.playerList) do
- if playersJoined[name] then
- playerList[#playerList + 1] = name
- end
- end
- playerTable[namePlayer] = playerList
- return playerTable[namePlayer]
- end
- function gipsy()
- local selectPlayer = {}
- local gispy = ""
- local haveGispy = false
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 5 then
- gispy = playerRank[name]
- haveGispy = true
- else
- if playerRank[name].rankName ~= 0 then
- selectPlayer[#selectPlayer + 1] = name
- end
- end
- end
- if haveGispy then
- local getPlayer = selectPlayer[math.random(1, #selectPlayer)]
- ui.addPopup(2, 0, ""..playerLanguage[gispy.name].tr.gispyInfo1.." "..getPlayer.." "..playerLanguage[gispy.name].tr.gispyInfo2.." "..playerLanguage[gispy.name].tr.ranks[playerRank[getPlayer].rankName].."", gispy.name, 200, 150, 400, true)
- end
- end
- function assassinAdvantage(name)
- local playerList = getPlayerList(name)
- local selectPlayer = {}
- for i = 1, #playerList do
- if playerList[i] ~= name then
- selectPlayer[#selectPlayer + 1] = playerList[i]
- end
- end
- if #selectPlayer >= 1 then
- local getPlayer = selectPlayer[math.random(1, #selectPlayer)]
- ui.addPopup(2, 0, ""..playerLanguage[name].tr.messageAssassinAdvantage.." "..getPlayer.." "..playerLanguage[name].tr.gispyInfo2.." "..playerLanguage[name].tr.ranks[playerRank[getPlayer].rankName].."", name, 200, 150, 400, true)
- end
- end
- function detectiveAction()
- local quantity = 0
- for name, data in pairs(tfm.get.room.playerList) do
- if playerRank[name].rankName == 4 then
- playerActions[name].detectiveAction.canVote = true
- quantity = quantity + 1
- windowButtonPlayer(playerLanguage[name].tr.titleMessageDetective, name, 2, 3, playerLanguage[name].tr.previousMessage, playerLanguage[name].tr.nextMessage, "prevPage", "nextPage", removeThePlayerInList, pagesList[name].detectivePage, "detectiveAction")
- end
- end
- if quantity >= 1 then
- timerDetective = os.time() + 30000
- else
- timerDetective = os.time() + 15000
- end
- end
- function windowButtonPlayer(message, name, id, id1, textPrev, textNext, eventPrev, eventNext, func, pageListForPlayer, eventAction)
- ui.addWindow(id, message, name, 125, 60, 650, 300, 1, false, false)
- showThePages(message, name, id, id1, textPrev, textNext, eventPrev, eventNext, func, pageListForPlayer, eventAction)
- end
- function showThePages(message, name, id, id1, textPrev, textNext, eventPrev, eventNext, func, pageListForPlayer, eventAction)
- local pageList = pageListCount(name, func)
- local y = 120
- if #pageList >= pageListForPlayer then
- for i = 1, 4 do
- if #pageList[pageListForPlayer] >= i then
- ui.addTextArea(98760 + i, "<p align='center'><a href='event:"..eventAction..""..pageList[pageListForPlayer][i].."'>"..pageList[pageListForPlayer][i].."", name, 150, y, 600, 30, 0x161616, 0x161616, 0.5, true)
- y = y + 45
- end
- end
- end
- if playerRank[name].rankName == 2 then
- buttonsRedirect(pagesList[name].assassinPage, pageList, name, 2, 3, textPrev, textNext, 2, eventPrev, eventNext)
- elseif playerRank[name].rankName == 3 then
- buttonsRedirect(pagesList[name].medicPage, pageList, name, 2, 3, textPrev, textNext, 3, eventPrev, eventNext)
- elseif playerRank[name].rankName == 4 then
- buttonsRedirect(pagesList[name].detectivePage, pageList, name, 2, 3, textPrev, textNext, 4, eventPrev, eventNext)
- buttonSkip(name, "skipDetective")
- end
- if eventAction == "voteOnPlayer" then
- buttonsRedirect(pagesList[name].votePage, pageList, name, 2, 3, textPrev, textNext, 5, eventPrev, eventNext)
- buttonSkip(name, "skipVote")
- elseif eventAction == "logVote" then
- buttonsRedirect(pagesList[name].pageLog, pageList, name, 2, 3, textPrev, textNext, 6, eventPrev, eventNext)
- end
- end
- function buttonsRedirect(pageOfPlayer, pageList, name, id, id1, textPrev, textNext, indexRank, eventPrev, eventNext)
- if pageOfPlayer >= 1 and pageOfPlayer < #pageList then
- local page = pageOfPlayer + 1
- buttonNextOrPrev(id1, name, 540, 300, 200, 30, 1, "<a href='event:"..tostring(indexRank)..""..eventNext..""..tostring(page).."'>"..textNext.."</a>")
- else
- buttonNextOrPrev(id1, name, 540, 300, 200, 30, 1, "<n2>"..textNext.."")
- end
- if pageOfPlayer > 1 then
- local page = pageOfPlayer - 1
- buttonNextOrPrev(id, name, 160, 300, 200, 30, 1, "<a href='event:"..indexRank..""..eventPrev..""..tostring(page).."'>"..textPrev.."</a>")
- else
- buttonNextOrPrev(id, name, 160, 300, 200, 30, 1, "<n2>"..textPrev.."")
- end
- end
- function buttonSkip(name, event)
- buttonNextOrPrev(4, name, 375, 300, 150, 30, 1, "<a href='event:"..event.."'>"..playerLanguage[name].tr.skipMessage.."</a>")
- end
- function pageListCount(name, func)
- local listPlayersForAssassin = func(name)
- local pages = {}
- local pagesPlayer = {}
- local elements = {}
- for i = 1, #listPlayersForAssassin do
- elements[#elements + 1] = listPlayersForAssassin[i]
- if i % 2 == 0 then
- if #elements == 4 then
- pages[#pages + 1] = {}
- for j = 1, 4 do
- pages[#pages][j] = elements[j]
- end
- elements = {}
- end
- end
- end
- if #elements >= 1 then
- pages[#pages + 1] = {}
- for i = 1, #elements do
- pages[#pages][i] = elements[i]
- end
- end
- pagesPlayer[name] = pages
- return pagesPlayer[name]
- end
- function removeThePlayerInList(name)
- local players = getPlayerList(name)
- local playerAssassin = ""
- local assassinTable = {}
- local assassinTableP = {}
- for i = 1, #players do
- if name ~= players[i] then
- assassinTable[#assassinTable + 1] = players[i]
- end
- end
- assassinTableP[name] = assassinTable
- return assassinTableP[name]
- end
- function resetActions(name)
- playerActions[name] = {assassin = {canAssassin = false, playerTarget = {playerName = "", x = "", y = ""}, playerAssassin = {x = "", y = "", listOfPlayers = {}}}, savePlayer = {canSave = false, playerSaved = false, playerTarget = ""}, detectiveAction = {canVote = false, playerTarget = ""}, voteAction = { canVote = false, voteCount = 0, playerName = name, playerTarget = "", voted = false, skiped = false}}
- end
- function resetPages()
- for name, data in pairs(tfm.get.room.playerList) do
- pagesList[name] = {assassinPage = 1, medicPage = 1, detectivePage = 1, votePage = 1, pageLog = 1, helpPage = 1, powersPage = 1}
- end
- end
- function removeTextsAndImages()
- for i = 1, #gameStats.textAreaIdStorage do
- ui.removeTextArea(gameStats.textAreaIdStorage[i], nil)
- end
- for i = 1, #gameStats.gameStorageImages do
- tfm.exec.removeImage(gameStats.gameStorageImages[i])
- end
- end
- function giveKeysForVerifyCoordsOfPlayer(name, isEnabled)
- for i = 0, 3 do
- system.bindKeyboard(name, i, true, isEnabled)
- end
- end
- function funcAddPowerOnMap()
- addPowerOnMap = addTimer(function(i)
- if i >= 1 then
- removePowerImageOnMap()
- tfm.exec.removeBonus(0, nil)
- local index = mapIndex
- local coords = math.random(1, #coordinatesLimitsToSpawnPowersOnMaps[index].x)
- local x = coordinatesLimitsToSpawnPowersOnMaps[index].x[coords]
- local y = coordinatesLimitsToSpawnPowersOnMaps[index].y[coords]
- local imageIndex = math.random(1, #powersImages)
- tfm.exec.addBonus(0, x, y, imageIndex, 0, false, nil, imageIndex)
- powerOnGame.imageId = tfm.exec.addImage(powersImages[imageIndex], "!1", x, y, nil)
- end
- end, 60000, 0, "addPowerOnMap")
- end
- function eventPlayerBonusGrabbed(name, bonusId)
- removePowerImageOnMap()
- tfm.exec.removeImage(invetory[name].imageId)
- tfm.exec.removeBonus(bonusId, nil)
- local powersShowImageOnInventory = {1, 2}
- for i = 1, #powersShowImageOnInventory do
- if powersShowImageOnInventory[i] == bonusId then
- addPowerOnTheInvetory(bonusId, name)
- end
- end
- if bonusId == 3 and playerRank[name].rankName ~= 2 and playerRank[name].rankName ~= 5 and playerRank[name].rankName ~= 0 then
- quantityFragmentsOfGipsy()
- end
- end
- function removePowerImageOnMap()
- if powerOnGame.imageId ~= "" then
- tfm.exec.removeImage(powerOnGame.imageId)
- powerOnGame.imageId = ""
- end
- end
- function addPowerOnTheInvetory(index, name)
- invetory[name].imageId = tfm.exec.addImage(powersImages[index], "&1", 745, 35, name)
- invetory[name].indexPower = index
- end
- function quantityFragmentsOfGipsy()
- gipsyRole.quantityFragments = gipsyRole.quantityFragments + 1
- if gipsyRole.quantityFragments == 3 then
- gipsyRole.quantityFragments = 0
- gipsy()
- end
- end
- function eventMouse(name, x, y)
- if invetory[name].indexPower == 1 and invetory[name].isPowerEnabled and invetory[name].canUsePower then
- invetory[name].isPowerEnabled = false
- freezePlayer(x, y)
- elseif invetory[name].indexPower == 2 and invetory[name].isPowerEnabled and invetory[name].canUsePower then
- invetory[name].isPowerEnabled = false
- makeFogOnMap(textAreaFogId, x - 150, y - 100)
- textAreaFogsId[#textAreaFogsId + 1] = textAreaFogId
- textAreaFogId = textAreaFogId + 1
- end
- tfm.exec.removeImage(invetory[name].imageId)
- invetory[name].canUsePower = false
- invetory[name].indexPower = 0
- invetory[name].imageId = ""
- system.bindMouse(name, false)
- ui.addTextArea(1234567890, "", name, 758, 80, 5, 1, 0x161616, 0x161616, 0.5, true)
- end
- function freezePlayer(xCoord, yCoord)
- local x1 = xCoord - 200
- local x2 = xCoord + 200
- local y1 = yCoord - 100
- local y2 = yCoord + 100
- local playerList = {}
- for name, data in pairs(tfm.get.room.playerList) do
- if playersJoined[name] then
- playerList[#playerList + 1] = name
- if tfm.get.room.playerList[name].x + 20 >= x1 and tfm.get.room.playerList[name].x - 20 <= x2 and tfm.get.room.playerList[name].y + 20 >= y1 and tfm.get.room.playerList[name].y - 20 <= y2 then
- tfm.exec.freezePlayer(name, true, true)
- end
- end
- end
- timerToUnFreezePlayer(playerList)
- end
- function timerToUnFreezePlayer(list)
- UnFreezePlayer = addTimer(function(i)
- if i == 1 then
- for j = 1, #list do
- tfm.exec.freezePlayer(list[j], false)
- end
- end
- end, 15000, 1, "UnFreezePlayer")
- end
- function makeFogOnMap(id, x, y)
- timerIncreaseFog(id, x, y)
- end
- function timerIncreaseFog(id, x, y)
- local opacity = 0
- IncreaseFog = addTimer(function(i)
- if i >= 1 then
- opacity = opacity + 0.2
- ui.addTextArea(id, "", nil, x, y, 300, 200, 0xFFFFFF, 0xFFFFFF, opacity, false)
- end
- if i == 5 then
- timerRemainFog(id, x, y)
- end
- end, 1000, 5, "IncreaseFog")
- end
- function timerRemainFog(id, x, y)
- RemainFog = addTimer(function(i)
- if i == 1 then
- timerDecreaseFog(id, x, y)
- end
- end, 5000, 1, "RemainFog")
- end
- function timerDecreaseFog(id, x, y)
- local opacity = 1
- DecreaseFog = addTimer(function(i)
- if i >= 1 then
- opacity = opacity - 0.2
- ui.addTextArea(textAreaFogId, "", nil, x, y, 300, 200, 0xFFFFFF, 0xFFFFFF, opacity, false)
- end
- end, 1000, 5, "DecreaseFog")
- ui.removeTextArea(id)
- end
- function clearFog()
- for i = 1, #textAreaFogsId do
- removeTimer("IncreaseFog")
- removeTimer("RemainFog")
- removeTimer("DecreaseFog")
- ui.removeTextArea(textAreaFogsId[i])
- end
- end
- init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement