Jump to content
Toby Rice

FSEconomy

Recommended Posts

As most of you know, I own BlueHawk Virtual Airways. I'm big into ACARS systems, flight logging, and programs/addons of that kind.

 

So I find FSEconomy. I knew about it before, but never got into it until a few weeks ago. Boy, am I bummed I never got into it earlier!! :P

 

It's the coolest way to fly ever! If you use it, you know what I mean.

 

www.fseconomy.com

 

Clipped from their site:

 

FSEconomy is a multi-player "persistent world" add-on for flight simulators, with an economical focus. It is "persistent" in that the aspects of the game - the aircraft location and fuel levels, etc. - are controlled by the players. Other players see changes in these items within the "game world".

 

FSEconomy is not a Virtual Airline. There is no schedule; there are no "levels"; there are no requirements to start from the bottom and work your way up. However, many VAs do use the FSEconomy system to operate their VA.

 

FSEconomy strives to be a framework within which players can decide what FSE is to them... their "style of play" is the phrase frequently used. It is an open-ended platform, allowing each member to tailor their experience to their individual liking. Some members choose to use FSEconomy completely on their own; others choose to work with a few other players; and still others choose to join one or more communities of made up of dozens of other players.

 

The basic concept of FSEconomy is that players use aircraft to move virtual passengers or cargo. Players can own their own aircraft, or rent them from other players or from "the system". Players must be aware of their aircraft's capabilities and fuel levels so that they can carry the cargo selected, or to not become stranded at an airport without fuel. There are many expenses associated with every flight - rental charges, fuel costs, etc.; as well as income from the virtual passengers or cargo. The goal is to make more income than associated operating expenses.

 

 

Just from reading that, you can understand how cool FSEconomy (FSE) is!

 

I started a group for my Virtual Airline, and have now made it so we use FSE instead of our former ACARS system!

 

If you'd like to join my FSE group, PM me your FSE username and I'll invite you manually.

 

Anyway, I opened an FBO at 6TN9 (SCENERY HERE) and it's running fine. Fly in sometime!

 

I think you would all like FSEconomy. Read the manual, and it will be very cool!

 

 

I thought I'd share FSE with those that don't have it :)  Use this thread to talk all about FSE if you wish.

 

Toby

Share this post


Link to post
Share on other sites

Isn't it fun!

 

I had a network down in Tennessee for some time. Had the FBO at KBNA and a host of others for a while. I sorta miss it down there! 

 

-Greg

Share this post


Link to post
Share on other sites

It is plugin based, for X-Plane at least, so any platform can use it.  Just download python (for your operating system), python interface, and the X-Economy plugin, and you are up and running.

 

Well, other than signing up for a forum account, and then requesting a game account...

Share this post


Link to post
Share on other sites

One can get addicted to it ! ... as I am  :)

"Like"

:D

 

FSE is so cool! If you want to join my group, PM me your username. My group is planning to give good pilots FBOs :)  Not joking.

Share this post


Link to post
Share on other sites

Python 2.7.6 with Python Interface.

 

It's all in the manual. Very detailed!

If you have any problems with installing it, the FSE Forums are a great place to start!

 

NOTE:  The file I have included is the replacement for the PI_xfse.py file. Use mine instead of the other one! The other would not work for me, and a guy gave me this one.

 

YOU MUST RIGHT CLICK THE FILE, THEN SELECT "SAVE TARGET AS" THEN SAVE OR ELSE IT WILL GO TO THIS:

 from XPLMMenus import * from XPLMNavigation import * from XPWidgetDefs import * from XPWidgets import * from XPStandardWidgets import * from XPLMProcessing import * from XPLMDataAccess import * from XPLMUtilities import * from XPLMPlanes import * from httplib import * from xml.dom import minidom from re import * from math import * import urllib2 import hashlib import os import sys from urllib import urlopen from XPLMDisplay import * from XPLMGraphics import * class engine: def __init__(self,cht,runtime,chtDamage,mixDamage,engineNumber): self.defaultcht=cht self.runtime=runtime self.chtDamage=chtDamage self.engineNumber=engineNumber self.mixtureDamage=mixDamage self.numberOfEngines=XPLMGetDatai(XPLMFindDataRef("sim/aircraft/engine/acf_num_engines")) print "Engine created #"+str(engineNumber) def clearEng(self): print "Clearing engine" self.runtime=0 self.chtDamage=0 self.mixtureDamage=0 def engineType(self): _engineType=[] XPLMGetDatavi(XPLMFindDataRef("sim/aircraft/prop/acf_prop_type"), _engineType, 0, self.numberOfEngines) return _engineType[self.engineNumber] def currentRPM(self): _currentRPM=[] XPLMGetDatavf(XPLMFindDataRef("sim/flightmodel/engine/ENGN_N2_"), _currentRPM, 0, self.numberOfEngines) return _currentRPM[self.engineNumber] def currentCHT(self): _currentCHT=[] XPLMGetDatavf(XPLMFindDataRef("sim/flightmodel/engine/ENGN_CHT_c"), _currentCHT, 0, self.numberOfEngines) return _currentCHT[self.engineNumber] def currentMIX(self): _currentMIX=[] XPLMGetDatavf(XPLMFindDataRef("sim/flightmodel/engine/ENGN_mixt"), _currentMIX, 0, self.numberOfEngines) return _currentMIX[self.engineNumber]*100 def planeALT(self): _planeALT=XPLMGetDataf(XPLMFindDataRef("sim/flightmodel/position/y_agl")) return _planeALT*float(3.33) def feed(self,sec,rpm,mix,cht,altitude): if rpm>0: self.runtime+=sec if self.defaultcht>0: _diff=abs(cht-self.defaultcht)/float(sec) if _diff>0: self.chtDamage+=_diff self.defaultcht=cht if (mix > 95 and altitude > 1000): self.mixtureDamage += sec def getData(self): return "&mixture"+str(self.engineNumber+1)+"="+str(self.mixtureDamage)+"&heat"+str(self.engineNumber+1)+"="+str(self.chtDamage)+"&time"+str(self.engineNumber+1)+"="+str(self.runtime) def isEngRun(self): _engrun = [] XPLMGetDatavi(XPLMFindDataRef("sim/flightmodel/engine/ENGN_running"), _engrun, 0, self.numberOfEngines) return _engrun[self.engineNumber] class PythonInterface: def XPluginStart(self): self.Name = "X-Economy" self.Sig = "ksgy.Python.XFSEconomy" self.Desc = "X-Economy - plugin for FSEconomy (www.fseconomy.net)" self.VERSION="1.7.1" self.MenuItem1 = 0 self.MenuItem2 = 0 self.flying = 0 self.flightTime = 0 self.rentalTick = 0 self.leaseTime = 0 self.errormessage = 10 self.CurrentTimeCaption="" self.LeaseCaption = 0 self.Arrived = 0 self.CurrentAircraft="" self.isTacho = 0 self.FuelTanks=[] self.stPayload=0 self.stEq=0 self.gsCheat=0 self.globalX=0 self.globalY=0 self.checkfuel=0 self.err1="" self.err2="" self.ACEngine=[] Item = XPLMAppendMenuItem(XPLMFindPluginsMenu(), "X-Economy", 0, 1) self.XFSEMenuHandlerCB = self.XFSEMenuHandler self.Id = XPLMCreateMenu(self, "X-Economy" , XPLMFindPluginsMenu(), Item, self.XFSEMenuHandlerCB, 0) XPLMAppendMenuItem(self.Id, "Open X-Economy", 1, 1) XPLMAppendMenuItem(self.Id, "-", 3, 1) XPLMAppendMenuItem(self.Id, "Set aircraft alias", 2, 1) self.checkACStateCB = self.checkACState XPLMRegisterFlightLoopCallback(self, self.checkACStateCB, 1.0, 0) self.DrawWindowCB = self.DrawWindowCallback self.KeyCB = self.KeyCallback self.MouseClickCB = self.MouseClickCallback self.WindowId = XPLMCreateWindow(self, 50, 600, 300, 400, 1, self.DrawWindowCB, self.KeyCB, self.MouseClickCB, 0) return self.Name, self.Sig, self.Desc def MouseClickCallback(self, inWindowID, x, y, inMouse, inRefcon): return 0 def KeyCallback(self, inWindowID, inKey, inFlags, inVirtualKey, inRefcon, losingFocus): pass def DrawWindowCallback(self, inWindowID, inRefcon): if(self.err1 != "" and self.errormessage > 0): lLeft = []; lTop = []; lRight = []; lBottom = [] XPLMGetWindowGeometry(inWindowID, lLeft, lTop, lRight, lBottom) left = int(lLeft[0]); top = int(lTop[0]); right = int(lRight[0]); bottom = int(lBottom[0]) gResult = XPLMDrawTranslucentDarkBox(left,top+150,right+200,bottom+300) color = 1.0, 1.0, 1.0 gResult = XPLMDrawString(color, left+5, top+132, self.err1, 0, xplmFont_Basic) gResult2 = XPLMDrawString(color, left+5, top+117, self.err2, 0, xplmFont_Basic) def XPluginStop(self): if (self.MenuItem1 == 1): XPDestroyWidget(self, self.XFSEWidget, 1) self.MenuItem1 = 0 XPLMDestroyMenu(self, self.Id) XPLMUnregisterFlightLoopCallback(self, self.checkACStateCB, 0) XPLMDestroyWindow(self, self.WindowId) pass def XPluginEnable(self): return 1 def XPluginDisable(self): pass def XPluginReceiveMessage(self, inFromWho, inMessage, inParam): pass def XFSEMenuHandler(self, inMenuRef, inItemRef): # If menu selected create our widget dialog if (inItemRef == 1): if (self.MenuItem1 == 0): self.CreateXFSEWidget(221, 640, 480, 490) self.MenuItem1 = 1 else: if(not XPIsWidgetVisible(self.XFSEWidget)): XPShowWidget(self.XFSEWidget) elif (inItemRef == 2): if (self.MenuItem2 == 0): self.CreateACAliasWidget(128, 480, 272, 87) self.MenuItem2 = 1 else: if (not XPIsWidgetVisible(self.ACAliasWidget)): XPShowWidget(self.ACAliasWidget) def XFSEpost(self, query): f1 = open(os.path.join('Resources','plugins','PythonScripts','PI_xfse.py'), 'rb') filemd5sum = hashlib.md5(f1.read()).hexdigest() f1.close() stuff = urlopen('http://www.fseconomy.net/fsagentx?md5sum='+filemd5sum+'&'+query).read() stuff = stuff.replace('&',' and ') dom = minidom.parseString(stuff) return dom def isAllEngineStopped(self): _allenginestopped = True try: for ienga in range(self.NumberOfEngines): if self.ACEngine[ienga].isEngRun() > 0: _allenginestopped = False except Exception: _allenginestopped = True return _allenginestopped def chkBrk(self,h,: if h == 1: return True if h == 0 and b < float(1.0): return True return False def checkACState(self, elapsedMe, elapsedSim, counter, refcon): self.errormessage = self.errormessage - 1 _timecompression=XPLMGetDatai(XPLMFindDataRef("sim/time/sim_speed")) if _timecompression==0: _timecompression=1 _groundcompression=XPLMGetDatai(XPLMFindDataRef("sim/time/ground_speed")) XPLMSetDatai(XPLMFindDataRef("sim/time/ground_speed"),1) _totalcompression=1/float(_timecompression) if self.flying==1: if _groundcompression>1: self.gsCheat+=1 if self.gsCheat>10: self.cancelFlight("Excessive time compression used. Your flight has been cancelled") isBrake=XPLMGetDataf(XPLMFindDataRef("sim/flightmodel/controls/parkbrake")) airspeed=XPLMGetDataf(XPLMFindDataRef("sim/flightmodel/position/groundspeed")) if self.ACEngine[0].engineType() == 3 or self.ACEngine[0].engineType() == 5: isHeli = 1 else: isHeli = 0 if _timecompression > 0: #fuel change check _fueltotal=XPLMGetDataf(XPLMFindDataRef("sim/flightmodel/weight/m_fuel_total")) # converting values to integer for comparison. values after decimal were unrelaiable for this purpose. if((int(_fueltotal) * 0.95) > int(self.checkfuel)): self.cancelFlight("Airborn refueling not allowed. Flight cancelled","") self.checkfuel=XPLMGetDataf(XPLMFindDataRef("sim/flightmodel/weight/m_fuel_total")) if XPLMGetDataf(XPLMFindDataRef("sim/time/total_flight_time_sec"))0: self.leaseTime=int(self.leaseTime)-1 if self.LeaseCaption: _leasehours=self.leaseTime/3600 _leasemins=(self.leaseTime-_leasehours*3600)/60 XPSetWidgetDescriptor(self.LeaseCaption, "Lease time left: "+str(_leasehours)+" hours "+str(_leasemins)+" mins" ) if(self.chkBrk(isHeli,isBrake) and self.ACEngine[0].currentRPM()>float(10.0) and airspeed>float(5) and self.ACEngine[0].planeALT()>10): self.flightTime=int(self.flightTime)+1 if self.CurrentTimeCaption: _currhours=self.flightTime/3600 _currmins=(self.flightTime-_currhours*3600)/60 XPSetWidgetDescriptor(self.CurrentTimeCaption, "Current flight time: "+str(_currhours)+" hours "+str(_currmins)+" mins") # engine feed only when flying: pre-heat recommended on ground for iengfeed in range(self.NumberOfEngines): #sec,rpm,mix,cht,altitude): self.ACEngine[iengfeed].feed(1,self.ACEngine[iengfeed].currentRPM(),self.ACEngine[iengfeed].currentMIX(),self.ACEngine[iengfeed].currentCHT(),self.ACEngine[iengfeed].planeALT()) # arrive else: if isHeli == 1: if(self.flightTime>60 and self.isAllEngineStopped() and self.ACEngine[0].planeALT()<50 and airspeed60 and self.isAllEngineStopped() and self.ACEngine[0].planeALT()<50 and isBrake==1.0 and airspeed

That is for v9. For v10, do as the manual says.

PI_xfse.py

Share this post


Link to post
Share on other sites

A few years ago I was involved with FSE and the only thing I did not like is that the routes primarily went to small airports. Has that changed?

Share this post


Link to post
Share on other sites

A few years ago I was involved with FSE and the only thing I did not like is that the routes primarily went to small airports. Has that changed?

There are assignments to tiny airports, and huge airports. I think if it's on a sectional chart, its on FSE :lol:

 

I have assignments from 6TN9 to KMEM, and there are others from GGOV to KFST (Sorry, I got it! lol)

 

It's not just little airports anymore.

Share this post


Link to post
Share on other sites

There are assignments to tiny airports, and huge airports. I think if it's on a sectional chart, its on FSE :lol:

 

I have assignments from 6TN9 to KMEM, and there are others from GGOV to KFST (Sorry, I got it! lol)

 

It's not just little airports anymore.

 

I believe the airport data is based on FS9/FSX. If it's in MSFS, it's in FSE. Airport sizes are based on runway lengths, IIRC. I'm coming up on 9 years in FSE at the end of this month. Crazy.

Share this post


Link to post
Share on other sites

Is it possible to use Jar a320 ? didn't see it on supported aircraft.

I searched all airports for an a320 available for rent, and no one appeared, is it possible? :/

Share this post


Link to post
Share on other sites

I am starting a group (business) on FSE for hauling cargo to FBOs. I will post another thread for it when I finish the details. It's called
"Talon Air Service".

Share this post


Link to post
Share on other sites

How to install FSEconomy in X-Plane 9

 

1.    Sign up the on FSE Forums

2.    Go to the thread where it says "New User Request" (or something like that)

3.     Request an account by saying "I'd like a game account for FSEconomy please"

4.    Within a few hours, an admin will send you a PM and reply to your post giving you your info.

5.    Next, we will install the program. I'm guessing you will use XP9.70 32bit, so this will be easy.

6.    Download and install Python 2.7.6 here: https://www.python.org/ftp/python/2.7.6/python-2.7.6.msi  INSTALL IT In your main C: drive folder, not the XP folder.

7.    Download Python Interface HERE and put the folder in your X-Plane>Resources>plugins folder.

8.    In the X-Plane Plugins folder, create a new folder called "PythonScripts"

9.    Next, right click the file I have included here and click "Save as". It should save it to your PC something called "PI_xfse".

10.  Drag that file to the "PythonScripts" folder.

 

Done! Now start X-Plane, go to the "X-Economy" plugin, log in, and do as the manual says for your first flight.

Please take a look at the manual! I know it looks long, but trust my experience and others. It works!

 

Also note this:

Modifying your airplanes so that FSE recognizes it...

You will need to edit your planes in XPlane to match the FSE specifications.

A. Using Plane-Maker

1. It is recommended that you make a copy of the plane you will be modifying, just in case something goes wrong. (copy the entire Aircraft folder as a backup) 

2. In FSeconomy.com, find the plane you want to fly in the Home -> List of Aircraft page and make a note of the type of plane you want. 

3. Open Plane-Maker then File -> Open. Go to the folder that has the plane you want to fly in FSE (acf file) Then Open.

4. Now... Go to the Standard Menu, then ViewPoint. In the descr box, change the field to match what FSE reads.
Close the Viewpoint screen with the X, then save your plane as whatever name you want. Close Plane-Maker.

5. Start X-Plane, and prepare your flight as you normally do and go fly.

B. Quick way without using Plane-maker.

From the "Plugins" menu choose "X-Economy"->"Set aircraft alias" You may change the "Modelname" there for every single airplane without   worrying for the acf.file

The "trade-off" for this method is that you will need to change "Modelname" every time you change the aircraft you are going to fly.

 

 

 

 

 

If you have any problems, see the user manual.

 

PI_xfse.py

Share this post


Link to post
Share on other sites

Servers are not down....

 

Did you use the "PI-xfse" file that I gave, or the one meant for XP10 on the usermanual?

Share this post


Link to post
Share on other sites

Servers are not down....

 

Did you use the "PI-xfse" file that I gave, or the one meant for XP10 on the usermanual?

I used the download from site, should I use yours?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×