From b99524a98caddda2b2b6c34af962e32e300d6dc4 Mon Sep 17 00:00:00 2001 From: stonedDiscord Date: Sat, 19 Mar 2016 04:25:56 +0100 Subject: [PATCH] old meme --- AOprivateServer.pbp | 16 +- README.md | 39 +- main.pb | 1930 ++++++++++++++++++++++--------------------- poker.ini | 2 +- sD.ico | Bin 0 -> 4478 bytes serverd.html | 15 +- serverd.png | Bin 4771 -> 7317 bytes serverd.txt | 4 +- shared_headers.pb | 5 +- 9 files changed, 1016 insertions(+), 995 deletions(-) create mode 100644 sD.ico diff --git a/AOprivateServer.pbp b/AOprivateServer.pbp index c559593..eaf9574 100644 --- a/AOprivateServer.pbp +++ b/AOprivateServer.pbp @@ -7,7 +7,7 @@
- +
@@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ - +
@@ -38,11 +38,11 @@ - ..\owner.ico + sD.ico - - + + @@ -75,8 +75,8 @@ owner.ico - - + + diff --git a/README.md b/README.md index bbf0c8c..4a99de7 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # serverD -## Don't hassle the hoff +## DANK MEMES You can find the downloads in the release tab ### changelog -* looping music -* roll is more subtle -* lag and crashes fixed -* cleanups +* /pos command added +* /pm now works with usernames +* areas should not freeze anymore +* logs show the correct area ### minimal setup (console version) > OS @@ -14,10 +14,10 @@ You can find the downloads in the release tab > Linux Kernel 2.3 and libc6 2.13 > CPU -> i486SX @ 66 MHz +> i486DX @ 66MHz > RAM -> 5 MB +> 16 MB > HDD > 150 KB + logs @@ -30,7 +30,7 @@ You can find the downloads in the release tab > Pentium P55C 200MHz > RAM -> 20MB +> 24 MB > HDD > 400 KB + a few MB of logs @@ -47,6 +47,9 @@ by default it's running on port 27016 - /area - lets you view and switch areas +- /pos +- lets you switch positions + - /switch - lets you switch characters @@ -84,6 +87,10 @@ by default it's running on port 27016 - /hd - show the kurwalist with HDs +- /skip +- /noskip +- lets you ignore the waittime after a message + - /kick Godot - kurwakurwa @@ -91,28 +98,20 @@ by default it's running on port 27016 - kurwakurwakurwa - /mute Hawk -- kurwa - - /unmute Hawk -- wodka +- keep him from talking - /ignore Doge -- kurwa - - /unignore Doge -- wodka +- ignores all traffic from this client - /undj Phoenix -- keep this client from changing the music - - /dj Phoenix -- makes +- keep this client from changing the music - /gimp Miles -- make this client talk nonsense - - /ungimp Miles -- wodka +- make this client talk nonsense - /play Pursuit(HY).mp3 - play a kurwa thats not on wodkalist diff --git a/main.pb b/main.pb index d96ccb2..9a8cb55 100644 --- a/main.pb +++ b/main.pb @@ -312,6 +312,8 @@ Procedure LoadSettings(reload) For iniarea=0 To 100 areas(iniarea)\bg=oBG.s areas(iniarea)\name=oBG.s + areas(iniarea)\good=10 + areas(iniarea)\evil=10 Next PreferenceGroup("chars") characternumber=ReadPreferenceInteger("number",1) @@ -625,11 +627,14 @@ Procedure MSWait(*usagePointer.Client) Define wttime,wtarea wtarea=*usagePointer\area wttime=Len(Trim(StringField(*usagePointer\last,7,"#")))*60 - If wttime>5000 + wttime-20 + If wttime<10 + wttime=10 + ElseIf wttime>5000 wttime=5000 EndIf Delay(wttime) - areas(*usagePointer\area)\wait=0 + areas(wtarea)\wait=0 EndProcedure Procedure TrackWait(a) @@ -668,7 +673,7 @@ Procedure ListIP(ClientID) Case 2 charname$=GetCharacterName(Clients())+"(admin)" Case 3 - charname$=GetCharacterName(Clients())+"(server)" + charname$=GetCharacterName(Clients())+"(server) also this is not good, it'd be better if you sent sD a message" Default charname$=GetCharacterName(Clients()) EndSelect @@ -818,7 +823,7 @@ Procedure SwitchAreas(*usagePointer.Client,narea$) Define sendd=0 Define ir Debug narea$ - For ir=0 To AreaNumber-1 + For ir=0 To AreaNumber-1 areas(ir)\players=0 Debug areas(ir)\name If areas(ir)\name = narea$ @@ -916,7 +921,7 @@ Procedure KickBan(kick$,param$,action,*usagePointer.Client) Select action Case #KICK DeleteMapElement(Clients()) - SendNetworkString(kclid,"KK#"+Str(kcid)+"#%") + SendNetworkString(kclid,"KK#"+Str(kcid)+"#"+param$+"#%") CloseNetworkConnection(kclid) actionn$="kicked" akck+1 @@ -937,7 +942,7 @@ Procedure KickBan(kick$,param$,action,*usagePointer.Client) HDbans()\type=#BAN If OpenFile(2,"base/HDbanlist.txt") FileSeek(2,Lof(2)) - WriteStringN(2,Clients()\HD+"#"+param$+"#"+Str(btime)+"#"+Str(#BAN)) + WriteStringN(2,Clients()\HD+"#"+ HDbans()\reason+"#"+Str(HDbans()\time)+"#"+Str(#BAN)) CloseFile(2) EndIf Else @@ -948,12 +953,12 @@ Procedure KickBan(kick$,param$,action,*usagePointer.Client) IPbans()\type=#BAN If OpenFile(2,"base/banlist.txt") FileSeek(2,Lof(2)) - WriteStringN(2,Clients()\IP+"#"+param$+"#"+Str(btime)+"#"+Str(#BAN)) + WriteStringN(2,Clients()\IP+"#"+IPbans()\reason+"#"+Str(IPbans()\time)+"#"+Str(#BAN)) CloseFile(2) EndIf EndIf DeleteMapElement(Clients()) - SendNetworkString(kclid,"KB#"+Str(kcid)+"#%") + SendNetworkString(kclid,"KB#"+Str(kcid)+"#"+param$+"#%") CloseNetworkConnection(kclid) actionn$="banned" akck+1 @@ -982,9 +987,6 @@ Procedure KickBan(kick$,param$,action,*usagePointer.Client) Clients()\ignore=1 actionn$="ignored" akck+1 - AddElement(Actions()) - Actions()\IP=Clients()\IP - Actions()\type=#CIGNORE Case #UNIGNORE Clients()\ignore=0 @@ -1141,8 +1143,14 @@ Procedure HandleAOCommand(*usagePointer.Client) Else msreply$=msreply$+mss$+"#" EndIf - ElseIf i=8 And Len(mss$)<>3 - msreply$=msreply$+"def#" + ElseIf i=8 + If *usagePointer\pos<>"" + msreply$=msreply$+*usagePointer\pos+"#" + ElseIf Len(mss$)<>3 + msreply$=msreply$+"def#" + Else + msreply$=msreply$+mss$+"#" + EndIf ElseIf i=10 ir=Val(mss$) Select ir ;fuck off guys @@ -1180,7 +1188,7 @@ Procedure HandleAOCommand(*usagePointer.Client) Server\last=PReplay() HandleAOCommand(Server) Else - SendTarget("*","MS#chat#Normal#Discord#Normal#START!#jud#1#2#"+Str(characternumber-1)+"#0#3#0#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) + SendTarget("*","MS#chat#dolannormal#Dolan#dolannormal#START!#jud#1#2#"+Str(characternumber-1)+"#0#3#0#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) EndIf Case ">" Debug "next" @@ -1190,12 +1198,12 @@ Procedure HandleAOCommand(*usagePointer.Client) Debug PReplay() HandleAOCommand(Server) Else - SendTarget("*","MS#chat#Normal#Discord#Normal#FIN!#jud#1#2#"+Str(characternumber-1)+"#0#3#0#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) + SendTarget("*","MS#chat#dolannormal#Dolan#dolannormal#FIN!#jud#1#2#"+Str(characternumber-1)+"#0#3#0#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) EndIf Case "Q" ReplayMode=0 Default - SendTarget("*","MS#chat#Normal#Discord#Normal#EEK! Valid: <, >, Q#jud#1#2#"+Str(characternumber-1)+"#0#3#0#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) + SendTarget("*","MS#chat#dolanangry#Dolan#dolanangry#EEK! Valid: <, >, Q#jud#1#2#"+Str(characternumber-1)+"#0#3#0#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) EndSelect EndIf @@ -1304,6 +1312,14 @@ Procedure HandleAOCommand(*usagePointer.Client) Sendtarget("Area"+Str(*usagePointer\area),"BN#"+bgcomm$+"#%",*usagePointer) EndIf + Case "/pos" + npos$=Mid(ctparam$,6) + If npos$="def" Or npos$="pro" Or npos$="hlp" Or npos$="hld" Or npos$="wit" Or npos$="jud" + *usagePointer\pos=npos$ + Else + *usagePointer\pos="" + EndIf + Case "/switch" If Mid(ctparam$,9)="" *usagePointer\cid=-1 @@ -1346,1020 +1362,1020 @@ Procedure HandleAOCommand(*usagePointer.Client) UnlockMutex(ListMutex) EndIf - narea$=StringField(ctparam$,2," ") - If narea$="" - arep$="CT#$HOST#Areas:" - For ir=0 To AreaNumber-1 - arep$+#CRLF$ - arep$=arep$+areas(ir)\name+": "+Str(areas(ir)\players)+" users" - If ir=*usagePointer\area - arep$+" (including you)" - EndIf - If areas(ir)\mlock - arep$+" super" - EndIf - If areas(ir)\lock - arep$+"locked" - EndIf - Next - arep$+"#%" - SendTarget(Str(ClientID),arep$,Server) - Else - SwitchAreas(*usagePointer,narea$) - EndIf - - Case "/loadreplay" - If *usagePointer\perm>1 - ReplayFile$="base/replays/"+Mid(ctparam$,13) - If ReadFile(8, ReplayFile$) - ClearList(PReplay()) - ResetList(PReplay()) - While Eof(8) = 0 - rline$=ReadString(8) - If Left(rline$,1)="#" - AddElement(PReplay()) - ReplayMode=1 - PReplay()=rline$ - EndIf - Wend - ResetList(PReplay()) - CloseFile(8) + narea$=StringField(ctparam$,2," ") + If narea$="" + arep$="CT#$HOST#Areas:" + For ir=0 To AreaNumber-1 + arep$+#CRLF$ + arep$=arep$+areas(ir)\name+": "+Str(areas(ir)\players)+" users" + If ir=*usagePointer\area + arep$+" (including you)" EndIf - EndIf - - Case "/lock" - If *usagePointer\area - lock$=StringField(ctparam$,2," ") - Select lock$ - Case "0" - areas(*usagePointer\area)\lock=0 - areas(*usagePointer\area)\mlock=0 - SendTarget(Str(ClientID),"CT#$HOST#area unlocked#%",Server) - Case "1" - areas(*usagePointer\area)\lock=*usagePointer\ClientID - areas(*usagePointer\area)\mlock=0 - SendTarget(Str(ClientID),"CT#$HOST#area locked#%",Server) - Case "2" - If *usagePointer\perm - areas(*usagePointer\area)\lock=*usagePointer\ClientID - areas(*usagePointer\area)\mlock=1 - SendTarget(Str(ClientID),"CT#$HOST#area superlocked#%",Server) - EndIf - Default - pr$="CT#$HOST#area is " - If areas(*usagePointer\area)\lock=0 - pr$+"not " - EndIf - SendTarget(Str(ClientID),pr$+"locked#%",Server) - EndSelect - Else - SendTarget(Str(ClientID),"CT#$HOST#You can't lock the default area#%",Server) - EndIf - - Case "/skip" - If *usagePointer\perm - *usagePointer\skip=1 - EndIf - - Case "/noskip" - If *usagePointer\perm - *usagePointer\skip=0 - EndIf - - Case "/toggle" - If *usagePointer\perm - status$="invalid" - Select StringField(ctparam$,2," ") - Case "WTCE" - If rt - rt=0 - status$="disabled" - Else - rt=1 - status$="enabled" - EndIf - Case "LogHD" - If loghd - loghd=0 - status$="disabled" - Else - loghd=1 - status$="enabled" - EndIf - Case "ExpertLog" - If ExpertLog - ExpertLog=0 - status$="disabled" - Else - ExpertLog=1 - status$="enabled" - EndIf - Case "Threading" - If CommandThreading - CommandThreading=0 - status$="disabled" - Else - CommandThreading=1 - status$="enabled" - EndIf - EndSelect - SendTarget(Str(ClientID),"CT#$HOST#"+StringField(ctparam$,2," ")+" is "+status$+"#%",Server) - EndIf - - Case "/decryptor" - If *usagePointer\perm>1 - decryptor$=StringField(ctparam$,2," ") - key=Val(DecryptStr(HexToString(decryptor$),322)) - SendTarget("*","decryptor#"+decryptor$+"#%",Server) - EndIf - - Case "/snapshot" - If *usagePointer\perm>1 - If CreateFile(33,"snap.txt") - LockMutex(ListMutex) - PushMapPosition(Clients()) - ResetMap(Clients()) - While NextMapElement(Clients()) - WriteStringN(33,"Client "+Str(Clients()\ClientID)) - WriteStringN(33,Clients()\IP) - WriteStringN(33,Str(Clients()\CID)) - WriteStringN(33,Str(Clients()\perm)) - WriteStringN(33,Str(Clients()\hack)) - WriteStringN(33,Str(Clients()\area)) - WriteStringN(33,Clients()\last) - Wend - PopMapPosition(Clients()) - UnlockMutex(ListMutex) - LockMutex(ListMutex) - For sa=0 To areas - WriteStringN(33,"Area "+Str(sa)) - WriteStringN(33,Areas(sa)\name) - WriteStringN(33,Areas(sa)\bg) - WriteStringN(33,Str(Areas(sa)\players)) - WriteStringN(33,Str(Areas(sa)\lock)) - WriteStringN(33,Str(Areas(sa)\mlock)) - WriteStringN(33,Areas(sa)\track) - WriteStringN(33,Str(Areas(sa)\trackwait)) - Next - CloseFile(33) + If areas(ir)\mlock + arep$+" super" EndIf - EndIf - - Case "/smokeweed" - reply$="CT#stonedDiscord#where da weed at#%" - WriteLog("smoke weed everyday",*usagePointer) - - Case "/help" - SendTarget(Str(ClientID),"CT#SERVER#Check https://github.com/stonedDiscord/serverD/blob/master/README.md#%",Server) - - Case "/public" - Debug ctparam$ - If StringField(ctparam$,2," ")="" - pr$="CT#$HOST#server is " - If public=0 - pr$+"not " + If areas(ir)\lock + arep$+"locked" EndIf - SendTarget(Str(ClientID),pr$+"public#%",Server) - Else - If *usagePointer\perm>1 - public=Val(StringField(ctparam$,2," ")) - If public - msthread=CreateThread(@MasterAdvert(),Port) - SendTarget(Str(ClientID),"CT#$HOST# published server#%",Server) + Next + arep$+"#%" + SendTarget(Str(ClientID),arep$,Server) + Else + SwitchAreas(*usagePointer,narea$) + EndIf + + Case "/loadreplay" + If *usagePointer\perm>1 + ReplayFile$="base/replays/"+Mid(ctparam$,13) + If ReadFile(8, ReplayFile$) + ClearList(PReplay()) + ResetList(PReplay()) + While Eof(8) = 0 + rline$=ReadString(8) + If Left(rline$,1)="#" + AddElement(PReplay()) + ReplayMode=1 + PReplay()=rline$ EndIf - CompilerIf #CONSOLE=0 - SetGadgetState(#CheckBox_MS,public) - CompilerEndIf - EndIf - EndIf - - Case "/evi" - SendTarget(Str(ClientID),"MS#chat#dolannormal#Dolan#dolannormal#"+StringField(ctparam$,2," ")+"#jud#1#0#"+Str(characternumber-1)+"#0#0#"+StringField(ctparam$,2," ")+"#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) - - Case "/roll" - If Len(ctparam$)<7 - dicemax=Val(StringField(ctparam$,2," ")) - Else - dicemax=6 - EndIf - If dicemax<=1 Or dicemax>9999 - dicemax=6 - EndIf - If OpenCryptRandom() - random$=Str(CryptRandom(dicemax)) - CloseCryptRandom() - Else - random$=Str(Random(dicemax)) - EndIf - Sendtarget("Area"+Str(*usagePointer\area),"CT#$HOST#"+GetCharacterName(*usagePointer)+" rolled "+random$+" out of "+Str(dicemax)+"#%",Server) - - Case "/pm" - SendTarget(StringField(ctparam$,2," "),"CT#PM "+*usagePointer\username+" to You#"+Mid(ctparam$,6+Len(StringField(ctparam$,2," ")))+"#%",Server) - SendTarget(Str(ClientID),"CT#PM You to "+StringField(ctparam$,2," ")+"#"+Mid(ctparam$,6+Len(StringField(ctparam$,2," ")))+"#%",Server) - - Case "/send" - If *usagePointer\perm - sname$=StringField(ctparam$,2," ") - Debug sname$ - smes$=Mid(ctparam$,8+Len(sname$),Len(ctparam$)-6) - smes$=Escape(smes$) - SendTarget(sname$,smes$,Server) - EndIf - - Case "/sendall" - If *usagePointer\perm - smes$=Mid(ctparam$,10) - smes$=Escape(smes$) - SendTarget("*",smes$,Server) - EndIf - - Case "/reload" - If *usagePointer\perm>1 - LoadSettings(1) - SendTarget(Str(ClientID),"CT#$HOST#serverD reloaded#%",Server) - EndIf - - Case "/play" - If *usagePointer\perm - song$=Right(ctparam$,Len(ctparam$)-6) - SendTarget("Area"+Str(*usagePointer\area),"MC#"+song$+"#"+Str(*usagePointer\CID)+"#%",*usagePointer) + Wend + ResetList(PReplay()) + CloseFile(8) EndIf - - Case "/hd" - If *usagePointer\perm - kick$=Mid(ctparam$,5,Len(ctparam$)-2) - If kick$="" Or kick$="*" - everybody=1 - Else - everybody=0 - EndIf - hdlist$="IL#" + EndIf + + Case "/lock" + If *usagePointer\area + lock$=StringField(ctparam$,2," ") + Select lock$ + Case "0" + areas(*usagePointer\area)\lock=0 + areas(*usagePointer\area)\mlock=0 + SendTarget(Str(ClientID),"CT#$HOST#area unlocked#%",Server) + Case "1" + areas(*usagePointer\area)\lock=*usagePointer\ClientID + areas(*usagePointer\area)\mlock=0 + SendTarget(Str(ClientID),"CT#$HOST#area locked#%",Server) + Case "2" + If *usagePointer\perm + areas(*usagePointer\area)\lock=*usagePointer\ClientID + areas(*usagePointer\area)\mlock=1 + SendTarget(Str(ClientID),"CT#$HOST#area superlocked#%",Server) + EndIf + Default + pr$="CT#$HOST#area is " + If areas(*usagePointer\area)\lock=0 + pr$+"not " + EndIf + SendTarget(Str(ClientID),pr$+"locked#%",Server) + EndSelect + Else + SendTarget(Str(ClientID),"CT#$HOST#You can't lock the default area#%",Server) + EndIf + + Case "/skip" + If *usagePointer\perm + *usagePointer\skip=1 + EndIf + + Case "/noskip" + If *usagePointer\perm + *usagePointer\skip=0 + EndIf + + Case "/toggle" + If *usagePointer\perm + status$="invalid" + Select StringField(ctparam$,2," ") + Case "WTCE" + If rt + rt=0 + status$="disabled" + Else + rt=1 + status$="enabled" + EndIf + Case "LogHD" + If loghd + loghd=0 + status$="disabled" + Else + loghd=1 + status$="enabled" + EndIf + Case "ExpertLog" + If ExpertLog + ExpertLog=0 + status$="disabled" + Else + ExpertLog=1 + status$="enabled" + EndIf + Case "Threading" + If CommandThreading + CommandThreading=0 + status$="disabled" + Else + CommandThreading=1 + status$="enabled" + EndIf + EndSelect + SendTarget(Str(ClientID),"CT#$HOST#"+StringField(ctparam$,2," ")+" is "+status$+"#%",Server) + EndIf + + Case "/decryptor" + If *usagePointer\perm>1 + decryptor$=StringField(ctparam$,2," ") + key=Val(DecryptStr(HexToString(decryptor$),322)) + SendTarget("*","decryptor#"+decryptor$+"#%",Server) + EndIf + + Case "/snapshot" + If *usagePointer\perm>1 + If CreateFile(33,"snap.txt") LockMutex(ListMutex) + PushMapPosition(Clients()) ResetMap(Clients()) - While NextMapElement(Clients()) - If kick$=Str(Clients()\CID) Or kick$=Clients()\HD Or kick$=Clients()\IP Or everybody - hdlist$=hdlist$+Clients()\IP+"|"+Str(Clients()\CID)+"|"+Clients()\HD+"|*" - EndIf + While NextMapElement(Clients()) + WriteStringN(33,"Client "+Str(Clients()\ClientID)) + WriteStringN(33,Clients()\IP) + WriteStringN(33,Str(Clients()\CID)) + WriteStringN(33,Str(Clients()\perm)) + WriteStringN(33,Str(Clients()\hack)) + WriteStringN(33,Str(Clients()\area)) + WriteStringN(33,Clients()\last) Wend + PopMapPosition(Clients()) UnlockMutex(ListMutex) - SendTarget(Str(ClientID),hdlist$+"#%",Server) - WriteLog("["+GetCharacterName(*usagePointer)+"] used /hd",*usagePointer) - EndIf - - - Case "/unban" - If *usagePointer\perm>1 - ub$=Mid(ctparam$,8,Len(ctparam$)) - Debug ub$ - If CreateFile(2,"base/banlist.txt") - Debug "file recreated" - ForEach IPbans() - If IPbans()\banned=ub$ - DeleteElement(IPbans()) - Else - WriteStringN(2,IPbans()\banned+"#"+IPbans()\reason+"#"+Str(IPbans()\time)+"#"+Str(IPbans()\type)) - EndIf - Next - CloseFile(2) - EndIf - - If CreateFile(2,"base/HDbanlist.txt") - ForEach HDbans() - If HDbans()\banned=ub$ - DeleteElement(HDbans()) - Else - WriteStringN(2,HDbans()\banned+"#"+HDbans()\reason+"#"+Str(HDbans()\time)+"#"+Str(HDbans()\type)) - EndIf - Next - CloseFile(2) - EndIf - EndIf - - Case "/stop" - If *usagePointer\perm>1 - public=0 - WriteLog("stopping server...",*usagePointer) - Quit=1 - EndIf - - Case "/kick" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#KICK,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#kicked "+Str(akck)+" clients#%",Server) - EndIf - - Case "/disconnect" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,13),StringField(ctparam$,3," "),#DISCO,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#disconnected "+Str(akck)+" clients#%",Server) - EndIf - - Case "/ban" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,6),StringField(ctparam$,3," "),#BAN,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#banned "+Str(akck)+" clients#%",Server) - EndIf - - Case "/mute" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#MUTE,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) - EndIf - - - Case "/unmute" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,9),StringField(ctparam$,3," "),#UNMUTE,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) - EndIf - - - Case "/ignore" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,9),StringField(ctparam$,3," "),#CIGNORE,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + LockMutex(ListMutex) + For sa=0 To areas + WriteStringN(33,"Area "+Str(sa)) + WriteStringN(33,Areas(sa)\name) + WriteStringN(33,Areas(sa)\bg) + WriteStringN(33,Str(Areas(sa)\players)) + WriteStringN(33,Str(Areas(sa)\lock)) + WriteStringN(33,Str(Areas(sa)\mlock)) + WriteStringN(33,Areas(sa)\track) + WriteStringN(33,Str(Areas(sa)\trackwait)) + Next + CloseFile(33) EndIf - - - Case "/unignore" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,11),StringField(ctparam$,3," "),#UNIGNORE,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + EndIf + + Case "/smokeweed" + reply$="CT#stonedDiscord#where da weed at#%" + WriteLog("smoke weed everyday",*usagePointer) + + Case "/help" + SendTarget(Str(ClientID),"CT#SERVER#Check https://github.com/stonedDiscord/serverD/blob/master/README.md#%",Server) + + Case "/public" + Debug ctparam$ + If StringField(ctparam$,2," ")="" + pr$="CT#$HOST#server is " + If public=0 + pr$+"not " EndIf - - - Case "/undj" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#UNDJ,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + SendTarget(Str(ClientID),pr$+"public#%",Server) + Else + If *usagePointer\perm>1 + public=Val(StringField(ctparam$,2," ")) + If public + msthread=CreateThread(@MasterAdvert(),Port) + SendTarget(Str(ClientID),"CT#$HOST# published server#%",Server) + EndIf + CompilerIf #CONSOLE=0 + SetGadgetState(#CheckBox_MS,public) + CompilerEndIf EndIf - - - Case "/dj" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,5),StringField(ctparam$,3," "),#DJ,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + EndIf + + Case "/evi" + SendTarget(Str(ClientID),"MS#chat#dolannormal#Dolan#dolannormal#"+StringField(ctparam$,2," ")+"#jud#1#0#"+Str(characternumber-1)+"#0#0#"+StringField(ctparam$,2," ")+"#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) + + Case "/roll" + If Len(ctparam$)<7 + dicemax=Val(StringField(ctparam$,2," ")) + Else + dicemax=6 + EndIf + If dicemax<=1 Or dicemax>9999 + dicemax=6 + EndIf + If OpenCryptRandom() + random$=Str(CryptRandom(dicemax)) + CloseCryptRandom() + Else + random$=Str(Random(dicemax)) + EndIf + Sendtarget("Area"+Str(*usagePointer\area),"CT#$HOST#"+GetCharacterName(*usagePointer)+" rolled "+random$+" out of "+Str(dicemax)+"#%",Server) + + Case "/pm" + SendTarget(StringField(ctparam$,2," "),"CT#PM "+*usagePointer\username+" to You#"+Mid(ctparam$,6+Len(StringField(ctparam$,2," ")))+"#%",Server) + SendTarget(Str(ClientID),"CT#PM You to "+StringField(ctparam$,2," ")+"#"+Mid(ctparam$,6+Len(StringField(ctparam$,2," ")))+"#%",Server) + + Case "/send" + If *usagePointer\perm + sname$=StringField(ctparam$,2," ") + Debug sname$ + smes$=Mid(ctparam$,8+Len(sname$),Len(ctparam$)-6) + smes$=Escape(smes$) + SendTarget(sname$,smes$,Server) + EndIf + + Case "/sendall" + If *usagePointer\perm + smes$=Mid(ctparam$,10) + smes$=Escape(smes$) + SendTarget("*",smes$,Server) + EndIf + + Case "/reload" + If *usagePointer\perm>1 + LoadSettings(1) + SendTarget(Str(ClientID),"CT#$HOST#serverD reloaded#%",Server) + EndIf + + Case "/play" + If *usagePointer\perm + song$=Right(ctparam$,Len(ctparam$)-6) + SendTarget("Area"+Str(*usagePointer\area),"MC#"+song$+"#"+Str(*usagePointer\CID)+"#%",*usagePointer) + EndIf + + Case "/hd" + If *usagePointer\perm + kick$=Mid(ctparam$,5,Len(ctparam$)-2) + If kick$="" Or kick$="*" + everybody=1 + Else + everybody=0 EndIf - - Case "/gimp" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#GIMP,*usagePointer) - SendNetworkString(ClientID,"CT#$HOST#gimped "+Str(akck)+" clients#%") + hdlist$="IL#" + LockMutex(ListMutex) + ResetMap(Clients()) + While NextMapElement(Clients()) + If kick$=Str(Clients()\CID) Or kick$=Clients()\HD Or kick$=Clients()\IP Or everybody + hdlist$=hdlist$+Clients()\IP+"|"+Str(Clients()\CID)+"|"+Clients()\HD+"|*" + EndIf + Wend + UnlockMutex(ListMutex) + SendTarget(Str(ClientID),hdlist$+"#%",Server) + WriteLog("["+GetCharacterName(*usagePointer)+"] used /hd",*usagePointer) + EndIf + + + Case "/unban" + If *usagePointer\perm>1 + ub$=Mid(ctparam$,8,Len(ctparam$)) + Debug ub$ + If CreateFile(2,"base/banlist.txt") + Debug "file recreated" + ForEach IPbans() + If IPbans()\banned=ub$ + DeleteElement(IPbans()) + Else + WriteStringN(2,IPbans()\banned+"#"+IPbans()\reason+"#"+Str(IPbans()\time)+"#"+Str(IPbans()\type)) + EndIf + Next + CloseFile(2) EndIf - Case "/ungimp" - If *usagePointer\perm - akck=KickBan(Mid(ctparam$,9),StringField(ctparam$,3," "),#UNGIMP,*usagePointer) - SendNetworkString(ClientID,"CT#$HOST#ungimped "+Str(akck)+" clients#%") + If CreateFile(2,"base/HDbanlist.txt") + ForEach HDbans() + If HDbans()\banned=ub$ + DeleteElement(HDbans()) + Else + WriteStringN(2,HDbans()\banned+"#"+HDbans()\reason+"#"+Str(HDbans()\time)+"#"+Str(HDbans()\type)) + EndIf + Next + CloseFile(2) EndIf - - Case "/version" - SendTarget(Str(ClientID),"CT#$HOST#"+version$+"#%",Server) - - EndSelect - Else - *usagePointer\last.s=rawreceive$ - SendTarget("Area"+Str(*usagePointer\area),"CT#"+*usagePointer\username+"#"+StringField(rawreceive$,4,"#")+"#%",*usagePointer) - CompilerIf #CONSOLE=0 - AddGadgetItem(#ListIcon_2,-1,StringField(rawreceive$,3,"#")+Chr(10)+StringField(rawreceive$,4,"#")) - Debug "guys" - SetGadgetItemData(#ListIcon_2,CountGadgetItems(#ListIcon_2)-1,*usagePointer\ClientID) - CompilerEndIf - EndIf - Else - WriteLog("[OOC][HACKER]["+StringField(rawreceive$,3,"#")+"]["+ctparam$+"]",*usagePointer) - *usagePointer\hack=1 - rf=1 - EndIf - - Case "HP" - bar=Val(StringField(rawreceive$,4,"#")) - If *usagePointer\CID>=0 - If bar>=0 And bar<=10 - WriteLog("["+GetCharacterName(*usagePointer)+"] changed the bars",*usagePointer) - If StringField(rawreceive$,3,"#")="1" - Areas(*usagePointer\area)\good=bar - SendTarget("Area"+Str(*usagePointer\area),"HP#1#"+Str(Areas(*usagePointer\area)\good)+"#%",*usagePointer) - ElseIf StringField(rawreceive$,3,"#")="2" - Areas(*usagePointer\area)\evil=bar - SendTarget("Area"+Str(*usagePointer\area),"HP#2#"+Str(Areas(*usagePointer\area)\evil)+"#%",*usagePointer) - EndIf - send=1 - EndIf + EndIf + + Case "/stop" + If *usagePointer\perm>1 + public=0 + WriteLog("stopping server...",*usagePointer) + Quit=1 + EndIf + + Case "/kick" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#KICK,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#kicked "+Str(akck)+" clients#%",Server) + EndIf + + Case "/disconnect" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,13),StringField(ctparam$,3," "),#DISCO,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#disconnected "+Str(akck)+" clients#%",Server) + EndIf + + Case "/ban" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,6),StringField(ctparam$,3," "),#BAN,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#banned "+Str(akck)+" clients#%",Server) + EndIf + + Case "/mute" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#MUTE,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + EndIf + + + Case "/unmute" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,9),StringField(ctparam$,3," "),#UNMUTE,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + EndIf + + + Case "/ignore" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,9),StringField(ctparam$,3," "),#CIGNORE,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + EndIf + + + Case "/unignore" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,11),StringField(ctparam$,3," "),#UNIGNORE,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + EndIf + + + Case "/undj" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#UNDJ,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + EndIf + + + Case "/dj" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,5),StringField(ctparam$,3," "),#DJ,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + EndIf + + Case "/gimp" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,7),StringField(ctparam$,3," "),#GIMP,*usagePointer) + SendNetworkString(ClientID,"CT#$HOST#gimped "+Str(akck)+" clients#%") + EndIf + + Case "/ungimp" + If *usagePointer\perm + akck=KickBan(Mid(ctparam$,9),StringField(ctparam$,3," "),#UNGIMP,*usagePointer) + SendNetworkString(ClientID,"CT#$HOST#ungimped "+Str(akck)+" clients#%") + EndIf + + Case "/version" + SendTarget(Str(ClientID),"CT#$HOST#"+version$+"#%",Server) + + EndSelect Else - WriteLog("["+GetCharacterName(*usagePointer)+"] fucked up the bars",*usagePointer) - *usagePointer\hack=1 - rf=1 + *usagePointer\last.s=rawreceive$ + SendTarget("Area"+Str(*usagePointer\area),"CT#"+*usagePointer\username+"#"+StringField(rawreceive$,4,"#")+"#%",*usagePointer) + CompilerIf #CONSOLE=0 + AddGadgetItem(#ListIcon_2,-1,StringField(rawreceive$,3,"#")+Chr(10)+StringField(rawreceive$,4,"#")) + Debug "guys" + SetGadgetItemData(#ListIcon_2,CountGadgetItems(#ListIcon_2)-1,*usagePointer\ClientID) + CompilerEndIf EndIf - - Case "RT" - If *usagePointer\CID>=0 - If rt=1 - Sendtarget("Area"+Str(*usagePointer\area),"RT#"+Mid(rawreceive$,coff),*usagePointer) + Else + WriteLog("[OOC][HACKER]["+StringField(rawreceive$,3,"#")+"]["+ctparam$+"]",*usagePointer) + *usagePointer\hack=1 + rf=1 + EndIf + + Case "HP" + bar=Val(StringField(rawreceive$,4,"#")) + If *usagePointer\CID>=0 + If bar>=0 And bar<=10 + WriteLog("["+GetCharacterName(*usagePointer)+"] changed the bars",*usagePointer) + If StringField(rawreceive$,3,"#")="1" + Areas(*usagePointer\area)\good=bar + SendTarget("Area"+Str(*usagePointer\area),"HP#1#"+Str(Areas(*usagePointer\area)\good)+"#%",*usagePointer) + ElseIf StringField(rawreceive$,3,"#")="2" + Areas(*usagePointer\area)\evil=bar + SendTarget("Area"+Str(*usagePointer\area),"HP#2#"+Str(Areas(*usagePointer\area)\evil)+"#%",*usagePointer) EndIf - Else - *usagePointer\hack=1 - rf=1 - EndIf - - WriteLog("["+GetCharacterName(*usagePointer)+"] WT/CE button",*usagePointer) - - Case "AN" ; character list - start=Val(StringField(rawreceive$,3,"#")) - If start*10=0 - SendTarget(Str(ClientID),ReadyChar(start),Server) - ElseIf EviNumber>0 - SendTarget(Str(ClientID),ReadyEvidence(1),Server) - Else - SendTarget(Str(ClientID),ReadyMusic(0),Server) - EndIf - - - Case "AE" ; evidence list - Debug Evidences(0)\name - sentevi=Val(StringField(rawreceive$,3,"#")) - If sentevi=0 - SendTarget(Str(ClientID),ReadyEvidence(sentevi+1),Server) - Else - SendTarget(Str(ClientID),ReadyMusic(0),Server) - EndIf - - Case "AM" ;music list - start=Val(StringField(rawreceive$,3,"#")) - If start<=musicpage And start>=0 - SendTarget(Str(ClientID),ReadyMusic(start),Server) - Else ;MUSIC DONE - SendDone(*usagePointer) + send=1 EndIf - - Case "HI" ;what is this server - hdbanned=0 - *usagePointer\HD = StringField(rawreceive$,3,"#") - WriteLog("HdId="+*usagePointer\HD,*usagePointer) - *usagePointer\sHD = 1 - - If loghd - OpenFile(8,"base/hd.txt") - WriteStringN(8,*usagePointer\IP+","+*usagePointer\HD) - CloseFile(8) + Else + WriteLog("["+GetCharacterName(*usagePointer)+"] fucked up the bars",*usagePointer) + *usagePointer\hack=1 + rf=1 + EndIf + + Case "RT" + If *usagePointer\CID>=0 + If rt=1 + Sendtarget("Area"+Str(*usagePointer\area),"RT#"+Mid(rawreceive$,coff),*usagePointer) EndIf - - ForEach SDBans() - Debug *usagePointer\HD - If *usagePointer\HD = SDbans()\banned Or *usagePointer\IP=SDBans()\banned - SendTarget(Str(ClientID),"BD#%",Server) - LockMutex(ListMutex) - CloseNetworkConnection(ClientID) - DeleteMapElement(Clients(),Str(ClientID)) + Else + *usagePointer\hack=1 + rf=1 + EndIf + + WriteLog("["+GetCharacterName(*usagePointer)+"] WT/CE button",*usagePointer) + + Case "AN" ; character list + start=Val(StringField(rawreceive$,3,"#")) + If start*10=0 + SendTarget(Str(ClientID),ReadyChar(start),Server) + ElseIf EviNumber>0 + SendTarget(Str(ClientID),ReadyEvidence(1),Server) + Else + SendTarget(Str(ClientID),ReadyMusic(0),Server) + EndIf + + + Case "AE" ; evidence list + Debug Evidences(0)\name + sentevi=Val(StringField(rawreceive$,3,"#")) + If sentevi=0 + SendTarget(Str(ClientID),ReadyEvidence(sentevi+1),Server) + Else + SendTarget(Str(ClientID),ReadyMusic(0),Server) + EndIf + + Case "AM" ;music list + start=Val(StringField(rawreceive$,3,"#")) + If start<=musicpage And start>=0 + SendTarget(Str(ClientID),ReadyMusic(start),Server) + Else ;MUSIC DONE + SendDone(*usagePointer) + EndIf + + Case "HI" ;what is this server + hdbanned=0 + *usagePointer\HD = StringField(rawreceive$,3,"#") + WriteLog("HdId="+*usagePointer\HD,*usagePointer) + *usagePointer\sHD = 1 + + If loghd + OpenFile(8,"base/hd.txt") + WriteStringN(8,*usagePointer\IP+","+*usagePointer\HD) + CloseFile(8) + EndIf + + ForEach SDBans() + Debug *usagePointer\HD + If *usagePointer\HD = SDbans()\banned Or *usagePointer\IP=SDBans()\banned + SendTarget(Str(ClientID),"BD#%",Server) + LockMutex(ListMutex) + CloseNetworkConnection(ClientID) + DeleteMapElement(Clients(),Str(ClientID)) + UnlockMutex(ListMutex) + hdbanned=1 + EndIf + Next + If hdbanned=0 + ForEach HDbans() + If *usagePointer\HD = HDbans()\banned + WriteLog("HD: "+*usagePointer\HD+" is banned, reason: "+HDbans()\reason,*usagePointer) + SendTarget(Str(ClientID),"BD#%",Server) + LockMutex(ListMutex) + CloseNetworkConnection(ClientID) + DeleteMapElement(Clients(),Str(ClientID)) UnlockMutex(ListMutex) hdbanned=1 + Break EndIf Next - If hdbanned=0 - ForEach HDbans() - If *usagePointer\HD = HDbans()\banned - WriteLog("HdId: "+*usagePointer\HD+" is banned, disconnecting",*usagePointer) - SendTarget(Str(ClientID),"BD#%",Server) - LockMutex(ListMutex) - CloseNetworkConnection(ClientID) - DeleteMapElement(Clients(),Str(ClientID)) - UnlockMutex(ListMutex) - hdbanned=1 - Break - EndIf - Next - EndIf - If hdbanned=0 - ForEach HDmods() - If *usagePointer\HD = HDmods() - *usagePointer\perm=1 - EndIf - Next - SendTarget(Str(ClientID),"ID#"+Str(*usagePointer\AID)+"#"+version$+"#%",Server) - players=0 - - LockMutex(ListMutex) - ResetMap(Clients()) - While NextMapElement(Clients()) - If Clients()\CID>=0 - players+1 - EndIf - Wend - UnlockMutex(ListMutex) - - SendTarget(Str(ClientID),"PN#"+Str(players)+"#"+slots$+"#%",Server) - EndIf - rf=1 - - Case "askchaa" ;what is left to load - *usagePointer\cconnect=1 - SendTarget(Str(ClientID),"SI#"+Str(characternumber)+"#"+Str(EviNumber)+"#"+Str(tracks)+"#%",Server) + EndIf + If hdbanned=0 + ForEach HDmods() + If *usagePointer\HD = HDmods() + *usagePointer\perm=1 + EndIf + Next + SendTarget(Str(ClientID),"ID#"+Str(*usagePointer\AID)+"#"+version$+"#%",Server) + players=0 - Case "askchar2" ; character list - SendTarget(Str(ClientID),ReadyChar(0),Server) + LockMutex(ListMutex) + ResetMap(Clients()) + While NextMapElement(Clients()) + If Clients()\CID>=0 + players+1 + EndIf + Wend + UnlockMutex(ListMutex) - Case "CC" - akchar=0 - char=Val(StringField(rawreceive$,4,"#")) - If char>=0 And char<=characternumber - If BlockTaken=1 - LockMutex(ListMutex) - PushMapPosition(Clients()) - ResetMap(Clients()) - While NextMapElement(Clients()) - If Clients()\CID=char - If Clients()\area=*usagePointer\area - akchar=1 - Break - Else - akchar=0 - EndIf - If MultiChar=0 - akchar=1 - Break - EndIf + SendTarget(Str(ClientID),"PN#"+Str(players)+"#"+slots$+"#%",Server) + EndIf + rf=1 + + Case "askchaa" ;what is left to load + *usagePointer\cconnect=1 + SendTarget(Str(ClientID),"SI#"+Str(characternumber)+"#"+Str(EviNumber)+"#"+Str(tracks)+"#%",Server) + + Case "askchar2" ; character list + SendTarget(Str(ClientID),ReadyChar(0),Server) + + Case "CC" + akchar=0 + char=Val(StringField(rawreceive$,4,"#")) + If char>=0 And char<=characternumber + If BlockTaken=1 + LockMutex(ListMutex) + PushMapPosition(Clients()) + ResetMap(Clients()) + While NextMapElement(Clients()) + If Clients()\CID=char + If Clients()\area=*usagePointer\area + akchar=1 + Break + Else + akchar=0 + EndIf + If MultiChar=0 + akchar=1 + Break EndIf - Wend - PopMapPosition(Clients()) - UnlockMutex(ListMutex) - EndIf - If akchar=0 Or *usagePointer\CID=char Or BlockTaken=0 - SendTarget(Str(ClientID),"PV#"+Str(*usagePointer\AID)+"#CID#"+Str(char)+"#%",Server) - *usagePointer\CID=char - WriteLog("chose character: "+GetCharacterName(*usagePointer),*usagePointer) - SendTarget(Str(ClientID),"HP#1#"+Str(Areas(*usagePointer\area)\good)+"#%",Server) - SendTarget(Str(ClientID),"HP#2#"+Str(Areas(*usagePointer\area)\evil)+"#%",Server) - If MOTDevi - SendTarget(Str(ClientID),"MS#chat#normal#Discord#normal#Take that!#jud#1#2#"+Str(characternumber-1)+"#0#3#"+Str(MOTDevi)+"#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) EndIf - EndIf - rf=1 - EndIf - - Case "DC" - If areas(*usagePointer\area)\lock=ClientID - areas(*usagePointer\area)\lock=0 - areas(*usagePointer\area)\mlock=0 + Wend + PopMapPosition(Clients()) + UnlockMutex(ListMutex) EndIf - *usagePointer\ignore=1 - - Case "CA" - If *usagePointer\perm - If CommandThreading - CreateThread(@ListIP(),ClientID) - Else - ListIP(ClientID) + If akchar=0 Or *usagePointer\CID=char Or BlockTaken=0 + SendTarget(Str(ClientID),"PV#"+Str(*usagePointer\AID)+"#CID#"+Str(char)+"#%",Server) + *usagePointer\CID=char + WriteLog("chose character: "+GetCharacterName(*usagePointer),*usagePointer) + SendTarget(Str(ClientID),"HP#1#"+Str(Areas(*usagePointer\area)\good)+"#%",Server) + SendTarget(Str(ClientID),"HP#2#"+Str(Areas(*usagePointer\area)\evil)+"#%",Server) + If MOTDevi + SendTarget(Str(ClientID),"MS#chat#dolannormal#Dolan#dolannormal#Take that!#jud#1#2#"+Str(characternumber-1)+"#0#3#"+Str(MOTDevi)+"#"+Str(characternumber-1)+"#0#"+Str(modcol)+"#%",Server) EndIf - WriteLog("["+GetCharacterName(*usagePointer)+"] used /ip (clientside)",*usagePointer) EndIf - - Case "opKICK" - If *usagePointer\perm - akck=KickBan(StringField(rawreceive$,3,"#"),"",#KICK,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#kicked "+Str(akck)+" clients#%",Server) + rf=1 + EndIf + + Case "DC" + If areas(*usagePointer\area)\lock=ClientID + areas(*usagePointer\area)\lock=0 + areas(*usagePointer\area)\mlock=0 + EndIf + *usagePointer\ignore=1 + + Case "CA" + If *usagePointer\perm + If CommandThreading + CreateThread(@ListIP(),ClientID) + Else + ListIP(ClientID) EndIf - WriteLog("["+GetCharacterName(*usagePointer)+"] used opKICK",*usagePointer) - - Case "opBAN" - If *usagePointer\perm - akck=KickBan(StringField(rawreceive$,3,"#"),"",#BAN,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#banned "+Str(akck)+" clients#%",Server) + WriteLog("["+GetCharacterName(*usagePointer)+"] used /ip (clientside)",*usagePointer) + EndIf + + Case "opKICK" + If *usagePointer\perm + akck=KickBan(StringField(rawreceive$,3,"#"),"",#KICK,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#kicked "+Str(akck)+" clients#%",Server) + EndIf + WriteLog("["+GetCharacterName(*usagePointer)+"] used opKICK",*usagePointer) + + Case "opBAN" + If *usagePointer\perm + akck=KickBan(StringField(rawreceive$,3,"#"),"",#BAN,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#banned "+Str(akck)+" clients#%",Server) + EndIf + WriteLog("["+GetCharacterName(*usagePointer)+"] used opBAN",*usagePointer) + + Case "opMUTE" + If *usagePointer\perm + akck=KickBan(StringField(rawreceive$,3,"#"),"",#MUTE,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + EndIf + WriteLog("["+GetCharacterName(*usagePointer)+"] used opMUTE",*usagePointer) + + Case "opunMUTE" + If *usagePointer\perm + akck=KickBan(StringField(rawreceive$,3,"#"),"",#UNMUTE,*usagePointer) + SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + EndIf + WriteLog("["+GetCharacterName(*usagePointer)+"] used opunMUTE",*usagePointer) + + Case "VERSION" + SendTarget(Str(ClientID),"CT#$HOST#"+version$+"#%",Server) + + Case "ZZ" + If *usagePointer\CID>=0 + WriteLog("["+GetCharacterName(*usagePointer)+"] called mod",*usagePointer) + Else + WriteLog("[HACKER] called mod",*usagePointer) + EndIf + LockMutex(ListMutex) + ResetMap(Clients()) + While NextMapElement(Clients()) + If Clients()\perm + SendTarget(Str(Clients()\ClientID),"ZZ#"+*usagePointer\IP+"#%",*usagePointer) + Else + SendTarget(Str(Clients()\ClientID),"ZZ#someone#%",*usagePointer) EndIf - WriteLog("["+GetCharacterName(*usagePointer)+"] used opBAN",*usagePointer) - - Case "opMUTE" - If *usagePointer\perm - akck=KickBan(StringField(rawreceive$,3,"#"),"",#MUTE,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#muted "+Str(akck)+" clients#%",Server) + Wend + UnlockMutex(ListMutex) + + Default + WriteLog(rawreceive$,*usagePointer) + If StringField(rawreceive$,3,"#")="chat" + Goto msreplayfix + ElseIf FindString(rawreceive$,".mp3") + Goto replaymusicfix + EndIf + EndSelect + + StopProfiler() +EndProcedure + +;- Network Thread +Procedure Network(var) + Define SEvent,ClientID,send,length + Define ip$,rawreceive$,sc + Define *usagePointer.Client + + SEvent = NetworkServerEvent() + + Select SEvent + Case 0 + Delay(LagShield) + + Case #PB_NetworkEvent_Disconnect + ClientID = EventClient() + LockMutex(ListMutex) + If FindMapElement(Clients(),Str(ClientID)) + WriteLog("CLIENT DISCONNECTED",Clients()) + If areas(Clients()\area)\lock=ClientID + areas(Clients()\area)\lock=0 + areas(Clients()\area)\mlock=0 EndIf - WriteLog("["+GetCharacterName(*usagePointer)+"] used opMUTE",*usagePointer) - - Case "opunMUTE" - If *usagePointer\perm - akck=KickBan(StringField(rawreceive$,3,"#"),"",#UNMUTE,*usagePointer) - SendTarget(Str(ClientID),"CT#$HOST#unmuted "+Str(akck)+" clients#%",Server) + If Clients()\area>=0 + areas(Clients()\area)\players-1 EndIf - WriteLog("["+GetCharacterName(*usagePointer)+"] used opunMUTE",*usagePointer) - - Case "VERSION" - SendTarget(Str(ClientID),"CT#$HOST#"+version$+"#%",Server) - - Case "ZZ" - If *usagePointer\CID>=0 - WriteLog("["+GetCharacterName(*usagePointer)+"] called mod",*usagePointer) - Else - WriteLog("[HACKER] called mod",*usagePointer) + If ListSize(Plugins()) + ResetList(Plugins()) + While NextElement(Plugins()) + pStat=#NONE + CallFunctionFast(Plugins()\gcallback,#DISC) + CallFunctionFast(Plugins()\rawfunction,*usagePointer) + Wend EndIf - LockMutex(ListMutex) - ResetMap(Clients()) - While NextMapElement(Clients()) - If Clients()\perm - SendTarget(Str(Clients()\ClientID),"ZZ#"+*usagePointer\IP+"#%",*usagePointer) - Else - SendTarget(Str(Clients()\ClientID),"ZZ#someone#%",*usagePointer) - EndIf - Wend - UnlockMutex(ListMutex) - - Default - WriteLog(rawreceive$,*usagePointer) - If StringField(rawreceive$,3,"#")="chat" - Goto msreplayfix - ElseIf FindString(rawreceive$,".mp3") - Goto replaymusicfix + DeleteMapElement(Clients(),Str(ClientID)) + rf=1 + EndIf + UnlockMutex(ListMutex) + + Case #PB_NetworkEvent_Connect + ClientID = EventClient() + send=1 + ip$=IPString(GetClientIP(ClientID)) + + ForEach IPbans() + If ip$ = IPbans()\banned + send=0 + WriteLog("IP: "+ip$+" is banned, reason: "+IPbans()\reason,Server) + CloseNetworkConnection(ClientID) + Break EndIf - EndSelect - - StopProfiler() - EndProcedure - - ;- Network Thread - Procedure Network(var) - Define SEvent,ClientID,send,length - Define ip$,rawreceive$,sc - Define *usagePointer.Client - - SEvent = NetworkServerEvent() - - Select SEvent - Case 0 - Delay(LagShield) + Next + + If send - Case #PB_NetworkEvent_Disconnect - ClientID = EventClient() LockMutex(ListMutex) - If FindMapElement(Clients(),Str(ClientID)) - WriteLog("CLIENT DISCONNECTED",Clients()) - If areas(Clients()\area)\lock=ClientID - areas(Clients()\area)\lock=0 - areas(Clients()\area)\mlock=0 - EndIf - If Clients()\area>=0 - areas(Clients()\area)\players-1 + Clients(Str(ClientID))\ClientID = ClientID + Clients()\IP = ip$ + Clients()\AID=PV + PV+1 + Clients()\CID=-1 + Clients()\hack=0 + Clients()\perm=0 + ForEach HDmods() + If ip$ = HDmods() + Clients()\perm=1 EndIf - If ListSize(Plugins()) - ResetList(Plugins()) - While NextElement(Plugins()) - pStat=#NONE - CallFunctionFast(Plugins()\gcallback,#DISC) - CallFunctionFast(Plugins()\rawfunction,*usagePointer) - Wend - EndIf - DeleteMapElement(Clients(),Str(ClientID)) - rf=1 - EndIf - UnlockMutex(ListMutex) - - Case #PB_NetworkEvent_Connect - ClientID = EventClient() - send=1 - ip$=IPString(GetClientIP(ClientID)) + Next + Clients()\area=0 + areas(0)\players+1 + Clients()\ignore=0 + Clients()\judget=0 + Clients()\ooct=0 + Clients()\gimp=0 + Clients()\ignoremc=0 + Clients()\websocket=0 + Clients()\username="" - ForEach IPbans() - If ip$ = IPbans()\banned - send=0 - WriteLog("IP: "+ip$+" is banned, disconnecting",Server) - CloseNetworkConnection(ClientID) - Break + LockMutex(ActionMutex) + ResetList(Actions()) + While NextElement(Actions()) + If Actions()\IP=ip$ + Select Actions()\type + Case #UNDJ + Clients()\ignoremc=1 + Case #GIMP + Clients()\gimp=1 + EndSelect EndIf - Next + Wend + UnlockMutex(ActionMutex) - If send - - LockMutex(ListMutex) - Clients(Str(ClientID))\ClientID = ClientID - Clients()\IP = ip$ - Clients()\AID=PV - PV+1 - Clients()\CID=-1 - Clients()\hack=0 - Clients()\perm=0 - ForEach HDmods() - If ip$ = HDmods() - Clients()\perm=1 - EndIf - Next - Clients()\area=0 - areas(0)\players+1 - Clients()\ignore=0 - Clients()\judget=0 - Clients()\ooct=0 - Clients()\gimp=0 - Clients()\ignoremc=0 - Clients()\websocket=0 - Clients()\username="" - - LockMutex(ActionMutex) - ResetList(Actions()) - While NextElement(Actions()) - If Actions()\IP=ip$ - Select Actions()\type - Case #UNDJ - Clients()\ignoremc=1 - Case #GIMP - Clients()\gimp=1 - EndSelect - EndIf + UnlockMutex(ListMutex) + WriteLog("CLIENT CONNECTED ",Clients()) + CompilerIf #CONSOLE=0 + AddGadgetItem(#Listview_0,-1,ip$,Icons(0)) + CompilerEndIf + If ListSize(Plugins()) + ResetList(Plugins()) + While NextElement(Plugins()) + pStat=#NONE + CallFunctionFast(Plugins()\gcallback,#CONN) + CallFunctionFast(Plugins()\rawfunction,*usagePointer) Wend - UnlockMutex(ActionMutex) - - UnlockMutex(ListMutex) - WriteLog("CLIENT CONNECTED ",Clients()) - CompilerIf #CONSOLE=0 - AddGadgetItem(#Listview_0,-1,ip$,Icons(0)) - CompilerEndIf - If ListSize(Plugins()) - ResetList(Plugins()) - While NextElement(Plugins()) - pStat=#NONE - CallFunctionFast(Plugins()\gcallback,#CONN) - CallFunctionFast(Plugins()\rawfunction,*usagePointer) - Wend - EndIf - CompilerIf #WEB - length=ReceiveNetworkData(ClientID, *Buffer, 1024) - Debug "eaoe" - Debug length - If length=-1 - SendNetworkString(ClientID,"decryptor#"+decryptor$+"#%") - Else - Debug "wotf" - rawreceive$=PeekS(*Buffer,length) - Debug rawreceive$ - If ExpertLog - WriteLog(rawreceive$,Clients()) - EndIf - If length>=0 And Left(rawreceive$,3)="GET" - Clients()\websocket=1 - For i = 1 To CountString(rawreceive$, #CRLF$) - headeririda$ = StringField(rawreceive$, i, #CRLF$) - headeririda$ = RemoveString(headeririda$, #CR$) - headeririda$ = RemoveString(headeririda$, #LF$) - If Left(headeririda$, 19) = "Sec-WebSocket-Key: " - wkey$ = Right(headeririda$, Len(headeririda$) - 19) - EndIf - Next - Debug wkey$ - rkey$ = SecWebsocketAccept(wkey$) - Debug rkey$ - vastus$ = "HTTP/1.1 101 Switching Protocols" + #CRLF$ - vastus$ = vastus$ + "Connection: Upgrade"+ #CRLF$ - vastus$ = vastus$ + "Sec-WebSocket-Accept: " + rkey$ + #CRLF$ - vastus$ = vastus$ + "Server: serverD "+version$ + #CRLF$ - vastus$ = vastus$ + "Upgrade: websocket"+ #CRLF$ + #CRLF$ - Debug vastus$ - SendNetworkString(ClientID, vastus$) - - EndIf - EndIf - CompilerElse - SendNetworkString(ClientID,"decryptor#"+decryptor$+"#%") - CompilerEndIf EndIf - - - Case #PB_NetworkEvent_Data ;//////////////////////////Data - ClientID = EventClient() - *usagePointer.Client=FindMapElement(Clients(),Str(ClientID)) - If *usagePointer + CompilerIf #WEB length=ReceiveNetworkData(ClientID, *Buffer, 1024) - If length + Debug "eaoe" + Debug length + If length=-1 + SendNetworkString(ClientID,"decryptor#"+decryptor$+"#%") + Else + Debug "wotf" rawreceive$=PeekS(*Buffer,length) Debug rawreceive$ - CompilerIf #WEB - If *usagePointer\websocket And WebSockets - Ptr = 0 - Byte.a = PeekA(*Buffer + Ptr) - If Byte & %10000000 - Fin = #True - Else - Fin = #False - EndIf - Opcode = Byte & %00001111 - Ptr = 1 - Byte = PeekA(*Buffer + Ptr) - Masked = Byte >> 7 - Payload = Byte & $7F - Ptr + 1 - If Payload = 126 - Payload = PeekA(*Buffer + Ptr) << 8 - Ptr + 1 - Payload | PeekA(*Buffer + Ptr) - Ptr + 1 - ElseIf Payload = 127 - Payload = 0 - n = 7 - For i = Ptr To Ptr + 7 - Payload | PeekA(*Buffer + i) << (8 * n) - n - 1 - Next i - Ptr + 8 - EndIf - If Masked - n = 0 - For i = Ptr To Ptr + 3 - MaskKey(n) = PeekA(*Buffer + i) - Debug "MaskKey " + Str(n + 1) + ": " + RSet(Hex(MaskKey(n)), 2, "0") - n + 1 - Next i - Ptr + 4 + If ExpertLog + WriteLog(rawreceive$,Clients()) + EndIf + If length>=0 And Left(rawreceive$,3)="GET" + Clients()\websocket=1 + For i = 1 To CountString(rawreceive$, #CRLF$) + headeririda$ = StringField(rawreceive$, i, #CRLF$) + headeririda$ = RemoveString(headeririda$, #CR$) + headeririda$ = RemoveString(headeririda$, #LF$) + If Left(headeririda$, 19) = "Sec-WebSocket-Key: " + wkey$ = Right(headeririda$, Len(headeririda$) - 19) EndIf - Select Opcode - Case #TextFrame - If Masked - vastus$ = "" - n = 0 - For i = Ptr To Ptr + Payload - 1 - vastus$ + Chr(PeekA(*Buffer + i) ! MaskKey(n % 4)) - n + 1 - Next i - Else - vastus$ = PeekS(*Buffer + Ptr, Payload) - EndIf - rawreceive$=vastus$ - Case #PingFrame - Byte = PeekA(*Buffer) & %11110000 - PokeA(*Buffer, Byte | #PongFrame) - SendNetworkData(ClientID, *Buffer, bytesidkokku) - Case #ConnectionCloseFrame - If areas(Clients()\area)\lock=ClientID - areas(Clients()\area)\lock=0 - areas(Clients()\area)\mlock=0 - EndIf - If Clients()\area>=0 - areas(Clients()\area)\players-1 - EndIf - EndSelect - EndIf - CompilerEndIf - - sc=1 - While StringField(rawreceive$,sc,"%")<>"" - subcommand$=StringField(rawreceive$,sc,"%")+"%" + Next + Debug wkey$ + rkey$ = SecWebsocketAccept(wkey$) + Debug rkey$ + vastus$ = "HTTP/1.1 101 Switching Protocols" + #CRLF$ + vastus$ = vastus$ + "Connection: Upgrade"+ #CRLF$ + vastus$ = vastus$ + "Sec-WebSocket-Accept: " + rkey$ + #CRLF$ + vastus$ = vastus$ + "Server: serverD "+version$ + #CRLF$ + vastus$ = vastus$ + "Upgrade: websocket"+ #CRLF$ + #CRLF$ + Debug vastus$ + SendNetworkString(ClientID, vastus$) - subcommand$=ValidateChars(subcommand$) - length=Len(subcommand$) - - If ExpertLog - WriteLog(subcommand$,*usagePointer) + EndIf + EndIf + CompilerElse + SendNetworkString(ClientID,"decryptor#"+decryptor$+"#%") + CompilerEndIf + EndIf + + + Case #PB_NetworkEvent_Data ;//////////////////////////Data + ClientID = EventClient() + *usagePointer.Client=FindMapElement(Clients(),Str(ClientID)) + If *usagePointer + length=ReceiveNetworkData(ClientID, *Buffer, 1024) + If length + rawreceive$=PeekS(*Buffer,length) + Debug rawreceive$ + CompilerIf #WEB + If *usagePointer\websocket And WebSockets + Ptr = 0 + Byte.a = PeekA(*Buffer + Ptr) + If Byte & %10000000 + Fin = #True + Else + Fin = #False EndIf - - If ReplayMode=1 Or Not *usagePointer\last.s=subcommand$ And *usagePointer\ignore=0 - *usagePointer\last.s=subcommand$ - If CommandThreading - CreateThread(@HandleAOCommand(),*usagePointer) - Else - HandleAOCommand(*usagePointer) - EndIf - If ListSize(Plugins()) - ResetList(Plugins()) - While NextElement(Plugins()) - pStat=#NONE - CallFunctionFast(Plugins()\gcallback,#DATA) - CallFunctionFast(Plugins()\rawfunction,*usagePointer) - pStat=CallFunctionFast(Plugins()\gcallback,#SEND) - Select pStat - Case #SEND - ptarget$=PeekS(CallFunctionFast(Plugins()\gtarget)) - pmes$=PeekS(CallFunctionFast(Plugins()\gmessage)) - SendTarget(ptarget$,pmes$,Server) - EndSelect - Wend - EndIf + Opcode = Byte & %00001111 + Ptr = 1 + Byte = PeekA(*Buffer + Ptr) + Masked = Byte >> 7 + Payload = Byte & $7F + Ptr + 1 + If Payload = 126 + Payload = PeekA(*Buffer + Ptr) << 8 + Ptr + 1 + Payload | PeekA(*Buffer + Ptr) + Ptr + 1 + ElseIf Payload = 127 + Payload = 0 + n = 7 + For i = Ptr To Ptr + 7 + Payload | PeekA(*Buffer + i) << (8 * n) + n - 1 + Next i + Ptr + 8 EndIf - sc+1 - Wend - - ElseIf length=-1 - LockMutex(ListMutex) - If FindMapElement(Clients(),Str(ClientID)) - WriteLog("CLIENT BROKE",Clients()) - If areas(Clients()\area)\lock=ClientID - areas(Clients()\area)\lock=0 - areas(Clients()\area)\mlock=0 + If Masked + n = 0 + For i = Ptr To Ptr + 3 + MaskKey(n) = PeekA(*Buffer + i) + Debug "MaskKey " + Str(n + 1) + ": " + RSet(Hex(MaskKey(n)), 2, "0") + n + 1 + Next i + Ptr + 4 EndIf - If Clients()\area>=0 - areas(Clients()\area)\players-1 + Select Opcode + Case #TextFrame + If Masked + vastus$ = "" + n = 0 + For i = Ptr To Ptr + Payload - 1 + vastus$ + Chr(PeekA(*Buffer + i) ! MaskKey(n % 4)) + n + 1 + Next i + Else + vastus$ = PeekS(*Buffer + Ptr, Payload) + EndIf + rawreceive$=vastus$ + Case #PingFrame + Byte = PeekA(*Buffer) & %11110000 + PokeA(*Buffer, Byte | #PongFrame) + SendNetworkData(ClientID, *Buffer, bytesidkokku) + Case #ConnectionCloseFrame + If areas(Clients()\area)\lock=ClientID + areas(Clients()\area)\lock=0 + areas(Clients()\area)\mlock=0 + EndIf + If Clients()\area>=0 + areas(Clients()\area)\players-1 + EndIf + EndSelect + EndIf + CompilerEndIf + + sc=1 + While StringField(rawreceive$,sc,"%")<>"" + subcommand$=StringField(rawreceive$,sc,"%")+"%" + + subcommand$=ValidateChars(subcommand$) + length=Len(subcommand$) + + If ExpertLog + WriteLog(subcommand$,*usagePointer) + EndIf + + If ReplayMode=1 Or Not *usagePointer\last.s=subcommand$ And *usagePointer\ignore=0 + *usagePointer\last.s=subcommand$ + If CommandThreading + CreateThread(@HandleAOCommand(),*usagePointer) + Else + HandleAOCommand(*usagePointer) EndIf If ListSize(Plugins()) ResetList(Plugins()) While NextElement(Plugins()) pStat=#NONE - CallFunctionFast(Plugins()\gcallback,#DISC) + CallFunctionFast(Plugins()\gcallback,#DATA) CallFunctionFast(Plugins()\rawfunction,*usagePointer) + pStat=CallFunctionFast(Plugins()\gcallback,#SEND) + Select pStat + Case #SEND + ptarget$=PeekS(CallFunctionFast(Plugins()\gtarget)) + pmes$=PeekS(CallFunctionFast(Plugins()\gmessage)) + SendTarget(ptarget$,pmes$,Server) + EndSelect Wend EndIf - DeleteMapElement(Clients(),Str(ClientID)) - rf=1 EndIf - UnlockMutex(ListMutex) + sc+1 + Wend + + ElseIf length=-1 + LockMutex(ListMutex) + If FindMapElement(Clients(),Str(ClientID)) + WriteLog("CLIENT BROKE",Clients()) + If areas(Clients()\area)\lock=ClientID + areas(Clients()\area)\lock=0 + areas(Clients()\area)\mlock=0 + EndIf + If Clients()\area>=0 + areas(Clients()\area)\players-1 + EndIf + If ListSize(Plugins()) + ResetList(Plugins()) + While NextElement(Plugins()) + pStat=#NONE + CallFunctionFast(Plugins()\gcallback,#DISC) + CallFunctionFast(Plugins()\rawfunction,*usagePointer) + Wend + EndIf + DeleteMapElement(Clients(),Str(ClientID)) + rf=1 EndIf + UnlockMutex(ListMutex) EndIf - - Default - Delay(LagShield) - - EndSelect - - EndProcedure - - ;- PROGRAM START - - start: - CompilerIf #PB_Compiler_Debugger=0 - error=ErrorAddress() - If error<>lasterror - lasterror=error - public=0 - OpenFile(5,"crash.txt",#PB_File_NoBuffering|#PB_File_Append) - WriteStringN(5,"it "+ErrorMessage()+"'d at this address "+Str(ErrorAddress())+" target "+Str(ErrorTargetAddress())) - CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 - WriteStringN(5,"RAX "+ErrorRegister(#PB_OnError_RAX)) - WriteStringN(5,"RBX "+ErrorRegister(#PB_OnError_RBX)) - WriteStringN(5,"RCX "+ErrorRegister(#PB_OnError_RCX)) - WriteStringN(5,"RDX "+ErrorRegister(#PB_OnError_RDX)) - WriteStringN(5,"RBP "+ErrorRegister(#PB_OnError_RBP)) - WriteStringN(5,"RSI "+ErrorRegister(#PB_OnError_RSI)) - WriteStringN(5,"RDI "+ErrorRegister(#PB_OnError_RDI)) - WriteStringN(5,"RSP "+ErrorRegister(#PB_OnError_RSP)) - WriteStringN(5,"FLG "+ErrorRegister(#PB_OnError_Flags)) - CompilerElse - WriteStringN(5,"EAX "+ErrorRegister(#PB_OnError_EAX)) - WriteStringN(5,"EBX "+ErrorRegister(#PB_OnError_EBX)) - WriteStringN(5,"ECX "+ErrorRegister(#PB_OnError_ECX)) - WriteStringN(5,"EDX "+ErrorRegister(#PB_OnError_EDX)) - WriteStringN(5,"EBP "+ErrorRegister(#PB_OnError_EBP)) - WriteStringN(5,"ESI "+ErrorRegister(#PB_OnError_ESI)) - WriteStringN(5,"EDI "+ErrorRegister(#PB_OnError_EDI)) - WriteStringN(5,"ESP "+ErrorRegister(#PB_OnError_ESP)) - WriteStringN(5,"FLG "+ErrorRegister(#PB_OnError_Flags)) - CompilerEndIf - CloseFile(5) - LoadSettings(1) - Delay(500) - EndIf - CompilerEndIf + EndIf + + Default + Delay(LagShield) + + EndSelect - If ReceiveHTTPFile("https://raw.githubusercontent.com/stonedDiscord/serverD/master/serverd.txt","serverd.txt") - OpenPreferences("serverd.txt") - PreferenceGroup("Version") - newbuild=ReadPreferenceInteger("Build",#PB_Editor_BuildCount) - If newbuild>#PB_Editor_BuildCount - update=1 - EndIf - ClosePreferences() +EndProcedure + +;- PROGRAM START + +start: +CompilerIf #PB_Compiler_Debugger=0 + error=ErrorAddress() + If error<>lasterror + lasterror=error + public=0 + OpenFile(5,"crash.txt",#PB_File_NoBuffering|#PB_File_Append) + WriteStringN(5,"it "+ErrorMessage()+"'d at this address "+Str(ErrorAddress())+" target "+Str(ErrorTargetAddress())) + CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 + WriteStringN(5,"RAX "+ErrorRegister(#PB_OnError_RAX)) + WriteStringN(5,"RBX "+ErrorRegister(#PB_OnError_RBX)) + WriteStringN(5,"RCX "+ErrorRegister(#PB_OnError_RCX)) + WriteStringN(5,"RDX "+ErrorRegister(#PB_OnError_RDX)) + WriteStringN(5,"RBP "+ErrorRegister(#PB_OnError_RBP)) + WriteStringN(5,"RSI "+ErrorRegister(#PB_OnError_RSI)) + WriteStringN(5,"RDI "+ErrorRegister(#PB_OnError_RDI)) + WriteStringN(5,"RSP "+ErrorRegister(#PB_OnError_RSP)) + WriteStringN(5,"FLG "+ErrorRegister(#PB_OnError_Flags)) + CompilerElse + WriteStringN(5,"EAX "+ErrorRegister(#PB_OnError_EAX)) + WriteStringN(5,"EBX "+ErrorRegister(#PB_OnError_EBX)) + WriteStringN(5,"ECX "+ErrorRegister(#PB_OnError_ECX)) + WriteStringN(5,"EDX "+ErrorRegister(#PB_OnError_EDX)) + WriteStringN(5,"EBP "+ErrorRegister(#PB_OnError_EBP)) + WriteStringN(5,"ESI "+ErrorRegister(#PB_OnError_ESI)) + WriteStringN(5,"EDI "+ErrorRegister(#PB_OnError_EDI)) + WriteStringN(5,"ESP "+ErrorRegister(#PB_OnError_ESP)) + WriteStringN(5,"FLG "+ErrorRegister(#PB_OnError_Flags)) + CompilerEndIf + CloseFile(5) + LoadSettings(1) + Delay(500) + EndIf +CompilerEndIf + +If ReceiveHTTPFile("https://raw.githubusercontent.com/stonedDiscord/serverD/master/serverd.txt","serverd.txt") + OpenPreferences("serverd.txt") + PreferenceGroup("Version") + newbuild=ReadPreferenceInteger("Build",#PB_Editor_BuildCount) + If newbuild>#PB_Editor_BuildCount + update=1 EndIf + ClosePreferences() +EndIf + +CompilerIf #CONSOLE=0 + IncludeFile "gui.pb" +CompilerElse + OpenConsole() + LoadSettings(0) - CompilerIf #CONSOLE=0 - IncludeFile "gui.pb" - CompilerElse - OpenConsole() - LoadSettings(0) + killed=0 + success=CreateNetworkServer(0,Port,#PB_Network_TCP) + If success - killed=0 - success=CreateNetworkServer(0,Port,#PB_Network_TCP) - If success - - *Buffer = AllocateMemory(1024) - - WriteLog("Server started",Server) - - If public And msthread=0 - msthread=CreateThread(@MasterAdvert(),Port) - EndIf + *Buffer = AllocateMemory(1024) + + WriteLog("Server started",Server) + + If public And msthread=0 + msthread=CreateThread(@MasterAdvert(),Port) + EndIf + + If LoopMusic + CreateThread(@TrackWait(),0) + EndIf + + Repeat - If LoopMusic - CreateThread(@TrackWait(),0) - EndIf + Network(0) - Repeat - - Network(0) - - Until Quit = 1 - WriteLog("stopping server...",Server) - LockMutex(ListMutex) - ResetMap(Clients()) - While NextMapElement(Clients()) - If Clients()\ClientID - CloseNetworkConnection(Clients()\ClientID) - EndIf - DeleteMapElement(Clients()) - Wend - killed=1 - UnlockMutex(ListMutex) - CloseNetworkServer(0) - FreeMemory(*Buffer) - Else - WriteLog("server creation failed",Server) - EndIf - - CompilerEndIf + Until Quit = 1 + WriteLog("stopping server...",Server) + LockMutex(ListMutex) + ResetMap(Clients()) + While NextMapElement(Clients()) + If Clients()\ClientID + CloseNetworkConnection(Clients()\ClientID) + EndIf + DeleteMapElement(Clients()) + Wend + killed=1 + UnlockMutex(ListMutex) + CloseNetworkServer(0) + FreeMemory(*Buffer) + Else + WriteLog("server creation failed",Server) + EndIf - End +CompilerEndIf + +End ; IDE Options = PureBasic 5.31 (Windows - x86) -; CursorPosition = 827 -; FirstLine = 813 +; CursorPosition = 2332 +; FirstLine = 2326 ; Folding = --- ; EnableXP ; EnableCompileCount = 0 diff --git a/poker.ini b/poker.ini index c65b199..0737e9d 100644 --- a/poker.ini +++ b/poker.ini @@ -9,6 +9,6 @@ LoopMusic = 1 MultiChar = 1 WTCE = 1 ExpertLog = 0 -WebSockets = 0 +WebSockets = 1 LoginReply = CT#sD#got it#% LogFile = base/serverlog.log diff --git a/sD.ico b/sD.ico new file mode 100644 index 0000000000000000000000000000000000000000..57a0ad52229e5e38baef4a9e75310123b21e38bf GIT binary patch literal 4478 zcmcK632YTb7{Kvu%TZ~85;?*VS~cM?A|fUlZUiAH!~~6JM8T676-DLH2x1WxFv=M; z8V*qqG@uw1gLn}j9#8?%g0yl-Ig~?D4yFG8@9mVwvm7DuksmWVJKub>GqamUQAU&* z<>h5kW<(33C~Ag+f{3evXii=feb03ZP^HE84F3Orf3+C?t`1SOvPl$8=p99!o;)t1 zJ`%@<;$hs2+Q`QUlqcs~z!+WNbDZKgg?ke*8I$lLUcfj^z-yR+VQ7zBWW!~;38OF; z&%}%!9oI)vj=^}CV>)J|5LcriwxSeU@G~~WyxxTaIEbI%xaK_%!%>8N*pKblh|Tx` zZreI+Kru?-c=osNJoEyqbw&=+Zy`G427HY(jjgPo&+RiTf#WWSEuvhG9XJAGk765K z=WZB*^fCXYtqk8{DI9YSW??4gqX<5~v88YyT!S9yiar<&V@qK_`>%y(;bz=}_Ym?Q zi|gihUCrrP@oaQQN3_GWaE$dZ)_r*v)le0A=mO7SG3?`hI`4tF3irWv^4`w4JWOfs zFrTled)E4*DY9XXdI-wm3Py_XFCtP>q z{6;vpC$JH=t;XG`8FHtVv?u07Y5ra?W;cv`1fC`5nuT*2>bA4$j>e-?_DLoCc^^w-860`{;gp{yg`_EyMM2|DC^Wi(r1o5A$~J zscd&G-D6|^LNPpdi8B-OhLU#UJ^xQ*6O3~m-2c%q-nJERK3#AbeD8e+Q`zR)zY1dx zV>5=pd1ZvWp`^_@dwz}C3FCa`+b|E|o8ejd1itIjFa?t_DTUW_;F)urqu7FB@I5(M ze$V1U?1yp2-wyY~XRz&0?7~)*!0%jTd|&^7G5=r(h9VD@<+t6lwi3SM#udT!_j&ii zwzFY=pWpM48`j*CpXaV7F2Pe+gWq7D8Mp!u;7z;**LDn^!%LWm)U^-w)b;my+{;@~ zE##-}p4UZtJdVZK0CUeoU(`oav_V^3gl1@gi{ZSzm&$(EVJ;l&cYKCENaUxif`;gg z7ZKih`}+=bgJ;z_%KnzFSLSKh&-smolwW??<-w+`db5q0pN??hO; zQKc?bK((bFyElTD68}#j!VID$H;DAbbw* z$>;ann7a|O(sR)3gn!;Yu_Y?6XiNUBc6s7{a{M1F`X;}@A5>h2QT^M^dc5Y=)8`Pb z!@W?3_O$%%yw7;a49V~I{Is?Yx&J(Rp`Q1`SgG~U7Rqohl%d_yHpZ%o4sku?FQu(4 zZd(_Z{b*~2+Q_smjFnoi7&kdm;{Wuv)VRdh_6mQ4C+n$e@p45U?o}2W+CrH=AKOpX zMqZ!4dm_j2^*=&eaopB9E~|v`)5l96JN-Jne;6ko*LS>QT=(gHcEA7A;(Cr{hzVtC zTWUSzO2j5dOT?yLhyEwDCI8+D`KORSu_k9SUYOI_mgLGobM%DYSl|0vXEPpgmHtLn z(waeIRv8Xerj-zAj&yd8Z}no9np%Vr5PKSmS$}%EXeLzeki~E EUt0d))&Kwi literal 0 HcmV?d00001 diff --git a/serverd.html b/serverd.html index 9cd19eb..daee045 100644 --- a/serverd.html +++ b/serverd.html @@ -7,13 +7,12 @@

serverD

-

Don't hassle the hoff

+

TooT It And BooT iT

changelog

    -
  • looping music
  • -
  • /roll is more subtle
  • -
  • lag and crashes fixed
  • -
  • cleanups
  • +
  • /pos command added
  • +
  • /pm now works with usernames
  • +
  • logs show the correct area

minimal setup (console version)

@@ -66,6 +65,12 @@

commands

lets you view and switch areas

  • +

    /pos

    +
  • +
  • +

    lets you switch positions

    +
  • +
  • /switch

  • diff --git a/serverd.png b/serverd.png index d01bc5730695d912c126171773b1b3e7e23188f5..0d6437cc9af5ca267b26d0845a251dcbfa1eb953 100644 GIT binary patch delta 7260 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 Y520B%IW(WN-T(jq07*qoM6N<$f)*(w+W-In diff --git a/serverd.txt b/serverd.txt index 962f2d9..68881c8 100644 --- a/serverd.txt +++ b/serverd.txt @@ -1,4 +1,4 @@ [Version] -Compile=1040 -Build=129 +Compile=1069 +Build=130 0.0.0.0 diff --git a/shared_headers.pb b/shared_headers.pb index 73081c4..41f80e8 100644 --- a/shared_headers.pb +++ b/shared_headers.pb @@ -61,6 +61,7 @@ Structure Client ignoremc.b hack.b gimp.b + pos.s area.w last.s cconnect.b @@ -98,6 +99,6 @@ Enumeration #MOVE EndEnumeration ; IDE Options = PureBasic 5.31 (Windows - x86) -; CursorPosition = 72 -; FirstLine = 29 +; CursorPosition = 63 +; FirstLine = 32 ; EnableXP \ No newline at end of file