From ef78f2d0f69ac9d6f9438fbb9b939705f5ce9117 Mon Sep 17 00:00:00 2001 From: Regalis Date: Sun, 14 Feb 2016 22:22:24 +0200 Subject: [PATCH] Husk improvements, option for admin to talk to dead players, spectators or one specific player, entitygrid bugfix --- Subsurface/Content/Characters/Husk/husk.xml | 16 +++---- Subsurface/Content/Items/Weapons/weapons.xml | 2 +- .../Source/Characters/AI/EnemyAIController.cs | 8 ++++ .../Characters/Animation/AnimController.cs | 3 ++ .../Animation/FishAnimController.cs | 3 -- .../Animation/HumanoidAnimController.cs | 4 +- Subsurface/Source/Characters/Character.cs | 25 +++++++---- Subsurface/Source/Characters/CharacterInfo.cs | 2 + Subsurface/Source/Map/EntityGrid.cs | 9 ++-- Subsurface/Source/Networking/GameServer.cs | 39 +++++++++++++++--- Subsurface/Source/Networking/ServerLog.cs | 2 +- Subsurface_Solution.v12.suo | Bin 846336 -> 846336 bytes 12 files changed, 81 insertions(+), 32 deletions(-) diff --git a/Subsurface/Content/Characters/Husk/husk.xml b/Subsurface/Content/Characters/Husk/husk.xml index 137bd0eeb..47e6bd822 100644 --- a/Subsurface/Content/Characters/Husk/husk.xml +++ b/Subsurface/Content/Characters/Husk/husk.xml @@ -1,12 +1,14 @@  - + - + legtorque="15.0" + thightorque="-5.0" + walkspeed="2.0" + swimspeed="2.0"> @@ -78,18 +80,18 @@ - + - + - diff --git a/Subsurface/Content/Items/Weapons/weapons.xml b/Subsurface/Content/Items/Weapons/weapons.xml index 6a2794628..f9d079e81 100644 --- a/Subsurface/Content/Items/Weapons/weapons.xml +++ b/Subsurface/Content/Items/Weapons/weapons.xml @@ -109,7 +109,7 @@ - + diff --git a/Subsurface/Source/Characters/AI/EnemyAIController.cs b/Subsurface/Source/Characters/AI/EnemyAIController.cs index 233f6e223..6507992cc 100644 --- a/Subsurface/Source/Characters/AI/EnemyAIController.cs +++ b/Subsurface/Source/Characters/AI/EnemyAIController.cs @@ -107,6 +107,14 @@ namespace Barotrauma Character.AnimController.IgnorePlatforms = (-Character.AnimController.TargetMovement.Y > Math.Abs(Character.AnimController.TargetMovement.X)); + if (Character.AnimController is HumanoidAnimController) + { + if (Math.Abs(Character.AnimController.TargetMovement.X) > 0.1f && !Character.AnimController.InWater) + { + Character.AnimController.TargetDir = Character.AnimController.TargetMovement.X > 0.0f ? Direction.Right : Direction.Left; + } + } + if (updateTargetsTimer > 0.0) { updateTargetsTimer -= deltaTime; diff --git a/Subsurface/Source/Characters/Animation/AnimController.cs b/Subsurface/Source/Characters/Animation/AnimController.cs index 551b0c245..e86eba7a6 100644 --- a/Subsurface/Source/Characters/Animation/AnimController.cs +++ b/Subsurface/Source/Characters/Animation/AnimController.cs @@ -43,6 +43,9 @@ namespace Barotrauma stepSize = ToolBox.GetAttributeVector2(element, "stepsize", Vector2.One); stepSize = ConvertUnits.ToSimUnits(stepSize); + walkSpeed = ToolBox.GetAttributeFloat(element, "walkspeed", 1.0f); + swimSpeed = ToolBox.GetAttributeFloat(element, "swimspeed", 1.0f); + //stepOffset = ToolBox.GetAttributeVector2(element, "stepoffset", Vector2.One); //stepOffset = ConvertUnits.ToSimUnits(stepOffset); diff --git a/Subsurface/Source/Characters/Animation/FishAnimController.cs b/Subsurface/Source/Characters/Animation/FishAnimController.cs index 91162eaf5..9b8b81393 100644 --- a/Subsurface/Source/Characters/Animation/FishAnimController.cs +++ b/Subsurface/Source/Characters/Animation/FishAnimController.cs @@ -31,9 +31,6 @@ namespace Barotrauma flip = ToolBox.GetAttributeBool(element, "flip", false); - walkSpeed = ToolBox.GetAttributeFloat(element, "walkspeed", 1.0f); - swimSpeed = ToolBox.GetAttributeFloat(element, "swimspeed", 1.0f); - float footRot = ToolBox.GetAttributeFloat(element,"footrotation", float.NaN); if (float.IsNaN(footRot)) { diff --git a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs index e7b2e5813..c47a903c9 100644 --- a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs @@ -241,7 +241,7 @@ namespace Barotrauma float footMid = waist.SimPosition.X;// (leftFoot.SimPosition.X + rightFoot.SimPosition.X) / 2.0f; - movement = MathUtils.SmoothStep(movement, TargetMovement, movementLerp); + movement = MathUtils.SmoothStep(movement, TargetMovement*walkSpeed, movementLerp); movement.Y = 0.0f; for (int i = 0; i < 2; i++) @@ -502,7 +502,7 @@ namespace Barotrauma if (TargetMovement == Vector2.Zero) return; - movement = MathUtils.SmoothStep(movement, TargetMovement, 0.3f); + movement = MathUtils.SmoothStep(movement, TargetMovement*swimSpeed, 0.3f); //dont try to move upwards if head is already out of water if (surfaceLimiter > 1.0f && TargetMovement.Y > 0.0f) diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 485007862..51fc5f421 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -391,7 +391,10 @@ namespace Barotrauma Properties = ObjectProperty.GetProperties(this); - Info = characterInfo==null ? new CharacterInfo(file) : characterInfo; + if (file == humanConfigFile) + { + Info = characterInfo == null ? new CharacterInfo(file) : characterInfo; + } XDocument doc = ToolBox.TryLoadXml(file); if (doc == null || doc.Root == null) return; @@ -453,22 +456,26 @@ namespace Barotrauma } } - if (Info.PickedItemIDs.Any()) + if (file == humanConfigFile) { - for (ushort i = 0; i < Info.PickedItemIDs.Count; i++ ) + if (Info.PickedItemIDs.Any()) { - if (Info.PickedItemIDs[i] == 0) continue; + for (ushort i = 0; i < Info.PickedItemIDs.Count; i++ ) + { + if (Info.PickedItemIDs[i] == 0) continue; - Item item = FindEntityByID(Info.PickedItemIDs[i]) as Item; + Item item = FindEntityByID(Info.PickedItemIDs[i]) as Item; - System.Diagnostics.Debug.Assert(item != null); - if (item == null) continue; + System.Diagnostics.Debug.Assert(item != null); + if (item == null) continue; - item.Pick(this, true, true, true); - inventory.TryPutItem(item, i, false); + item.Pick(this, true, true, true); + inventory.TryPutItem(item, i, false); + } } } + AnimController.FindHull(null); if (AnimController.CurrentHull != null) Submarine = AnimController.CurrentHull.Submarine; diff --git a/Subsurface/Source/Characters/CharacterInfo.cs b/Subsurface/Source/Characters/CharacterInfo.cs index 09c967ca6..ab8e073b8 100644 --- a/Subsurface/Source/Characters/CharacterInfo.cs +++ b/Subsurface/Source/Characters/CharacterInfo.cs @@ -132,6 +132,8 @@ namespace Barotrauma return; } + name = ""; + if (doc.Root.Element("name") != null) { string firstNamePath = ToolBox.GetAttributeString(doc.Root.Element("name"), "firstname", ""); diff --git a/Subsurface/Source/Map/EntityGrid.cs b/Subsurface/Source/Map/EntityGrid.cs index f4524c3c1..c0aef6943 100644 --- a/Subsurface/Source/Map/EntityGrid.cs +++ b/Subsurface/Source/Map/EntityGrid.cs @@ -32,16 +32,17 @@ namespace Barotrauma Rectangle rect = entity.Rect; //if (Submarine.Loaded != null) rect.Offset(-Submarine.HiddenSubPosition); Rectangle indices = GetIndices(rect); - if (indices.X < 0 || indices.Width >= entities.GetLength(0) || - indices.Y < 0 || indices.Height >= entities.GetLength(1)) + + if (indices.Width < 0 || indices.X >= entities.GetLength(0) || + indices.Height < 0 || indices.Y >= entities.GetLength(1)) { DebugConsole.ThrowError("Error in EntityGrid.InsertEntity: " + entity + " is outside the grid"); return; } - for (int x = indices.X; x <= indices.Width; x++) + for (int x = Math.Max(indices.X, 0); x <= Math.Min(indices.Width, entities.GetLength(0)); x++) { - for (int y = indices.Y; y <= indices.Height; y++) + for (int y = Math.Max(indices.Y,0); y <= Math.Min(indices.Height, entities.GetLength(1)); y++) { entities[x, y].Add(entity); } diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index d4b9647db..1c5870cbb 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -882,6 +882,9 @@ namespace Barotrauma.Networking GameMain.GameScreen.Select(); + + AddChatMessage("Press TAB to chat. Use ''/d'' to talk to dead players and spectators, and ''/playername'' to only send the message to a specific player.", ChatMessageType.Server); + yield return CoroutineStatus.Success; } @@ -1267,17 +1270,43 @@ namespace Barotrauma.Networking public override void SendChatMessage(string message, ChatMessageType type = ChatMessageType.Server) { - AddChatMessage(message, type); - - if (server.Connections.Count == 0) return; + string[] words = message.Split(' '); List recipients = new List(); + Client targetClient = null; - foreach (Client c in ConnectedClients) + if (words.Length > 2) { - if (type!=ChatMessageType.Dead || (c.Character != null && c.Character.IsDead)) recipients.Add(c); + if (words[1] == "/dead" || words[1] == "/d") + { + type = ChatMessageType.Dead; + } + else + { + targetClient = ConnectedClients.Find(c => + words[0] == "/" + c.name.ToLower() || + c.Character != null && words[0] == "/" + c.Character.Name.ToLower()); + } + + message = words[0] + " " + string.Join(" ", words, 2, words.Length - 2); } + if (targetClient != null) + { + recipients.Add(targetClient); + } + else + { + foreach (Client c in ConnectedClients) + { + if (type != ChatMessageType.Dead || (c.Character != null && c.Character.IsDead)) recipients.Add(c); + } + } + + AddChatMessage(message, type); + + if (!server.Connections.Any()) return; + foreach (Client c in recipients) { ReliableMessage msg = c.ReliableChannel.CreateMessage(); diff --git a/Subsurface/Source/Networking/ServerLog.cs b/Subsurface/Source/Networking/ServerLog.cs index dc9a8881d..5accd96ee 100644 --- a/Subsurface/Source/Networking/ServerLog.cs +++ b/Subsurface/Source/Networking/ServerLog.cs @@ -9,7 +9,7 @@ namespace Barotrauma.Networking { class ServerLog { - const int LinesPerFile = 500; + const int LinesPerFile = 300; const string SavePath = "ServerLogs"; diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 24f2594e4a96c781b48a950c90db38ff7fd574ba..f9fca93467d47ef1f6eff0a58c11fc0400d106a2 100644 GIT binary patch delta 5541 zcmd6r2~<_p8prP*E_VXCjDiTB@G2-y43fGKFHYeQ;6xLe;%p>ZP|jS`vDyJwIEW&KI!TYrf^J z88>pZh0J7O>U0?;ui#P3WL~6-mf_$*um}W!9N+^4dLGQwIAeClJunx*bsrc9?#5uf zpuIr?2n0#Mi1)rxcNoLiDfI(mbMLp|8v}NL5}sq6w(iIiV}F^Ijg^=K^@#atbQP3xdQkg)|a5|z1HXisoIu%O)nVt%3(@5Cw6Peew0;Jyo723D{h^v7#y(A8)jg<!Dn894wo>rm4IT7}vr;0vR{@C395{(aEfP&Xa?4dr{F)$kn!39xgadT(j4d%zwI zZ4PSChm%fXVybIIWKE=hgZSe?MISdC)MJ?2Ul-IiHxtx#G}%vtHAPg9$iIr{dCd6t zBHDnJ|9(Wt)l)cB_jfI7l0yzfS(c!q0&rRlb;kQ8z`7H08wTdUo~w>@Mk&itI)u{a z&@RxIp`So!LOVd!wN546ihUaj$5&tvxD6}@E8!ono^&>kScX@-qf`!WA?%jWm!R)K zLzx=51wKRlcBl(F82TJDsPCkN`k#mWBYbCp0yZ0I-Zs`&b$bxF-aBof z1MtEFARm=k&>I7(PvyTB$WRRbn}O7~^WO<%U+mJK6v%*o4y1vqUNCp3%Ei{;nzW4S z*(Gz7^-4A4q@0lz>MkB@Oh8tCMg6`mh8&;Bdg8B`lWUR>e$+}WPnP7Um22e;%#e2U z;X&%?zyR%Ht?a-ml=D_iX~s@4)ulLU9F3QKH6>V_V6}FpgsA1crRGTH^^9E6%%M64 zDb%+e>q2?aEW@mC*PQFSq>IrkU7ri(wPWcP_An}E-S|Q~)?vNUfrXHAl&@{-VfKwL z9OW722jI%T!JYR$Z|c}*GIs58pg&V7Wg_oQmFF!TwA}uz%BCtISZSpk&Q_^2Q`>24 zD&;(;DZ?4JYmpy`Mz&s=z(O=-KbA|?d(4TXyloB9(p>CN%&$wWeSs-bQ|k4XTp`S% zIkvERR(pvlTrFRPcx+|$zO_dV~U(c^CCk-C+KRp!9gzM(x5aYTkh&HlGULVbfLbZT{NA1~xZTV`sz_ zR+5J~{J<`E*OX078~$=_wyLKcFM-Pv@avN+b2#V`A4$~>&A#NL5- z?XWlut5ss$X#IX%wSDAQ%Aj`L=+50mgz1ps!VbhM~(% z>PvpDSf=`}UyOSycepzkIgQz3>8bTx&UYEfwTMM(k+rOWu}QR}jHhYoWxU!?V;tSa^8k58WEc&=QSG3hhya2amHyw-nywnP4-~(gJQ)GkQvL7BVw!@54hWAz9u|DWRg5=1G<*Ok@6{ zmDH2E<`{>>kzypDI2MU@M7PFlXmp;bF{4g>#WpoCm!mc|T>fYbguG zYd)nLgp*}c%5k1buC1mP_GJg2-PkXuq4;juxhB8g*b_}F(B9a9)gd>sBjPUFR&8pl zxt0r85T*Fq+K_#v*-ML=F9tH->>}Tw&9VFDHXQPq_rSsa>gt?OYPFL4(1ryflZI?J zHK);gF?Q4@@xD=YrQ+u#>z;FH*Jou^xJDG*L{F<3MZRVlNaagSf!e73d?#+{KHO6GUdi2c z!d#joU$md^{P{zPmydVqy0J%8$$%Csu7>cP9NCen{!4@H6;r*F-|%dHaL+q)=l>8> z=V+=oO_?*kN7jQyRG1>}DqUjor@@uxNZ+k{$4$GSxR-qJ(-$Y7S>Kt8d$J&(2MvlL z+Azb=&5&qlN4<{of$F*Yy(s-vTh-N+gFQbcJSIx{-V#soN5yV?;>3Gj+H>Wh+?f%Xh`hH@+Tns2TXL$3u;QZhkROZE zW4w@d3>3Yo%cG_)+J$4>2ghoo45#v^y;^HdCq{SI+8A5jG#zqkww+YD+LS;=jpkr& z@MyWk)O3AENhJMjDlB9Pl+lv~)8KpXaWi&`T*YduMIpO7$O)4rl1|r%Fmj#MukKV? zA3)A#A_ceF%S@H|Ud`x^ZZg}vcgcnk19M$HA^Z-Ls%2?0Fy+_P6Nj4tjTzj43d|^&MRPpby+Xf;iaG@b8081Rn!E zO+N!24u1)BGBg=vgV|_fgH8h-K_lvWfppkIq4Pi=*mpwjg-!x5;ZH_CZlHq6(x>Yp zRD2G4pyCl|Dzq9eOo47kc@75953D|kEciZzFIKHu6kxdkORw2W3_rwlZnCtyS4uMt zsW8Pllv}>smiy)DhKa>rH-BUPhrQ9uFP{S!M&T#Ngw#ADQEp`H>1)Szjr6e6XokJ2 z<46u}X>|unUYaG~sg@@M`6pQ0)46h-gQny;biS-ZCfO=a_?E7fF3W7wZO6sgThBdt zHFd07E5|aL{uPVRBDUJr;P-1QZ-E@qmI^0(-KyQXU%biOb<$dTNn(H;4Eg_l4)kFE zRp(&H&71@M4BT)Iu&Mh0AM}a+{QSnLC>?6_7$b0Ya_IG;#){%{JIxqoeAL|_Ia{cw z?va!pEu!t7+^4f&c`CJ}n@Hc+{>tj}S8r&i9?YA{^1ZAYz5<>2+xvWb z?{DvOpx{Vy!I9(zEy+~eDl&vjCQ~f%2BoMB6DCuS;vr$QdgGK!WWM0lxnEapqL@id z%ddzy5{pS|EOW@LO_cF+EIMdQWS%1ig=mcM1elL<2s9V?0R{CFCatyk(dOUd_c$If z7Up4~H_Dx$8K4aa1|5MJUD{~7%#jqKeQXZ1HAj62?7KjT$TgcvMmEm86_qcQSb~kf zLM^=z*l^8ypisr(!3dSSh8%*^;{uiN5eec^~Lp?G1iX7_W__gY)O z-XX(%O{Sq>7%==t7+PE$q^}9Lr_IkcH(MkC_JBQP7XTG|&-v!7c8v4Cv4bjzKU?1{OHFKvR_Og}pQMb<~ZZpGA2B7zPf(cAwz! z<3wnyq3}z9Ef{nM!%;W<&!IdNWP#^_hCWTu_9AZ{Ct_(Y9~~zWwSss@xg)Sv`O%t< zFuJ0Pv1Ud_G^QV~S!=ZamTP70I zTHEy4{I)QjhOr8~i}DN5BIujoLvTOp$3X>n7Q7DzfNHcAK^H(jgPsIdlxv~o;0*XH zXbHXsOTiat-wr(m?Ezg)Chc%~M6i)2e}}Ct0#>1~V;|ky$fW(ty zF0#^N@RA8%Z5xraB*^$9KSl~pz^qC0Gl zgGqSKK3Zo}4iz1^Oe(5_zY*9m6fePF8YyO%VAdl$W2o8zVyWaD1A|+{R8U{`g*GYFI(e*Gc9Y&I!Ye*Gi1ouvscWW($mGeU7%|0kt zDHlVJyKVTqFj++7IeoRbPph2i)F*VIjlQ~CBI>9l*|ExzO?KT8s?;L>Nlx84g06+> z>KL?g*}Ik$RuB4w>%9u-P$H{E##Gy2suk-=mCMyCp_O)qX%m)2D{v$GUlhhT5h!h; zTK|gHiYheKaM@4SNLQaB47;qC2-btE$<|0$%V3}xTzHr!YPM~G`m9=dIzp!kiWRHW z@2CT-9Yq57NtSUpCfiY9j+3!vQyXrZ*AQ%5nTfw^K?#~;cVEs+6BhoAAHxP|^|mB=TpGy}6pF!uiOPknOq9GBQ1q^lXq zYSQ)wC)wg`Cesd_3**OyMV3T8F-IJw`YT}o7Nw#B`?g9QC@|?yl{#{FCPZ*t){NH<|Pc)U&k108gys^JWEeZ+k=vkOf_^B!0o?=) z#{=-O!}gW-ygjbZ11JT-l7(-P@$iU8Jqx@8+X&F}X0OZ8Az&bQ3siz+w6}w%f^oo# zem)un#ELPbIRYFBr(t{$TmvU?;je;rfm1K24>TSR{RCw#Hz0h_LX36{%!J_r=m3Xv z==4X}%2D4B{Q%kq_E(?}LCawK3wRZ@K>Z@L7qkO(Ff}FkxBk?l0&QokM(&|BRl~L7~+T={)(oq8W z&_+Q%92dgVUh%oHK@rCK{?rCt)Y{q;|Lg7;+k5A`V|=Il;@vR7c5i?LOlI#g8OXu4&%Xl;U2$E`OsXED+}r7 z`F+A_aj)_5;xpr9BxQ49mXg7_t*n9iA2um#iDq$Ox-y7+CnyR2Nh#;f?wNjk#kzTa zS``xz!W;L?5N^?dY`kQWmycdqCtc*WNnhP}i*m)+-A*`lXEoj%9)ZhXh9caPjRo0{ zdyor9d$rTsRmpwisa7oHt`B`toi&>mM=7uR$7J~yj{E3B-OA+TL-9SkYQ+U1JSbXO z>J;lR5d6vd5q2wmWj-!DU(5o0dITVxP{%QxQz$Y2}Q2iE!zz6H29b{WUy{uHzm| z6LD5rj@QD<+g=TMY2wDEcNqoC3bd`cy}gqt@?0fBxlBt$C*AeAQW@uIF9jFa2(xP> zYrH)hq@V>%WVDCN%4qJh+`E;1;;DoE4_%s2*?r;ckuzg1y~Gn=qbPk)sa#GpndwQT z8*iB8)rkAekdIoHt(mr_h2PGH>!0G8DTz16_#j0($kU3Jo*KliLbCAoOcB9t>`KoY z!BpCnbmEM)GKx!I^orA6F5}?^qa*?wg)5(D?Dy`W_ZTcUd8fRFvvvY^&mi0@EueLv z0Oi@R_kr4g2{Z;4&=Cv}oZ^g(w|Mu`ZJ$=i$e6l75D(rEk&}uRoT(x_w^%lzeV!3iap8`)F|^* zVn)|>JN>>|^Q7psgbSA``JTnn!hvmkn(>8FtK-%a*Au;XGjo^8N^u;R$%NLSJD|O;s zvqjeUd#V)in`NM}Qw=iEsQ#}RXk_oNk%4`U46J`g{+kRmz8H+p3?tZ|lYzN{YgsyY z<4l3~N{YO0U$kvd^85b9+tRm=txCBo_B|f5Paq@T#H-@5cCwRwY4-`MGw*-oz0_S> z@BQWr^Md+3($tBPkGGQvo@(jS@Jhxj!#!2b@V_?uVAI<7x_rEU-*?+KCvW3}`AUfH znJNd6r&fxRe)#vn&?s$3Op2c8G8Yl$ae9jE&y{f^N}qH}K1VF(dj)fFhPkCB5^G@m zd-7J2P!>kz7=u2B-7mAdnCRHcmIvFY1K{VI?qaA2427$Sb!Dy M0AJmC)>fnZ6O)p)zW@LL