Jump to content

Papousek

Members
  • Posts

    23
  • Joined

  • Last visited

  • Donations

    0.00 USD 

Posts posted by Papousek

  1. It still hapens with latest Net-7 launcher. Everytime when E&B client does end or closed by Terminate Client from tray where is Net7Proxy. I see that Windows message about program stop working.

     

    Net7Proxy v2.24

    Windows 7 64bit edition

     

    Additional Trace info:

     

    Problem Event Name:    APPCRASH
      Application Name:    Net7Proxy.exe
      Application Version:    0.0.0.0
      Application Timestamp:    50f8885e
      Fault Module Name:    StackHash_51fb
      Fault Module Version:    6.1.7601.17725
      Fault Module Timestamp:    4ec49b8f
      Exception Code:    c0000374
      Exception Offset:    000ce6c3
      OS Version:    6.1.7601.2.1.0.256.4
      Locale ID:    1029
      Additional Information 1:    51fb
      Additional Information 2:    51fbb60b488237a701ec289cca08c79f
      Additional Information 3:    2fc8
      Additional Information 4:    2fc8fb3fbc5c8ad65c6cc51a6a445777
     

  2. BTW I want add some tips. I can make window bigger than 800 x 600, E&B windows can overlap and switching still works. I even make one E&B windows smaller and blend it into bigger one some kind of PiP and switch windows size and position on instance switch. I call that function PiP switch where main window come to PiP when I switching instances and PiP instance become main window. With AutoHotkey is possible to make any window transparent.

    Thanks to posibility to run more than one instace of E&B on one computer I can use all gadgets what I did use in World of Warcraft where I did run full group multibox and I did use all these kinds of trick with multiwindow on one computer with one main window for master toon and smaller windows for all slaves. With tools what I do have (HotKeynet) I can dupe mouse clicks over all instances and I'm able play all toons actively. Actually I do play 3 E&B toons and all are active when I play (I'm using all three for fight) buffing, healing and shooting even CCing mob. Before I need to use three computers now I can do it on single computer. Adventage running all three on one computer is smaller latency on key reaction. Network communication always have bigger latency than sending key on same computer to 3 different windows.

    Some ppl think thats crazy idea, but in fact I do it in all MMO games what I do play past E&B where I did start dual box. As I count it is over 8 years I do actively multiboxing. Most active accounts I had in EVE where I run crazy group of 6 proactive pirates, hunting people around 0.0 space.

  3. This interests me a lot, what is it that you use. I play EnB in windowed mode, but I am a bit sick of the need to tab out heh.

    It'd help me out a lot ^_^

    I'm using free tool AutoHotKey. Is really nice scripting engine, where you can bind actions to hot-keys. here is code snip which make you resize and switch two E&B instances with ease:

    #SingleInstance force
    ; Forced only one instace
    #WinActivateForce
    ; Force activate window (prevent taskbar buttons from flashing)
    ; Fill global variables, it is necessary for reloading script and fetching correct IDs
    WinGet, IDs, list, ahk_Class G
    if IDs >= 2
    {
     ID1 := IDs1 ; get 1st window ID
     ID2 := IDs2 ; get 2nd window ID
    }
    MX1 := 0 ; save mouse for instance switching
    MY1 := 0
    MX2 := 0
    MY2 := 0
    return
    >#F12:: Reload
    >#F11:: ExitApp
    >#F10:: ; Enumerate E&B windows, resize, move and strip Windows gadgets use it at least once after E&B start
     WinGet, IDs, list, ahk_Class G
     if IDs >= 2
     {
    	ID1 := IDs1 ; get 1st window ID
    	WinSet, Style, -0xC00000, ahk_id %ID1% ; remove titlebar
    	WinSet, Style, -0x800000, ahk_id %ID1% ; remove border
    	WinMove, ahk_id %ID1%,,0,0,640,480 ; move and resize
    	ID2 := IDs2 ; get 2nd window ID
    	WinSet, Style, -0xC00000, ahk_id %ID2% ; remove titlebar
    	WinSet, Style, -0x800000, ahk_id %ID2% ; remove border
    	WinMove, ahk_id %ID2%,,640,0,640,480 ; move and resize
     }
     return
    >#A:: ; Switch to 1st instance
     if ID1 <> 0
     {
    	MouseGetPos, MX2, MY2 ; store mouse pos in this instance
    	WinActivate, ahk_id %ID1%
    	if MX1 + MY1 > 0
     	MouseMove, MX1, MY1, 0 ; restore mouse in new instance
     }
     return
    >#B:: ; Switch to 2nd instance
     if ID2 <> 0
     {
    	MouseGetPos, MX1, MY1 ; remember where mouse was in this instance
    	WinActivate, ahk_id %ID2%
    	if MX2 + MY2 > 0
     	MouseMove, MX2, MY2, 0 ; restore mouse in 2nd instance
     }
     return
    

    on RightWin + A it will switch to instance A and on RightWin + B will switch to instance B. You need at least once use RightWin + F10 after launching both E&B clients to arrange client windows. I'd use small example for 640 x 480 windows, because I wanted produce snapshot and I have in office just 1280 x 1024 screen. But it works on any resolution just adjust numbers in WinMove I'm using home resolution 800 x 600.

    and here is nice picture how it looks E&B window side by side without any Windows gadgets

  4. Is it a client limitation that causes it to only start in the upper left corner when in windowed mode?

    I think it may be a Microsoft© Windows® limitation, lol.

    I'm using E&B windowed. Now when I can run 2 clients at once is even better. I'm using HotKeynet that tool is able move and resize window and even is able strip borders from window so I have nice and plain E&B windows without any Microsoft© Windows® obstacles (close button etc.).

    Only one I hate about E&B and thats mouse catch (it won't allow move moouse outside E&B window, like most of 1st person shooter games). For that I have another tool, what is able instantly move mouse out of window (release it from jail) without need to alt-tab.

    So I have now nice two E&B windows side by side and I'm able to switch between them without need to alt-tab.

  5. Whilst we're on the subject, is anyone able to tell me the difference between a Roadrunner+ (L3) and a Dolphin's Tail (L3) please?

    at that level none, is simply duplicit item. Diferent levels have diferent buffs. At level 3 both have same buff and same amount of buff at 100% it is +316 warp equiped.

  6. ok this is refined version. it can be even prettier if Launcher can either randomly select master port for proxy or can get one from command line. Launcher already checks network.ini iirc, so may as well update master port there.

    this version tries to read master port from network.ini, so user needs to manually change it for each client (multiple copies of EnB is probably needed too)

    Nice. I did think oposite way. Same port more IPs. This is way more elegant same IP diferent ports. Yes of course when I did run more E&B cklients in Live I had own copy for each client. E&B have open a lot of files for write so it is not possible to run more clients from same copy. I'm only confused a bit about network.ini port selection.

    Do you mean file in .\data\common or .\data\client\ini directory? I did check sections there and your diff file looks for Port defined in [MasterServer] section. That confuse me a bit I did think it could be in [GlobalServer_Client].

    Just quick Q as I did look in SVN all code is compiled in Visual Studio 2008, right? Another Q is about how to launch. I would need run proxy by hand not from Launcher or my compiled Net7Proxy would be updated from Launcher to Net-7 published one?

  7. Tienbau made it clear to me that this won't work, sorry. As I understand it, the problem is that net7proxy needs to connect to the EnB client over certain fixed ports, which will be clogged up by the first net7proxy you open, making it impossible for the second to communicate with another client.

    In the future, this may be possible, but it would require the server developers to deliberately program it in, which isn't worth it at the moment given that their time is currently used up making the server more reliable.

    Thanks for reply. From which you did told me and what I'm able to see if I check my system for ports listened on. Net7Proxy has build-in bind to localhost 127.0.0.1 and has not defined parametrized IP bind to. BTW is possible to run two different servers on same machine on same port as far as each of servers does bound to specific address like 127.0.0.1 and local ip by my example on my machine 192.168.1.202.

    I'm a bit skilled in programming and in socket definition when you build listener socket you can bound to 0.0.0.0 IP which means all IPs defined on your system or to specific IP like 127.0.0.1 for local host or 192.168.1.x as for private IP network. I think I now clearly understand limitation of actual process and relations between Net7 Launcher, Proxy and E&B client.

    Launcher does just launch Net7 Proxy and then E&B client. E&B client instead contacting old EA servers does connect to 127.0.0.1 as I have seen in launch.bat. Net7 proxy is actually hardcoded to bind to 127.0.0.1 and expect client connections from E&B client on that address. Run two Client against single Net7 Proxy is not possible because then proxy must be able handle two or more separate instances (clients) and that posibility is not coded in Net7 Proxy. I did just hope there is posibility to specify Net7 Proxy to bind to different IP on same ports. That way I would have two instances of Net7 proxy each with own client. I'm able run on same machine two instances but second one must be actually virtual machine. Limitation on EMU server side really doesn't exist, because I assure you both instances have same IP, if you looking from server side. Just one E@B instance run in my virtual PC. I'm using bridged interface in virtual PC so in fact both real and virtualized E&B client does look from EMU server like these both comming from single computer with single IP.

    I think one picture is more than thousand words. In next picture in pink you can see which addres is Net7Proxy bound (it is 0.0.0.0 that mean to all IPs defined on system).

    List of programs and used ports in system

  8. I did think there is some way how to bind NetLauncher and Net7Proxy to specific IP. For having more IPs more adapters is not necessary. I'd think I would be able to specify IP via switch or pull down menu, but I see message:

    Net7Proxy version 1.76

    Using IP: 127.0.0.1 (127.0.0.1)

    that mean localhost. If that could be changed to specific IP then running more net7Proxy Clients via NetLauncher would be possible. Even machine with multiple network adapters would have just one localhost (127.0.0.1). I saw in directory .\release batch file launch.bat it has -SERVER_ADDR arg for CLIENT.EXE specifying address 127.0.0.1. I expecting this using Net7Launcher letting client know which address to use. I didn't find way how I could tell net7proxy to use different address than 127.0.0.1

    If would be possible to specify address, then there would be no longer anything preventing run more than one CLIENT.EXE and Net7Proxy.EXE pairs per one machine. I doubt that two addapters would work at all.

  9. I saw in patch notes posibility to specify IP address, Launcher and probably game client, to be bound. Can be set by Local IP drop-down box, when I specify Server (Custom)? Is this way, how I could manage two E&B clients on same machine? I can add to my primary address any number of secondary IP addresses.

    Is here any [DEV] or [TS] who can bring light into my question? Please TIA

  10. New stable DB dump is out, are you having plan update your excelent map with new DB feed? BTW guys stop discusion about if having map is good or bad. We will have wipe, and who want can ignore map, and go on explore self. But who really want to do some testing, need to know where to go and not loosing precious time by just getting ropes.

    BTW I found corelation between location numbers stored in DB and scale what is shown on sector map. In DB number 50000 does mean 50.00 in sector map. So number shown on your interactive map need to be divided by 1000 and rounded to 2 significant number after decimal point to get ingame shown coordinates.

  11. Actually I got diferent mission as PP for HU100. It was called Joint something (I don't remember it. I was forced to forfeit and buy my HU). But let me go into problem what I had with that mission.

    Until step 8/14 it was fine. I was send to few spots in Asteroid Belts, then to Odin's Belt to Mining facility and Chavez Outpost. In step 8 I got in big troubles. It say I should kill CL39 Chavez. IMHO that alone is bit tought, but when I went into Ragnarok to given spot there was actually 2 CL39 Chavez surrounded by couple of CL30 to CL35 (6 of them) and five CL23 to CL35. All does aggro on me.

    I don't know why me being OL100 should handle 11 mobs that level and most of them does aggro on me. People does advice me get a group. Fine but there are two problems:

    1st group kill is not counted toward mission

    2nd Hull Upgrade does involve grouping? Since when? It could help but can't be forced by nature.

    I don't know what should wait for me next in steps 9 thru 14, but step 8 was enough for me to give it up and buy my HU for 300000 credits. Please could be this reviewed and rethink? my personal point of view is that mission is not in line with OL, fighting mobs around CL30 is fine but close to CL40? This is not so common.

  12. Same here. I had problem in-game I did quit to desktop. When I fired .Net 7 proxy it connect but on E&B login screen I see Connecting To Server ... and I'm unable to login. I see ppl are on-line in .Nez7 check status, but that number falling down. So it seems that who is in game is there until leave.

    Probably login server is down.

  13. This is stress test and I won't see any bad when people (who want) can look where exactly perticular mob is. I have few questions about coordinates showing in your great map. These seems to be a lot diferent than we using in Client. I didn't find any co-realtion with coords showing in your map. Second thing is question about Spw, I guess is spawn timer. If so I guess it is in seconds and when there is 0 then that mob respawn instantly when killed, or is then random time?

    BTW I found during my exploration some disproportion with real ST4 mob distribution. Example is Xipe Totec Ruined Red Dragon Outpost. In your map it show 3 CL 20 Bio-Ripers but actually there is 3 CL50 Bio-something else. Wow what a shock for me being CL20 OL70 when I pass them, lucky alive.

  14. I don't remember how faction changes did work in Live when I was grouped. I have two questions in my mind is here any light to my questions?

    1st when I'm grouped. Gain faction by killing NPC who get faction change in group? Who did most of damage 51% and more or all group members?

    2nd when my group shoot NPC who has postive standing to me (color of NPC is green). I can't shoot it but someone in my group who has yellow or red standing can. Will be my standing changed (lowered) too?

    Sorry if my question sound stupid, but that's my concern around grouping and faction change.

  15. When I did play live I had two accounts and I did run two clients on same machine. Because game now need Net7 proxy to be able play on Net7 servers I guess that's not possible anymore. Or I did miss something around in forums with how-to. I saw post talking about VMWARE or other virtualising tools. So I guess I need host system to run two copies of Net7 Launcher and two E&B clients. Am I right?

    May be there is some tweak fro Net7 Launcher to allow two separate E@B clients running and one Net7-Proxy running. Please can anyone give me a bit of light in dark? :)

  16. Updated script with all classes (TS,JS and PP) added new sectors and links according to ST4. I'm not only sure about link Altair III and Aganju. I found in some map it should be Progen Combinate only. Had no time to test it even I do have PP. I did add option for groups to avoid all restricted paths. Here is complete script:

    <HTML>
    <HEAD>
    <script language=javascript>
    var m_arrBig=new Array();
    m_arrBig[0]=new AreaItem(0,'Alpha Centauri');
    m_arrBig[1]=new AreaItem(1,'Antares');
    m_arrBig[2]=new AreaItem(2,'Aquitaine');
    m_arrBig[3]=new AreaItem(3,'Aragoth');
    m_arrBig[4]=new AreaItem(4,'Beta Hydri');
    m_arrBig[5]=new AreaItem(5,'Capella');
    m_arrBig[6]=new AreaItem(6,'Deneb');
    m_arrBig[7]=new AreaItem(7,'Gallina');
    m_arrBig[8]=new AreaItem(8,'Sirius');
    m_arrBig[9]=new AreaItem(9,'Smugglers Run');
    m_arrBig[10]=new AreaItem(10,'Sol');
    m_arrBig[11]=new AreaItem(11,'Tau Ceti');
    m_arrBig[12]=new AreaItem(12,'Vega');
    m_arrBig[13]=new AreaItem(13,'61 Cygni');
    m_arrBig[14]=new AreaItem(14,'Altair');
    m_arrBig[15]=new AreaItem(15,'Proxima Centauri');
    m_arrBig[16]=new AreaItem(16,'Castor');
    function AreaItem(nID,sName)
    {
     this.id=nID;
     this.name=sName;
    }
    var m_arrSector=new Array();
    // Alpha Centauri
    m_arrSector[00]=new SectorItem(00,0,'T','A','Witberg');
    m_arrSector[01]=new SectorItem(01,0,'T','A','Zweihander');
    m_arrSector[02]=new SectorItem(02,0,'T','A','Zweihander Planet');
    m_arrSector[79]=new SectorItem(79,0,'T','A','der Todesengel');
    // Antares
    m_arrSector[03]=new SectorItem(03,1,'J','A','Antares Frontier');
    // Aquitanie
    m_arrSector[04]=new SectorItem(04,2,'A','A','Ardus');
    // Aragoth
    m_arrSector[05]=new SectorItem(05,3,'T','A','Aragoth Prime');
    m_arrSector[06]=new SectorItem(06,3,'T','A','Fenris');
    m_arrSector[07]=new SectorItem(07,3,'T','A','Freya');
    m_arrSector[08]=new SectorItem(08,3,'T','A','Jotunheim');
    m_arrSector[09]=new SectorItem(09,3,'T','A','Muspelheim');
    m_arrSector[10]=new SectorItem(10,3,'T','A','Odin Rex');
    m_arrSector[11]=new SectorItem(11,3,'T','A','Odins Belt');
    m_arrSector[12]=new SectorItem(12,3,'T','A','Nifleheim Cloud');
    m_arrSector[13]=new SectorItem(13,3,'T','A','Ragnarok');
    m_arrSector[14]=new SectorItem(14,3,'T','A','Valkyrie Twins');
    m_arrSector[15]=new SectorItem(15,3,'T','A','Varens Girdle');
    // Beta Hydri
    m_arrSector[16]=new SectorItem(16,4,'T','A','Carpenter');
    m_arrSector[17]=new SectorItem(17,4,'T','A','Cooper');
    m_arrSector[18]=new SectorItem(18,4,'T','A','Glenn');
    m_arrSector[19]=new SectorItem(19,4,'T','A','Glorys Orbit');
    m_arrSector[20]=new SectorItem(20,4,'T','A','Grissom');
    m_arrSector[21]=new SectorItem(21,4,'T','A','Grissom Planet');
    m_arrSector[22]=new SectorItem(22,4,'T','A','Shepard');
    m_arrSector[23]=new SectorItem(23,4,'T','A','Slayton');
    // Capella
    m_arrSector[24]=new SectorItem(24,5,'J','A','Kailaasa');
    m_arrSector[25]=new SectorItem(25,5,'J','A','Yokan');
    m_arrSector[26]=new SectorItem(26,5,'J','A','Vishaos Cove');
    m_arrSector[27]=new SectorItem(27,5,'J','A','Kitiaras Veil');
    m_arrSector[28]=new SectorItem(28,5,'J','A','Dahin');
    m_arrSector[29]=new SectorItem(29,5,'J','A','Dahin Planet');
    // Deneb
    m_arrSector[30]=new SectorItem(30,6,'P','A','Roc');
    // Gallina
    m_arrSector[31]=new SectorItem(31,7,'P','A','Lagarto');
    m_arrSector[32]=new SectorItem(32,7,'P','A','Endriago');
    m_arrSector[33]=new SectorItem(33,7,'P','A','Endriago Planet');
    m_arrSector[34]=new SectorItem(34,7,'P','A','Lagarto Moon');
    // Sirius
    m_arrSector[35]=new SectorItem(35,8,'J','A','Xipe Totec');
    m_arrSector[36]=new SectorItem(36,8,'J','A','Swooping Eagle');
    m_arrSector[37]=new SectorItem(37,8,'J','A','Swooping Eagle Planet');
    // Smugglers Run
    m_arrSector[38]=new SectorItem(38,9,'A','RD','Paramis');
    m_arrSector[80]=new SectorItem(80,9,'A','RD','Blackbears Wake');
    // Sol
    m_arrSector[39]=new SectorItem(39,10,'T','A','Earth');
    m_arrSector[40]=new SectorItem(40,10,'J','A','Jupiter');
    m_arrSector[41]=new SectorItem(41,10,'J','JD','Europa');
    m_arrSector[42]=new SectorItem(42,10,'J','JE','Io');
    m_arrSector[43]=new SectorItem(43,10,'T','A','Asteroid Belt Gamma');
    m_arrSector[44]=new SectorItem(44,10,'T','A','Asteroid Belt Beta');
    m_arrSector[45]=new SectorItem(45,10,'T','A','Asteroid Belt Alpha');
    m_arrSector[46]=new SectorItem(46,10,'T','A','Saturn');
    m_arrSector[47]=new SectorItem(47,10,'T','A','Akerons Gate');
    m_arrSector[48]=new SectorItem(48,10,'P','PS','Mars Beta');
    m_arrSector[49]=new SectorItem(49,10,'P','PW','Mars Alpha');
    m_arrSector[50]=new SectorItem(50,10,'P','A','Mars');
    m_arrSector[51]=new SectorItem(51,10,'T','TE','Luna');
    m_arrSector[52]=new SectorItem(52,10,'T','TT','High Earth');
    // new Sol starting sectors for JS,TS and PP
    m_arrSector[70]=new SectorItem(70,10,'P','PP','Mars Gamma');
    m_arrSector[71]=new SectorItem(71,10,'J','PP','Ganymede');
    m_arrSector[72]=new SectorItem(72,10,'T','TS','Equatorial Earth');
    // new Sol systems
    m_arrSector[73]=new SectorItem(73,10,'T','A','Venus');
    m_arrSector[74]=new SectorItem(74,10,'T','A','Ceres');
    m_arrSector[75]=new SectorItem(75,10,'T','A','Mercury');
    m_arrSector[76]=new SectorItem(76,10,'T','A','Pluto and Charon');
    m_arrSector[77]=new SectorItem(77,10,'T','A','Uranus');
    m_arrSector[78]=new SectorItem(78,10,'T','A','Neptune');
    // Tau Ceti
    m_arrSector[53]=new SectorItem(53,11,'T','A','New Edinburgh');
    m_arrSector[54]=new SectorItem(54,11,'T','A','Inverness');
    m_arrSector[55]=new SectorItem(55,11,'T','A','Arduinne');
    m_arrSector[56]=new SectorItem(56,11,'T','A','Arduinne Planet');
    m_arrSector[57]=new SectorItem(57,11,'T','A','Inverness Planet');
    // Vega
    m_arrSector[58]=new SectorItem(58,12,'P','A','Primus');
    m_arrSector[59]=new SectorItem(59,12,'P','A','Primus Planet');
    m_arrSector[60]=new SectorItem(60,12,'P','A','Tarsis');
    // 61 Cygni
    m_arrSector[61]=new SectorItem(61,13,'T','A','Aganju');
    // Altair
    m_arrSector[62]=new SectorItem(62,14,'P','A','Altair III');
    m_arrSector[63]=new SectorItem(63,14,'P','A','Nastrand Vor');
    m_arrSector[64]=new SectorItem(64,14,'P','A','Nastrand Vor Planet');
    // Proxima Centauri
    m_arrSector[65]=new SectorItem(65,15,'T','A','Adriel Prime');
    m_arrSector[66]=new SectorItem(66,15,'T','A','Margesi');
    // Castor
    m_arrSector[67]=new SectorItem(67,16,'J','A','Ishuan');
    m_arrSector[68]=new SectorItem(68,16,'J','A','Menorb');
    m_arrSector[69]=new SectorItem(69,16,'J','A','Ishuan Planet');
    function SectorItem(nID,nBID,sAlly,sOnly,sName)
    {
     this.id=nID;              // sector id #
     this.system_id=nBID;      // system id # 
     this.name=sName;          // text name of sector
     this.alliance=sAlly;      // which alliance, terrain, progen, jenquai
     this.restriction=sOnly;   // A=All etc
     this.links=new Array();   // list of links to other sectors
     this.depth=0;             // used during search for shortest path
     this.next_sector=-1;      // used for final path mapping and display
    } 
    /////////////////////////
    function linkSectors()
    {
    linkItem(0,1);   // witberg - Zweihander
    linkItem(1,2);   // zwei - zwei planet
    linkItem(0,7);   // witberg - freya
    linkItem(51,1);  // luna, zwei
    linkItem(7,47);  // freya - akeron's
    linkItem(7,12);  // freya - nif cloud
    linkItem(7,8);   // freya - jotunheim
    linkItem(8,10);  // jotunheim - odin rex
    linkItem(10,11); // odin rex - odins belt
    linkItem(11,9);  // odins belt - muspelheim
    linkItem(9,5);   // muspelheim - aragoth prime
    linkItem(5,15);  // aragoth prime - varens girdle
    linkItem(5,14);  // aragoth prime - valkyrie twins
    linkItem(15,6);  // varens girdle - fenris
    linkItem(14,6);  // valkyrie girdle - fenris
    linkItem(29,28); // planet dahin, dahin
    linkItem(28,24); // dahin, kailaasa
    linkItem(25,24); // kailaasa, yokan
    linkItem(28,27); // kitara's veil, dahin
    linkItem(27,26); // kitara's veil, vishao's cove
    linkItem(26,3);  // vishao's cove, Antares Frontier
    linkItem(25,36); // yokan, swooping eagle
    linkItem(36,37); // swoop, planet swoop
    linkItem(36,35); // swoop, xipe totec
    linkItem(35,80); // xipe, smuggler
    linkItem(36,18); // swoop, glenn
    linkItem(36,41); // swoop, europa (JD)
    linkItem(18,16); // glenn, carpenter
    linkItem(18,23); // glenn, stayton
    linkItem(23,19); // stayton, glory
    linkItem(21,20); // grissom planet, grissom
    linkItem(20,17); // grissom, cooper
    linkItem(20,80); // grissom, smuggler
    linkItem(20,22); // grissom, shepard
    linkItem(16,22); // carpenter, shepard
    linkItem(18,46); // glenn, saturn
    linkItem(16,53); // carpenter, new edinburgh
    linkItem(53,52); // new edinburgh, high earth (TT)
    linkItem(53,54); // new edinburgh, inverness
    linkItem(54,57); // inverness, inverness planet
    linkItem(54,61); // inverness, aganju (61 cygni)
    linkItem(54,55); // inverness, arduinne
    linkItem(55,56); // arduinne, arduinne planet
    linkItem(0,4);   // witburg, ardus (aquitaine)
    linkItem(11,31); // odin's belt, lagarto
    linkItem(31,34); // lagarto, lagarto moon
    // linkItem(33,34); // endriago, lagarto moon (one way)
    linkItem(31,32); // lagarto, endriago
    linkItem(32,33); // endriago, endriago planet
    linkItem(32,58); // endriago, primus
    linkItem(31,48); // lagarto, mars beta (PS)
    linkItem(31,30); // lararto, roc (deneb)
    linkItem(59,58); // primus, primus planet
    linkItem(58,60); // primus, tarsis
    linkItem(60,49); // tarsis, mars alpha (PW)
    linkItem(40,41); // jupiter, europa (JD)
    linkItem(40,42); // jupiter, io (JE)
    linkItem(40,46); // jupiter, saturn
    linkItem(39,45); // earth, asteroid alpha
    linkItem(39,52); // earth, high earth (TT)
    linkItem(39,51); // earth, luna (TE)
    linkItem(45,46); // alpha, saturn
    linkItem(45,44); // alpha, beta
    linkItem(44,43); // beta, gamma
    linkItem(44,46); // beta, saturn
    linkItem(43,50); // gamma, mars
    linkItem(43,46); // gamma, saturn
    linkItem(50,48); // mars, mars beta (PS)
    linkItem(50,49); // mars, mars alpha (PW)
    linkItem(46,47); // saturn, akeron's gate
    linkItem(62,63); // altair III, Nastrand Vor
    linkItem(63,64); // Nastrand Vor, Nastrand Vor Planet
    linkItem(32,62); // Endriago, Altair III
    linkItem(61,62); // Aganju, Altair III
    linkItem(7,65); // Freya, Adriel Prime
    linkItem(65,66); // Adriel Prime, Margesi
    linkItem(25,68); // Yokan, Menorb
    linkItem(68,67); // Menorb, Ishaun
    linkItem(67,69); // Ishaun, Ishaun gas giant
    linkItem(39,72); // Earth, Equatorial Earth
    linkItem(72,66); // Equatorial Earth, Margesi
    linkItem(40,71); // Jupiter, Ganymede
    linkItem(71,67); // Ganymede, Ishuan
    linkItem(50,70); // Mars, Mars Gamma
    linkItem(70,62); // Mars Gamma, Altair III
    linkItem(45,73); // ABA, Venus
    linkItem(73,74); // Venus, Ceres
    linkItem(73,75); // Venus, Mercury
    linkItem(75,76); // Mercury, Pluto
    linkItem(76,77); // Pluto, Uranus
    linkItem(76,47); // Pluto, Akeron's Gate
    linkItem(77,78); // Uranus, Neptune
    linkItem(77,46); // Uranus, Saturn
    linkItem(00,79); // Witberg, der Todesengel
    linkItem(38,10); // Paramis, Odin Rex
    linkItem(38,80); // Paramis, Blackbeards's Wake
    linkItem(80,09); // Blackbeards's Wake, Muspelheim
    linkItem(80,54); // Blackbeards's Wake, Iverness
    }
    ///////////////////////////////////////
    function linkItem(nSect1ID,nSect2ID)
    {
     s1=m_arrSector[nSect1ID];
     s2=m_arrSector[nSect2ID];
     s1.links[s1.links.length]=new linkEntry(nSect2ID);   // linked lists of connecting sectors
     s2.links[s2.links.length]=new linkEntry(nSect1ID);
    }
    /////////////////////////////////////////////////////////
    function linkEntry(nSectID)
    {
     this.sector_id=nSectID;       // sector that is linked
     this.path_count=0;            // how far away destination is from here
    }
    /////////////////////////////////////////////////////////
    function loadBody()
    {
     var i;
     var h1;
     var h2;
     linkSectors();
     h1='<SELECT id="listFrom">';
     h2='<SELECT id="listTo">';
     for (i=0;i<m_arrSector.length;i++)
      {
       h1+='<OPTION VALUE='+m_arrSector[i].id+'>'+m_arrBig[m_arrSector[i].system_id].name+' -- '+m_arrSector[i].name+'</OPTION>';
       h2+='<OPTION VALUE='+m_arrSector[i].id+'>'+m_arrBig[m_arrSector[i].system_id].name+' -- '+m_arrSector[i].name+'</OPTION>';
      }
     h1+='</SELECT>';
     h2+='</SELECT>';
     spanFrom.innerHTML=h1;
     spanTo.innerHTML=h2;
    }
    ///////////////////////////////////////////////////////////
    var m_strProfession;  // This is TT, or TE etc.
    var m_arrStack;       // The list of sectors from start to finish
    ///////////////////////////////////////////////////////////
    function calcPath()
    {
     var nStartID;
     var nFinishID;
     var nDepth;
     var s,i,j;
     for (i=0;i<m_arrSector.length;i++)
      {
       m_arrSector[i].depth=0;
       m_arrSector[i].next_sector=-1;
       for (j=0;j<m_arrSector[i].links.length;j++)    // reset path finding logic values 
        {
         m_arrSector[i].links[j].path_count=0;
        }
      }   
     nStartID=document.all.listFrom.options[document.all.listFrom.selectedIndex].value;         // sector id 'from' drop down box
     nFinishID=document.all.listTo.options[document.all.listTo.selectedIndex].value;            // sector id 'to' drop down box
     m_strProfession=document.all.listProf.options[document.all.listProf.selectedIndex].text;   // profession text, TT etc
     if (nStartID==nFinishID)
      {
       alert('The limit does not exist!\n\n(you picked the same sector twice)');
       return;
      }
     nDepth=1;
     i=testPath(nStartID,nFinishID,nDepth); // go try to find the shortest path between start and finish
     if (i>0)              
      {
       m_arrStack=new Array();              // found a path, clear the display stack array
       showPath(nStartID,nFinishID);        // add sectors the display stack array
       s='<BR>Path For: '+m_strProfession+'<BR>';   // HTML to be displayed below the drop downs
      j=0;
       for (i=0;i<m_arrStack.length;i++)
        {
         s+='<BR>';
         s+=m_arrBig[m_arrSector[m_arrStack[i]].system_id].name+' - ';
         s+=m_arrSector[m_arrStack[i]].name;
         if (m_arrSector[m_arrStack[i]].restriction!='A') s+='   ['+m_strProfession+']';  // each item in stack represents the next sector to the destination
         j++;
        }
       if (j<24)
        {
         for (i=0;i<(24-j);i++)
          {
           s+='<br>';
          }
        }
       spanResult.innerHTML=s;   
      }
     else
      {
       alert('Path for '+m_strProfession+' from '+m_arrSector[nStartID].name+' to '+m_arrSector[nFinishID].name+' not found.');
      }
    }
    /////////////////////////////////////////////////////////////////////////
    // This routine contains the primary logic to find the shortest route
    // This is a recursive function, meaning it calls itself 
    /////////////////////////////////////////////////////////////////////////
    function testPath(a1,a2,nDepth) // returns how far out or 0 if not found
    {
     var i1,a,nLen,i2,nHowFar;
     var t='';
     // if the routine has already tried this sector then depth will contain how far along it was when it did try
     // the trick is if the previously tried depth is greater than the current depth (passed as argument to 'testPath')
     // then the routine will attempt to find the destination again, because this time the route would be shorter.
     if (m_arrSector[a1].depth>0 && m_arrSector[a1].depth <= nDepth) return 0;  
     // right away the depth for this sector is now established, or possibly written over (see above)
     m_arrSector[a1].depth=nDepth;
     // If the profession cannot pass through this sector, e.g. progen warrior cannot pass through High Earth, then this route fails.
     if (m_arrSector[a1].restriction!='A')
      {
       if (m_arrSector[a1].restriction!=m_strProfession) // is this a restricted sector ?
         return 0;                                       // then this sector cannot be used as a pathway to the destination
      }                                                  // return of 0 means the calling "testPath" will have to try it's next link
     // now try each link in the sector's list of sectors that are connected to it.
     for (i1=0;i1<m_arrSector[a1].links.length;i1++)
      {
       a=m_arrSector[a1].links[i1].sector_id; // get a connecting sector id # that potentially might link to the destination
       if (a==a2)  // is it a match to the final destination ?
        {
         m_arrSector[a1].next_sector=a2;      // yes, add it to the connecting path of the previous sector
         m_arrSector[a1].path_count=nDepth;   // put in how far it took to get here
         return nDepth;                       // return how far it took to get here
        }
       else
        {
         nHowFar=testPath(a,a2,nDepth+1);                // here is the recursive part, call the testPath with each linked sector to this one, a1
         if (nHowFar>0)                                  // was it able to reach it without doubling back on the path
           m_arrSector[a1].links[i1].path_count=nHowFar; // yes it did reach it, save how many steps it took to get there, compare after all links are tested
        }
      }
     nLen=9999;  // we want the path that took the fewest steps so we start high
     i2=-1;     
     for (i1=0;i1<m_arrSector[a1].links.length;i1++)
      {
       nHowFar=m_arrSector[a1].links[i1].path_count;
       if (nHowFar > 0 && nHowFar < nLen ) // each link's success is tested, looking for the lowest step count
        {
         nLen=nHowFar; 
         i2=i1;
        }  
      }
     if (nLen<9999)
      {
       m_arrSector[a1].next_sector=m_arrSector[a1].links[i2].sector_id;
       return nLen;  // return shortest path to the destination                 // here is where a successful recursion returns to the previous sector's testPath call
      }                                                                         // each sector's list of connecting sectors is tested and the shortest is marked or saved in the run
                                                                                // by putting the sector id of that shortest successful path into the "next_sector" property of this sector.
     return 0; // not found
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    // showPath is another recursive function, it is simple, just walk the "next_sector" property
    // and put the result into a list that will be sorted by the linking sectors.
    //////////////////////////////////////////////////////////////////////////////////////////////
    function showPath(a1,a2)  // now the work is all done go back and retrace the shortest path
    {
     m_arrStack[m_arrStack.length]=a1;
     if (a1==a2) return;
     if (m_arrSector[a1].next_sector < 0)  // Each "next_sector" set above is retrieved, stored into the stack list and showPath is called again.
      {
       alert('Sector #'+a1+' next sector = -1'); // debugging statement
       return;
      }
     showPath(m_arrSector[a1].next_sector,a2);
    }
    ///////////////////////////////////////////////////////////
    </SCRIPT>
    </HEAD>
    <BODY ONLOAD='loadBody();' STYLE='background-Color:MidnightBlue; color:yellow;'>
    <b>EnB Trip Calculator</b>
    <TABLE>
     <TR>
      <TD>
         Prof:   <SELECT ID="listProf"><OPTION>Grouped<OPTION>TS<OPTION>TE<OPTION>TT<OPTION>JD<OPTION>JE<OPTION>JS<OPTION>PS<OPTION>PW<OPTION>PP<OPTION>RD</SELECT>
         From:   <SPAN ID=spanFrom></SPAN>   
      <TD>
         To:   <SPAN ID=spanTo></SPAN>   <INPUT TYPE=BUTTON VALUE="Calc Path" ONCLICK='calcPath()';>  
     <TR>
      <TD COLSPAN=2>
       <SPAN ID=spanResult>
       <br><br><br><br><br><br><br><br>
       <br><br><br><br><br><br><br><br>
       <br><br><br><br><br><br><br><br>
      </SPAN>
    </TABLE>
    Visit: <A HREF='http://www.bhughes.com/'>www.bhughes.com</A><BR><BR>
    c 2010     Brian L Hughes
    </BODY>
    </HTML>
    
  17. I reading around and seems that ST4 and EMU can create all 9 classes. If is that true, can you give me rope. I did rejoin this great stuff, after 8 years when I left E&B on Sunset. I did launch my patched client via .Net7 launcher but screen did offer 6 standard classes only.

    Sorry if I did miss some FAQ where is answer.

×
×
  • Create New...