Oppure

Loading
03/08/08 14:10
Thejuster

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

 dim tasti As DirectInput.MouseState
 tasti = MouseData()

 With tasti

 'Variabile mouseX
  msx +=  .X
  msy +=  .Y

  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


'schermo attuale  800 x 600


With tasti

if ( msx > 790 ) then
msy = 780
else
msx += .X

end if


if (msy > 590 ) then

msy = 580

else

msy += .Y

end if
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.

mire.forumfree.it/ - Mire Engine
C# UI Designer
03/08/08 19:07
Il Totem
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...
aaa
03/08/08 22:07
Thejuster
porzione di codice interessata
lato server


Dim bytes(1024) As Byte
Dim data As String = Nothing

Dim client As TcpClient = server.AcceptTcpClient()

Console.Write("Server in esecuzione... ")

While True
 Dim client As TcpClient = server.AcceptTcpClient()


data = Nothing

Dim stream As NetworkStream = client.GetStream()

 Dim i As Int32

 i = stream.Read(bytes, 0, bytes.Length)

 While (i <> 0)

data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)

'Esegue una verifica del comando ricevuto
'nel modulo azioni e recupera il risutato integer
'tra 1 o 2 

 usr = azioni.data(data)


  If (usr = 1) Then

                        
'Se usr e = 1 
'Significa che e stato ricevuto un comando di query
'quindi usr verra impostato ad nell'if in alto
'quindi adesso dal client reinviando un nuovo comando
'appunto la query da eseguire, lo farà
'restituendo il valore alla variabile risultato
'risultato match se l'username inviato esiste 
'nella tabella login del database mysql

risultato =  sql.match_username(data)
data = risultato
                    End If


Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)
                   
                    stream.Write(msg, 0, msg.Length)
                    
                    i = stream.Read(bytes, 0, bytes.Length)


'qui dovrebbe rispedire il risultato al client
'se gli arriva match come risultato 
'allora permette al giocatore di continuare il login
'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 03/08/08 22:08
mire.forumfree.it/ - Mire Engine
C# UI Designer
04/08/08 7:55
Il Totem
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.
aaa
04/08/08 10:34
Thejuster
crasha quando il client va a leggere lo stream

esattamente in questa posizione


lato client

Dim bytes As Int32 = stream.Read(data, 0, data.Length)
            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 04/08/08 10:36
mire.forumfree.it/ - Mire Engine
C# UI Designer
05/08/08 10:03
Il Totem
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 è.
aaa
05/08/08 18:51
Thejuster
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:
mire.forumfree.it/ - Mire Engine
C# UI Designer
06/08/08 8:01
Il Totem
Beh, c'è SharpZLib per la compressione zip.
aaa