public void RunCommands(List <VMArchitectureCommand> commands) { for (var i = 0; i < commands.Count; i++) { var com = commands[i]; switch (com.Type) { case VMArchitectureCommandType.WALL_LINE: VMArchitectureTools.DrawWall(this, new Point(com.x, com.y), com.x2, com.y2, com.pattern, com.style, com.level, false); break; case VMArchitectureCommandType.WALL_DELETE: VMArchitectureTools.EraseWall(this, new Point(com.x, com.y), com.x2, com.y2, com.pattern, com.style, com.level); break; case VMArchitectureCommandType.WALL_RECT: VMArchitectureTools.DrawWallRect(this, new Rectangle(com.x, com.y, com.x2, com.y2), com.pattern, com.style, com.level); break; case VMArchitectureCommandType.PATTERN_FILL: VMArchitectureTools.WallPatternFill(this, new Point(com.x, com.y), com.pattern, com.level); break; case VMArchitectureCommandType.PATTERN_DOT: VMArchitectureTools.WallPatternDot(this, new Point(com.x, com.y), com.pattern, com.x2, com.y2, com.level); break; case VMArchitectureCommandType.FLOOR_FILL: VMArchitectureTools.FloorPatternFill(this, new Point(com.x, com.y), com.pattern, com.level); break; case VMArchitectureCommandType.FLOOR_RECT: VMArchitectureTools.FloorPatternRect(this, new Rectangle(com.x, com.y, com.x2, com.y2), com.style, com.pattern, com.level); break; } } }
public int RunCommands(List <VMArchitectureCommand> commands, bool transient) { int cost = 0; //negative for sellback; int pdCount = 0; ushort pdVal = 0; VMAvatar lastAvatar = null; for (var i = 0; i < commands.Count; i++) { var com = commands[i]; var avaEnt = Context.VM.Entities.FirstOrDefault(x => x.PersistID == com.CallerUID); if ((avaEnt == null || avaEnt is VMGameObject) && !transient) { return(0); //we need an avatar to run a command from net } var avatar = (transient)? null : (VMAvatar)avaEnt; lastAvatar = avatar; var styleInd = -1; var walls = Content.Content.Get().WorldWalls; walls.WallStyleToIndex.TryGetValue(com.style, out styleInd); //if patterns are invalid, don't do anything. switch (com.Type) { case VMArchitectureCommandType.WALL_LINE: if (styleInd == -1) { break; //MUST be purchasable style } var lstyle = walls.GetWallStyle(com.style); var nwCount = VMArchitectureTools.DrawWall(this, new Point(com.x, com.y), com.x2, com.y2, com.pattern, com.style, com.level, false); if (nwCount > 0) { cost += nwCount * lstyle.Price; if (avatar != null) { Context.VM.SignalChatEvent(new VMChatEvent(avatar.PersistID, VMChatEventType.Arch, avatar.Name, Context.VM.GetUserIP(avatar.PersistID), "placed " + nwCount + " walls." )); } } break; case VMArchitectureCommandType.WALL_DELETE: var dwCount = VMArchitectureTools.EraseWall(this, new Point(com.x, com.y), com.x2, com.y2, com.pattern, com.style, com.level); if (dwCount > 0) { cost -= 7 * dwCount; if (avatar != null) { Context.VM.SignalChatEvent(new VMChatEvent(avatar.PersistID, VMChatEventType.Arch, avatar.Name, Context.VM.GetUserIP(avatar.PersistID), "erased " + dwCount + " walls." )); } } break; case VMArchitectureCommandType.WALL_RECT: if (styleInd == -1) { break; //MUST be purchasable style } var rstyle = walls.GetWallStyle(com.style); var rwCount = VMArchitectureTools.DrawWallRect(this, new Rectangle(com.x, com.y, com.x2, com.y2), com.pattern, com.style, com.level); if (rwCount > 0) { cost += rwCount * rstyle.Price; if (avatar != null) { Context.VM.SignalChatEvent(new VMChatEvent(avatar.PersistID, VMChatEventType.Arch, avatar.Name, Context.VM.GetUserIP(avatar.PersistID), "placed " + rwCount + " walls (rect)." )); } } break; case VMArchitectureCommandType.PATTERN_FILL: var pattern = GetPatternRef(com.pattern); if (pattern == null && com.pattern != 0) { break; } var pfCount = VMArchitectureTools.WallPatternFill(this, new Point(com.x, com.y), com.pattern, com.level); if (pfCount.Total > 0) { cost -= pfCount.Cost - pfCount.Cost / 5; cost += (pattern == null) ? 0 : pattern.Price * pfCount.Total; if (avatar != null) { Context.VM.SignalChatEvent(new VMChatEvent(avatar.PersistID, VMChatEventType.Arch, avatar.Name, Context.VM.GetUserIP(avatar.PersistID), "pattern filled " + pfCount + " walls with pattern #" + com.pattern )); } } break; case VMArchitectureCommandType.PATTERN_DOT: var pdpattern = GetPatternRef(com.pattern); if (pdpattern == null && com.pattern != 0) { break; } var dot = VMArchitectureTools.WallPatternDot(this, new Point(com.x, com.y), com.pattern, com.x2, com.y2, com.level); pdVal = com.pattern; if (dot.Total > -1) { cost -= dot.Cost - dot.Cost / 5; cost += (pdpattern == null) ? 0 : pdpattern.Price; pdCount++; } break; case VMArchitectureCommandType.FLOOR_FILL: var ffpattern = GetFloorRef(com.pattern); if (ffpattern == null && com.pattern != 0) { break; } var ffCount = VMArchitectureTools.FloorPatternFill(this, new Point(com.x, com.y), com.pattern, com.level); if (ffCount.Total > 0) { cost -= (ffCount.Cost - ffCount.Cost / 5) / 2; cost += (ffpattern == null) ? 0 : ffpattern.Price * ffCount.Total / 2; if (avatar != null) { Context.VM.SignalChatEvent(new VMChatEvent(avatar.PersistID, VMChatEventType.Arch, avatar.Name, Context.VM.GetUserIP(avatar.PersistID), "floor filled " + ffCount.Total / 2f + " with pattern #" + com.pattern )); } } break; case VMArchitectureCommandType.FLOOR_RECT: var frpattern = GetFloorRef(com.pattern); if (frpattern == null && com.pattern != 0) { break; } var frCount = VMArchitectureTools.FloorPatternRect(this, new Rectangle(com.x, com.y, com.x2, com.y2), com.style, com.pattern, com.level); if (frCount.Total > 0) { cost -= (frCount.Cost - frCount.Cost / 5) / 2; cost += (frpattern == null) ? 0 : frpattern.Price * frCount.Total / 2; if (avatar != null) { Context.VM.SignalChatEvent(new VMChatEvent(avatar.PersistID, VMChatEventType.Arch, avatar.Name, Context.VM.GetUserIP(avatar.PersistID), "placed " + frCount.Total / 2f + " tiles with pattern #" + com.pattern )); } } break; } } if (lastAvatar != null && pdCount > 0) { Context.VM.SignalChatEvent(new VMChatEvent(lastAvatar.PersistID, VMChatEventType.Arch, lastAvatar.Name, Context.VM.GetUserIP(lastAvatar.PersistID), "pattern dotted " + pdCount + " walls with pattern #" + pdVal )); } return(cost); }