Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Ancora consigli
Forum - C# / VB.NET - Ancora consigli

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2173
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:10
Domenica, 03/08/2008

Eccomi ancora qui per chiedere ancora songili
o aiuti. cercando sempre di non chiedere troppo :rotfl:

1) Area dello schermo

Questo e piu un info che un consiglio,
ma di estrema importanza.

siccome e di necessita primaria in un MMORPG avere un mouse per azionare vari controlli in molti hotspot

mi servirebbe il modo che quando il mouse arriva ai limiti dello schero si blocca

semplicemente perchè il cursore del mouse deve essere riprogrammato da 0.

altrimenti non si saprà mai in che posizione e situato.

non serve il classico comando del framework per ricevere la posizione.

perche a me serve posizione in pixel dell'area di gioco che è ben diversa dal risultato che mi pone il framework.

tornando a noi ho provato a fare questo

Codice sorgente - presumibilmente VB.NET

  1. dim tasti As DirectInput.MouseState
  2.  tasti = MouseData()
  3.  
  4.  With tasti
  5.  
  6.  'Variabile mouseX
  7.   msx +=  .X
  8.   msy +=  .Y
  9.  
  10.   end With



Il mouse funziona perfettamente
e si muove in tutte le direzioni.

anche se non ho capito il come ed il perche
funziona tutto solamente in crementando il msx

per tornare in dietro il mouse ovviamente si dovrebbe ridurre no?
invece in questo caso no :-| funziona solo incrementando la variaible.

ho provato

a delimitare i bordi in questo modo

Codice sorgente - presumibilmente Delphi

  1. 'schermo attuale  800 x 600
  2.  
  3.  
  4. With tasti
  5.  
  6. if ( msx > 790 ) then
  7. msy = 780
  8. else
  9. msx += .X
  10.  
  11. end if
  12.  
  13.  
  14. if (msy > 590 ) then
  15.  
  16. msy = 580
  17.  
  18. else
  19.  
  20. msy += .Y
  21.  
  22. end if
  23. end With



Cosa succede?

Succede che se il mouse va a posizionarsi

negl'angoli tipo o in basso o in alto

puff :D si blocca il mouse non risponde piu ai comandi

un cosiglio su come evitare questo?




2) Straming TCP

sto incontrando un problemino col server

spiego

come sappiamo il client invia un comando e il server da la riposta del comando.

siccome il gioco e strutturato per leggere dati da un dabase MySQL invio alcuni comandi al server
per farmi eseguire una query sul database e ovviamente deve restituirmi i dati.

il problema e questo che non mi restituisce i dati
mi rispedice quello che gli invio

se esempio gli invio  "query"
e dp gli invio "username"

lui mi esegue una query su tutti gli username

ma ri rispedisce sempre quello che gli mando

sapreste dirmi come gli faccio a mandare una risposta differente?

PS:

la risposta e contenuta in un array.
e possibile spedire un intero array?

potete consigliarmi come?

grazie in anticipo per le risposta date

il vosto membro thejuster.



PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 21:07
Domenica, 03/08/2008
1) Quelle proprietà resistuiscono un valore relativo e non assoluto: ecco perchè funziona sempre. Allo stesso modo, le imposti a un valore assoluto anziché relativo andranno fuori dai limiti. 580 significa 580 pixel in più di dove è ora.

2) Il codice l'hai scritto tu: non fa mica tutto da solo! Senza codice è difficile dire qualcosa...

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2173
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 0:07
Lunedì, 04/08/2008
porzione di codice interessata
lato server

Codice sorgente - presumibilmente VB.NET

  1. Dim bytes(1024) As Byte
  2. Dim data As String = Nothing
  3.  
  4. Dim client As TcpClient = server.AcceptTcpClient()
  5.  
  6. Console.Write("Server in esecuzione... ")
  7.  
  8. While True
  9.  Dim client As TcpClient = server.AcceptTcpClient()
  10.  
  11.  
  12. data = Nothing
  13.  
  14. Dim stream As NetworkStream = client.GetStream()
  15.  
  16.  Dim i As Int32
  17.  
  18.  i = stream.Read(bytes, 0, bytes.Length)
  19.  
  20.  While (i <> 0)
  21.  
  22. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
  23.  
  24. 'Esegue una verifica del comando ricevuto
  25. 'nel modulo azioni e recupera il risutato integer
  26. 'tra 1 o 2
  27.  
  28.  usr = azioni.data(data)
  29.  
  30.  
  31.   If (usr = 1) Then
  32.  
  33.                        
  34. 'Se usr e = 1
  35. 'Significa che e stato ricevuto un comando di query
  36. 'quindi usr verra impostato ad nell'if in alto
  37. 'quindi adesso dal client reinviando un nuovo comando
  38. 'appunto la query da eseguire, lo farà
  39. 'restituendo il valore alla variabile risultato
  40. 'risultato match se l'username inviato esiste
  41. 'nella tabella login del database mysql
  42.  
  43. risultato =  sql.match_username(data)
  44. data = risultato
  45.                     End If
  46.  
  47.  
  48. Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)
  49.                    
  50.                     stream.Write(msg, 0, msg.Length)
  51.                    
  52.                     i = stream.Read(bytes, 0, bytes.Length)
  53.  
  54.  
  55. 'qui dovrebbe rispedire il risultato al client
  56. 'se gli arriva match come risultato
  57. 'allora permette al giocatore di continuare il login
  58. 'ed entrare nel gioco.



Questa e una porzione del server

come spiegato

ci sono le variabili


data =  testo stream e riconvertio in string

risultato = se il nick e presente nella tabella login del database sql memorizza in questa variabile il testo match contenuto nel modulo sql

poi ho reinserito nella variabile convertita in stringa data il risultato della variabile result

e quindi rispedisco i dati al client.

ma qui da il problema

mi crasha proprio su questa parte
quando il server rispedisce quest'azione c'è di sicuro qualcosa che non và.



riguardo al punto dello schermo non ho capito tanto bene potresti spiegarti piu chiaramente? grazie mille del supporto
:k:

Ultima modifica effettuata da Thejuster il 04/08/2008 alle 0:08


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:55
Lunedì, 04/08/2008
1) Prima non avevi detto che crashava: se lo fa devi dirmi dove e con quale eccezione.
Presumi che azioni.data restituisca un valore valido? perchè in questo caso il codice che hai scritto non potrebbe non andare. Quindi penso che l'errore possa essere l'assegnazione di usr, ossia nel metodo azioni.data.
2) DirectInput.MouseState.X non restituisce la posizione X del mouse, ma restituisce di quanti pixel il mouse si è mosso rispetto al frame precedente. Quindi X può essere positivo se si muove verso e destra o negativo se si muove verso sinistra. Ecco perchè funziona sempre.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2173
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:34
Lunedì, 04/08/2008
crasha quando il client va a leggere lo stream

esattamente in questa posizione


lato client

Codice sorgente - presumibilmente C# / VB.NET

  1. Dim bytes As Int32 = stream.Read(data, 0, data.Length)
  2.             responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)



quindi suppongo che se nel server la variabile data viene riconvertita in stringa dopo gli ho assegnato un'altro valore eseguendo una query sul database e facendo ritornare un valore match se l'username esiste nel database e un'altro valore se non esiste

in modo che l'utente da login screen non possa collegarsi al server di gioco.

ma se non riesco a risolvere questa questione non so proprio dove sbattermi :(

l'usr l'ho eliminato ho impostato le altre condizioni negl'altri moduli.
il proble accande quando il server rispedisce la risposta riassegnata.

se non vado a toccare la risposta
funziona ovviamente ma se gli assegno un nuovo valore string dopo qundo il testo arriva al client
il client crasha.

Ultima modifica effettuata da Thejuster il 04/08/2008 alle 12:36


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:03
Martedì, 05/08/2008
Ma tu hi detto che la risposta è sbagliata (ossia che torna indietro esattamente quello che invii). Poi hai detto che crasha (e quindi non può rispedire indietro la risposta). E poi non risco a capire il senso della tua frase :D forse ti sei dimenticato qualche verbo.
Inoltre, il crash sarà pur accompagnato da qualche errore no? In debugging c'è il gestore di eccezioni: dimmi un po' che errore è.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2173
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:51
Martedì, 05/08/2008
ho risolto con  2  try

gestori di eccezioni

come detto totem questo server in sviluppo e molto potente deve ricevere milioni di query e effettuarle in continuazione senza mai fermarsi

per mantere costantemente aggiornate le posizioni di ogni player

cmq ho risolto

boh stranamente adesso funziona lol

non darmi del deficente ma sto engine mi sta letteralmente mettendo fuori uso lol

ah come ultima richiesta ave mio totem :rotfl:

e possibile fare una specie di pacchetto contentente molti file? tipo un zip

spiego

nel mio gioco e possibile assegnare una capigliatura, un colore ai vestiti mediante palette di colori e i vari accessori equipaggiabili

vorrei fare tipo di creare come dei file zip

tutti i miglior mmorpg engine utilizzano questo sistema

ragruppano milioni di dati in dei pacchetti come se fossero cartelle virtuali.

conosci un medoto per fare questo?
qualche libreria adatta?
te ne sarei molto grado per la risposta

grazie il anticipo :k:


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:01
Mercoledì, 06/08/2008
Beh, c'è SharpZLib per la compressione zip.

PM Quote