Verfasst: 07.06.2006 21:24
Ich poste mal meinen ganzen Code in der Hoffnung mir kann jemand helfen.
Code: Alles auswählen
;- Window Constants
;
Enumeration
#MainWindow
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#Menu_Exit
#MENU_Hilfe
#MENU_Ueber
EndEnumeration
;- Gadget Constants
;
Enumeration
#ServerFrame
#ListPlayer
#ConsoleStringGadged
#ConsoleEditorGadged
#CommandGadget
#SendConsole
EndEnumeration
;- StatusBar Constants
;
Enumeration
#StatusBar_0
EndEnumeration
;- Structure
;
Structure PlayerStruct
PlayerRace.s
PlayerClass.s
PlayerID.f
PlayerName.s
PlayerX.l
PlayerY.l
PlayerZ.l
PlayerLevel.w
PlayerExp.l
PlayerHealth.w
PlayerPower.w
PlayerSpeed.w
PlayerStr.w
PlayerWis.w
PlayerSta.w
PlayerResHeat.w
PlayerResPoison.w
PlayerResCold.w
PlayerResDivine.w
EndStructure
;- Procedures
;
Procedure Open_MainWindow()
If OpenWindow(#MainWindow, 240, 147, 746, 524, "Solania Server v0.2b", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
If CreateMenu(#MenuBar_0, WindowID(#MainWindow))
MenuTitle("File")
MenuItem(#Menu_Exit, "Exit")
MenuTitle("Options")
MenuTitle("Info")
MenuItem(#MENU_Hilfe, "Hilfe")
MenuItem(#MENU_Ueber, "Über")
EndIf
If CreateStatusBar(#StatusBar_0, WindowID(#MainWindow))
EndIf
If CreateGadgetList(WindowID(#MainWindow))
Frame3DGadget(#ServerFrame, 20, 70, 520, 380, "Console")
ListViewGadget(#ListPlayer, 560, 80, 170, 370)
EditorGadget(#ConsoleEditorGadged, 30, 90, 500, 350, #PB_Editor_ReadOnly)
SendMessage_(GadgetID(#ConsoleEditorGadged), #EM_LIMITTEXT, -1, 0) ;Extentd the editorgadget
StringGadget(#CommandGadget, 20, 460, 520, 30, "Commands")
ButtonGadget(#SendConsole, 550, 460, 80, 30, "Send Console")
GadgetToolTip(#SendConsole, "Send Command to Console")
EndIf
EndIf
EndProcedure
; Send() Wird ind recieve_all() aufgerufen
Procedure Send(ClientID,pz,px,py)
SendNetworkString(EventClient(), Str(EventClient())+";"+Str(pz)+";"+Str(px)+";"+Str(py))
EndProcedure
Procedure recieve_all()
*Buffer = AllocateMemory(3072)
Global SEvent = NetworkServerEvent()
ExamineIPAddresses()
If SEvent
Global ClientID = EventClient()
Select SEvent
Case 1
NewList PlayerS.PlayerStruct()
AddElement(PlayerS())
Shared PlayerS()
PlayerS()\PlayerID = ClientID
AddGadgetItem(#ConsoleEditorGadged,a,"Neuer Client Connectet! " +Str(PlayerS()\PlayerID) +Chr(10)+ Chr(13))
AddGadgetItem(#ListPlayer,0,Str(ClientID))
Case 2
ReceiveNetworkData(ClientID, *Buffer, 3072)
neuText.s = PeekS(*Buffer)
ClientID=Val(StringField(neuText.s, 1, ";"))
pz=Val(StringField(neuText.s, 2, ";"))
px=Val(StringField(neuText.s, 3, ";"))
py=Val(StringField(neuText.s, 4, ";"))
Send(ClientID,pz,px,py)
Case 3
SetGadgetText(#ConsoleStringGadged,"Client " +Str(PlayerS()\PlayerID)+ " versucht Datei zu schicken!"+ Chr(10))
Case 4
AddGadgetItem(#ConsoleEditorGadged,a,"Client " +Str(ClientID )+ " verlässt den Server"+ Chr(10))
RemoveGadgetItem(#ListPLayer, 0)
EndSelect
EndIf
FreeMemory(*Buffer)
EndProcedure
Procedure Window_Event()
If WindowEvent()
Select WindowEvent()
Case #PB_Event_CloseWindow
FreeMemory(*Buffer)
End
Case #PB_Event_Gadget
EndSelect
Else
Delay(1)
EndIf
EndProcedure
;- InitNetwork
;
If InitNetwork()
in_db = InitDatabase()
db_examine = ExamineDatabaseDrivers()
db_driver = NextDatabaseDriver()
db_descript$ = DatabaseDriverDescription()
db_driver_name$ = DatabaseDriverName()
If CreateNetworkServer(0,7000)
Open_MainWindow()
Else
MessageRequester("Error","Server konnte nicht gestartet werden!")
EndIf
Else
MessageRequester("Error","Netzwerk konnte nicht initialisiert werden!")
EndIf
Repeat
Window_Event()
recieve_all()
Delay(1)
ForEver