Wysłany: 2020-09-03, 00:36
Hokan
Wiek: 24 Na forum: 2979 dni Posty: 15
Nick w MP: Hokan
Witam, posiadam skrypt na VoiceChat w grze i pojawi? si? problem, gdy? funkcja table.remove oczekuje w drugim elemencie numeru i tu pojawia si? problem, gdy? nie wiem jak mam iterowa? userdata, tak aby skrypt dzia?a? poprawnie. Dok?adniej chodzi o linijke t?= ( table.remove(broadcoastTo, source)), tworzy ona error na serwerze o tre?ci dok?adnie takiej jak powiedzia?em (oczekuje liczby w drugim elemencie)
local voiceCols = {}
local broadcoastTo = {}
addEventHandler ( "onPlayerVoiceStart" , root ,
function()
local voiceSource = source
local sx , sy , sz = getElementPosition ( voiceSource )
voiceCols [ voiceSource ] = createColSphere ( sx , sy , sz , 100 )
attachElements ( voiceCols [ voiceSource ], voiceSource )
broadcoastTo [ voiceSource ] = getElementsWithinColShape ( voiceCols [ voiceSource ], "player" )
setPlayerVoiceBroadcastTo ( voiceSource , broadcoastTo [ voiceSource ])
addEventHandler ( "onColshapeHit" , voiceCols [ voiceSource ],
function( element )
if ( getElementType ( element ) == "player" ) then
table . insert ( broadcoastTo [ voiceSource ], element )
setPlayerVoiceBroadcastTo ( voiceSource , broadcoastTo [ voiceSource ])
end
end
)
addEventHandler ( "onColshapeLeave" , voiceCols [ voiceSource ],
function( element )
if ( getElementType ( element ) == "player" ) then
for key , player in pairs ( broadcoastTo [ voiceSource ]) do
if ( element == player ) then
table . remove ( broadcoastTo [ voiceSource ], key )
break
end
end
setPlayerVoiceBroadcastTo ( voiceSource , broadcoastTo [ voiceSource ])
end
end
)
end
)
addEventHandler ( "onPlayerVoiceStop" , root ,
function()
if isElement ( voiceCols [ source ]) then
destroyElement ( voiceCols [ source ])
end
if ( broadcoastTo [ source ]) then
table . remove ( broadcoastTo , source )
end
setPlayerVoiceBroadcastTo ( source )
end
)
Za ka?d? Pomoc dzi?kuje
Wysłany: 2020-09-03, 08:20
Wilq
Wiek: 24 Na forum: 4429 dni Posty: 3410
Piwa : 739
Musisz tam wskaza? numer indeksu elementu z tabeli. Mo?esz wykona? p?tl?, sprawdzasz czy v to dany element, i wtedy k to indeks kt?ry dajesz do 2 argumentu.
for k , v in pairs ( tabela ) do
if v == element then
table . remove ( tabela , k )
Mo?e kto? zna lepszy spos?b, ja zawsze z tego tak korzysta?em. Oczywi?cie mo?esz zrobi? sobie oddzieln? funkcj? do tego, wtedy podajesz 2 argumenty i elementy si? usuwaj?.
Wysłany: 2020-09-03, 16:20
Hokan
Wiek: 24 Na forum: 2979 dni Posty: 15
Nick w MP: Hokan
Zmieni?em t? linijk?:
if ( broadcoastTo [ source ]) then
table . remove ( broadcoastTo , source )
end
setPlayerVoiceBroadcastTo ( source )
end
)
Na tak?:
if ( broadcoastTo [ source ]) then
for k , v in pairs ( broadcoastTo ) do
if v == element then
table . remove ( broadcoastTo , k )
end
end
end
setPlayerVoiceBroadcastTo ( source , broadcoastTo [ voiceSource ])
end
)
I teraz pytanie czy to ma prawo dzia?a??
Wysłany: 2020-09-03, 16:26
Wilq
Wiek: 24 Na forum: 4429 dni Posty: 3410
Piwa : 739
Zmienna element si? zgadza? Czy mo?e powinno tam by? source.
Wysłany: 2020-09-03, 16:33
Hokan
Wiek: 24 Na forum: 2979 dni Posty: 15
Nick w MP: Hokan
W sensie, ?e zamiast broadcastTo w for i table.remove powinna by? source?
Wysłany: 2020-09-03, 16:42
Wilq
Wiek: 24 Na forum: 4429 dni Posty: 3410
Piwa : 739
Nie, czy w p?tli zmienna 'element' w warunku sprawdzaj?cym jest poprawna. Czy masz j? zdefiniowan?, czy powiniene? u?y? zmiennej 'source' zamiast tego.
Wysłany: 2020-09-03, 16:49
Hokan
Wiek: 24 Na forum: 2979 dni Posty: 15
Nick w MP: Hokan
Zmienna element jest u?yta tylko w funkcjach przy dodawaniu Eventa, nie jest zdefiniowana, powinienem w takim razie u?y? zmiennej source zamiast niej?
Wysłany: 2020-09-03, 18:34
Wilq
Wiek: 24 Na forum: 4429 dni Posty: 3410
Piwa : 739
Tagi: voice
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: