Forum

> > CS2D > Scripts > Pick a random spectator
ForenübersichtCS2D-Übersicht Scripts-ÜbersichtEinloggen, um zu antworten

Englisch Pick a random spectator

8 Antworten
Zum Anfang Vorherige 1 Nächste Zum Anfang

alt Pick a random spectator

mrc
User Off Offline

Zitieren
Basically what I'm looking for is this:

A player kill another player (1v1), the victim goes to spectator (easy part, already done). Now the script should pick a random player in spectator and join that empty team. Also it would be good to not select the latest "victim".

alt Re: Pick a random spectator

mrc
User Off Offline

Zitieren
What? how changing specmode will make the game select a player and make him join an available team?

alt Re: Pick a random spectator

Cebra
User Off Offline

Zitieren
maybe something like this? (untested code)
but you have to care take about the team joining.
The code can break quite simple

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if wrapper~=true then dofile("sys/lua/wrapper.lua") end

addhook("kill", "_k")
function _k(kid, vid, weapon, x, y, kobj, assist)
	playerlist=player(0,"table")
	if #playerlist > 2 then
		tempteam = player(vid,"team")
		makespec(vid)
		randid = 0
		repeat
			randid = playerlist[math.random(#playerlist)]
		until randid ~= vid and player(randid,"team") == 0
		if tempteam == 1 then
			maket(randid)
		else
			makect(randid)
		end
	end
end

alt Re: Pick a random spectator

mrc
User Off Offline

Zitieren
@user Cebra: nice, it's working! And how about this: pick a player in order (in spectators) instead random, so every player will be in a queue or something. Also a message displaying how many players remaining until ur turn.

alt Re: Pick a random spectator

Cebra
User Off Offline

Zitieren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--untested

if wrapper~=true then dofile("sys/lua/wrapper.lua") end

function initArray(m,v)
	if v == null then v = 0 end
	local array={}
	for i=1, m do
		array[i]=v
	end
	return array
end

function removeFirstElement(t)
	for i =2, #t, 1 do
		t[i-1] = t[i]
	end
	t[#t] = nil
end

queue = {}

addhook("kill", "_k")
function _k(kid, vid, weapon, x, y, kobj, assist)
	tempteam = player(vid,"team")
	makespec(vid)
	queue[#queue + 1]=vid
	if tempteam == 1 then
		maket(queue[0])
	else
		makect(queue[0])
	end
	removeFirstElement(queue)
	for pos, id in ipairs(queue) do
		msg2(id, "Queue pos: "..pos)
	end
end

alt Re: Pick a random spectator

mrc
User Off Offline

Zitieren
@user Cebra:

1
2
3
4
LUA ERROR: sys/lua/wrapper.lua:182: attempt to concatenate local 'player' (a nil value)
 -> sys/lua/wrapper.lua:182: in function 'makect'
 -> sys/lua/autorun/1v1.lua:31: in function <sys/lua/autorun/1v1.lua:24>
 -> in Lua hook 'kill', params: 1, 2, 50, 304, 592, 0, 0

alt Re: Pick a random spectator

Cebra
User Off Offline

Zitieren
my fault
line 28 to 32 has to be replaced with
1
2
3
4
5
if tempteam == 1 then
	maket(queue[1])
else
	makect(queue[1])
end

alt Re: Pick a random spectator

mrc
User Off Offline

Zitieren
@user Cebra:

now when killing the victim, he goes to spectators and come back to the team he was instead of joining the next spectator in the queue.

btw, people are added to the queue when joining the server? and removed when they leave? maybe the problem is there?

Ye, it seems nobody will fix the script. Dead.
3× editiert, zuletzt 03.07.21 18:04:16
Zum Anfang Vorherige 1 Nächste Zum Anfang
Einloggen, um zu antworten Scripts-ÜbersichtCS2D-ÜbersichtForenübersicht