Changeset 29cd7e556b5d55b0badc5d042c8e0d338d699645

Show
Ignore:
Timestamp:
07/07/07 17:38:16 (1 year ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1183822696 +0200
git-parent:

[c5d039ae408ffbfb7eb82de712e25e6724fb0bb7]

git-author:
Christopher Jung <bktheg@web.de> 1183822696 +0200
Message:

Entity fuer weaponfactory eingebaut

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • db/updates.xml

    r8e3cf9b r29cd7e5  
    317317                        DROP `remaining`; 
    318318        ]]></update> 
     319        <update type="structure" datum="2007-07-01"><![CDATA[ 
     320                ALTER TABLE `weaponfactory` DROP `id`; 
     321                ALTER TABLE `weaponfactory` ADD PRIMARY KEY ( `col` ); 
     322                ALTER TABLE `weaponfactory` DROP INDEX `col`; 
     323        ]]></update> 
    319324</updates> 
  • src/net/driftingsouls/ds2/server/bases/Waffenfabrik.java

    rc5d039a r29cd7e5  
    4242import net.driftingsouls.ds2.server.entities.Ammo; 
    4343import net.driftingsouls.ds2.server.entities.User; 
     44import net.driftingsouls.ds2.server.entities.WeaponFactory; 
    4445import net.driftingsouls.ds2.server.framework.Common; 
    4546import net.driftingsouls.ds2.server.framework.Configuration; 
    4647import net.driftingsouls.ds2.server.framework.Context; 
    4748import net.driftingsouls.ds2.server.framework.ContextMap; 
    48 import net.driftingsouls.ds2.server.framework.db.Database; 
    4949import net.driftingsouls.ds2.server.framework.db.SQLResultRow; 
    5050import net.driftingsouls.ds2.server.framework.templates.TemplateEngine; 
    5151 
     52import org.apache.commons.lang.ArrayUtils; 
    5253import org.apache.commons.lang.StringEscapeUtils; 
    53 import org.apache.commons.lang.StringUtils; 
    5454 
    5555class Waffenfabrik extends DefaultBuilding { 
     
    7474        private String loaddata( Base base ) { 
    7575                Context context = ContextMap.getContext(); 
    76                 Database database = context.getDatabase(); 
    7776                org.hibernate.Session db = context.getDB(); 
    7877                 
     
    148147                        } 
    149148                         
    150                         SQLResultRow wf = database.first( "SELECT produces FROM weaponfactory WHERE col=",base.getID()); 
    151                         if( wf.isEmpty() ) { 
     149                        WeaponFactory wf = (WeaponFactory)db.get(WeaponFactory.class, base.getID()); 
     150                        if( wf == null ) { 
    152151                                LOG.warn("Basis "+base.getID()+" verfuegt ueber keinen Waffenfabrik-Eintrag, obwohl es eine Waffenfabrik hat"); 
    153                         } 
    154                         String[] plist = StringUtils.split(wf.getString("produces"), ';'); 
     152                                return "Basis "+base.getID()+" verfuegt ueber keinen Waffenfabrik-Eintrag, obwohl es eine Waffenfabrik hat"; 
     153                        } 
     154                        WeaponFactory.Task[] plist = wf.getProduces(); 
    155155                        for( int i=0; i < plist.length; i++ ) { 
    156                                 String[] tmp = StringUtils.split(plist[i],'='); 
    157                                 Ammo ammo = (Ammo)db.get(Ammo.class, Integer.parseInt(tmp[0])); 
    158                                 int count = Integer.parseInt(tmp[1]); 
     156                                Ammo ammo = plist[i].getAmmo(); 
     157                                int count = plist[i].getCount(); 
    159158                                 
    160159                                if( ammo == null ) { 
    161                                         plist[i] = ""; 
     160                                        plist = (WeaponFactory.Task[])ArrayUtils.remove(plist, i); 
     161                                        i--; 
    162162                                        continue; 
    163163                                } 
     
    170170                                } 
    171171                                else if( (count > 0) && !thisammolist.contains(ammo) ) { 
    172                                         plist[i] = "";   
     172                                        plist = (WeaponFactory.Task[])ArrayUtils.remove(plist, i); 
     173                                        i--; 
    173174                                } 
    174175                        } 
     
    176177                        if( ok ) { 
    177178                                for( int i=0; i < plist.length; i++  ) { 
    178                                         if( plist[i].length() == 0 ) { 
    179                                                 continue; 
    180                                         } 
    181                                         String[] tmp = StringUtils.split(plist[i],'='); 
    182                                         Ammo ammo = (Ammo)db.get(Ammo.class,Integer.parseInt(tmp[0])); 
    183                                         int count = Integer.parseInt(tmp[1]); 
     179                                        Ammo ammo = plist[i].getAmmo(); 
     180                                        int count = plist[i].getCount(); 
    184181                                         
    185182                                        if( !vars.usedcapacity.containsKey(base.getID()) ) { 
     
    214211                super.build(base); 
    215212                 
    216                 Database db = ContextMap.getContext().getDatabase(); 
    217                  
    218                 SQLResultRow wfentry = db.first("SELECT id FROM weaponfactory WHERE col="+base.getID()); 
    219                 if( !wfentry.isEmpty() ) { 
    220                         db.update("UPDATE weaponfactory SET count=count+1 WHERE id=",wfentry.getInt("id")); 
     213                org.hibernate.Session db = ContextMap.getContext().getDB(); 
     214                WeaponFactory wf = (WeaponFactory)db.get(WeaponFactory.class, base.getID()); 
     215                 
     216                if( wf != null ) { 
     217                        wf.setCount(wf.getCount()+1); 
    221218                }  
    222219                else { 
    223                         db.update("INSERT INTO weaponfactory (count,col) VALUES (1,"+base.getID()+")"); 
     220                        wf = new WeaponFactory(base); 
     221                        db.persist(wf); 
    224222                } 
    225223        } 
     
    237235        @Override 
    238236        public void cleanup(Context context, Base base) { 
    239                 Database database = context.getDatabase(); 
    240237                org.hibernate.Session db = context.getDB(); 
    241238                 
    242                 SQLResultRow wf = database.first("SELECT count,produces FROM weaponfactory WHERE col="+base.getID()); 
    243                 if( wf.getInt("count") > 1 ) {         
     239                WeaponFactory wf = (WeaponFactory)db.get(WeaponFactory.class, base.getID()); 
     240                if( wf.getCount() > 1 ) {      
    244241                        BigDecimal usedcapacity = new BigDecimal(0, MathContext.DECIMAL32); 
    245242         
    246                         String[] plist = StringUtils.split(wf.getString("produces"), ';'); 
     243                        WeaponFactory.Task[] plist = wf.getProduces(); 
    247244                        for( int i=0; i < plist.length; i++ ) { 
    248                                 String[] tmp = StringUtils.split(plist[i], '='); 
    249                                 Ammo ammo = (Ammo)db.get(Ammo.class, Integer.parseInt(tmp[0])); 
    250                                 int ammoCount = Integer.parseInt(tmp[1]); 
     245                                Ammo ammo = plist[i].getAmmo(); 
     246                                int ammoCount = plist[i].getCount(); 
    251247                                 
    252248                                usedcapacity = usedcapacity.add(ammo.getDauer().multiply(new BigDecimal(ammoCount))); 
    253249                        } 
    254250         
    255                         if( usedcapacity.compareTo(new BigDecimal(wf.getInt("count")-1)) > 0 ) { 
    256                                 BigDecimal targetCapacity = new BigDecimal(wf.getInt("count")-1); 
     251                        if( usedcapacity.compareTo(new BigDecimal(wf.getCount()-1)) > 0 ) { 
     252                                BigDecimal targetCapacity = new BigDecimal(wf.getCount()-1); 
    257253                                 
    258254                                for( int i=0; i < plist.length; i++ ) { 
    259                                         String[] tmp = StringUtils.split(plist[i], '='); 
    260                                         Ammo ammo = (Ammo)db.get(Ammo.class, Integer.parseInt(tmp[0])); 
    261                                         int ammoCount = Integer.parseInt(tmp[1]); 
     255                                        Ammo ammo = plist[i].getAmmo(); 
     256                                        int ammoCount = plist[i].getCount(); 
    262257                                         
    263258                                        BigDecimal capUsedByAmmo = new BigDecimal(ammoCount).multiply(ammo.getDauer()); 
     
    265260                                        if( usedcapacity.subtract(capUsedByAmmo).compareTo(targetCapacity) < 0 ) { 
    266261                                                BigDecimal capLeftForAmmo = capUsedByAmmo.subtract(usedcapacity.subtract(targetCapacity)); 
    267                                                 plist[i] = ammo.getId()+"=" + capLeftForAmmo.divide(ammo.getDauer(), BigDecimal.ROUND_DOWN).intValue(); 
     262                                                plist[i] = new WeaponFactory.Task(ammo, capLeftForAmmo.divide(ammo.getDauer(), BigDecimal.ROUND_DOWN).intValue()); 
    268263                                                break; 
    269264                                        } 
    270                                         plist[i] = ammo.getId()+"=0"; 
     265                                        plist = (WeaponFactory.Task[])ArrayUtils.remove(plist, i); 
     266                                        i--; 
     267                                         
    271268                                        usedcapacity = usedcapacity.subtract(capUsedByAmmo); 
    272269                                                 
    273270                                        if( usedcapacity.compareTo(targetCapacity) <= 0 ) break; 
    274271                                } 
    275                                 wf.put("produces", Common.implode(";",plist)); 
    276                         } 
    277                                 
    278                         database.update("UPDATE weaponfactory SET count=count-1,produces='"+wf.getString("produces")+"' WHERE col="+base.getID()); 
     272                                wf.setProduces(plist); 
     273                        } 
     274                         
     275                        wf.setCount(wf.getCount()-1); 
    279276                }  
    280277                else { 
    281                         database.update("DELETE FROM weaponfactory WHERE col="+base.getID()); 
     278                        db.delete(wf); 
    282279                } 
    283280        } 
     
    285282        @Override 
    286283        public String echoShortcut(Context context, Base base, int field, int building) { 
    287                 Database database = context.getDatabase(); 
    288284                org.hibernate.Session db = context.getDB(); 
    289285                 
     
    296292         
    297293                if( vars.usedcapacity.get(base.getID()).doubleValue() > 0 ) { 
    298                         SQLResultRow wf = database.first("SELECT produces FROM weaponfactory WHERE col=",base.getID()); 
    299                         String[] prodlist = StringUtils.split(wf.getString("produces"), ';'); 
     294                        WeaponFactory wf = (WeaponFactory)db.get(WeaponFactory.class, base.getID()); 
     295                        WeaponFactory.Task[] prodlist = wf.getProduces(); 
    300296                         
    301297                        StringBuilder popup = new StringBuilder(200); 
     
    303299                                 
    304300                        for( int i=0; i < prodlist.length; i++ ) { 
    305                                 String[] prod = StringUtils.split(prodlist[i], '='); 
    306                                 Ammo ammo = (Ammo)db.get(Ammo.class, Integer.parseInt(prod[0])); 
    307                                 int count = Integer.parseInt(prod[1]); 
     301                                Ammo ammo = prodlist[i].getAmmo(); 
     302                                int count = prodlist[i].getCount(); 
    308303                                if( (count > 0) && vars.ownerammobase.contains(ammo) ) { 
    309304                                        popup.append(count+"x <img style='vertical-align:middle' src='"+Items.get().item(ammo.getItemId()).getPicture()+"' alt='' />"+ammo.getName()+"<br />"); 
     
    359354        @Override 
    360355        public String output(Context context, TemplateEngine t, Base base, int field, int building) { 
    361                 Database database = context.getDatabase(); 
    362356                org.hibernate.Session db = context.getDB(); 
    363357                User user = (User)context.getActiveUser(); 
     
    370364                StringBuilder echo = new StringBuilder(2000); 
    371365                 
    372                 SQLResultRow wf = database.first("SELECT * FROM weaponfactory WHERE col="+base.getID()); 
    373                  
    374                 if( wf.isEmpty() ) { 
     366                WeaponFactory wf = (WeaponFactory)db.get(WeaponFactory.class, base.getID()); 
     367                 
     368                if( wf == null ) { 
    375369                        echo.append("<div style=\"color:red\">FEHLER: Diese Waffenfabrik besitzt keinen Eintrag<br /></div>\n"); 
    376370                        return echo.toString(); 
     
    447441                echo.append("<div class=\"smallfont\">"); 
    448442                if( (produce != 0) && (count != 0) ) { 
    449                         Ammo ammo = (Ammo)db.get(Ammo.class, produce); 
     443                        final Ammo ammo = (Ammo)db.get(Ammo.class, produce); 
    450444                         
    451445                        if( ammo == null ) { 
     
    461455                                BigDecimal usedcapacity = new BigDecimal(0, MathContext.DECIMAL32); 
    462456                 
    463                                 String[] plist = StringUtils.split(wf.getString("produces"), ';'); 
     457                                WeaponFactory.Task[] plist = wf.getProduces(); 
    464458                                for( int i=0; i < plist.length; i++ ) { 
    465                                         String[] tmp = StringUtils.split(plist[i], '='); 
    466                                         Ammo aAmmo = (Ammo)db.get(Ammo.class, Integer.parseInt(tmp[0])); 
    467                                         int ammoCount = Integer.parseInt(tmp[1]); 
     459                                        final Ammo aAmmo = plist[i].getAmmo(); 
     460                                        final int ammoCount = plist[i].getCount(); 
    468461                                         
    469462                                        usedcapacity = usedcapacity.add(aAmmo.getDauer().multiply(new BigDecimal(ammoCount))); 
    470463                                } 
    471                                 if( usedcapacity.add(new BigDecimal(count).multiply(ammo.getDauer())).doubleValue() > wf.getInt("count") ) { 
    472                                         BigDecimal availableCap = usedcapacity.multiply(new BigDecimal(-1)).add(new BigDecimal(wf.getInt("count"))); 
     464                                if( usedcapacity.add(new BigDecimal(count).multiply(ammo.getDauer())).doubleValue() > wf.getCount() ) { 
     465                                        BigDecimal availableCap = usedcapacity.multiply(new BigDecimal(-1)).add(new BigDecimal(wf.getCount())); 
    473466                                        count = availableCap.divide(ammo.getDauer(), BigDecimal.ROUND_DOWN).intValue(); 
    474467                                } 
     
    476469                                if( count != 0 ) { 
    477470                                        boolean entry = false; 
    478                                         List<String> producelist = new ArrayList<String>( 
    479                                                         Arrays.asList(StringUtils.split(wf.getString("produces"), ';')) 
     471                                        List<WeaponFactory.Task> producelist = new ArrayList<WeaponFactory.Task>( 
     472                                                        Arrays.asList(wf.getProduces()) 
    480473                                        ); 
    481474                                         
    482475                                        for( int i=0; i < producelist.size(); i++ ) { 
    483                                                 String[] tmp = StringUtils.split(producelist.get(i), '='); 
    484                                                 int aid = Integer.parseInt(tmp[0]); 
    485                                                 int ammoCount = Integer.parseInt(tmp[1]); 
     476                                                Ammo aAmmo = producelist.get(i).getAmmo(); 
     477                                                int ammoCount = producelist.get(i).getCount(); 
    486478                                                 
    487479                                                // Veraltete Ammo automatisch entfernen 
    488                                                 if( removelist.contains(aid) ) { 
     480                                                if( removelist.contains(aAmmo) ) { 
    489481                                                        producelist.remove(i); 
    490482                                                        i--; 
     
    492484                                                } 
    493485                                                 
    494                                                 if( (aid == 0) || (ammoCount <= 0) ) { 
     486                                                if( (aAmmo == null) || (ammoCount <= 0) ) { 
    495487                                                        producelist.remove(i); 
    496488                                                        i--; 
     
    498490                                                } 
    499491                                                 
    500                                                 if( aid == ammo.getId() ) { 
     492                                                if( aAmmo == ammo ) { 
    501493                                                        if( (count < 0) && (ammoCount+count < 0) ) { 
    502494                                                                count = -ammoCount; 
     
    506498                                                } 
    507499                                                if( ammoCount > 0 ) { 
    508                                                         producelist.set(i, aid+"="+ammoCount); 
     500                                                        producelist.set(i, new WeaponFactory.Task(aAmmo, ammoCount)); 
    509501                                                } 
    510502                                                else { 
     
    514506                                        } 
    515507                                        if( !entry && (count > 0) ) { 
    516                                                 producelist.add(ammo.getId()+"="+count); 
    517                                         } 
    518                                          
    519                                         wf.put("produces", Common.implode(";",producelist)); 
    520                                          
    521                                         database.update("UPDATE weaponfactory SET produces='"+wf.getString("produces")+"' WHERE id="+wf.getInt("id")); 
     508                                                producelist.add(new WeaponFactory.Task(ammo, count)); 
     509                                        } 
     510                                         
     511                                        wf.setProduces(producelist.toArray(new WeaponFactory.Task[producelist.size()])); 
    522512                         
    523513                                        echo.append(Math.abs(count)+" "+Items.get().item(ammo.getItemId()).getName()+" wurden "+(count>=0 ? "hinzugef&uuml;gt":"abgezogen")+"<br /><br />"); 
     
    537527                Cargo consumes = new Cargo(); 
    538528                 
    539                 if( wf.getString("produces").length() != 0 ) { 
    540                         String[] plist = StringUtils.split(wf.getString("produces"), ';'); 
     529                if( wf.getProduces().length > 0 ) { 
     530                        WeaponFactory.Task[] plist = wf.getProduces(); 
    541531                        for( int i=0; i < plist.length; i++ ) { 
    542                                 String[] tmp = StringUtils.split(plist[i], '='); 
    543                                 final Ammo ammo = (Ammo)db.get(Ammo.class, Integer.parseInt(tmp[0])); 
    544                                 int ammoCount = Integer.parseInt(tmp[1]); 
     532                                final Ammo ammo = plist[i].getAmmo(); 
     533                                final int ammoCount = plist[i].getCount(); 
    545534                                 
    546535                                if( !ammolist.contains(ammo) ) { 
     
    573562                echo.append(Common.tableBegin(760, "left")); 
    574563                 
    575                 echo.append("<img style=\"vertical-align:middle\" src=\""+Configuration.getSetting("URL")+"data/interface/time.gif\" alt=\"Zeiteinheiten\" />"+usedcapacity+"/"+wf.getInt("count")+" ausgelastet<br />\n"); 
     564                echo.append("<img style=\"vertical-align:middle\" src=\""+Configuration.getSetting("URL")+"data/interface/time.gif\" alt=\"Zeiteinheiten\" />"+usedcapacity+"/"+wf.getCount()+" ausgelastet<br />\n"); 
    576565                echo.append("Verbrauch: "); 
    577566                ResourceList reslist = consumes.getResourceList(); 
  • src/net/driftingsouls/ds2/server/modules/admin/PlayerDelete.java

    r5ba971b r29cd7e5  
    198198                                db.update("UPDATE academy SET train=0,remain=0,`upgrade`='' WHERE col IN ("+Common.implode(",",baselist)+")"); 
    199199                                db.update("UPDATE werften SET remaining=0,building=0 WHERE col IN ("+Common.implode(",",baselist)+")"); 
    200                                 db.update("UPDATE weaponfactory SET produces='' WHERE col IN ("+Common.implode(",",baselist)+")"); 
     200                                dbsess.createQuery("update WeaponFactory set produces='' where col in ("+Common.implode(",",baselist)+")").executeUpdate(); 
    201201                        } 
    202202                }  
     
    215215                                db.update("DELETE FROM academy WHERE col IN ("+Common.implode(",",baselist)+")"); 
    216216                                db.update("DELETE FROM werften WHERE col IN ("+Common.implode(",",baselist)+")"); 
    217                                 db.update("DELETE FROM weaponfactory WHERE col IN ("+Common.implode(",",baselist)+")"); 
     217                                dbsess.createQuery("delete from WeaponFactory where col in ("+Common.implode(",",baselist)+")").executeUpdate(); 
    218218                        } 
    219219                } 
  • web/WEB-INF/cfg/hibernatemappings.xml

    r7723537 r29cd7e5  
    8383        <mapping class="net.driftingsouls.ds2.server.entities.VersteigerungResource" /> 
    8484        <mapping class="net.driftingsouls.ds2.server.entities.PaketVersteigerung" /> 
    85         <!-- weaponfactory --
     85        <mapping class="net.driftingsouls.ds2.server.entities.WeaponFactory" /
    8686        <mapping class="net.driftingsouls.ds2.server.werften.WerftObject" /> 
    8787        <mapping class="net.driftingsouls.ds2.server.werften.BaseWerft" />