;ò 5p>c@sfdZdkZdkZdkZdkZdZd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!d„Z"d „Z#d!„Z$d"„Z%d#„Z&d$„Z'dS(%s!Routines for empire sector units.Nf99999.899999999994cCs|d|dfSdS(s create Coords type from sector sxsyN(ssect(ssect((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysto_coordscCsÚd}dt}|idƒ}t|ƒo|djo |djout|ƒ}t |dƒ}|d|d}t |d ƒ}|d jo|d |d }q»|d |d}n||jo |}n|SdS(s% mobility cost to move into a sector f0.001f2.0sdessss\sroadf1.0f122.0seffif100.0f500.0i f115.0N( s min_mob_costsinfinite_mob_costsresultssectsgetsdsis_lands type_mcostsdes_mobsvaluesroadseff(ssectsdseffsdes_mobsresults min_mob_costsroad((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysmob_cost"s '    cCstid|d}|SdS(s sector type mobility cost s sectortypesmcostN(sempDbsmegaDBsdessresult(sdessresult((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys type_mcost4scCs<|o1|djo$|djo|djo |djSdS(s is this a land sector s s.sxsXN(sdes(sdes((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysis_land9scCs/|o$|djp|djp |djSdS(s is this a water sector s.sxsXN(sdes(sdes((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysis_sea=scCs|idƒtijSdS(s! are we oldowner of this sector soldownN(ssectsgetsempDbsCN_OWNED(ssect((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys is_oldownedAscCs|djp t|ƒSdS(s- is it possible to move commodity into sect scivN(s commoditys is_oldownedssect(ssects commodity((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysis_movable_intoEscCs`d}t|ƒp |djo d}n/t|dƒ}t|dƒ}|d|j}|SdS(s- is it possible to move commodity from sect ismiliscivi N(sresults is_oldownedssects commoditysvaluesmilsciv(ssects commoditysmilscivsresult((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysis_movable_fromIs cCsº|idƒ}|idƒ}|idƒ}|idƒ}t|ƒom|djo`|djoS|djo |djp9|djp| o$|djp|d jp |d jSdS( Nsdessownersmilscivs\ssis-s=s^(ssectsgetsdessownersmilscivsis_land(ssectsmilsdesscivsowner((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysis_explorable_intoTs cCs|i|dƒSdS(s$ atoi that returns 0 on null string iN(ssectsgetswhat(ssectswhat((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysvalue`scCsd}|djo d}n]|djo d}nF|djo d}n/|djo d }n|d jo d }n|Sd S( s* weight for different kinds of commoditiesf1.0sbarf50.0sgunf10.0sradf8.0sdustf5.0suwf2.0N(sresults commodity(s commoditysresult((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pyscommodity_weightes          cCs»d}t|dƒ}|idƒ}|o |djo{|djo d}nL|djo d}n5|d jo d }n|d jo d }nd }ti d||}n|SdS(s$ packing bonus when moving commodityf1.0seffsdesi<scivspack_civsmilspack_milsbarspack_barsuwspack_uws pack_others sectortypeN( sresultsvaluessectseffsgetsdess commodityspacksempDbsmegaDB(ssects commoditysdesspackseffsresult((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys packing_bonusts         cCst|ƒt||ƒSdS(s8 mobility cost multiplier for moving gods out of sector N(scommodity_weights commoditys packing_bonusssect(ssects commodity((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys move_weight‡scCsL|idƒ}| p|djp |djo|idƒ}n|SdS(Nssdess s_sdes(ssectsgetsnew_des(ssectsnew_des((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysnew_designationŒs"cCsQ|idƒ}t|ƒ p |djodSntidd}d}dtidd joCtd d |d d |ddƒ}|djo d}q¤ndtidd joW|djoF|idƒ}|t jo d}nt|d|ddƒ}qn|djo|d}n|djo|d}n|SdS(s Computes the maximum population of a sector. This function is a translation of function 'max_pop' in the 4.2.10 server (emp4/src/lib/common/res_pop.c).sdess?isnationsresearchiçsRES_POPsversionsenabledOptionsf50.0f4.0f200.0f3.0f600.0isBIG_CITYscseffi idis^i s~iN( ssectsgetsdessis_landsempDbsmegaDBsressmaxpopsintseffsNone(ssectsressdessmaxpopseff((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysmax_pop’s*(    $  c Csðd}dtiddjoÊtdƒ}tdƒ}tdƒ}tdƒ}td ƒ} ||t |d ƒt |d ƒt |d ƒ}t |ƒt |d ƒ}t|ƒt |d ƒ} || |}ti|| ƒ d }n|SdS(s food needed for maximum growth isNOFOODsversionsenabledOptionss UpdateTimeseat_ratesbaby_eatsuw_brateso_bratescivsuwsmiliN(sresultsempDbsmegaDBs version_valuesetuseat_ratesbaby_eatsuw_brateso_bratesvaluessects food_eatensciv_news civ_babiessuw_news uw_babiess babies_foodsmathsfloor( ssectsresults food_eatensbaby_eatsuw_bratesetus civ_babiesseat_rates babies_foodso_brates uw_babies((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysfood_needed_for_breed²s     1cCsgtdƒ}tdƒ}ti||dt|dƒƒ}|t|ƒjot|ƒ}n|SdS(s& number of civilians after the update s UpdateTimeso_bratef1.0scivN( s version_valuesetuso_bratesmathsfloorsvaluessectsresultsmax_pop(ssectsetusresultso_brate((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysciv_newÉs  $cCsgtdƒ}tdƒ}ti||dt|dƒƒ}|t|ƒjot|ƒ}n|SdS(s/ number of unemployed workers after the update s UpdateTimesuw_bratef1.0suwN( s version_valuesetusuw_bratesmathsfloorsvaluessectsresultsmax_pop(ssectsuw_bratesetusresult((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysuw_newÕs  $cCs3tdƒ}|dt|ƒt|dƒdSdS(s% work done by civs during the update s UpdateTimef100.0sworkN(s version_valuesetusciv_newssectsvalue(ssectsetu((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysciv_workâs cCs"tdƒ}|dt|ƒSdS(s# work done by uw during the update s UpdateTimef100.0N(s version_valuesetusuw_newssect(ssectsetu((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysuw_workês cCs-tdƒ}|dt|dƒddSdS(s$ work done by mil during the update s UpdateTimef100.0smilf2.0f5.0N(s version_valuesetusvaluessect(ssectsetu((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysmil_workðs cCs"t|ƒt|ƒt|ƒSdS(s2 total amount of available work during the update N(sciv_workssectsuw_worksmil_work(ssect((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys work_forceöscCs2t|ƒ}t||ƒ\}}}||fSdS(s, efficiency of the sector after next update N(s work_forcessectsworks eff_work_newseffsdes(ssectsdessworkseff((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pyseff_newûs c Cst|dƒ} t|ƒ}|d}t|ƒ}|idƒ}||idƒjoh| dd}||jo |}n||}||}| |d} | djo|}d} q¾nd| }||jo |}n|idƒt i joõt i d |}|id ƒo|d djoO|id ƒ}|tjo d}n||d }||jo |}qyn|id ƒo|d djoO|id ƒ}|tjo d}n||d }||jo |}qéqín||}| |} | ||fSdS(sV new efficiency and remaining available work of 'work' and new type of the sector seffisdesiiiidsowners sectortypeslcm_effslcmshcm_effshcmN(svaluessectseffsintsworksbworksnew_designationsnew_dessgetstypestworksempDbsCN_OWNEDsmegaDBssecttypeshas_keyslcmssNoneshcms( ssectsworkshcmsstworkssecttypestypesnew_desslcmssbworkseff((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys eff_work_new sL           !   !     cCsJt|dƒ}t|ƒ|idƒjo|d d}n||SdS(s/ work needed to increase efficiency to new_eff seffsdesiiN(svaluessectsold_effsnew_designationsgetsnew_eff(ssectsnew_effsold_eff((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pyswork_needed_for_eff:s cCsltdƒ}tdƒ}dt||ƒt|ƒt|ƒ}d|||d}t i | |ƒ SdS(s« civ needed to increase efficiency to new_eff returns zero or a negative value if there is enough mil and uw to increase efficincy to new_eff without any civ s UpdateTimeso_bratef2.0f1.0f100.0N( s version_valuesetuso_brateswork_needed_for_effssectsnew_effsuw_worksmil_worksciv_work_neededs civ_work_factsmathsfloor(ssectsnew_effs civ_work_factsetusciv_work_neededso_brate((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysciv_needed_for_effFs   'cCsltdƒ}tdƒ}dt||ƒt|ƒt|ƒ}d|||d}t i | |ƒ SdS(s« uw needed to increase efficiency to new_eff returns zero or a negative value if there is enough civ and mil to increase efficincy to new_eff without any uws s UpdateTimesuw_bratef2.0f1.0f100.0N( s version_valuesetusuw_brateswork_needed_for_effssectsnew_effsciv_worksmil_worksuw_work_neededs uw_work_factsmathsfloor(ssectsnew_effsuw_bratesetus uw_work_factsuw_work_needed((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysuw_needed_for_effZs   'cCs\tdƒ}dt||ƒt|ƒt|ƒ}dd|d}t i | |ƒ SdS(s« mil needed to increase efficiency to new_eff returns zero or a negative value if there is enough civ and uw to increase efficincy to new_eff without any mil s UpdateTimef2.0f5.0f100.0N( s version_valuesetuswork_needed_for_effssectsnew_effsciv_worksuw_worksmil_work_neededs mil_work_factsmathsfloor(ssectsnew_effsmil_work_neededsetus mil_work_fact((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysmil_needed_for_effms  'cCsqd}t|ƒ}|djo2t|dƒ}|djodd|}qÐn€|djo$t|dƒdjo d}qÐnO|d jo$t|d ƒdjo d}qÐn|d jo$t|d ƒdjo d }qÐní|djo*t|dƒ}|djo d}qÐn¶|djo2t|dƒ}|ddjodd}qÐnw|djoOtdƒ} | djo2t|dƒ}|ddjodd}q²qÐn|djo2t|dƒ}|ddjodd}qÐnÜ|djp |djo*t|dƒ}|djo d}qÐn˜|djo‚tdƒ} | djoet|dƒ}d|t|dƒjot|dƒd}n|djo d}nd|}qÐn |d jo»tdƒ} | djožt|dƒ}d|t|dƒjot|dƒd}nd|t|dƒjot|dƒd}n|djo d}nd!dd|}qÐnA|d"jp |d#joÁtd$ƒ} d}| djoŒt|dƒ}d|t|dƒjot|dƒd}nd|t|dƒjot|dƒd}n|djo d}qUnd!dd|}nf|d%joXt|d&ƒ} | djo8tdƒ} | d| d} ddd'| | }qÐnd(}|djo†t|d)ƒ}||jo||}qit|d*ƒ} |d+| jod| }qid|}| ti||d,|ƒ}n|Sd-S(.s, work needed to produce as much as possible f0.0smsminf999.0f100.0sgsgoldf500.0susuransosocontentf1000.0sjsironskf2.0s%stechf20.0soilf10.0sbsdustf5.0slspslcmsishcmf3.0sdf1.0stsrsedusasfertf9.0iidi<f0.59999999999999998f400.0N(s prod_worksnew_designationssectsdessvalues mine_conts nation_valuestechshcm_maxsoil_maxsedusdust_maxsfertspesresultswork_needed_for_effs work_100_effs work_60_effsold_effsmathssqrt(ssectsresultshcm_maxsold_effs mine_conts work_100_effsdessoil_maxs prod_workstechsedus work_60_effspesfertsdust_max((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pyswork_needed_for_prods®                                 $c Cs"tdƒ}tdƒ}d||}d}t|ƒdjo˜|t|dƒd|d}dt |d ƒt |ƒt |ƒ}||d |jo$t it i|ƒd |ƒ}nt i| |ƒ }nDt|ƒt |ƒt |ƒ}||d }t i| |ƒ }|Sd S( s‚ civ needed to produce as much as possible returns zero or a negative value if there is enough mil and uw for production s UpdateTimeso_bratef1.0isesmilf2.0f10.0i<f100.0N(s version_valuesetuso_bratesciv_growth_factsresultsnew_designationssectsvaluesnew_civswork_needed_for_effsuw_worksmil_workswork_for_60_effsmathsceilsfloorswork_needed_for_prodsciv_work_neededs civ_work_fact( ssects civ_work_factsetusciv_work_neededsciv_growth_factswork_for_60_effsresultsnew_civso_brate((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysciv_needed_for_prods  '$ cCsätdƒ}tdƒ}d}t|ƒdjoft|ƒdt|dƒjo+dt|dƒt |ƒt |ƒ}q·t |ƒ t |ƒ}n!t |ƒt |ƒt |ƒ}d |||d }ti| |ƒ Sd S( s‚ uw needed to produce as much as possible returns zero or a negative value if there is enough mil and civ for production s UpdateTimesuw_bratef0.0seismilf2.0i<f1.0f100.0N(s version_valuesetusuw_bratesuw_work_neededsnew_designationssectsciv_newsvalueswork_needed_for_effsuw_worksmil_workswork_needed_for_prodsciv_works uw_work_factsmathsfloor(ssectsuw_bratesetus uw_work_factsuw_work_needed((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pysuw_needed_for_prod)s   + cCs¢d}tid}|djo|d}nm|djo|d}nR|djo|d}n7|d jo|d }n|d jo|d }n|Sd S(s read some game specific data isversions UpdateTimes updateETUsseat_rateseatRatesbaby_eatsBEatRatesuw_brates UBirthRateso_brates birthRateN(sresultsempDbsmegaDBs versionDBswhat(swhats versionDBsresult((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys version_valueEs      cCsQd}tid}|djo|d}n|djo|d}n|SdS(s read nation levels isnationstechs technologysedus educationN(sresultsempDbsmegaDBsnationDBswhat(swhatsresultsnationDB((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys nation_valueUs   cCs©tid} d}|iddƒ}|iddƒ}t|ƒ}t |ƒ}d} ||jod|} n||jo'| o| d} n| d|} nt |ƒ} | oj|d | }| o|d | }n|d }| |id dƒ}|djo|d |}q:n| o|d| }n|iddƒ}|iddƒ} |djp | djoƒt|ƒ\}}yti|}Wntj oqûX|d||f}t|dƒ|}|djo|d|}qûnd}|iddƒ}|djo|p|}tidd} tidd}|djp|djp |djo| }|}n‰t |ƒ}|| jo | }n|djo d}nt!|ƒ}||jo |}n|djo d}n||}||}|djo|d|}n!|djo|d| }n|djo|d|}n!|djo|d| }n|od|}n|Sd S(!s:Return a string containing the sector predictions for LDB.sversionsscivisuws%d civss, s%d uwss Eats %ds becoming %ss. sfoods% NEEDS %d MORE FOOD FOR FULL GROWTH! s Expands to %s. ssdess_seffids Builds to a %d%% %s. s% Needs %d more civs to become 100%%. snationsmaxCivsmaxUWs*s!shs% %d civs not working for production. s$ %d civs needed for max production. s$ %d uws not working for production. s# %d uws needed for max production. s Predictions: N("sempDbsmegaDBs versionDBsssldbsgetscivssuwssciv_newsnewcivssuw_newsnewuwsspopstrsfood_needed_for_breedsfoodsdiffssdesseffseff_newsneweffsnewdessempParsessectorDesignationConvertsKeyErrorsciv_needed_for_effsciv_for_100_effsestrsdessmax_civssmax_uwss civ_limitsuw_limitsciv_needed_for_prodsuw_needed_for_prod(sldbsnewdessnewuwss civ_limitssdessestrsdiffsnewcivssuw_limitspopstrsfoodsmax_civsseffs versionDBsuwssciv_for_100_effsmax_uwssdessssneweffscivs((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pyssectorPredictions_sˆ         '             ((s__doc__sstringsmathsempDbsempParsesinfinite_mob_coststo_coordsmob_costs type_mcostsis_landsis_seas is_oldownedsis_movable_intosis_movable_fromsis_explorable_intosvaluescommodity_weights packing_bonuss move_weightsnew_designationsmax_popsfood_needed_for_breedsciv_newsuw_newsciv_worksuw_worksmil_works work_forceseff_news eff_work_newswork_needed_for_effsciv_needed_for_effsuw_needed_for_effsmil_needed_for_effswork_needed_for_prodsciv_needed_for_prodsuw_needed_for_prods version_values nation_valuessectorPredictions('sto_coords nation_valuesuw_needed_for_prodsempDbsis_movable_fromsmaths packing_bonussis_seasuw_newssectorPredictionssnew_designationseff_newsciv_worksmob_costsuw_worksciv_newsis_explorable_intos move_weightswork_needed_for_prods type_mcostsciv_needed_for_effsinfinite_mob_costsmil_worksempParses eff_work_newsmax_popsstringsciv_needed_for_prods work_forceswork_needed_for_effsuw_needed_for_effsis_movable_intosvaluesis_lands is_oldownedscommodity_weightsmil_needed_for_effsfood_needed_for_breeds version_value((sA/mnt/gmirror/ports/games/ptkei/work/ptkei-1.18.1/src/empSector.pys?sN                       1    € (