Artystek
Wiek: 23 Na forum: 3520 dni Posty: 143
Nick w MP: Artystek
Piwa : 74
Witajcie, dzisiaj poka?? Wam jak napisa? w?asny czat lokalny z kolorami dla rang ACL. Jest to ?atwy skrypt, jednak my?l?, ?e si? komu? przyda.
Zaczynamy pisa? skrypt od:
Przyk?ad:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
msq - jest to tre?? wpisywana na czacie
type - rodzaj czatu 0 = czat say, 1 = czat me (odgrywanie akcji RP)
Nast?pnie za pomoc? warunkowej if wybieramy rodzaj czatu w przypadku say jak wy?ej poda?em jest to 0
Przyk?ad:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
Aby nie wy?wietla?o nam do tego czatu z gry (jest taki zwyk?y, brzydki globalny) musimy zako?czy? event za pomoc?:
Więcej informacji znajdziesz w Wikipedii MTA: cancelEvent
Przyk?ad:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
cancelEvent ()
Kolejny krok jest odpowiedzialny za pobranie pozycji gracza i stworzenie wok?? niego ColSphere, dzi?ki kt?remu gracze b?d?cy wok?? gracza, kt?ry co? pisze b?d? widzie? to na czacie (reszta nie b?dzie)
Rozpoczynamy od pobrania pozycji gracza za pomoc?
Nast?pnie tworzymy ColSphere za pomoc?
No i sprawdzamy czy gracz jest w ColSphere
Przyk?ad:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
cancelEvent ()
local x , y , z = getElementPosition ( source )
local sphere = createColSphere ( x , y , z , 50 )
local players = getElementsWithinColShape ( sphere , 'player' )
Aby?cie mieli czaty wy?szej jako?ci podam Wam przyk?ad z kolorami dla rang ACL
Teraz musimy stworzy? p?tle, kt?ra b?dzie wy?wietla?a outputChatBox ka?demu graczu, kt?ry jest w pobli?u, czyli:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
cancelEvent ()
local x , y , z = getElementPosition ( source )
local sphere = createColSphere ( x , y , z , 50 )
local players = getElementsWithinColShape ( sphere , 'player' )
for i , v in pairs ( players ) do
Nast?pnie pobieramy potrzebne nam informacje za pomoc? "local", w moim przypadku jest to ID gracza oraz login (accName):
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
cancelEvent ()
local x , y , z = getElementPosition ( source )
local sphere = createColSphere ( x , y , z , 50 )
local players = getElementsWithinColShape ( sphere , 'player' )
for i , v in pairs ( players ) do
local id = getElementData ( source , 'id' )
local accName = getAccountName ( getPlayerAccount ( source ) )
Za pomoc? warunkowej if oraz elseif dla ka?dej rangi dodajemy osobnego outputChatBox:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
cancelEvent ()
local x , y , z = getElementPosition ( source )
local sphere = createColSphere ( x , y , z , 50 )
local players = getElementsWithinColShape ( sphere , 'player' )
for i , v in pairs ( players ) do
local id = getElementData ( source , 'id' )
local accName = getAccountName ( getPlayerAccount ( source ) )
if isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "Admin" ) ) then
outputChatBox ( "#FFFFFF(#660000" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
elseif isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "SuperModerator" )) then
outputChatBox ( "#FFFFFF(#FF0000" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
elseif isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "Moderator" )) then
outputChatBox ( "#FFFFFF(#006600" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
elseif isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "Grafik" )) then
outputChatBox ( "#FFFFFF(#440044" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
else
outputChatBox ( "#FFFFFF(#FFFFFF" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
end
end
W powy?szym przyk?adzie zamkn??em p?tle oraz if za pomoc? dw?ch "end"
Po wykonaniu przez skrypt zadania, kt?rym jest wy?wietlenie tej wiadomo?ci na czacie musimy usun?? ColSphere. W tym miejscu mo?na doda? r?wnie?:
lub inne tego typu sprawy z logami. Nie mo?na tego doda? na przyk?ad pod outputchatBox, poniewa? jest on w p?tli przez co logi b?d? mno?one * ilo?? graczy, kt?rej pojawia si? ta wiadomo??. Na ko?cu zamykamy funkcj? "end" oraz event nawiasem ")"
Przyk?ad:
addEventHandler ( 'onPlayerChat' , root , function ( msg , type )
if type == 0 then
cancelEvent ()
local x , y , z = getElementPosition ( source )
local sphere = createColSphere ( x , y , z , 50 )
local players = getElementsWithinColShape ( sphere , 'player' )
for i , v in pairs ( players ) do
local id = getElementData ( source , 'id' )
local accName = getAccountName ( getPlayerAccount ( source ) )
if isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "Admin" ) ) then
outputChatBox ( "#FFFFFF(#660000" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
elseif isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "SuperModerator" )) then
outputChatBox ( "#FFFFFF(#FF0000" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
elseif isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "Moderator" )) then
outputChatBox ( "#FFFFFF(#006600" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
elseif isObjectInACLGroup ( "user." .. accName , aclGetGroup ( "Grafik" )) then
outputChatBox ( "#FFFFFF(#440044" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
else
outputChatBox ( "#FFFFFF(#FFFFFF" .. id .. "#FFFFFF) " .. getPlayerName ( source ).. ": " .. msg , v , 255 , 255 , 255 , true )
end
end
destroyElement ( sphere )
end )
Ostatnio zmieniony przez Artystek 2017-07-25, 11:10, w całości zmieniany 1 raz