login  Naam:   Wachtwoord: 
Registreer je!
 Forum

2 spelers, realtime (Opgelost)

Offline Erwt - 01/06/2010 16:55
Avatar van ErwtPHP beginner Ik zit met een idee in mijn gedachten, dat ik HEEL graag wil realiseren maar nog niet wetende hoe flash daar precies mee om gaat.

Ik wil graag 2 spelers (of meer) realtime in een gevecht stoppen. Als voorbeeld pak ik even een oud projectje van mij, waarbij ik met AJAX een request stuur naar de database elke seconde om vanalles te checken omdat er geen winsock is die constante verbinding heeft.

Heeft iemand meer informatie hierover? kan ik een constante verbinding aanmaken of kan ik dit omzijlen? (stel dat player 1 niet geconnect is.. omdat zijn browser vastloopt, ik noem maar wat).

Bedankt,

Erwin

10 antwoorden

Gesponsorde links
Offline vinTage - 01/06/2010 20:31 (laatste wijziging 01/06/2010 20:33)
Avatar van vinTage Nieuw lid Ik heb ooit zelf eens een privechat gemaakt met flash en een phpsocket.
De socket kon ik echter niet eeuwig laten draaien, omdat je daar root access voor moet hebben op je host (en heb ik dus niet)
Ik kon de socket echter wel "activeren" door er handmatig heen te surfen en dat deed hij het een tijdje.
Ergens bij flashplayer 8 hebben ze een mega security update gedaan en is het ingewikkeld moeilijk geworden om zo'n socket aan te spreken (is mij niet meer gelukt iig, ben dr ook geen eeuw mee bezig geweest om te proberen)

Om te checken of "de andere" nog steeds aanwezig is deed ik gewoon "ping pongen", dmv van een timertje keek ik of de reactie te lang duurde en ging er dan vanuit dat de connectie verbroken was.

Met flash kan je ook gewoon communiceren met php (er is geloof ik zelfs een as3 class die rechtstreeks met je database werkt => beetje onveilig want als iemand je swf decompiled hebben ze je logingegevens), dus je kan nog steeds om de seconde een db query doen als je je oude manier wel okay vond.



Offline Erwt - 01/06/2010 21:20
Avatar van Erwt PHP beginner Mijn eerste idee was dus ook al pingpongen.. en dan communiceren met php.. maar bekijk de volgende situatie.

Ik heb een php bestand tussen mijn flash en database. In flash geef ik een seintje aan php dat ik geconnect ben en die geeft dat weer door aan de database. Dan geeft player 2 hetzelfde seintje als hij geconnect is. Als de timer dan doorkrijgt dat iedereen geconnect is en dan krijgt flash dat terug en zal hij de movie beginnen..

Maar ik ben van plan om héél veel timers te gebruiken..:

- Cooldown van spells (is voor je eigen flash client)
- Sleep op tegenstander (tegenstander krijgt een timer van bijv 4 sec zolang hij slaapt)

Maar is dit uberhaupt wel te doen?

Het spijt met dat het zo een wazig verhaal is, te snel getypt.

Groeten,

Erwin
Offline vinTage - 01/06/2010 21:34
Avatar van vinTage Nieuw lid ik snap er idd helemaal niks van.
Maar als een speler gewoon idled, jah daar blijf je altijd mee zitten he, je kan mss checken of iemand bv al een minuut niks doet en hem daarna gewoon redirecten met flash naar je homepag oid.
Offline Erwt - 01/06/2010 21:51
Avatar van Erwt PHP beginner Nouw stel ik maak in de database een 'PvP_match' aan en sla dan ook op of beidde players al connected zijn.

player1 heeft zijn spel geladen, en stuurt naar de db dat hij connected is.
player 2 doet hetzelfde als hij connected is.

Als je zelf connected bent start er een timer die om de X tijd kijkt of de opponent nog meedoet.

Maar stel ik val aan met een aanval: Sleep, dan moet de opponent een timer op zich krijgen, dat hij dus voor bijv. 4 seconden totaal disabled is.

Is dit te realiseren zo? met veel timers e.d.?

Offline vinTage - 01/06/2010 21:58
Avatar van vinTage Nieuw lid
  1. if(frozen)
  2. {
  3. //update WEL pong
  4. }

gewoon zo ?
Offline Erwt - 01/06/2010 22:02
Avatar van Erwt PHP beginner Nouw je speelt met z'n 2en.

Hoe kan ik nu het beste als ik de sleep skill gebruik, dmv een button bijv.. die gotoFreeze(); functie bijvoorbeeld uitvoeren.. hoe komt player2 erachter dat hij freezed is, hoe zou je dat doen?
Offline vinTage - 01/06/2010 22:13
Avatar van vinTage Nieuw lid Nou ik neem aan dat je (zonder socket) gewoon uit de db werkt.
Dus als er in de db een timestamp (oid) staat dat "iemand" frozen is, dan roep je een function aan waarin je removeEventListerenr(...) doet.
Daarna start je een timer met die timestamp die een functie aanroept om weer addEventListener(...) uit te voeren.
Offline Erwt - 01/06/2010 22:41 (laatste wijziging 01/06/2010 23:05)
Avatar van Erwt PHP beginner Edit: Ik denk dat ik het snap na 2x lezen. Maar dan zou je dus bij elke pingpong ook op debuff moeten controleren. En als je het echt goed wilt doen om client-sided hacks te voorkomen moet je ook een timer in de database stoppen voor je eigen spell cooldowns. (ik weet dat in WoW een hack was om die cooldown eraf te halen en vervolgens gewoon skills te spammen).

Maar als je al die dingen moet controleren met pingpong, is dat niet in-efficiënt en wel een goede methode? Of is flash hier misschien toch niet zo heel geschikt voor. Ik weet dat je met Winsock een constante verbinding hebt(VB). dus dat zou misschien beter zijn voor dataoverdracht, maar voor het uiterlijk e.d. zal VB mij teveel problemen meebrengen i.v.m database en in de browser spelen is ook wel leuk.

Ik hoor het graag!
Offline vinTage - 01/06/2010 23:08
Avatar van vinTage Nieuw lid wil je om te beginnen "termen" gebruiken die ik ook snap,pvp_match, cooldown of debuff zeggen me helemaal niks.

Je hebt 2 spelers, deze lezen allebei om de X tijd de db uit (of iig wat ze moeten weten)
Stel dus dat ik jouw bevries, dan update mijn flashplayer jouw database kolom met de huidige servertijd.
Jou flashplayer checked op zijn beurt of er iets veranderd is in de db en behandeld de data.
als dus "freezed(timestamp)" <= huidigeTijd+strafTijd, dan verwijder je alle listeners (voor de controls dan alleen he)
Bij de volgende check doe je hetzelfde, maar als freezed >=huidigeTijd+starfTijd, dan add je weer de listeners.

Ik weet niet hoe ik het anders moet uitleggen...
Je kan het natuurlijk veel simpeler doen door alle database gegevens in een string te zetten en die door flash laten uitpluizen.
bv
?serverTime=001234543 &enemyX=123 &enymyY=22 &amIFrozen=timestamp
waarbij timestamp dan de eindtijd is, dan kan je met servertijd-timestamp kijken of iemand al dan iets mag..
Bedankt door: Erwt
Offline Erwt - 02/06/2010 08:38
Avatar van Erwt PHP beginner Bovenstaande snap ik! danku
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.178s