Changeset 07a80e0452a3db3c441e627e666c09d5cbcc52e7

Show
Ignore:
Timestamp:
07/07/07 22:35:45 (1 year ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1183840545 +0200
git-parent:

[15c854d20931d81a8e2bbab52eac1029983a5cfd]

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

Werft: Baukosten pro Tick eingebaut

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • db/tables/werft_queues.sql

    r8e3cf9b r07a80e0  
    66  `remaining` tinyint(4) NOT NULL default '0', 
    77  `flagschiff` tinyint(1) unsigned NOT NULL default '0', 
     8  `costsPerTick` varchar(300) NOT NULL default '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,', 
     9  `energyPerTick` int NOT NULL default '0', 
    810  PRIMARY KEY  (`werft`,`position`) 
    911) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
  • db/updates.xml

    r29cd7e5 r07a80e0  
    321321                ALTER TABLE `weaponfactory` ADD PRIMARY KEY ( `col` ); 
    322322                ALTER TABLE `weaponfactory` DROP INDEX `col`; 
     323                ALTER TABLE `werft_queues` ADD COLUMN costsPerTick varchar(300) NOT NULL default '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'; 
     324                ALTER TABLE `werft_queues` ADD COLUMN energyPerTick int NOT NULL default '0'; 
    323325        ]]></update> 
    324326</updates> 
  • src/net/driftingsouls/ds2/server/tick/regular/WerftTick.java

    r8e3cf9b r07a80e0  
    7171                                        } 
    7272                                        if( werft.isBuildContPossible() ) { 
    73                                                 werft.decRemainingTime(); 
     73                                                werft.continueBuild(); 
    7474                                                this.log("\tVoraussetzungen erfuellt - bau geht weiter"); 
    7575                                        } 
  • src/net/driftingsouls/ds2/server/werften/ShipWerft.java

    rfdd9b7d r07a80e0  
    398398         
    399399        @Override 
    400         public boolean buildShip( int build, int item, boolean testonly ) { 
    401                 boolean result = super.buildShip(build, item, testonly); 
     400        public boolean buildShip( int build, int item, boolean costsPerTick, boolean testonly ) { 
     401                boolean result = super.buildShip(build, item, costsPerTick, testonly); 
    402402                 
    403403                this.ship.recalculateShipStatus(); 
  • src/net/driftingsouls/ds2/server/werften/WerftGUI.java

    radac94a r07a80e0  
    4949import net.driftingsouls.ds2.server.ships.Ship; 
    5050import net.driftingsouls.ds2.server.ships.ShipTypeData; 
    51 import net.driftingsouls.ds2.server.ships.Ship.ModuleEntry; 
    5251 
    5352import org.apache.commons.lang.StringUtils; 
     
    9190                 
    9291                // Baudialog 
    93                 if( build != 0 ) { 
    94                         final int item = context.getRequest().getParameterInt("item"); 
    95                         final String conf = context.getRequest().getParameterString("conf"); 
    96                          
    97                         this.out_buildShip(build, item, werft, conf); 
     92                if( build != 0 ) {                       
     93                        this.out_buildShip(build, werft); 
    9894                } 
    9995                // Werkstadt 
     
    688684        } 
    689685 
    690         private void out_buildShip(int build, int item, WerftObject werft, String conf) {        
     686        private void out_buildShip(int build, WerftObject werft) { 
     687                final int item = context.getRequest().getParameterInt("item"); 
     688                final boolean perTick = context.getRequest().getParameterInt("pertick") != 0; 
     689                final String conf = context.getRequest().getParameterString("conf"); 
     690                 
    691691                Cargo cargo = werft.getCargo(false); 
    692692         
     
    711711                 
    712712                //Standardresourcen 
    713                 Cargo shipdataCosts = (Cargo)shipdata.get("costs"); 
     713                Cargo shipdataCosts = new Cargo((Cargo)shipdata.get("costs")); 
     714                Cargo perTickCosts = new Cargo(shipdataCosts); 
     715                perTickCosts.multiply(1/(double)shipdata.getInt("dauer"), Cargo.Round.CEIL); 
     716                 
    714717                ResourceList reslist = shipdataCosts.compare( cargo, false ); 
    715718                for( ResourceEntry res : reslist ) { 
    716719                        t.set_var(      "res.image",                    res.getImage(), 
    717720                                                "res.plainname",                res.getPlainName(), 
     721                                                "res.cargo.pertick",    perTickCosts.getResourceCount(res.getId()), 
    718722                                                "res.cargo.available",  res.getCargo2(), 
    719723                                                "res.cargo.needed",             res.getCargo1(), 
     
    721725                        t.parse("build.res.list", "build.res.listitem", true); 
    722726                } 
    723                  
    724                 int frei = werft.getCrew(); 
    725727         
    726728                //E-Kosten 
     729                 
     730                int ePerTick = (int)Math.ceil(shipdata.getInt("ekosten")/(double)shipdata.getInt("dauer")); 
     731                 
    727732                t.set_var(      "res.image",            Configuration.getSetting("URL")+"data/interface/energie.gif", 
    728733                                        "res.plainname",        "Energie", 
     734                                        "res.cargo.pertick",    ePerTick, 
    729735                                        "res.cargo.available",  werft.getEnergy(), 
    730736                                        "res.cargo.needed",     shipdata.getInt("ekosten"), 
    731737                                        "res.cargo.mangel",     (shipdata.getInt("ekosten") > werft.getEnergy() ? shipdata.getInt("ekosten") - werft.getEnergy() : 0) ); 
    732                 t.parse("build.othercosts.list", "build.res.listitem", true); 
    733  
    734                 //Crew 
     738                t.parse("build.res.list", "build.res.listitem", true); 
     739 
     740                // Crew 
     741                int frei = werft.getCrew(); 
     742                 
    735743                t.set_var(      "res.image",                    Configuration.getSetting("URL")+"data/interface/arbeitslos.gif", 
    736744                                        "res.plainname",                "Crew", 
     745                                        "res.cargo.pertick",    "", 
    737746                                        "res.cargo.available",  frei, 
    738747                                        "res.cargo.needed",             shipdata.getInt("crew"), 
     
    740749                t.parse("build.othercosts.list", "build.res.listitem", true); 
    741750                 
    742                 boolean result = werft.buildShip(build, item, !conf.equals("ok") ); 
    743          
    744                 if( !result ) { 
    745                         t.set_var("build.error", StringUtils.replace(werft.MESSAGE.getMessage(), "\n", "<br/>\n")); 
    746                 }   
     751                // Testen ob Bau moeglich 
     752                if( !conf.equals("ok") ) { 
     753                        // Sofort zahlen 
     754                        boolean result = werft.buildShip(build, item, false, true ); 
     755                 
     756                        if( !result ) { 
     757                                t.set_var("build.instant.error", StringUtils.replace(werft.MESSAGE.getMessage(), "\n", "<br/>\n")); 
     758                        } 
     759                         
     760                        // Kosten pro Tick 
     761                        result = werft.buildShip(build, item, true, true ); 
     762                         
     763                        if( !result ) { 
     764                                t.set_var("build.pertick.error", StringUtils.replace(werft.MESSAGE.getMessage(), "\n", "<br/>\n")); 
     765                        } 
     766                } 
     767                // Bau ausfuehren 
     768                else { 
     769                        boolean result = werft.buildShip(build, item, perTick, false ); 
     770                         
     771                        if( !result ) { 
     772                                t.set_var("build.error", StringUtils.replace(werft.MESSAGE.getMessage(), "\n", "<br/>\n")); 
     773                        } 
     774                } 
    747775                 
    748776                return;    
  • src/net/driftingsouls/ds2/server/werften/WerftObject.java

    r6b38a1a r07a80e0  
    341341                } 
    342342                 
     343                // Pruefen, ob ein evt notwendiges Item vorhanden ist 
    343344                if( this.getRequiredItem() > -1 ) { 
    344345                        Context context = ContextMap.getContext(); 
     
    357358                        } 
    358359                } 
     360                 
     361                // Pruefen, ob die anfallenden Baukosten bezahlt werden koennen 
     362                WerftQueueEntry entry = getQueueTopEntry(); 
     363                if( !entry.getCostsPerTick().isEmpty() ) { 
     364                        Cargo cargo = this.getCargo(false); 
     365                        ResourceList reslist = entry.getCostsPerTick().compare(cargo, false); 
     366                        for( ResourceEntry res : reslist ) { 
     367                                if( res.getDiff() > 0 ) { 
     368                                        return false; 
     369                                } 
     370                        } 
     371                } 
     372                 
     373                if( entry.getEnergyPerTick() != 0 ) { 
     374                        if( this.getEnergy() < entry.getEnergyPerTick() ) { 
     375                                return false; 
     376                        } 
     377                } 
    359378         
    360379                return true; 
     380        } 
     381         
     382        private void substractBuildCosts() { 
     383                WerftQueueEntry entry = getQueueTopEntry(); 
     384                if( !entry.getCostsPerTick().isEmpty() ) {       
     385                        Cargo cargo = this.getCargo(false); 
     386                        cargo.substractCargo(entry.getCostsPerTick()); 
     387                        this.setCargo(cargo, false); 
     388                } 
     389                 
     390                if( entry.getEnergyPerTick() != 0 ) { 
     391                        this.setEnergy(this.getEnergy() - entry.getEnergyPerTick()); 
     392                } 
     393        } 
     394         
     395        /** 
     396         * <p>Setzt den Bau fort. Dies umfasst u.a. das Dekrementieren 
     397         * der verbleibenden Bauzeit um 1 sowie des Abzugs der pro Tick 
     398         * anfallenden Baukosten.</p> 
     399         * <p>Es wird nicht geprueft, ob die Bedingungen fuer ein fortsetzen des 
     400         * Baus erfuellt sind</p> 
     401         * @see #isBuildContPossible() 
     402         */ 
     403        public void continueBuild() { 
     404                this.decRemainingTime(); 
     405                this.substractBuildCosts(); 
    361406        } 
    362407         
     
    13561401         * @param build Schiffbau-ID 
    13571402         * @param item Item-ID 
     1403         * @param costsPerTick Sollen die Baukosten pro Tick (<code>true</code>) oder der Gesamtbetrag jetzt (<code>false</code>) abgezogen werden  
    13581404         * @param testonly Soll nur getestet (true) oder wirklich gebaut (false) werden? 
    13591405         * @return true, wenn kein Fehler aufgetreten ist 
    13601406         */ 
    1361         public boolean buildShip( int build, int item, boolean testonly ) { 
     1407        public boolean buildShip( int build, int item, boolean costsPerTick, boolean testonly ) { 
    13621408                StringBuilder output = MESSAGE.get(); 
    13631409                 
     
    13661412                User user = (User)db.get(User.class, this.getOwner()); 
    13671413         
    1368                 Cargo basec = this.getCargo(false); 
    1369                 Cargo newbasec = (Cargo)basec.clone(); 
     1414                Cargo cargo = this.getCargo(false); 
    13701415         
    13711416                Cargo allyitems = null; 
     
    14501495                boolean ok = true; 
    14511496                 
    1452                 Cargo shipdataCosts = (Cargo)shipdata.get("costs"); 
    1453          
    1454                 //Standardresourcen 
    1455                 ResourceList reslist = shipdataCosts.compare( basec, false ); 
    1456                 for( ResourceEntry res : reslist ) { 
    1457                         if( res.getDiff() > 0 ) { 
     1497                int e = this.getEnergy(); 
     1498                 
     1499                Cargo shipdataCosts = new Cargo((Cargo)shipdata.get("costs")); 
     1500                 
     1501                if( !costsPerTick ) { 
     1502                        // Abzug der sofort anfallenden Baukosten 
     1503                        ResourceList reslist = shipdataCosts.compare( cargo, false ); 
     1504                        for( ResourceEntry res : reslist ) { 
     1505                                if( res.getDiff() > 0 ) { 
     1506                                        ok = false; 
     1507                                        break; 
     1508                                } 
     1509                        } 
     1510                         
     1511                        cargo.substractCargo( shipdataCosts ); 
     1512                         
     1513                        // E-Kosten 
     1514                        if( shipdata.getInt("ekosten") > this.getEnergy()) { 
    14581515                                ok = false; 
    1459                                 break; 
    1460                         } 
    1461                 } 
    1462                  
    1463                 newbasec.substractCargo( shipdataCosts ); 
     1516                        } 
     1517                        e -= shipdata.getInt("ekosten"); 
     1518                } 
    14641519         
    14651520                int frei = this.getCrew(); 
    1466          
    1467                 //E-Kosten 
    1468                 if( shipdata.getInt("ekosten") > this.getEnergy()) { 
    1469                         ok = false; 
    1470                 } 
    1471                 int e = this.getEnergy() - shipdata.getInt("ekosten"); 
    14721521         
    14731522                //Crew 
     
    14901539                else { 
    14911540                        if( this.getOneWayFlag() == 0 ) { 
    1492                                 this.setCargo(newbasec, false); 
     1541                                this.setCargo(cargo, false); 
    14931542                                this.setEnergy(e); 
    14941543                                this.setCrew(frei); 
     
    15331582                                this.buildFlagschiff = true; 
    15341583                        } 
     1584                        if( costsPerTick ) { 
     1585                                shipdataCosts.multiply(1/(double)shipdata.getInt("dauer"), Cargo.Round.CEIL); 
     1586                                entry.setCostsPerTick(shipdataCosts); 
     1587                                entry.setEnergyPerTick((int)Math.ceil(shipdata.getInt("ekosten")/(double)shipdata.getInt("dauer"))); 
     1588                        } 
    15351589                        db.persist(entry); 
    15361590                         
  • src/net/driftingsouls/ds2/server/werften/WerftQueueEntry.java

    r8e3cf9b r07a80e0  
    3030import javax.persistence.Table; 
    3131 
     32import org.hibernate.annotations.Type; 
     33 
     34import net.driftingsouls.ds2.server.cargo.Cargo; 
    3235import net.driftingsouls.ds2.server.framework.ContextMap; 
    3336import net.driftingsouls.ds2.server.ships.ShipType; 
     
    127130        private boolean buildFlagschiff = false; 
    128131        private int remaining = 0; 
    129          
     132        @Type(type="cargo") 
     133        private Cargo costsPerTick; 
     134        private int energyPerTick; 
     135 
    130136        /** 
    131137         * Konstruktor 
     
    147153                this.buildItem = -1; 
    148154                this.remaining = remaining; 
     155                this.costsPerTick = new Cargo(); 
    149156        } 
    150157         
     
    254261                this.remaining = remaining; 
    255262        } 
    256          
    257          
     263 
     264        /** 
     265         * Gibt die pro Tick faelligen Baukosten zurueck 
     266         * @return Die Baukosten pro Tick 
     267         */ 
     268        public Cargo getCostsPerTick() { 
     269                return costsPerTick; 
     270        } 
     271 
     272        /** 
     273         * Setzt die pro Tick faelligen Baukosten 
     274         * @param costsPerTick Die Baukosten pro Tick 
     275         */ 
     276        public void setCostsPerTick(Cargo costsPerTick) { 
     277                this.costsPerTick = costsPerTick; 
     278        } 
     279         
     280        /** 
     281         * Gibt die Energiekosten pro Tick zurueck 
     282         * @return Die Energiekosten pro Tick 
     283         */ 
     284        public int getEnergyPerTick() { 
     285                return energyPerTick; 
     286        } 
     287 
     288        /** 
     289         * Setzt die Energiekosten pro Tick 
     290         * @param energyPerTick Die Energiekosten pro Tick 
     291         */ 
     292        public void setEnergyPerTick(int energyPerTick) { 
     293                this.energyPerTick = energyPerTick; 
     294        } 
    258295} 
  • templates/werft.werftgui.html

    rfe6254f r07a80e0  
    174174                        <table class="noBorderX" cellpadding="2" cellspacing="1" style="margin-left:auto;margin-right:auto"> 
    175175                        <tr> 
    176                                 <th style="text-align:center" colspan="3"><h3>Baukosten</h3></th> 
     176                                <th style="text-align:center" colspan="5"><h3>Baukosten</h3></th> 
    177177                        </tr> 
    178178                        <tr> 
    179179                                <td class="noBorderX" style="width:32px"></td> 
    180180                                <td class="noBorderX" style="width:100px;text-align:right">Vorhanden</td> 
    181                                 <td class="noBorderX" style="width:100px;text-align:right">Sofort</td> 
     181                                <td class="noBorderX" style="width:50px;text-align:right">Sofort</td> 
     182                                <td class="noBorderX" style="width:40px;text-align:center">oder</td> 
     183                                <td class="noBorderX" style="width:40px;text-align:right">Pro Tick</td> 
    182184                        </tr> 
    183185                        <!-- BEGIN build.res.listitem --> 
     
    187189                                        </td> 
    188190                                        <td class="noBorderX" style="width:100px;text-align:right">{res.cargo.available}</td> 
    189                                         <td class="noBorderX" style="width:100px;text-align:right"> 
     191                                        <td class="noBorderX" style="width:50px;text-align:right"> 
    190192                                                {if res.cargo.mangel} 
    191193                                                        <a class="error" onmouseover="return overlib('&lt;span style=\'font-size:13px\'&gt;Mehrbedarf:<br />{res.cargo.mangel} Einheiten&lt;/span&gt;',TIMEOUT,0,DELAY,300,WIDTH,100);" onmouseout="return nd();" href="#"> 
     
    196198                                                {/endif} 
    197199                                        </td> 
     200                                        {if res.cargo.pertick} 
     201                                                <td class="noBorderX"></td> 
     202                                                <td class="noBorderX" style="width:40px;text-align:right">{res.cargo.pertick}</td> 
     203                                        {else} 
     204                                                <td class="noBorderX" colspan="2"></td> 
     205                                        {/endif} 
    198206                                </tr> 
    199207                        <!-- END build.res.listitem --> 
    200208                        <tr><td class="noBorderX" colspan="3"></td></tr> 
    201209                        <tr> 
    202                                 <th style="text-align:center" colspan="3"><h3>Werftkapazit&auml;t</h3></th> 
     210                                <th style="text-align:center" colspan="5"><h3>Werftkapazit&auml;t</h3></th> 
    203211                        </tr> 
    204212                         
     
    211219                        <h3>Aktionen</h3> 
    212220                        <div style="margin-top:3px; margin-bottom:3px"> 
    213                                 {if build.error} 
    214                                         <span class="error">{build.error}</span> 
     221                                {if build.conf} 
     222                                        {if build.instant.error} 
     223                                                <span class="error">{build.instant.error}</span><br /> 
     224                                        {else} 
     225                                                <a class="ok" href="{werftgui.urlbase}&amp;sess={global.sess}&amp;build={build.id}&amp;item={build.item.id}&amp;conf=ok&amp;pertick=0">Bauen und sofort bezahlen</a><br /> 
     226                                        {/endif} 
     227                                        {if build.pertick.error} 
     228                                                <span class="error">{build.pertick.error}</span> 
     229                                        {else} 
     230                                                <a class="ok" href="{werftgui.urlbase}&amp;sess={global.sess}&amp;build={build.id}&amp;item={build.item.id}&amp;conf=ok&pertick=1">Bauen mit pro Tick Kosten</a> 
     231                                        {/endif} 
    215232                                {else} 
    216                                         {if build.conf
    217                                                 <a class="ok" href="{werftgui.urlbase}&amp;sess={global.sess}&amp;build={build.id}&amp;item={build.item.id}&amp;conf=ok">{build.type.name} bauen</a
    218                                         {else} 
    219                                                 <span class="ok">gen&uuml;gend Material vorhanden - beginne Bau</span> 
     233                                        {if build.error
     234                                                <span class="error">{build.error}</span
     235                                        {else} 
     236                                                <span class="ok">alles ok - beginne mit Bau</span> 
    220237                                        {/endif} 
    221238                                {/endif}