Vinnaren i pepparkakshustävlingen!
2010-08-16, 11:31
  #1
Medlem
Kan någon var snäll och hjälpa mig med ett script till MSSQL.
Jag har "Stored Procedures" när folk loggar in och ut i ett online spel.
Behöver sätta tid när de logga in och tid när de loggar ut och som sen räknar om "online tiden" till poäng
1 minut = 1 poäng.
__________________
Senast redigerad av zyllion 2010-08-16 kl. 11:44.
Citera
2010-08-16, 11:39
  #2
Medlem
peffe22s avatar
Citat:
Ursprungligen postat av zyllion
Kan någon var snäll och hjälpa mig med ett script till MSSQL.
Jag har "Stored Procedures" när folk loggar in och ut i ett online spel.
Behöver sätta tid när de logga in och tid när de loggar ut och som sen räknar om "online tiden" till poäng
1 timme = 1 poäng.
nu är jag inte någon expert här över huvudtaget, men kan du inte göra ett script som anropar databasen en gång varje minut sen när det fältet har 60 minuter uppdateras det till en poäng och fältet nollställs istället?

Lite små jobbigt om man måste vara online hela tiden för att få poäng
Citera
2010-08-16, 11:44
  #3
Medlem
Vitsen är ju att ju längre tid man är online desto fler poäng får man
Men det kanske är bättre med 1 minut = 1 poäng
Citera
2010-08-16, 15:39
  #4
Medlem
Förutsatt att du på något sätt håller en sessionslog så är det inte svårare än:

Kod:
DECLARE @diff int, @weight int, @TotalPoints int
SELECT @weight = 1 --Poäng per minut

SELECT @diff = DATEDIFF(minute, LoginTime, ISNULL(LogoutTime, ExpireTime))
FROM SessionLog
WHERE SessionLogID = @SessionLogID

SELECT @ToalPoints = @diff * @weight
-- Uppdatera konto eller vad som nu ska göras...

Dvs - det är förmodligen funktionen DATEDIFF som du är ute efter.
__________________
Senast redigerad av SirPatman 2010-08-16 kl. 15:40. Anledning: Stavfel
Citera
2010-08-16, 22:17
  #5
Medlem
Tackar så mycket, fixat
Gjorde såhär

Kod:
i Login procedure
	UPDATE USER SET LoginTime = GETDATE() where AccountID = @AccountID
i Logout procedure
	UPDATE USER SET LogoutTime = GETDATE() where AccountID = @AccountID
	UPDATE USER SET OnlinePoints = (OnlinePoints + datediff(ss,LoginTime, LogoutTime) / 60) where AccountID = @AccountID
Citera
2010-08-16, 22:32
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av zyllion
Tackar så mycket, fixat
Gjorde såhär

Kod:
i Login procedure
	UPDATE USER SET LoginTime = GETDATE() where AccountID = @AccountID
i Logout procedure
	UPDATE USER SET LogoutTime = GETDATE() where AccountID = @AccountID
	UPDATE USER SET OnlinePoints = (OnlinePoints + datediff(ss,LoginTime, LogoutTime) / 60) where AccountID = @AccountID
Att sätta en flagga eller vad man nu ska kalla det för när sesssionen startar är ju inte så svårt, då är det ju avsevärt mer bökigt att avgöraa när den slutar, right?

Ponera till exempel att din användare inte har finheten att logga ut, utan helt enkelt släcker webläsaren, eller ännu värre, surfar iväg till nån annan sida i samma webläsare. Då kommer ju sessionen snurra på utan att man är speciellt aktiv, eller hur?
Citera
2010-08-17, 00:34
  #7
Medlem
Nää för när han logga in nästa gång så sätter den ett nytt datum i LoginTime och han missar bara den föregående tiden om han inte loggar ut riktigt
Det är inget web baserat spel, ett online spel typ wow.
Citera
2010-08-30, 20:25
  #8
Medlem
Citat:
Ursprungligen postat av zyllion
Nää för när han logga in nästa gång så sätter den ett nytt datum i LoginTime och han missar bara den föregående tiden om han inte loggar ut riktigt
Det är inget web baserat spel, ett online spel typ wow.

Då är det inga problem heller att fixa att när han trycker på krysset så sparas det han har gjort ändå. Om du inte har ett event som fångar när programmet stängs eller som autosavar inom ett vissa intervall så blir folk förbannade om programmet stängs eller går "not responding".

Skulle jag ha gjort det så skulle jag göra så att jag har en autosave inom nåra minuters intervall beräknat från när man loggar in(så inte alla spelares information sparas samtidigt) och jag skulle ha så att det sparas när exit eventet kallas på
__________________
Senast redigerad av clooak 2010-08-30 kl. 20:28.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback