View difference between Paste ID: n1vW5zQC and t3BqzmsK
SHOW: | | - or go back to the newest paste.
1
-- Four in a row
2
-- Escrito por Ninguem -- Data: 03/10/2015
3
4
adm = "Ninguem"
5
tempoDaJogada = 20000
6
cor = {0x2285b6, 0xff4747}
7
8
code = [[<C><P Ca="" /><Z><S><S P="0,0,0.3,0.2,0,0,0,0" L="3000" o="171226" X="400" c="3" Y="385" T="12" H="30" /><S P="0,0,0.3,0,0,0,0,0" L="360" o="28203e" X="400" c="4" Y="300" T="12" H="10" /><S H="10" L="360" o="28203e" X="400" c="4" Y="250" T="12" P="0,0,0.3,0.2,0,0,0,0" /><S H="10" L="360" o="28203e" X="400" c="4" Y="150" T="12" P="0,0,0.3,0.2,0,0,0,0" /><S P="0,0,0.3,0.2,0,0,0,0" L="360" o="28203e" X="400" c="4" Y="100" T="12" H="10" /><S P="0,0,0.3,0.2,0,0,0,0" L="360" o="28203e" X="400" c="4" Y="200" T="12" H="10" /><S H="10" L="360" o="28203e" X="400" c="4" Y="50" T="12" P="0,0,0.3,0.2,0,0,0,0" /><S P="0,0,0,0.2,0,0,0,0" L="10" o="2d2642" X="225" c="2" Y="200" T="12" H="310" /><S H="310" L="10" o="2d2642" X="275" c="2" Y="200" T="12" P="0,0,0,0.2,0,0,0,0" /><S P="0,0,0,0.2,0,0,0,0" L="10" o="2d2642" X="325" c="2" Y="200" T="12" H="310" /><S H="310" L="10" o="2d2642" X="375" c="2" Y="200" T="12" P="0,0,0,0.2,0,0,0,0" /><S P="0,0,0,0.2,0,0,0,0" L="10" o="2d2642" X="425" c="2" Y="200" T="12" H="310" /><S H="310" L="10" o="2d2642" X="475" c="2" Y="200" T="12" P="0,0,0,0.2,0,0,0,0" /><S P="0,0,0,0.2,0,0,0,0" L="10" o="2d2642" X="525" c="2" Y="200" T="12" H="310" /><S H="310" L="10" o="2d2642" X="575" c="2" Y="200" T="12" P="0,0,0,0.2,0,0,0,0" /><S P="0,0,0.3,0.2,0,0,0,0" L="3000" o="171226" X="400" N="" Y="23" T="12" H="10" /><S P="0,0,0.3,0.2,0,0,0,0" L="400" o="2285b6" X="200" N="" Y="23" T="12" H="10" /><S L="400" o="ff4747" X="600" H="10" N="" Y="23" T="12" P="0,0,0.3,0.2,0,0,0,0" /><S H="10" L="360" o="2d2642" X="400" c="4" Y="350" T="12" P="0,0,0.3,0,0,0,0,0" /><S P="0,0,0.3,0.2,0,0,0,0" L="100" o="171226" X="720" Y="300" T="12" H="200" /><S L="100" o="171226" X="80" H="200" Y="300" T="12" P="0,0,0.3,0.2,0,0,0,0" /><S X="126" L="160" H="10" lua="3333" Y="290" T="%d" P="0,0,%f,%f,90,0,0,0" /><S H="10" L="160" X="674" lua="4444" Y="290" T="%d" P="0,0,%f,%f,-90,0,0,0" /><S H="30" L="60" X="80" c="3" Y="192" T="14" P="0,0,0.3,0.2,0,0,0,0" /><S P="0,0,0.3,0.2,0,0,0,0" L="60" H="30" c="3" Y="192" T="14" X="720" /><S L="20" o="171226" H="10" X="122" Y="205" T="12" P="0,0,0.3,0.2,0,0,0,0" /><S P="0,0,0.3,0.2,0,0,0,0" L="20" o="171226" X="678" Y="205" T="12" H="10" /></S><D><P C="2a2244" Y="0" T="34" X="0" P="0,0" /><P C="2285b6,bde8f3,faf1b3" Y="332" T="14" P="0,0" X="-87" /><P C="2285b6" Y="200" T="19" X="80" P="0,0" /><P C="ff4747,bde8f3,faf1b3" Y="324" T="14" X="887" P="0,0" /><P C="ff4747" Y="200" T="19" P="0,0" X="720" /><P C="555d77" Y="389" T="131" X="400" P="1,0" /><P C="ff4747,bde8f3,faf1b3" Y="350" T="14" P="1,0" X="895" /><P C="ff4747,bde8f3,faf1b3" Y="180" T="14" X="892" P="1,0" /><P C="2285b6,bde8f3,faf1b3" Y="350" T="14" X="-95" P="1,0" /><P C="2285b6,bde8f3,faf1b3" Y="180" T="14" X="-95" P="1,0" /><P C="2285b6,bde8f3,faf1b3" Y="164" T="14" P="0,0" X="-88" /><P C="ff4747,bde8f3,faf1b3" Y="157" T="14" P="0,0" X="883" /><DS Y="343" X="400" /><P C="fdfdfd" Y="-30" T="90" X="400" P="0,0" /></D><O /></Z></C>]]
9
-- code = "@6281248" -- versão com tela e menos wj
10
11
piso = {
12
  {id=0, f=0.3, r=0.2},
13
  {id=2, f=0.5, r=2},
14
  {id=3, f=0.5, r=999999},
15
  {id=4, f=20, r=0.2},
16
  {id=5, f=0.3, r=0.2},
17
  {id=6, f=0.3, r=0.2},
18
  {id=7, f=0.1, r=0.2},
19
  {id=10, f=0.3, r=0},
20
  {id=11, f=0.05, r=0.1}
21
}
22
23
modo = "inicio"
24
vez = 1
25
jogador = {}
26
tabela = {}
27
intervalo = os.time()+2000
28
tempoFim = os.time()
29
tempoMapa = os.time() + 3000
30
tempoJogada = os.time() + 15000
31
obj = 0
32
33
tabela = {}
34
for i=1, 7 do
35
  tabela[i] = {}
36
    for j=1, 6 do
37
      tabela[i][j] = 0
38
    end
39
  end
40
41
function novaTabela()
42
  for i=1, 7 do
43
    for j=1, 6 do
44
      tabela[i][j] = 0
45
    end
46
  end
47
end
48
49
function exibeNome(i)
50
  ui.addTextArea(i, "<p align='center'><j>"..jogador[i], nil, (i==1) and 20 or 660, 220, 120, 30, 0, 0, 0, true)
51
end
52
53
function eventNewPlayer(p)
54
  tfm.exec.bindKeyboard(p, 32, true, true)
55
end
56
57
function eventNewGame()
58
  modo = "inicio"
59
  novaTabela()
60
  tempoMapa = os.time() + 3000
61
  jogador[1] = nil
62
  jogador[2] = nil
63
  ui.addTextArea(1, "<p align='center'><vp>[espaço]", nil, 20, 220, 120, 30, 0, 0, 0, true)
64
  ui.addTextArea(2, "<p align='center'><vp>[espaço]", nil, 660, 220, 120, 30, 0, 0, 0, true)
65
  ui.removeTextArea(3)
66
  ui.removeTextArea(4)
67
  tfm.exec.addPhysicObject(8000, 0, 0, {type=14, miceCollision=false})
68-
  tfm.exec.setUIMapName("Four in a row - pastebin.com/tsDRpieM")
68+
  tfm.exec.setUIMapName("Four in a row")
69
  jogador = {}
70
  for i, v in pairs(tfm.get.room.playerList) do
71
    system.bindMouse(i, false)
72
    tfm.exec.setNameColor(i, 0xC2C2CA)
73
    eventNewPlayer(i)
74
  end
75
end
76
77
function eventKeyboard(p, t, d, x, y)
78
  if modo == "inicio" and os.time() > tempoMapa then
79
    if x > 50 and x < 110 and not jogador[1] then
80
      jogador[1] = p
81
      system.bindMouse(p, true)
82
      exibeNome(1)
83
      tfm.exec.setNameColor(p, cor[1])
84
    elseif x > 690 and x < 750 and not jogador[2] then
85
      jogador[2] = p
86
      system.bindMouse(p, true)
87
      exibeNome(2)
88
      tfm.exec.setNameColor(p, cor[2])
89
    end
90
    if jogador[1] and jogador[2] then
91
      modo = "partida"
92
      tempoJogada = tempoDaJogada + os.time()
93
      vez = math.random(1,2)
94
      tfm.exec.removeObject(obj)
95
      obj = tfm.exec.addShamanObject(57, vez == 1 and 80 or 720, 50, 0, 0, 0, true)
96
    end
97
  end
98
end
99
100
function linhaVertical(p)
101
  local p1, p2 = {}, {}
102
  for i=1, 7 do
103
    for j=1, 3 do
104
      if tabela[i][j] == p and tabela[i][j+1] == p and tabela[i][j+2] == p and tabela[i][j+3] == p then
105
        p1 = {i, j}
106
        p2 = {i, j+3}
107
        return p1, p2
108
      end
109
    end
110
  end
111
end
112
113
function linhaHorizontal(p)
114
  local p1, p2 = {}, {}
115
  for i=1, 4 do
116
    for j=1, 6 do
117
      if tabela[i][j] == vez and tabela[i+1][j] == p and tabela[i+2][j] == p and tabela[i+3][j] == p then
118
        p1 = {i, j}
119
        p2 = {i+3, j}
120
        return p1, p2
121
      end
122
    end
123
  end
124
end
125
126
function linhaDiagonal1(p)
127
  local p1, p2 = {}, {}
128
  for i=1, 4 do
129
    for j=1, 3 do
130
      if tabela[i][j] == vez and tabela[i+1][j+1] == p and tabela[i+2][j+2] == p and tabela[i+3][j+3] == p then
131
        p1 = {i, j}
132
        p2 = {i+3, j+3}
133
        return p1, p2
134
      end
135
    end
136
  end
137
end
138
139
function linhaDiagonal2(p)
140
  local p1, p2 = {}, {}
141
  for i=4, 7 do
142
    for j=1, 3 do
143
      if tabela[i][j] == p and tabela[i-1][j+1] == p and tabela[i-2][j+2] == p and tabela[i-3][j+3] == p then
144
        p1 = {i, j}
145
        p2 = {i-3, j+3}
146
        return p1, p2
147
      end
148
    end
149
  end
150
end
151
152
function verificaVitoria(p)
153
  local p1, p2 = false, false
154
  if linhaVertical(p) then
155
    p1, p2 = linhaVertical(p)
156
  elseif linhaHorizontal(p) then
157
    p1, p2 = linhaHorizontal(p)
158
  elseif linhaDiagonal1(p) then
159
    p1, p2 = linhaDiagonal1(p)
160
  elseif linhaDiagonal2(p) then
161
    p1, p2 = linhaDiagonal2(p)
162
  end
163
  if p1 and p2 then
164
    modo = "fim"
165
    tempoFim = os.time() + 10000
166
    local x1 = 200+p1[1]*50
167
    local y1 = 375-p1[2]*50
168
    local x2 = 200+p2[1]*50
169
    local y2 = 375-p2[2]*50
170
    tfm.exec.addJoint(8000, 8000, 8000, {point1=x1..","..y1, point2=x2..","..y2, color=cor[p], line=4, foreground=true})
171
    tfm.exec.setPlayerScore(jogador[p], 1, true)
172
    ui.addTextArea(3, "", nil, 0, 0, 800, 400, 1, 1, 0.3, true)
173
    ui.addTextArea(4, string.format("<p align='center'><font color='#ffffff' size='60px'>%s venceu o jogo!", jogador[p]), nil, 0, 120, 800, 400, 0, 0, 0, true)
174
  end
175
  intervalo = os.time()+2000
176
end
177
178
function semJogada()
179
  for i=1, 7 do
180
    if tabela[i][6] == 0 then
181
      return false
182
    end
183
  end
184
  return true
185
end
186
187
function verificaEmpate()
188
  if modo == "partida" then
189
    if semJogada() then
190
      ui.addTextArea(3, "", nil, 0, 0, 800, 400, 1, 1, 0.3, true)
191
      ui.addTextArea(4, string.format("<p align='center'><font color='#ffffff' size='60px'>Empate"), nil, 0, 120, 800, 400, 0, 0, 0, true)
192
      modo = "fim"
193
      tempoFim = os.time() + 10000
194
    end
195
  end
196
end
197
198
function passaVez()
199
  vez = vez == 1 and 2 or 1
200
  tfm.exec.removeObject(obj)
201
  obj = tfm.exec.addShamanObject(57, vez == 1 and 80 or 720, 50, 0, 0, 0, true)
202
  tempoJogada = os.time() + tempoDaJogada
203
end
204
205
function autoPlay()
206
  local pool = {}
207
  for i=1, 7 do
208
    if tabela[i][6] == 0 then
209
      table.insert(pool, i)
210
    end
211
  end
212
  eventMouse(jogador[vez], 200+pool[math.random(#pool)]*50, 0)
213
end
214
215
function eventChatCommand(p, cmd)
216
  if p == adm and cmd == "new" then
217
    modo = "inicio"
218
    local e = math.random(#piso)
219
    tfm.exec.newGame(string.format(code, piso[e].id, piso[e].f, piso[e].r, piso[e].id, piso[e].f, piso[e].r))
220
  end
221
end
222
223
function eventMouse(p, x, y)
224
  if modo == "partida" then
225
    if jogador[vez] == p and os.time() > intervalo then
226
      local xx = math.ceil((x - 225)/50)
227
      if tabela[xx] then
228
        if tabela[xx][1] == 0 then
229
          tabela[xx][1] = vez
230
          tfm.exec.addPhysicObject(xx*6+1+2000, 200 + (xx * 50), 350, {type=14, miceCollision=false})
231
          tfm.exec.addPhysicObject(xx*6+1+1000, 200 + (xx * 50), 50, {type=13, width=19, mass=999999, color=cor[vez], dynamic=true, miceCollision=false, foreground=true})
232
          verificaVitoria(vez)
233
          verificaEmpate()
234
          passaVez()
235
        elseif tabela[xx][2] == 0 then
236
          tabela[xx][2] = vez
237
          tfm.exec.addPhysicObject(xx*6+2+2000, 200 + (xx * 50), 300, {type=14, miceCollision=false})
238
          tfm.exec.addPhysicObject(xx*6+2+1000, 200 + (xx * 50), 50, {type=13, width=19, mass=999999, color=cor[vez], dynamic=true, miceCollision=false, foreground=true})
239
          verificaVitoria(vez)
240
          verificaEmpate()
241
          passaVez()
242
        elseif tabela[xx][3] == 0 then
243
          tabela[xx][3] = vez
244
          tfm.exec.addPhysicObject(xx*6+3+2000, 200 + (xx * 50), 250, {type=14, miceCollision=false})
245
          tfm.exec.addPhysicObject(xx*6+3+1000, 200 + (xx * 50), 50, {type=13, width=19, mass=999999, color=cor[vez], dynamic=true, miceCollision=false, foreground=true})
246
          verificaVitoria(vez)
247
          verificaEmpate()
248
          passaVez()
249
        elseif tabela[xx][4] == 0 then
250
          tabela[xx][4] = vez
251
          tfm.exec.addPhysicObject(xx*6+4+2000, 200 + (xx * 50), 200, {type=14, miceCollision=false})
252
          tfm.exec.addPhysicObject(xx*6+4+1000, 200 + (xx * 50), 50, {type=13, width=19, mass=999999, color=cor[vez], dynamic=true, miceCollision=false, foreground=true})
253
          verificaVitoria(vez)
254
          verificaEmpate()
255
          passaVez()
256
        elseif tabela[xx][5] == 0 then
257
          tabela[xx][5] = vez
258
          tfm.exec.addPhysicObject(xx*6+5+2000, 200 + (xx * 50), 150, {type=14, miceCollision=false})
259
          tfm.exec.addPhysicObject(xx*6+5+1000, 200 + (xx * 50), 50, {type=13, width=19, mass=999999, color=cor[vez], dynamic=true, miceCollision=false, foreground=true})
260
          verificaVitoria(vez)
261
          verificaEmpate()
262
          passaVez()
263
        elseif tabela[xx][6] == 0 then
264
          tabela[xx][6] = vez
265
          tfm.exec.addPhysicObject(xx*6+6+2000, 200 + (xx * 50), 100, {type=14, miceCollision=false})
266
          tfm.exec.addPhysicObject(xx*6+6+1000, 200 + (xx * 50), 50, {type=13, width=19, mass=999999, color=cor[vez], dynamic=true, miceCollision=false, foreground=true})
267
          verificaVitoria(vez)
268
          verificaEmpate()
269
          passaVez()
270
        end
271
      end
272
    end
273
  end
274
end
275
276
function eventPlayerLeft(p)
277
  if jogador[1] == p or jogador[2] == p then
278
    modo = "fim"
279
    tempoFim = os.time() + 10000
280
  end
281
end
282
283
function eventLoop(current, remaining)
284
  if modo == "fim" and os.time() > tempoFim then
285
    eventChatCommand(adm, "new")
286
  elseif modo == "partida" then
287
    if os.time() > tempoJogada then
288
      autoPlay()
289
    end
290
  end
291
end
292
for i, v in pairs(tfm.get.room.playerList) do
293
  tfm.exec.setPlayerScore(i, 0, false)
294
end
295
tfm.exec.disableAfkDeath(true)
296
tfm.exec.disableAutoShaman(true)
297
tfm.exec.disableAutoNewGame(true)
298
e = math.random(#piso)
299
tfm.exec.newGame(string.format(code, piso[e].id, piso[e].f, piso[e].r, piso[e].id, piso[e].f, piso[e].r))