Changeset 7a2d453af35dcca82feb66bc4c5bdcd6352ad4e8
- Timestamp:
- 06/24/07 14:05:29 (2 years ago)
- git-parent:
- Files:
-
- src/net/driftingsouls/ds2/server/modules/ColonizeController.java (modified) (1 diff)
- src/net/driftingsouls/ds2/server/modules/NPCOrderController.java (modified) (6 diffs)
- src/net/driftingsouls/ds2/server/modules/UeberController.java (modified) (2 diffs)
- src/net/driftingsouls/ds2/server/tick/regular/NPCOrderTick.java (modified) (11 diffs)
- src/net/driftingsouls/ds2/server/tick/regular/NPCScriptTick.java (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/net/driftingsouls/ds2/server/modules/ColonizeController.java
rd0533dd r7a2d453 22 22 import java.util.Map; 23 23 24 import net.driftingsouls.ds2.server.Location;25 24 import net.driftingsouls.ds2.server.bases.Base; 26 25 import net.driftingsouls.ds2.server.cargo.Cargo; src/net/driftingsouls/ds2/server/modules/NPCOrderController.java
r283e6c7 r7a2d453 2 2 3 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.List; 4 6 import java.util.Map; 5 7 … … 11 13 import net.driftingsouls.ds2.server.config.Medals; 12 14 import net.driftingsouls.ds2.server.config.Rassen; 15 import net.driftingsouls.ds2.server.entities.FactionShopOrder; 13 16 import net.driftingsouls.ds2.server.entities.User; 14 17 import net.driftingsouls.ds2.server.framework.Common; … … 74 77 */ 75 78 public void viewTransportsAction() { 76 Database db = getDatabase();79 org.hibernate.Session db = getDB(); 77 80 TemplateEngine t = this.getTemplateEngine(); 78 81 User user = (User)this.getUser(); … … 86 89 t.set_block("_NPCORDER", "transports.listitem", "transports.list"); 87 90 88 SQLQuery aship = db.query("SELECT * FROM ships WHERE owner="+user.getID()+" AND LOCATE('#!/tm gany_transport',destcom)"); 89 while( aship.next() ) { 90 ShipTypeData ashiptype = Ship.getShipType(aship.getRow()); 91 92 t.set_var( "transport.ship", Common._plaintitle(aship.getString("name")), 93 "transport.ship.id", aship.getInt("id"), 91 List ships = db.createQuery("from Ship where owner=? and locate('#!/tm gany_transport',destcom)!=0") 92 .setEntity(0, user) 93 .list(); 94 for( Iterator iter=ships.iterator(); iter.hasNext(); ) { 95 Ship aship = (Ship)iter.next(); 96 ShipTypeData ashiptype = aship.getTypeData(); 97 98 t.set_var( "transport.ship", Common._plaintitle(aship.getName()), 99 "transport.ship.id", aship.getId(), 94 100 "transport.ship.picture", ashiptype.getPicture(), 95 101 "transport.status", "langeweile", … … 97 103 98 104 Taskmanager taskmanager = Taskmanager.getInstance(); 99 Task[] tasks = taskmanager.getTasksByData(Taskmanager.Types.GANY_TRANSPORT, "*", Integer.toString(aship.getI nt("id")), "*");105 Task[] tasks = taskmanager.getTasksByData(Taskmanager.Types.GANY_TRANSPORT, "*", Integer.toString(aship.getId()), "*"); 100 106 if( tasks.length == 0 ) { 101 107 t.parse("transports.list", "transports.listitem", true); … … 118 124 t.set_var("transport.status", status); 119 125 120 SQLResultRow order = db.first("SELECT * FROM factions_shop_orders WHERE id="+Integer.parseInt(task.getData1()));121 122 User orderuser = (User)getDB().get(User.class, order.getInt("user_id"));123 124 t.set_var("transport.assignment", order.getI nt("id")+": "+Common._title(orderuser.getName())+"<br />"+order.getString("adddata"));126 FactionShopOrder order = (FactionShopOrder)db.get(FactionShopOrder.class, Integer.parseInt(task.getData1())); 127 128 User orderuser = order.getUser(); 129 130 t.set_var("transport.assignment", order.getId()+": "+Common._title(orderuser.getName())+"<br />"+order.getAddData()); 125 131 126 132 t.parse("transports.list", "transports.listitem", true); 127 133 } 128 aship.free();129 134 } 130 135 src/net/driftingsouls/ds2/server/modules/UeberController.java
rca92ef8 r7a2d453 24 24 import java.sql.Blob; 25 25 import java.util.ArrayList; 26 import java.util.Iterator; 26 27 import java.util.List; 27 28 … … 547 548 t.set_var("show.bookmarks",1); 548 549 549 SQLQuery bookmark = db.query("SELECT id,name,x,y,system,destx,desty,destsystem,destcom,status,type FROM ships WHERE id>0 AND bookmark=1 AND owner=",user.getID()," ORDER BY id DESC"); 550 while( bookmark.next() ) { 551 ShipTypeData shiptype = Ship.getShipType( bookmark.getRow() ); 552 t.set_var( "bookmark.shipid", bookmark.getInt("id"), 553 "bookmark.shipname", bookmark.getString("name"), 554 "bookmark.location", Ships.getLocationText(Location.fromResult(bookmark.getRow()), false), 550 List bookmarks = getDB().createQuery("from Ship where id>0 and bookmark=1 and owner=? order by id desc") 551 .setEntity(0, user) 552 .list(); 553 for( Iterator iter=bookmarks.iterator(); iter.hasNext(); ) { 554 Ship bookmark = (Ship)iter.next(); 555 ShipTypeData shiptype = bookmark.getTypeData(); 556 t.set_var( "bookmark.shipid", bookmark.getId(), 557 "bookmark.shipname", bookmark.getName(), 558 "bookmark.location", Ships.getLocationText(bookmark.getLocation(), false), 555 559 "bookmark.shiptype", shiptype.getNickname(), 556 "bookmark.description", bookmark.get Int("destsystem")+":"+bookmark.getInt("destx")+"/"+bookmark.getInt("desty")+"<br />"+bookmark.getString("destcom").replace("\r\n","<br />") );560 "bookmark.description", bookmark.getDestSystem()+":"+bookmark.getDestX()+"/"+bookmark.getDestY()+"<br />"+bookmark.getDestCom().replace("\r\n","<br />") ); 557 561 t.parse("bookmarks.list","bookmarks.listitem",true); 558 562 } 559 bookmark.free();560 563 } 561 564 else if( box.equals("fleets") ) { src/net/driftingsouls/ds2/server/tick/regular/NPCOrderTick.java
r283e6c7 r7a2d453 23 23 import java.util.ArrayList; 24 24 import java.util.HashMap; 25 import java.util.Iterator; 25 26 import java.util.List; 26 27 import java.util.Map; … … 28 29 import net.driftingsouls.ds2.server.ContextCommon; 29 30 import net.driftingsouls.ds2.server.Location; 31 import net.driftingsouls.ds2.server.Offizier; 32 import net.driftingsouls.ds2.server.bases.Base; 30 33 import net.driftingsouls.ds2.server.cargo.Cargo; 31 34 import net.driftingsouls.ds2.server.cargo.Resources; … … 33 36 import net.driftingsouls.ds2.server.config.Rasse; 34 37 import net.driftingsouls.ds2.server.config.Rassen; 38 import net.driftingsouls.ds2.server.entities.Order; 39 import net.driftingsouls.ds2.server.entities.OrderOffizier; 35 40 import net.driftingsouls.ds2.server.entities.User; 36 41 import net.driftingsouls.ds2.server.framework.Common; 37 42 import net.driftingsouls.ds2.server.framework.db.Database; 38 import net.driftingsouls.ds2.server.framework.db.SQLQuery;39 import net.driftingsouls.ds2.server.framework.db.SQLResultRow;40 43 import net.driftingsouls.ds2.server.ships.Ship; 44 import net.driftingsouls.ds2.server.ships.ShipType; 41 45 import net.driftingsouls.ds2.server.ships.ShipTypeData; 42 import net.driftingsouls.ds2.server.ships.Ships;43 46 import net.driftingsouls.ds2.server.tick.TickController; 44 47 … … 55 58 private static final Location DEFAULT_LOCATION = new Location(2,30,35); 56 59 57 private int maxid;58 60 private StringBuilder pmcache; 59 61 private int lastowner; … … 63 65 @Override 64 66 protected void prepare() { 65 Database db = getContext().getDatabase();66 67 this.maxid = db.first("SELECT max(id) maxid FROM ships").getInt("maxid");68 69 this.log("maxid : "+this.maxid);70 71 67 this.pmcache = new StringBuilder(); 72 68 this.lastowner = 0; … … 108 104 @Override 109 105 protected void tick() { 110 Database db = getDatabase(); 111 112 SQLQuery data = db.query("SELECT * FROM orders WHERE tick=1 ORDER BY user"); 113 while( data.next() ) { 106 org.hibernate.Session db = getDB(); 107 Database database = getDatabase(); 108 109 List orders = db.createQuery("from Order where tick=1 order by user").list(); 110 for( Iterator iter=orders.iterator(); iter.hasNext(); ) { 111 Order order = (Order)iter.next(); 114 112 try { 115 int owner = data.getInt("user");113 int owner = order.getUser(); 116 114 User user = (User)getDB().get(User.class, owner); 117 115 … … 123 121 124 122 int type = OFFIZIERSSCHIFF; 125 if( data.getInt("type") > 0 ) {126 type = data.getInt("type");123 if( order.getType() > 0 ) { 124 type = order.getType(); 127 125 } 128 126 129 127 ShipTypeData shipd = Ship.getShipType( type, false ); 130 128 131 if( data.getInt("type") > 0 ) {132 this.log("* Order "+ data.getInt("id")+" ready: "+shipd.getNickname()+" ("+type+") wird zu User "+data.getInt("user")+" geliefert");129 if( order.getType() > 0 ) { 130 this.log("* Order "+order.getId()+" ready: "+shipd.getNickname()+" ("+type+") wird zu User "+order.getUser()+" geliefert"); 133 131 } 134 132 else { 135 this.log("* Order "+data.getInt("id")+" ready: Offizier wird mittels "+shipd.getNickname()+" ("+type+") wird zu User "+data.getInt("user")+" geliefert"); 136 } 137 138 SQLResultRow base = db.first("SELECT id,x,y,system,name FROM bases WHERE owner=",data.getInt("user")," ORDER BY id"); 133 this.log("* Order "+order.getId()+" ready: Offizier wird mittels "+shipd.getNickname()+" ("+type+") wird zu User "+order.getUser()+" geliefert"); 134 } 135 136 Base base = (Base)db.createQuery("from Base where owner=?") 137 .setEntity(0, user) 138 .setMaxResults(1) 139 .uniqueResult(); 139 140 Location loc = DEFAULT_LOCATION; 140 if( !base.isEmpty() ) { 141 loc = Location.fromResult(base); 142 } 141 if( base != null ) { 142 loc = base.getLocation(); 143 } 144 145 int id = 0; 143 146 144 147 this.log(" Lieferung erfolgt bei "+loc); 145 148 // Falls ein Schiff geordert wurde oder keine Basis fuer den Offizier existiert (und er braucht somit ein Schiff)... 146 if( (data.getInt("type") > 0) || base.isEmpty() ) { 147 this.maxid++; 148 149 if( (order.getType() > 0) || base == null ) { 149 150 Cargo cargo = new Cargo(); 150 151 cargo.addResource( Resources.DEUTERIUM, shipd.getRd()*10 ); … … 154 155 User auser = (User)getDB().get(User.class, owner); 155 156 String history = "Indienststellung am "+this.currentTime+" durch "+auser.getName()+" ("+auser.getID()+") [hide]NPC-Order[/hide]\n"; 156 157 db.prepare("INSERT INTO ships " , 158 "(id,owner,name,type,x,y,system,crew,hull,e,cargo,history) " , 159 "VALUES " , 160 "( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") 161 .update(maxid, owner, "noname", type, loc.getX(), loc.getY(), loc.getSystem(), shipd.getCrew(), shipd.getHull(), shipd.getEps(), cargo.save(), history); 157 158 Ship ship = new Ship(user); 159 ship.setName("noname"); 160 ship.setBaseType((ShipType)db.get(ShipType.class, type)); 161 ship.setX(loc.getX()); 162 ship.setY(loc.getY()); 163 ship.setSystem(loc.getSystem()); 164 ship.setCrew(shipd.getCrew()); 165 ship.setHull(shipd.getHull()); 166 ship.setEnergy(shipd.getEps()); 167 ship.setCargo(cargo); 168 ship.setHistory(history); 169 170 id = (Integer)db.save(ship); 162 171 163 172 if( shipd.getWerft().length() > 0 ) { 164 d b.update("INSERT INTO werften (shipid) VALUES ('",this.maxid,"')");173 database.update("INSERT INTO werften (shipid) VALUES ('",id,"')"); 165 174 } 166 175 } 167 176 168 177 // Es handelt sich um einen Offizier... 169 if( data.getInt("type") < 0 ) {170 SQLResultRow offizier = db.first("SELECT name,rang,ing,waf,nav,sec,com FROM orders_offiziere WHERE id=",(-data.getInt("type")));178 if( order.getType() < 0 ) { 179 OrderOffizier offizier = (OrderOffizier)db.get(OrderOffizier.class, (-order.getType())); 171 180 int special = RandomUtils.nextInt(6)+1; 172 173 String dest = "s "+this.maxid; 174 if( !base.isEmpty() ) { 175 dest = "b "+base.getInt("id"); 176 } 177 String name = this.getOffiName(user); 178 179 db.prepare("INSERT INTO offiziere ", 180 "(name,userid,rang,ing,waf,nav,sec,com,dest,spec) ", 181 "VALUES ", 182 "( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") 183 .update(name, owner, offizier.getInt("rang"), offizier.getInt("ing"), offizier.getInt("waf"), offizier.getInt("nav"), offizier.getInt("sec"), offizier.getInt("com"), dest, special); 181 182 Offizier offi = new Offizier(user, this.getOffiName(user)); 183 offi.setRang(offizier.getRang()); 184 offi.setAbility(Offizier.Ability.ING, offizier.getIng()); 185 offi.setAbility(Offizier.Ability.WAF, offizier.getWaf()); 186 offi.setAbility(Offizier.Ability.NAV, offizier.getNav()); 187 offi.setAbility(Offizier.Ability.SEC, offizier.getSec()); 188 offi.setAbility(Offizier.Ability.COM, offizier.getCom()); 189 if( base != null ) { 190 offi.setDest("b", base.getID()); 191 } 192 else { 193 offi.setDest("s", id); 194 } 195 offi.setSpecial(Offizier.Special.values()[special]); 196 197 db.persist(offizier); 184 198 185 199 // PM-Nachricht erstellen 186 200 pmcache.append("Der von ihnen bestellte "); 187 pmcache.append(offizier.get String("name"));201 pmcache.append(offizier.getName()); 188 202 pmcache.append(" wurde geliefert.\nEr befindet sich auf "); 189 203 190 if( base .isEmpty()) {204 if( base == null ) { 191 205 pmcache.append("einer "); 192 206 pmcache.append(shipd.getNickname()); … … 195 209 else { 196 210 pmcache.append("auf ihrer Basis "); 197 pmcache.append(base.get String("name"));211 pmcache.append(base.getName()); 198 212 pmcache.append(" ("); 199 pmcache.append(base.getI nt("id"));213 pmcache.append(base.getID()); 200 214 pmcache.append(") im Sektor "); 201 215 } … … 213 227 } 214 228 215 Ships.recalculateShipStatus(this.maxid); 216 217 db.update("DELETE FROM orders WHERE id=",data.getInt("id")); 229 if( id != 0 ) { 230 Ship ship = (Ship)db.get(Ship.class, id); 231 ship.recalculateShipStatus(); 232 } 233 234 db.delete(order); 218 235 } 219 236 catch( Exception e ) { 220 this.log("Order "+ data.getInt("id")+" failed: "+e);237 this.log("Order "+order.getId()+" failed: "+e); 221 238 e.printStackTrace(); 222 Common.mailThrowable(e, "NPCOrderTick Exception", "order: "+ data.getInt("id"));239 Common.mailThrowable(e, "NPCOrderTick Exception", "order: "+order.getId()); 223 240 } 224 241 } 225 data.free();226 242 227 243 if( pmcache.length() > 0 ) { … … 230 246 231 247 this.log("Verringere Wartezeit um 1..."); 232 db. update("UPDATE orders SET tick=tick-1");248 db.createQuery("update Order set tick=tick-1").executeUpdate(); 233 249 234 250 this.log("Verteile NPC-Punkte..."); 235 db. update("UPDATE users SET npcpunkte=npcpunkte+1 WHERE LOCATE('ordermenu',flags)");251 db.createQuery("update User set npcpunkte=npcpunkte+1 where locate('ordermenu',flags)!=0"); 236 252 } 237 253 src/net/driftingsouls/ds2/server/tick/regular/NPCScriptTick.java
r283e6c7 r7a2d453 19 19 package net.driftingsouls.ds2.server.tick.regular; 20 20 21 import java.io.ByteArrayOutputStream; 21 22 import java.sql.Blob; 23 import java.util.Iterator; 22 24 import java.util.List; 25 26 import org.hibernate.Hibernate; 23 27 24 28 import net.driftingsouls.ds2.server.ContextCommon; 25 29 import net.driftingsouls.ds2.server.entities.User; 26 30 import net.driftingsouls.ds2.server.framework.Common; 27 import net.driftingsouls.ds2.server.framework.db.Database;28 import net.driftingsouls.ds2.server.framework.db.PreparedQuery;29 import net.driftingsouls.ds2.server.framework.db.SQLQuery;30 31 import net.driftingsouls.ds2.server.scripting.ScriptParser; 31 32 import net.driftingsouls.ds2.server.scripting.ScriptParserContext; 33 import net.driftingsouls.ds2.server.ships.Ship; 32 34 import net.driftingsouls.ds2.server.tick.TickController; 33 35 … … 59 61 @Override 60 62 protected void tick() { 61 Database db = getContext().getDatabase();63 org.hibernate.Session db = getContext().getDB(); 62 64 this.log("Fuehre automatische NPC-Aktionen durch"); 63 65 … … 72 74 scriptparser.setLogFunction(new TickLogger()); 73 75 } 74 75 // Query zum aktuallisieren von Schiffen, die nicht via !RESETSCRIPT zurueckgesetzt wurden 76 PreparedQuery scriptExecUpdate = db.prepare("UPDATE ships SET scriptexedata=? WHERE id=? AND script IS NOT NULL"); 77 76 78 77 this.log("+++++++++ User: "+user.getID()+" +++++++++"); 79 SQLQuery ship = db.query("SELECT * FROM ships WHERE id>0 AND owner='",user.getID(),"' AND battle=0 AND script IS NOT NULL"); 80 while( ship.next() ) { 78 List ships = db.createQuery("from Ship where id>0 and owner=? and battle=0 and script is not null") 79 .setEntity(0, user) 80 .list(); 81 for( Iterator iter=ships.iterator(); iter.hasNext(); ) { 82 Ship ship = (Ship)iter.next(); 81 83 try { 82 this.log("+++ Ship "+ship.getI nt("id")+" +++");84 this.log("+++ Ship "+ship.getId()+" +++"); 83 85 84 Blob scriptExecData = ship.get Blob("scriptexedata");86 Blob scriptExecData = ship.getScriptExeData(); 85 87 if( (scriptExecData != null) && (scriptExecData.length() > 0) ) { 86 88 scriptparser.setContext( … … 89 91 } 90 92 else { 91 // Hochgradig umstaendliches erstellen eines leeren Blobs. Geht sicherlich einfacher...92 db.update("UPDATE ships SET scriptexedata='' WHERE id="+ship.getInt("id"));93 SQLQuery tmp = db.query("SELECT scriptexedata FROM ships WHERE id=",ship.getInt("id"));94 tmp.next();95 scriptExecData = tmp.getBlob("scriptexedata");96 tmp.free();97 98 93 scriptparser.setContext(new ScriptParserContext()); 99 94 } 100 95 101 scriptparser.setShip( ship .getRow());102 scriptparser.executeScript( db, ship.getString("script") );96 scriptparser.setShip( ship ); 97 scriptparser.executeScript( getDatabase(), ship.getScript() ); 103 98 104 scriptparser.getContext().toStream(scriptExecData.setBinaryStream(1)); 105 scriptExecUpdate.update(scriptExecData, ship.getInt("id")); 99 if( scriptExecData != null ) { 100 scriptparser.getContext().toStream(scriptExecData.setBinaryStream(1)); 101 } 102 else { 103 ByteArrayOutputStream out = new ByteArrayOutputStream(); 104 scriptparser.getContext().toStream(out); 105 scriptExecData = Hibernate.createBlob(out.toByteArray()); 106 } 107 108 // Pruefen, ob das Script nicht via !RESETSCRIPT geloescht wurde 109 if( ship.getScript() != null ) { 110 ship.setScriptExeData(scriptExecData); 111 } 106 112 } 107 113 catch( Exception e ) { 108 this.log("[FEHLER] Kann Script auf Schiff "+ship.getI nt("id")+" nicht ausfuehren: "+e);114 this.log("[FEHLER] Kann Script auf Schiff "+ship.getId()+" nicht ausfuehren: "+e); 109 115 e.printStackTrace(); 110 Common.mailThrowable(e, "[DS2J] NPCScriptTick Exception", "Schiff: "+ship.getI nt("id")+"\nUser: "+ship.getInt("owner"));116 Common.mailThrowable(e, "[DS2J] NPCScriptTick Exception", "Schiff: "+ship.getId()+"\nUser: "+ship.getOwner().getID()); 111 117 } 112 118 scriptparser.cleanup(); 113 119 } 114 ship.free();115 116 scriptExecUpdate.close();117 120 } 118 121 }
