Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2017-07-24, 22:42


Artystek







Wiek: 23
Na forum: 3520 dni
Posty: 143
Nick w MP: Artystek

Piwa: 74

Respekt: 55,3

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:

Więcej informacji znajdziesz w Wikipedii MTA:

addEventHandler


Więcej informacji znajdziesz w Wikipedii MTA:

onPlayerChat

Przyk?ad:
 
addEventHandler('onPlayerChat'root, function (msgtype)

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 (msgtype)
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 (msgtype)
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?

Więcej informacji znajdziesz w Wikipedii MTA:

getElementPosition

Nast?pnie tworzymy ColSphere za pomoc?

Więcej informacji znajdziesz w Wikipedii MTA:

createColSphere

No i sprawdzamy czy gracz jest w ColSphere

Więcej informacji znajdziesz w Wikipedii MTA:

getElementsWithinColShape


Przyk?ad:

addEventHandler('onPlayerChat'root, function (msgtype)
if type == 0 then
cancelEvent()
local x,y,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 (msgtype)
if type == 0 then
cancelEvent()
local x,y,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 (msgtype)
if type == 0 then
cancelEvent()
local x,y,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 (msgtype)
if type == 0 then
cancelEvent()
local x,y,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."..accNameaclGetGroup "Admin" ) ) then
outputChatBox("#FFFFFF(#660000"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255true)
elseif isObjectInACLGroup ("user."..accNameaclGetGroup ("SuperModerator")) then
outputChatBox("#FFFFFF(#FF0000"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255true)
elseif isObjectInACLGroup ("user."..accNameaclGetGroup ("Moderator")) then
outputChatBox("#FFFFFF(#006600"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255 ,true)
elseif isObjectInACLGroup ("user."..accNameaclGetGroup ("Grafik")) then
outputChatBox("#FFFFFF(#440044"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255,true)
else
outputChatBox("#FFFFFF(#FFFFFF"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv,  255255255,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?:

Więcej informacji znajdziesz w Wikipedii MTA:

outputServerLog

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 ")"


Więcej informacji znajdziesz w Wikipedii MTA:

destroyElement


Przyk?ad:

addEventHandler('onPlayerChat'root, function (msgtype)
if type == 0 then
cancelEvent()
local x,y,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."..accNameaclGetGroup "Admin" ) ) then
outputChatBox("#FFFFFF(#660000"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255true)
elseif isObjectInACLGroup ("user."..accNameaclGetGroup ("SuperModerator")) then
outputChatBox("#FFFFFF(#FF0000"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255true)
elseif isObjectInACLGroup ("user."..accNameaclGetGroup ("Moderator")) then
outputChatBox("#FFFFFF(#006600"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255 ,true)
elseif isObjectInACLGroup ("user."..accNameaclGetGroup ("Grafik")) then
outputChatBox("#FFFFFF(#440044"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv255255255,true)
else
outputChatBox("#FFFFFF(#FFFFFF"..id.."#FFFFFF) "..getPlayerName(source)..": "..msgv,  255255255,true)
end
end
destroyElement(sphere)
end)


Ostatnio zmieniony przez Artystek 2017-07-25, 11:10, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 2 piw(a):
Adis.exe, MalyCyferek
Wysłany: 2017-07-25, 09:46


amited







Wiek: 26
Na forum: 3714 dni
Posty: 1233
Nick w MP: Amited

Piwa: 512

Respekt: 466
Respekt: 466

dlaczego po ka?dym ifie masz cancelEvent?

Podpis
"amited" napisał/a:
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-07-25, 11:09


Artystek







Wiek: 23
Na forum: 3520 dni
Posty: 143
Nick w MP: Artystek

Piwa: 74

Respekt: 55,3

"amited" napisał/a:

dlaczego po ka?dym ifie masz cancelEvent?


Masz racje wystarczy ten po if type

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-11-11, 12:37


ZMR







Wiek: 27
Na forum: 3127 dni
Posty: 11
Nick w MP: ZMR

Piwa: 6

Respekt: 50

Zapomnia?e? o type 2, jest to chat teamu.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-11-20, 19:51


Adis.exe

LUA Developer






Wiek: 23
Na forum: 3498 dni
Posty: 292
Nick w MP: Adiś.exe

Piwa: 997

Respekt: 110,3
Respekt: 110,3

dobry poradnik :D

Podpis

KONTAKT:
GG: 60968224
Discord: Adiś.exe#3828

Użytkownik: 05.11.2016
GTAO Member: 20.02.2019
Support-Team: 25.07.2018
Support-Team: 19.01.2019
Test Mod: 08.02.2019

Postaw piwo autorowi tego posta
 

 
Tagi: [tut] :: jak :: napisać :: skrypt :: chat :: lokalny :: kolorowymi :: rangam
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Poradniki do LUA Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku