Changeset 7a648c6a38f039122ae03ea535db13e979a4b0e7

Show
Ignore:
Timestamp:
05/22/08 17:36:26 (3 months ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1211470586 +0200
git-parent:

[ab5c42089c861699f3c43b5a8604cece4017577b]

git-author:
Sebastian Gift <Madison@gt-knm.de> 1211470586 +0200
Message:

[ref/feature] Die Sichtbarkeit von Forschungen wird jetzt ueber ein Enum gesteuert.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/net/driftingsouls/ds2/server/entities/Forschung.java

    r402c072 r7a648c6  
    3333import net.driftingsouls.ds2.server.framework.caches.ControllableCache; 
    3434 
    35 import org.hibernate.annotations.Immutable; 
     35import org.hibernate.annotations.Cache; 
     36import org.hibernate.annotations.CacheConcurrencyStrategy; 
    3637import org.hibernate.annotations.Type; 
    3738 
     
    4748@Entity 
    4849@Table(name="forschungen") 
    49 @Immutable 
     50@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
    5051public class Forschung { 
    5152        /** 
     
    6566                        } 
    6667                ); 
     68        } 
     69         
     70        /** 
     71         * Sichtbarkeiten von einzelnen Forschungen 
     72         */ 
     73        public enum Visibility { 
     74                /** 
     75                 * Erst sichtbar, wenn die Forschung auch erforschbar ist 
     76                 */ 
     77                IF_RESEARCHABLE(0, "Sichtbar, wenn erforschbar"), 
     78                /** 
     79                 * Immer sichtbar 
     80                 */ 
     81                ALWAYS(1, "Sichtbar"), 
     82                /** 
     83                 * Niemals sichtbar 
     84                 */ 
     85                NEVER(2, "Unsichtbar"); 
     86                 
     87                 
     88                private int bit; 
     89                private String description; 
     90                 
     91                private Visibility(int bit, String description) { 
     92                        this.bit = bit; 
     93                        this.description = description; 
     94                } 
     95                 
     96                /** 
     97                 * Gibt das zum Flag gehoerende Bitmuster zurueck 
     98                 * @return Das Bitmuster 
     99                 */ 
     100                public int getBits() { 
     101                        return this.bit; 
     102                } 
     103                 
     104                @Override 
     105                public String toString() { 
     106                        return description; 
     107                } 
    67108        } 
    68109         
     
    191232         
    192233        /** 
    193          * Prueft, ob die Forschung allgemein sichtbar ist oder erst sichtbar wird, 
    194          * wenn alle benoetigten Forschungen erforscht sind 
    195          * @return <code>true</code>, falls die Forschung allgemein sichtbar ist 
    196          */ 
    197         public boolean isVisibile() { 
    198                 return ( this.visibility > 0 ? true : false ); 
    199         } 
    200          
     234         * Gibt zurueck, ob die Forschung die angegebene Sichtbarkeit hat 
     235         * @param visibility Die Sichtbarkeit 
     236         * @return <code>true</code>, falls die Sichtbarkeit gegeben ist 
     237         */ 
     238        public boolean hasVisibility(Forschung.Visibility visibility) { 
     239                return (this.visibility & visibility.getBits()) != 0; 
     240        } 
     241         
     242        /** 
     243         * Prueft, ob die Forschung fuer den Spieler sichtbar ist. 
     244         * Es werden nur die Werte von Forschung.Visibility beruecksichtigt. 
     245         * @param user Der Spieler 
     246         *  
     247         * @return <code>true</code>, falls die Forschung sichtbar ist 
     248         */ 
     249        public boolean isVisibile(User user) { 
     250                if(hasVisibility(Forschung.Visibility.ALWAYS)) { 
     251                        return true; 
     252                } 
     253                 
     254                if(hasVisibility(Forschung.Visibility.NEVER)) { 
     255                        return false; 
     256                } 
     257                 
     258                for(int i = 1; i <= 3; i++) { 
     259                        if(!user.hasResearched(getRequiredResearch(i))) { 
     260                                return false; 
     261                        } 
     262                } 
     263                 
     264                return true; 
     265        } 
     266 
     267        /** 
     268         * Setzte die Beschreibung der Forschung. 
     269         *  
     270         * @param description Die neue Beschreibung. 
     271         */ 
     272        public void setDescription(String description) { 
     273                this.description = description; 
     274        } 
     275 
     276        /** 
     277         * Setzt den Namen der Forschung. 
     278         *  
     279         * @param name Der neue Name. 
     280         */ 
     281        public void setName(String name) { 
     282                this.name = name; 
     283        } 
     284 
     285        /** 
     286         * Setzt die Rasse der Forschung. 
     287         *  
     288         * @param race vergleiche <code>Rassen</code> 
     289         */ 
     290        public void setRace(int race) { 
     291                this.race = race; 
     292        } 
     293 
     294        /** 
     295         * Setzt die erste benoetigte Forschung  
     296         * @param req1 Die ID der Forschung. 
     297         */ 
     298        public void setReq1(int req1) { 
     299                this.req1 = req1; 
     300        } 
     301 
     302        /**  
     303         * Setzt die zweite benoetigte Forschung  
     304         * @param req2 Die ID der Forschung. 
     305         */ 
     306        public void setReq2(int req2) { 
     307                this.req2 = req2; 
     308        } 
     309 
     310        /**  
     311         * Setzt die zweite benoetigte Forschung  
     312         * @param req3 Die ID der Forschung. 
     313         */ 
     314        public void setReq3(int req3) { 
     315                this.req3 = req3; 
     316        } 
     317 
     318        /** 
     319         * Setzt die Dauer in Ticks die notwendig ist um die Forschung 
     320         * zu erforschen 
     321         * @param time Die Dauer 
     322         */ 
     323        public void setTime(int time) { 
     324                this.time = time; 
     325        } 
     326 
     327        /** 
     328         * Setzt die Sichtbarkeit auf den angegebenen Wert. 
     329         *  
     330         * @param visibility Die neue Sichtbarkeitsstufe. 
     331         */ 
     332        public void setVisibility(int visibility) { 
     333                this.visibility = visibility; 
     334        } 
     335 
    201336        /** 
    202337         * Prueft, ob die Forschung ein bestimmtes Flag hat 
  • src/net/driftingsouls/ds2/server/modules/ForschinfoController.java

    r953ed23 r7a648c6  
    8181                } 
    8282                 
    83                 if( !data.isVisibile() &&  
     83                if( !data.isVisibile(user) &&  
    8484                        !((user.hasResearched(data.getRequiredResearch(1)) && user.hasResearched(data.getRequiredResearch(2)) && user.hasResearched(data.getRequiredResearch(3))) ||  
    8585                        user.hasResearched(researchid) ) && (user.getAccessLevel() < 20) ) { 
     
    173173                        Forschung res = (Forschung)iter.next(); 
    174174                         
    175                         if( res.isVisibile() ||  
    176                                 (!res.isVisibile() && user.hasResearched(res.getRequiredResearch(1)) && user.hasResearched(res.getRequiredResearch(2)) && user.hasResearched(res.getRequiredResearch(3))) ) { 
     175                        if( res.isVisibile(user) ||  
     176                                (!res.isVisibile(user) && user.hasResearched(res.getRequiredResearch(1)) && user.hasResearched(res.getRequiredResearch(2)) && user.hasResearched(res.getRequiredResearch(3))) ) { 
    177177                                t.setVar(       "tech.allows.item.break",       entry, 
    178178                                                        "tech.allows.item.id",          res.getID(), 
     
    183183                                t.parse("tech.allows.list","tech.allows.listitem",true); 
    184184                        }        
    185                         else if( (user.getAccessLevel() > 20) && !res.isVisibile() ) { 
     185                        else if( (user.getAccessLevel() > 20) && !res.isVisibile(user) ) { 
    186186                                t.setVar(       "tech.allows.item.break",       entry, 
    187187                                                        "tech.allows.item.id",          res.getID(), 
     
    342342                                if( ship.getRes(i) > 0 ) { 
    343343                                        Forschung tmpres = Forschung.getInstance(ship.getRes(i)); 
    344                                         if( !tmpres.isVisibile() &&  
     344                                        if( !tmpres.isVisibile(user) &&  
    345345                                                (!user.hasResearched(ship.getRes(i)) || !user.hasResearched(tmpres.getRequiredResearch(1)) ||  
    346346                                                                !user.hasResearched(tmpres.getRequiredResearch(2)) || !user.hasResearched(tmpres.getRequiredResearch(3))  
  • src/net/driftingsouls/ds2/server/modules/ItemInfoController.java

    r0047196 r7a648c6  
    374374                                if( effect.getTechReq(i) != 0 ) { 
    375375                                        Forschung dat = Forschung.getInstance(effect.getTechReq(i)); 
    376                                         if( !dat.isVisibile() && (!user.hasResearched(dat.getRequiredResearch(1)) || !user.hasResearched(dat.getRequiredResearch(2)) || !user.hasResearched(dat.getRequiredResearch(3))) ) { 
     376                                        if( !dat.isVisibile(user) && (!user.hasResearched(dat.getRequiredResearch(1)) || !user.hasResearched(dat.getRequiredResearch(2)) || !user.hasResearched(dat.getRequiredResearch(3))) ) { 
    377377                                                data.append("Unbekannt"); 
    378378                                                if( user.getAccessLevel() > 20 ) { 
     
    565565                                                Forschung dat = Forschung.getInstance(ammo.getRes(i)); 
    566566                                                if( (ammo.getRes(i) == -1) ||  
    567                                                         (!dat.isVisibile() && (!user.hasResearched(dat.getRequiredResearch(1)) || !user.hasResearched(dat.getRequiredResearch(2)) || !user.hasResearched(dat.getRequiredResearch(3)))) ) { 
     567                                                        (!dat.isVisibile(user) && (!user.hasResearched(dat.getRequiredResearch(1)) || !user.hasResearched(dat.getRequiredResearch(2)) || !user.hasResearched(dat.getRequiredResearch(3)))) ) { 
    568568                                                         
    569569                                                        data.append("Unbekannte Technologie"); 
  • src/net/driftingsouls/ds2/server/modules/SchiffInfoController.java

    re409332 r7a648c6  
    206206                                        Forschung research = Forschung.getInstance(shipBuildData.getRes(i)); 
    207207                                         
    208                                         if( !research.isVisibile() &&  
     208                                        if( !research.isVisibile(user) &&  
    209209                                                (user == null || !user.hasResearched(research.getRequiredResearch(1)) ||  
    210210                                                 !user.hasResearched(research.getRequiredResearch(2)) ||  
  • src/net/driftingsouls/ds2/server/modules/TechListeController.java

    r327b751 r7a648c6  
    129129                                researchable.put(f.getID(), f); 
    130130                        }  
    131                         else if( !f.isVisibile() ) { 
     131                        else if( !f.isVisibile(user) ) { 
    132132                                if( user.getAccessLevel() >= 20 ) { 
    133133                                        invisible.put(f.getID(), f); 
  • src/net/driftingsouls/ds2/server/modules/admin/ResearchEdit.java

    rafbce20 r7a648c6  
    1919package net.driftingsouls.ds2.server.modules.admin; 
    2020 
     21import java.util.Iterator; 
     22import java.util.List; 
     23 
    2124import net.driftingsouls.ds2.server.cargo.Cargo; 
    2225import net.driftingsouls.ds2.server.cargo.ResourceEntry; 
     
    2427import net.driftingsouls.ds2.server.config.Rasse; 
    2528import net.driftingsouls.ds2.server.config.Rassen; 
     29import net.driftingsouls.ds2.server.entities.Forschung; 
    2630import net.driftingsouls.ds2.server.framework.Common; 
    2731import net.driftingsouls.ds2.server.framework.Configuration; 
    2832import net.driftingsouls.ds2.server.framework.Context; 
    2933import net.driftingsouls.ds2.server.framework.ContextMap; 
    30 import net.driftingsouls.ds2.server.framework.db.Database; 
    31 import net.driftingsouls.ds2.server.framework.db.SQLQuery; 
    32 import net.driftingsouls.ds2.server.framework.db.SQLResultRow; 
    3334import net.driftingsouls.ds2.server.modules.AdminController; 
    34 import net.driftingsouls.ds2.server.modules.admin.AdminMenuEntry; 
    35 import net.driftingsouls.ds2.server.modules.admin.AdminPlugin; 
    3635 
    3736/** 
     
    5049                int changedata = context.getRequest().getParameterInt("changedata"); 
    5150                 
    52                 Database db = context.getDatabase(); 
    53                  
    54                 if( (changedata != 0) && (techid != 0) ) { 
    55                         // Name 
    56                         db.prepare("UPDATE forschungen SET name=? WHERE id= ?") 
    57                                 .update(context.getRequest().getParameterString("name"), techid);                
    58                          
    59                         // Voraussetzungen 
    60                         int req1 = context.getRequest().getParameterInt("req1"); 
    61                         int req2 = context.getRequest().getParameterInt("req2"); 
    62                         int req3 = context.getRequest().getParameterInt("req3"); 
    63                         int race = context.getRequest().getParameterInt("race"); 
    64                         db.update("UPDATE forschungen SET req1="+req1+",req2="+req2+",req3="+req3+",race="+race+" WHERE id="+techid); 
    65                          
    66                         // Sonstiges (BeschreibungSichtbarkeit u.a.) 
    67                         int visibility = context.getRequest().getParameterInt("visibility"); 
    68                         String descip = context.getRequest().getParameterString("descrip"); 
    69                         db.prepare("UPDATE forschungen SET descrip= ? ,visibility= ? WHERE id= ? ") 
    70                                 .update(descip, visibility, techid); 
     51                //Database db = context.getDatabase(); 
     52                org.hibernate.Session db = context.getDB(); 
     53                 
     54                if( (changedata != 0) && (techid > 0) ) { 
     55                        Forschung research = (Forschung)db.get(Forschung.class, techid); 
     56                        research.setRace(context.getRequest().getParameterInt("race")); 
     57                        research.setReq1(context.getRequest().getParameterInt("req1")); 
     58                        research.setReq2(context.getRequest().getParameterInt("req2")); 
     59                        research.setReq3(context.getRequest().getParameterInt("req3")); 
     60                        research.setVisibility( context.getRequest().getParameterInt("visibility")); 
     61                        research.setName(context.getRequest().getParameterString("name")); 
     62                        research.setDescription(context.getRequest().getParameterString("descrip")); 
     63                         
    7164                } 
    7265 
    73                 if( techid == 0 ) { 
     66                //Spezialforschungen ignorieren 
     67                if( techid <= 0 ) { 
    7468                        echo.append(Common.tableBegin( 450, "left" )); 
    7569                         
     
    8074                        echo.append("<input type=\"hidden\" name=\"module\" value=\"admin\" />\n"); 
    8175                        echo.append("Tech: <select name=\"techid\" size=\"1\" style=\"width:250px\">\n"); 
    82  
    83                         SQLQuery forschung = db.query("SELECT id,name,visibility FROM forschungen ORDER BY name"); 
    84                         while( forschung.next() ) { 
    85                                 echo.append("<option value=\""+forschung.getInt("id")+"\">"+(forschung.getInt("visibility") != 0 ? "" : "# ")+forschung.getString("name")+"</option>\n"); 
    86                         } 
    87                         forschung.free(); 
     76                         
     77                        List researches = db.createQuery("from Forschung").list(); 
     78                        for( Iterator iter=researches.iterator(); iter.hasNext(); ) { 
     79                                Forschung research = (Forschung)iter.next(); 
     80                               echo.append("<option value=\""+research.getID()+"\""+(research.getID() == techid ? " selected=\"selected\"" : "")+">"+research.getName()+"</option>\n"); 
     81                        } 
    8882 
    8983                        echo.append("</select>\n"); 
     
    9488                } 
    9589                else { 
    96                         SQLResultRow data = db.first("SELECT * FROM forschungen WHERE id="+techid); 
     90                        Forschung research = (Forschung)db.get(Forschung.class, techid); 
    9791                         
    9892                        echo.append(Common.tableBegin( 900, "left" )); 
     
    10195                         
    10296                        echo.append("<tr><td width=\"200\" colspan=\"2\" class=\"noBorderX\">"); 
    103                         echo.append("<input type=\"text\" name=\"name\" value=\""+Common._plaintitle(data.getString("name"))+"\" size=\"20\" />\n"); 
     97                        echo.append("<input type=\"text\" name=\"name\" value=\""+Common._plaintitle(research.getName())+"\" size=\"20\" />\n"); 
    10498                        echo.append(" ("+techid+")</td>\n");; 
    10599 
     
    115109                         
    116110                        echo.append("<select name=\"race\" size=\"1\" style=\"width:100px\">\n"); 
    117                         echo.append("<option value=\"-1\" "+(data.getInt("race") == -1 ? "selected=\"selected\"" : "")+">Alle</option>\n"); 
     111                        echo.append("<option value=\"-1\" "+(research.getRace() == -1 ? "selected=\"selected\"" : "")+">Alle</option>\n"); 
    118112                        for( Rasse rasse : Rassen.get() ) { 
    119                                 echo.append("<option value=\""+rasse.getID()+"\" "+(data.getInt("race") == rasse.getID() ? "selected=\"selected\"" : "")+">"+rasse.getName()+"</option>\n"); 
     113                                echo.append("<option value=\""+rasse.getID()+"\" "+(research.getRace() == rasse.getID() ? "selected=\"selected\"" : "")+">"+rasse.getName()+"</option>\n"); 
    120114                        }                
    121115                        echo.append("</select>\n"); 
     
    129123                                 
    130124                                echo.append("<select name=\"req"+i+"\" size=\"1\" style=\"width:200px\">\n"); 
    131                                 echo.append("<option value=\"-1\" "+(data.getInt("req"+i) == -1 ? "selected=\"selected\"" : "")+">### Nicht erf&uuml;lbar ###</option>\n"); 
    132                                 echo.append("<option value=\"0\" "+(data.getInt("req"+i) == 0 ? "selected=\"selected\"" : "")+">Keine Voraussetzung</option>\n"); 
    133                                 SQLQuery forschung = db.query("SELECT id,name FROM forschungen ORDER BY name"); 
    134                                 while( forschung.next() ) { 
    135                                         echo.append("<option value=\""+forschung.getInt("id")+"\" "+(data.getInt("req"+i) == forschung.getInt("id") ? "selected=\"selected\"" : "")+">"+forschung.getString("name")+"</option>\n"); 
    136                                 } 
    137                                 forschung.free(); 
     125                                List researches = db.createQuery("from Forschung").list(); 
     126                                for( Iterator iter=researches.iterator(); iter.hasNext(); ) { 
     127                                        Forschung requirement = (Forschung)iter.next(); 
     128                                        echo.append("<option value=\""+research.getID()+" "+(requirement.getID() == techid ? "selected=\"selected\"" : "")+" \">"+requirement.getName()+"</option>\n"); 
     129                                } 
    138130                                echo.append("</select>\n"); 
    139131                        } 
     
    146138                        // 
    147139                         
    148                         echo.append("<img style=\"vertical-align:middle\" src=\""+Configuration.getSetting("URL")+"data/interface/time.gif\" alt=\"Dauer\" />"+data.getInt("time")); 
    149                                  
    150                         Cargo costs = new Cargo( Cargo.Type.STRING, data.getString("costs") ); 
     140                        echo.append("<img style=\"vertical-align:middle\" src=\""+Configuration.getSetting("URL")+"data/interface/time.gif\" alt=\"Dauer\" />"+research.getTime()); 
     141                                 
     142                        Cargo costs = new Cargo(research.getCosts()); 
    151143                        costs.setOption( Cargo.Option.SHOWMASS, false ); 
    152144                                 
     
    159151                                 
    160152                        boolean entry = false; 
    161                         SQLQuery result = db.query( "SELECT id,name,req1,req2,req3,visibility FROM forschungen WHERE req1="+techid+" OR req2="+techid+" OR req3="+techid); 
    162                         while( result.next() ) { 
    163                                 if( result.getInt("visibility") != 0 ) { 
    164                                         if( entry ) { 
    165                                                 echo.append(",<br />\n"); 
    166                                         } 
    167                                         echo.append("<a class=\"forschinfo\" href=\"./ds?module=admin&sess="+context.getSession()+"&page="+page+"&act="+action+"&techid="+result.getInt("id")+"\">"+Common._title(result.getString("name"))+"</a>\n"); 
     153                        List requirements = db.createQuery("from Forschung where id=? or id=? or id=?") 
     154                                .setInteger(0, research.getRequiredResearch(1)) 
     155                                .setInteger(1, research.getRequiredResearch(2)) 
     156                                .setInteger(2, research.getRequiredResearch(3)) 
     157                                .list(); 
     158                        for( Iterator iter=requirements.iterator(); iter.hasNext(); ) { 
     159                                Forschung requirement = (Forschung)iter.next(); 
     160                                 
     161                                if(entry) { 
     162                                        echo.append(",<br />\n"); 
     163                                } 
     164                                 
     165                                if(requirement.hasVisibility(Forschung.Visibility.NEVER)) { 
     166                                        echo.append("<span class=\"smallfont\"><a class=\"error\" style=\"font-style:italic\" href=\"./ds?module=admin&sess="+context.getSession()+"&page="+page+"&act="+action+"&techid="+requirement.getID()+"\">["+Common._title(requirement.getName())+"]</a></span>\n"); 
    168167                                        entry = true; 
    169168                                } 
    170169                                else { 
    171                                         if( entry ) { 
    172                                                 echo.append(",<br />\n"); 
    173                                         } 
    174                                         echo.append("<span class=\"smallfont\"><a class=\"error\" style=\"font-style:italic\" href=\"./ds?module=admin&sess="+context.getSession()+"&page="+page+"&act="+action+"&techid="+result.getInt("id")+"\">["+Common._title(result.getString("name"))+"]</a></span>\n"); 
     170                                        echo.append("<a class=\"forschinfo\" href=\"./ds?module=admin&sess="+context.getSession()+"&page="+page+"&act="+action+"&techid="+requirement.getID()+"\">"+Common._title(requirement.getName())+"</a>\n"); 
    175171                                        entry = true; 
    176172                                } 
    177173                        } 
    178                         result.free(); 
    179174                                 
    180175                        if( !entry ) { 
     
    186181                        echo.append("<tr><td class=\"noBorderX\" colspan=\"5\">"); 
    187182                        echo.append("<hr noshade=\noshade\" size=\"1\" style=\"color:#cccccc\" />"); 
    188                         echo.append("<textarea rows=\"5\" cols=\"90\" name=\"form[descrip]\">\n"); 
    189                         echo.append(Common._plaintitle(data.getString("descrip"))+"</textarea>"); 
     183                        echo.append("<textarea rows=\"5\" cols=\"90\" name=\"descrip\">\n"); 
     184                        echo.append(Common._plaintitle(research.getDescription())+"</textarea>"); 
    190185                        echo.append("</td></tr>"); 
    191186                         
     
    193188                        echo.append("<tr><td class=\"noBorderX\" colspan=\"5\">\n"); 
    194189                        echo.append("<hr noshade=\"noshade\" size=\"1\" style=\"color:#cccccc\" />\n"); 
    195                         echo.append("<input type=\"checkbox\" name=\"visible\" id=\"visible\" value=\"1\" "+(data.getInt("visibility") != 0 ? "checked=\"checked\"" : "")+" /><label for=\"visible\">Sichtbare Forschung</label><br />\n");  
     190                        echo.append("<select name=\"visibility\" size=\"1\" style=\"width:200px\">\n"); 
     191                        for(Forschung.Visibility visibility: Forschung.Visibility.values()) { 
     192                                echo.append("<option value=\""+visibility.getBits()+" "+(research.hasVisibility(visibility) ? "selected=\"selected\"" : "")+" \">"+visibility.toString()+"</option>\n"); 
     193                        } 
     194                        echo.append("</select>"); 
    196195                        echo.append("<input type=\"hidden\" name=\"changedata\" value=\"1\" />\n"); 
    197196                        echo.append("<input type=\"hidden\" name=\"page\" value=\""+page+"\" />\n");