Wysłany: 2015-02-02, 18:54
MrYni
Uczeń LUA
Wiek: 30 Na forum: 4298 dni Posty: 18
Nick w MP: MrYni
Piwa : 1
Witam!
Chcia?bym prosi? o napisanie dla mnie skryptu daj?cego kasy co 1h od zalogowania danej osoby dla wyznaczonej grupy
Daje zimne
Wysłany: 2015-02-02, 22:39
Tostuch
Wiek: 27 Na forum: 4931 dni Posty: 483
Nick w MP: Tost
Piwa : 137
Więcej informacji znajdziesz w Wikipedii MTA: setTimer
Dopiska od Shuffle :
Ostatnio zmieniony przez MeeShuffle 2015-02-02, 22:43, w całości zmieniany 1 raz
Wysłany: 2015-02-02, 22:51
Wittx
8===D
Wiek: 26 Na forum: 4794 dni Posty: 121
Nick w MP: wittula
Piwa : 1905
Timer ma by? dla ka?dego gracza osobno, dlatego musi zosta? on stworzony po stronie klienta.
Wysłany: 2015-02-03, 01:15
Wielebny
Wiek: 41 Na forum: 5498 dni Posty: 257
Nick w MP: Wielebny
Piwa : 1690
"New_Banan" napisał/a :Timer ma by? dla ka?dego gracza osobno, dlatego musi zosta? on stworzony po stronie klienta.
Tworzenie logiki nadaj?cej kas? po stronie klienta to du?y b??d, nie powinno si? nigdy ufa? danym przesy?anym przez klient?w: https://wiki.multitheftauto.com/wiki/Script_security#How_to_never_trust_data_coming_from_a_client
Cytat:
A hacked client could send anything, so all client data received by server scripts should be validated before use. Most data is received via client calls to setElementData or triggerServerEvent.
Musisz za?o?y?, ?e zhakowany klient mo?e wys?a? wszystko i wywo?a? ka?dy event. Strona kliencka powinan by? u?ywana tylko do renderowania gui, ca?a logika powinna znajdowa? si? zawsze po stronie serwera.
Druga sprawa to u?ywanie do tego timer?w - to mija si? z celem.
Znacznie lepszy spos?b to zapisywanie przy graczu czasu wej?cia na serwer i sprawdzanie co jaki? czas czy nie mine?a ju? godzina.
Pseudokod, nie testowany:
addEventHandler ( "onPlayerJoin" , root , function()
setElementData ( source , "lastTime" , getRealTime (). timestamp , false ) -- zapisujemy aktualny timestamp ( w sekundach )
end )
local function naliczaniePremii ()
local ts = getRealTime (). timestamp -- aktualny timestamp
for i , v in ipairs ( getElementsByType ( "player" )) do
local lt = getElementData ( v , "lastTime" )
if lt and lt + 3600 < ts then -- min ?? a godzina od wej ? cia na serwer
givePlayerMoney ( v , 31337 )
outputChatBox ( "Dostajesz $31337 za sp?dzenie godziny na serwerze." , v )
setElementData ( v , "lastTime" , getRealTime (). timestamp , false )
end
end
end
setTimer ( naliczaniePremii , 60000 , 0 ) -- sprawdzamy czasy co minut ?
W tej konkretnej implementacji elementdata o nazwie lastTime jest u?ywany do zapisania informacji o czasie wej?cia na serwer LUB czasie nadania ostatniej premii. Je?li minie 3600 sekund (1h) od zapisanej warto?ci to licznik jest zerowany na aktualny czas a gracz dostaje premi?.
Powy?szy kod b?dzie wymaga? optymalizacji przy wi?kszej ilo?ci graczy (powiedzmy 100) poprzez a) przepisanie go na cz??ciej wykonuj?cy sie timer, ale przetwarzaj?cy co n-tego gracza (np. co drugi gracz co 30s, albo co 4 co 15s) lub jeszcze uniwersalniej poprzez b) przepisanie go na coroutines.
Tagi: pieniądze :: grania
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: