Jump to content

Recommended Posts

Czesc, potrzebuje małej pomocy w sprawach optymalizacji swych skryptów. Otóz jak pisać je najbardziej optymalnie?

Znam sie na LUA, ale z tym mam spory problem.

Jak robić:

- poprawne triggery

- gdy chce coś przypisać, uzyc zmiennej, setElementData a moze tablicy?

- jakies sposoby by zastepowac petle czyms innym, da sie wogole tak?

Dodatkowo, fajnie byloby uslyszec wasze rady, czego sie wystrzegac by te skrypty dzialaly sprawnie! Dziekuje.

Link to post

Jakbyś napisał nie w polskim dziale to pewnie dostał byś odpowiedź szybciej, a tak to gdyby nie ja poczekałbyś jeszcze tydzień :D

- poprawne triggery

triggerEvent 
triggerClientEvent 
triggerServerEvent 

- gdy chce coś przypisać, uzyc zmiennej, setElementData a moze tablicy?

setElementData działa podobnie tak jakbyś użył tablicy. Uzywaj wiec tego.

set/getElementData w Lua(pod inny multiplayer):

Data = { } 
  
for i = 0, GetMaxSlots( ) do 
    Data[ i ] = { } 
end 
function SetPlayerData( playerid, dKey, dValue ) 
    if playerid and dKey then 
        if IsPlayerConnected( playerid ) and type( dKey ) == "string" then 
            for i, pdata in ipairs( Data[playerid] ) do 
                if pdata.key == dKey then 
                    if dValue == nil then 
                        table.remove( Data[ playerid ], i ) 
                        return true 
                    else 
                        pdata.value = dValue 
                        return true 
                    end 
                end 
            end 
            table.insert( Data[ playerid ], { key = dKey, value = dValue } ) 
            return true 
        end 
        return false 
    end 
    return false 
end 
  
function GetPlayerData( playerid, dKey ) 
    if playerid and dKey then 
        if IsPlayerConnected( playerid ) and type( dKey ) == "string" then 
            for i, pdata in ipairs( Data[playerid] ) do 
                if pdata.key == dKey then 
                    return pdata.value 
                end 
            end 
            return false 
        end 
        return false 
    end 
    return false 
end 

- jakies sposoby by zastepowac petle czyms innym, da sie wogole tak?

Możesz uzyc

  
setTimer 
onClientRender 
  

https://wiki.multitheftauto.com/wiki/OnClientRender

(cos nie pokazalo)

Po prostu pisz i testuj to co pisałeś, wszystko przyjdzie samo w swoim czasie.

Tak samo masz w filmach z Bruce Lee, czy w serii Karate Kid, bez sensu zakłada szmate i zdejmuje i na końcu okazuje się, że nauczył się walczyć poprzez zakładanie i zdejmowanie szmaty z wieszaka. Podobnie jest z programowaniem.

Możesz nauczyć się wszystkiego. Przyjmij sobie taką radę.

Jak robić triggery, z początku szczerze mówiąc gdy zaczynałem pisać w Lua też miałem problem z oddzieleniem Clienta od Serwera i często zdarzało się, że chciałem przenieść coś z jednej strony na drugą. Nie udawało się i w końcu się udało.

clientserver.jpg

Poczytaj sobie na wiki funkcje TriggerClientEvent, TriggerServerEvent, TriggerEvent (do usrania jeśli nie masz co robić xD).Ogólnie TriggerEvent można dosłownie przetłumaczyć jako WywołajZdarzenie.

Skrypty będą działać poprawnie jeśli poprawnie je napiszesz(według składni), a to jak wyglądać będzie kod zależy tylko i wyłącznie od ciebie. Z początku zapewne chujowo. Czytaj jak najwiecej, nie probuj samemu bo chuj wyjdzie.

Pozdrawiam :)

Edited by Guest
Link to post

Znam sie na LUA, ale z tym mam spory problem.

Nie mam problemu z rozpoznanie client <=> serwer.

Chodzi mi w poprawnych triggerach o to by były one OPTYMALNE ;)

Ten kod, to stosować zawsze? ;)

Link to post

Optymalne wywołania, a jest w ogóle coś takiego?? Masz na wiki opis o jakim można w innych projektach pośnić.

Ten kod miał na celu przedstawienie różnicy tabel i setelementdata/getelementdata. Nie uzywaj go, w MTA masz juz te funkcje napisane w C. (oczywiscie roznicy zadnej nie ma, po to developerzy stworzyli set/get elementdata - aby ulatwic zycie)

https://wiki.multitheftauto.com/wiki/Event_system

komplikujesz ostro chłopie xD

Link to post

Każdy problem będzie miał inne optymalne rozwiązanie. Gdyby istniała zawsze jedna optymalna metoda - po co byłoby w ogóle tworzyć alternatywne możliwości. Co do czego to sam wybadasz, póki co po prostu pisz i poznawaj język - wszystko przyjdzie z czasem.

Link to post

- gdy chce coś przypisać, uzyc zmiennej, setElementData a moze tablicy?

setElementData działa podobnie tak jakbyś użył tablicy. Uzywaj wiec tego.

Tu bym się nie zgodził... setElementData domyślnie synchronizuje dane między serwerem i klientami, więc jeśli komuś zależy na optymalizacji, to nie powinien używać tej funkcji na daremno... (jeśli nie musisz synchronizować danych lepiej użyj tablicy)

poza tym drobne uwagi do kodu:

myślę że pętle w linijkach 9 i 31 są zbędne, tak samo jak korzystanie z funkcji table.insert i table.remove. Lepiej jest wykorzystać właściwości tabel w lua:

Data = { } 
  
for i = 0, GetMaxSlots( ) do 
    Data[ i ] = { } 
end 
function SetPlayerData( playerid, dKey, dValue ) 
    if playerid and dKey then 
        if IsPlayerConnected( playerid ) and type( dKey ) == "string" then 
            Data[playerid][dKey] =  dValue 
     return true  
        end 
        return false 
    end 
    return false 
end 
  
function GetPlayerData( playerid, dKey ) 
    if playerid and dKey then 
        if IsPlayerConnected( playerid ) and type( dKey ) == "string" then 
            return Data[playerid][dKey] 
        end 
        return false 
    end 
    return false 
end 

Odpowiadając więc na pytanie

jakies sposoby by zastepowac petle czyms innym, da sie wogole tak?

Zanim użyjesz pętli zastanów się czy musisz, jednak nie od razu rzym zbudowano, więc jak powiedział Kolega wyżej

Co do czego to sam wybadasz, póki co po prostu pisz i poznawaj język - wszystko przyjdzie z czasem.
Link to post

Wielkie dzieki - jeszcze jedno pytanie.

Co lepsze? MySQL czy samo SQL Lite? czytalem i ktos pisal ze przy wiekszej ilosci rekordow sql lite dziala ciut wolniej, a z kolei przy mniejszej to MySQL dziala wolniej - nie wiem czy to prawda, wiec pytam sie tu. co mi radzicie używac jesli nie potrzebuje tego kodu na forum?

Link to post

uhm. nie dość, że nie pamiętam - to jeszcze to były skomplikowane zapytania. ty znasz tylko proste SELECT/INSERT/UPDATE/DELETE. Kiedyś nauczysz się co to JOIN np. oraz masę innych ciekawostek, oraz jak w praktyce z tego korzystać

Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...