mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-22 12:05:51 -04:00
Only create portals block tabe when required.
This commit is contained in:
parent
1b6fecc7d4
commit
0436384446
@ -90,19 +90,26 @@ namespace MCGalaxy.Commands.Building {
|
||||
RevertAndClearState(p, x, y, z);
|
||||
PortalData bp = (PortalData)p.blockchangeObject;
|
||||
|
||||
foreach (PortalPos pos in bp.entries) {
|
||||
foreach (PortalPos P in bp.entries) {
|
||||
//safe against SQL injections because no user input is given here
|
||||
DataTable Portals = Database.Fill("SELECT * FROM `Portals" + pos.mapName +
|
||||
"` WHERE EntryX=@0 AND EntryY=@1 AND EntryZ=@2", pos.x, pos.y, pos.z);
|
||||
Portals.Dispose();
|
||||
string lvlName = P.mapName;
|
||||
object locker = ThreadSafeCache.DBCache.Get(lvlName);
|
||||
|
||||
string syntax = Portals.Rows.Count == 0 ?
|
||||
"INSERT INTO `Portals" + pos.mapName + "` (EntryX, EntryY, EntryZ, ExitX, ExitY, ExitZ, ExitMap) VALUES (@0, @1, @2, @3, @4, @5, @6)"
|
||||
: "UPDATE `Portals" + pos.mapName + "` SET ExitMap=@6, ExitX=@3, ExitY=@4, ExitZ=@5 WHERE EntryX=@0 AND EntryY=@1 AND EntryZ=@2";
|
||||
Database.Execute(syntax, pos.x, pos.y, pos.z, x, y, z, p.level.name);
|
||||
lock (locker) {
|
||||
Database.Execute(String.Format(LevelDB.createPortals, lvlName));
|
||||
|
||||
if (pos.mapName == p.level.name)
|
||||
p.SendBlockchange(pos.x, pos.y, pos.z, bp.type);
|
||||
int count = 0;
|
||||
string syntax = "SELECT * FROM `Portals" + lvlName + "` WHERE EntryX=@0 AND EntryY=@1 AND EntryZ=@2";
|
||||
using (DataTable portals = Database.Fill(syntax, P.x, P.y, P.z))
|
||||
count = portals.Rows.Count;
|
||||
|
||||
syntax = count == 0 ?
|
||||
"INSERT INTO `Portals" + lvlName + "` (EntryX, EntryY, EntryZ, ExitX, ExitY, ExitZ, ExitMap) VALUES (@0, @1, @2, @3, @4, @5, @6)"
|
||||
: "UPDATE `Portals" + lvlName + "` SET ExitMap=@6, ExitX=@3, ExitY=@4, ExitZ=@5 WHERE EntryX=@0 AND EntryY=@1 AND EntryZ=@2";
|
||||
Database.Execute(syntax, P.x, P.y, P.z, x, y, z, p.level.name);
|
||||
}
|
||||
if (P.mapName == p.level.name)
|
||||
p.SendBlockchange(P.x, P.y, P.z, bp.type);
|
||||
}
|
||||
|
||||
Player.Message(p, "&3Exit %Sblock placed");
|
||||
|
@ -103,7 +103,6 @@ namespace MCGalaxy {
|
||||
|
||||
public static void CreateTables(string givenName) {
|
||||
Database.Execute(String.Format(createBlock, givenName, Server.useMySQL ? "BOOL" : "INT"));
|
||||
Database.Execute(String.Format(createPortals, givenName));
|
||||
}
|
||||
|
||||
internal static void LoadZones(Level level, string name) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user