@@ @@ DarrienSpace Installer, Version 1 @@ This is part 9. There is at least one other section after this one. @@ Please do the previous sections in order before executing this one. @@ No editing of this file should be necessary for PennMUSH @@ @@ I haven't tested this on Tiny, though. @@ @@ It also shouldn't be necessary to pre-create objects @@ @set me=QUIET &DESCRIBE Master Ugnaught=This little guy makes ships. He doesn't look like much, but he's got the skills. &CMD_START Master Ugnaught=$start*:@pemit %#=[switch(member(v(start_commands),setr(0,ucstr(first(after(secure(%0),/))))),0, START/%q0 is not a valid command. Check START/HELP for details.,[setq(1,GO)])];@swi %q1=GO,{@tr me/do_START_%q0=[ucstr(after(secure(%0),/))],%#,%l,[escape(rest(%0))]} &START_COMMANDS Master Ugnaught=HELP HELP2 STOCK REPAIR RENAME DESCRIBE DISPLAY SHOW CANCEL UPGRADE &DO_START_HELP Master Ugnaught=@pemit %1=%r[u(Help_Header,START)][iter(v(start_commands),%r[u(help_start_##)])] &HELP_HEADER Master Ugnaught=[ljust(==< %0 Commands Help Index >,76,=)]%r &HELP_START_HELP Master Ugnaught=[ljust(START/HELP,30,.)]%bThis Help File. Throughout this text, %r[space(31)]is either the ship's DBREF number, or it's%r[space(31)]Transponder. &DO_START_DESCRIBE Master Ugnaught=@pemit %1=[switch(u(fun_can-desc,%0,%2),0, Error: '[first(rest(%0))]' may not a valid DBREF or Transponder%, or it may not be in this hangar.,1, Adding task to the queue.[switch(v(data_desc-cost),0,%rCompleting task now.[set(%q1,describe:[after(%3,%,)])],[set(me,task_[secs()]:DESCRIBE|%q1|[after(%3,%,)])]%rThe price for re-describing a ship is [v(data_desc-cost)].[switch(words(lattr(me/task_*)),1,%r[ansi(h,GIVE [name(me)]=[v(data_desc-cost)] Cred)] will complete the task now.,%rThere are other tasks in the queue ahead of this one. Complete or remove those tasks before depositing [v(data_desc-cost)] credits in order to complete this task.)])])] &FUN_CAN-DESC Master Ugnaught=[switch(isdbref(first(rest(%0))),1,setq(1,first(rest(%0))),setq(1,get(v(data_shipdb)/trans_[first(rest(%0))])))][and(hasattr(%q1,trans),t(%q1),or(nearby(%1,%q1),u(fun_isdocked)))] &DATA_DESC-COST Master Ugnaught=0 &HELP_START_DESCRIBE Master Ugnaught=[ljust(START/DESCRIBE %,,30,.)]%bChanges the description of the specified ship.%r[space(31)]The ship must be in the same location as the%r[space(31)]building object. &DO_START_RENAME Master Ugnaught=@pemit %1=[switch(u(fun_can-rename,%0,%2),0, Error: '[first(rest(%0))]' may not a valid DBREF or Transponder%, or it may not be in this hangar.,1, Adding task to the queue.[switch(v(data_rename-cost),0,%rCompleting task now. Ship renamed to:%r[name(%q1,edit(name(%q1),after(name(%q1),--%b),after(%3,%,)))],[set(me,task_[secs()]:RENAME|%q1|[after(%3,%,)])]%rThe price for renaming a ship is [v(data_rename-cost)].[switch(words(lattr(me/task_*)),1,%r[ansi(h,GIVE [name(me)]=[v(data_rename-cost)] Cred)] will complete the task now.,%rThere are other tasks in the queue ahead of this one. Complete or remove those tasks before depositing [v(data_rename-cost)] credits in order to complete this task.)])])] &FUN_CAN-RENAME Master Ugnaught=[switch(isdbref(first(rest(%0))),1,setq(1,first(rest(%0))),setq(1,get(v(data_shipdb)/trans_[first(rest(%0))])))][and(hasattr(%q1,trans),t(%q1),nearby(%1,%q1))] &DATA_COST-RENAME Master Ugnaught=0 &DATA_RENAME-COST Master Ugnaught=0 &DATA_CAN-BUILD Master Ugnaught=0 &HELP_START_RENAME Master Ugnaught=[ljust(START/RENAME %,,30,.)]%bRenames the specified ship. The ship must be%r[space(31)]in the same location as the building object. &DO_START_DISPLAY Master Ugnaught=@pemit %1=[switch(u(fun_can-display,%0,%2),0, Error: '[first(rest(%0))]' may not a valid DBREF or Transponder%, or it may not be in this hangar.,1,[ljust(----=< Status Display for [get(%q1/trans)] >=,76,-)]%r%b%b%bStatus: [extract(setr(4,get(%q1/dyn_stats)),5,1,|)]%r%b%b%bShield: [ljust([extract(%q4,1,1,|)]%/[extract(%q4,4,1,|)],10)]%bHull: [ljust(extract(%q4,2,1,|)/[extract(setr(5,get(%q1/stat_stats)),2,1,|)],12)]Fuel - [extract(%q4,6,1,|)]%/[extract(%q5,6,1,|)]%r%b%b%bSystem: [ljust(switch(loc(%q1),v(space),edit(get(%q1/system),|,%,),v(hyperspace),-- HYPERSPACE --,edit(get(get(loc(%q1)/ship)/system),|,%,)),16)]Location: [switch(loc(%q1),v(space),edit(get(%q1/location),|,%,),v(hyperspace),N/A,[name(get(loc(%q1)/ship))]%([get(loc(%q1)/hangar_name)]%))]%r%b%b%b[ljust(Ship Speed %(Real Space%): [extract(%q5,1,1,|)],35)]Hyperdrive Speed: X[fdiv(extract(%q5,7,1,|),10)]%r%b%b%b[ljust(Jumps in NavComp: [words(lattr(%q1/jump_*))]%/[extract(%q5,9,1,|)],35)]Ship Size: [extract(%q5,10,1,|)]%r%b%b%b[ljust(Maximum Radio Channels: [extract(get(%q1/comm_stats),1,1,|)],35)]Long Range Communication: [extract(get(%q1/comm_stats),5,1,|)]%r-Ship Systems Functionality-%r%b%b%b[ljust(Hyperdrive: [switch(extract(%q4,8,1,|),1,Yes,No)],18)][ljust(Landing Gear: [switch(extract(%q4,9,1,|),1,Yes,No)],20)]Docking Apparatus: [switch(extract(%q4,7,1,|),1,Yes,No)]%r%b%b%bNormal Scanner Range: [extract(get(%q1/comm_stats),3,1,|)]%r%b%b%bPassive Scanner Range: [extract(get(%q1/comm_stats),2,1,|)]%r%b%b%bFocus Scanner Range: [extract(get(%q1/comm_stats),4,1,|)]%r-Weapon Status-%r%b%b[ljust(Num,5)][ljust(Name,23)][ljust(Ammo,6)]Range Mods[switch(words(lattr(%q1/weapon_*)),0,%r-- This ship is unarmed --,map(fun_status-disp-weap,lattr(%q1/weapon_*)))])] &FUN_STATUS-DISP-WEAP Master Ugnaught=%r%b%b[ljust(after(%0,_),5)][ljust(extract(get(%q1/%0),1,1,|),23)][ljust(switch(isnum(extract(get(%q1/%0),7,1,|)),1,extract(get(%q1/%0),7,1,|),Inf.),6)]0-10: [extract(get(%q1/%0),5,1,|)] 11-100: [extract(get(%q1/%0),4,1,|)] 101-500: [extract(get(%q1/%0),3,1,|)] >500: [extract(get(%q1/%0),2,1,|)] &FUN_CAN-DISPLAY Master Ugnaught=[switch(isdbref(first(rest(%0))),1,setq(1,first(rest(%0))),setq(1,get(v(data_shipdb)/trans_[first(rest(%0))])))][and(hasattr(%q1,trans),t(%q1),or(nearby(%1,%q1),u(fun_isdocked)))] &HELP_START_DISPLAY Master Ugnaught=[ljust(START/DISPLAY ,30,.)]%bGives a complete readout on the specified ship. &DATA_PRICING Master Ugnaught=#6584 &DO_START_STOCK Master Ugnaught=@pemit %1=[switch(u(fun_can-build,%0,%2),0, Error: '[first(rest(%0))]' may not be a valid ship type%, or it may not be buildable by this ship builder. Also%, make sure you've given the ship a proper name.,1, Adding task to the queue.[set(me,task_[secs()]:BUILD|%q1|[after(%3,%,)]|[setr(3,round(mul(val(extract(get(v(data_pricing)/data_%q1),3,1,|)),.6),0))])]%rThe price for building that ship is %q3.[switch(words(lattr(me/task_*)),1,%r[ansi(h,GIVE [name(me)]=%q3 Cred)] will complete the task now.,%rThere are other tasks in the queue ahead of this one. Complete or remove those tasks before depositing %q3 credits in order to complete this task.)])] &FUN_CAN-BUILD Master Ugnaught=[and(hasattr(v(data_pricing),data_[setr(1,first(rest(%0)))]),t(match(v(data_manufacturer),switch(extract(get(v(data_pricing)/data_%q1),2,1,|),ALL,*,extract(get(v(data_pricing)/data_%q1),2,1,|)))),t(after(%0,first(rest(%0)))))] &DATA_EXIT-SUCCESS Master Ugnaught=You depart the ship. &DATA_EXIT-OSUCCESS Master Ugnaught=departs the ship. &DATA_EXIT-ODROP Master Ugnaught=emerges from the [after(name(v(ship)),:%b)]. &DATA_OXTPORT Master Ugnaught=engages its engines and takes off. &DATA_OTPORT Master Ugnaught=arrives with a woosh and slowly settles down on the landing area. &VOS_ARECEIVE Master Ugnaught=@swi [match(setr(0,first(%2,|)),#122)][t(words(lattr(me/TASK_*)))]=0*,{@pemit %#=[name(me)] only accepts money!;give %#=%0 %q0},10,{@pemit %#=Currently, there are no tasks in the queue. Check START/HELP for a list of commands that will start the ship building/modification process.;give %#=%0 %q0},11,{@pemit %#=Completing task!;@tr me/finish_[first(v(TASK_[first(sort(iter(lattr(me/TASK_*),after(##,_)),n))]),|)]=%0,TASK_[first(sort(iter(lattr(me/TASK_*),after(##,_)),n))],%#} &FINISH_BUILD Master Ugnaught=@swi [gte(%0,last(v(%1),|))][gte(v(data_max),add(%0,val(v(extract(time(),2,1)))))][lte(extract(get(v(data_builddb)/[setr(3,extract(v(%1),2,1,|))]_STAT),11,1,|),extract(get(get(v(data_home)/ship)/hangar_[get(v(data_home)/hangar_name)]),3,1))]=0*,@pemit %2=You apply %0 credits toward the completion of the task. [setr(4,sub(extract(v(%1),4,1,|),%0))] more credits are required.[set(me,%1:[replace(v(%1),4,%q4,|)])][set(me,extract(time(),2,1):[add(val(v(extract(time(),2,1))),%0)])],10*,{@pemit %2='%0' credits would make this facility exceed its monthly allowable building quota. This facility can accept [sub(val(v(data_max)),val(v(extract(time(),2,1))))] more credits this month.;give %2=%0 cred},110,{@pemit %2=There is currently not enough room in this hangar to complete the current task. Make some room in the hangar, or clear out the task. Check START/HELP for details.;give %2=%0 #122},111,{@pemit %2=Completing task...[set(me,extract(time(),2,1):[add(val(v(extract(time(),2,1))),extract(v(%1),4,1,|))])];give %2=[sub(%0,val(extract(v(%1),4,1,|)))] cred;@tr me/do_build=[extract(v(%1),2,1,|)],[extract(v(%1),3,1,|)];@wipe me/%1} &HELP_START_STOCK Master Ugnaught=[ljust(START/STOCK %,,30,.)]%bPuts a ship building task in the queue. &DO_START_REPAIR Master Ugnaught=@pemit %1=[switch(u(fun_can-repair,first(rest(%0))),0, Error: '[first(rest(%0))]' is not a valid DBREF or Transponder.,1, [switch(v(data_repair-price),FREE,Completing Ship repairs now...[setq(9,GO!)],Adding task to queue. [ansi(h,GIVE [name(me)]=[setr(2,u(fun_find-repair-price,%q1))] CREDITS)] to complete task.[switch(words(lattr(me/TASK_*)),0,%rThe task can be completed immediately., %rThere are currently tasks ahead of this one. Complete or remove those tasks first.)][set(me,TASK_[secs()]:REPAIR|%q1|%q2)][set(%q1,repair-estimate:%q2)])])];@swi %q9=GO!,@tr me/do_repair=%q1 &FUN_CAN-REPAIR Master Ugnaught=[setq(1,switch(isdbref(%0),1,%0,get(v(data_shipdb)/trans_%0)))][and(isdbref(%q1),hasattr(%q1,TRANS))] &FUN_FIND-REPAIR-PRICE Master Ugnaught=[add(50,mul(5,sub(val(extract(setr(5,get(%q1/stat_stats)),2,1,|)),val(extract(setr(6,get(%q1/dyn_stats)),2,1,|)))),round(mul(2.5,sub(val(extract(%q5,3,1,|)),val(extract(%q6,4,1,|)))),0),switch(match(extract(%q5,4,1,|),extract(%q6,8,1,|)),0,250,0),switch(match(extract(%q5,5,1,|),extract(%q6,9,1,|)),0,250,0),switch(extract(%q6,7,1,|),0,250,0),switch(hasattr(setr(7,first(iter(lcon(get(%q1/cockpit)),switch(parent(##),v(data_navcomp),##)))),cmd_scan),1,250,0),switch(hasattr(%q7,cmd_com),1,250,0))] &FINISH_REPAIR Master Ugnaught=@swi [or(nearby(me,setr(1,extract(v(%1),2,1,|))),u(fun_isdocked))][match(extract(v(%1),3,1,|),setr(0,u(fun_find-repair-price,%q1)))][gte(%0,%q0)]=0*,{@pemit %2= Error: [get(%q1/trans)] doesn't appear to be in the hangar and available for repair.;give %2=%0 cred},101,{@pemit %2= The status has changed%, but enough credits have been deposited to complete the task.;give %2=[sub(%0,%q0)] cred;@tr me/do_repair=%q1;@wipe me/%1},100,{@pemit %2= Error: The status of the ship has changed since the original task was created. Updating status and returning money... [set(me,%1:[replace(3,%q0,|)])];give %2=%0 cred},110,{@pemit %2= Not enough credits have been deposited to complete task. Please deposit %q0 credits.;give %2=%0 cred},111,{@pemit %2= Completing task...;give %2=[sub(%0,%q0)] cred;@tr me/do_repair=%q1;@wipe me/%1} &DO_REPAIR Master Ugnaught=@remit here=[name(me)] sets about repairing [after(name(%0),:%b)].[set(%0,dyn_stats:[replace(get(%0/dyn_stats),2,extract(setr(5,get(%0/stat_stats)),2,1,|),|)])][set(%0,dyn_stats:[replace(get(%0/dyn_stats),4,extract(%q5,3,1,|),|)])][set(%0,dyn_stats:[replace(get(%0/dyn_stats),5,Normal,|)])][set(%0,dyn_stats:[replace(get(%0/dyn_stats),7,1,|)])][set(%0,dyn_stats:[replace(get(%0/dyn_stats),8,extract(%q5,4,1,|),|)])][set(%0,dyn_stats:[replace(get(%0/dyn_stats),9,extract(%q5,5,1,|),|)])][wipe(setr(2,first(iter(lcon(get(%0/cockpit)),switch(parent(##),v(data_navcomp),##))))/cmd_scan)][wipe(%q2/cmd_com)]%r[after(name(%0),:%b)] is completely repaired. &HELP_START_REPAIR Master Ugnaught=[ljust(START/REPAIR ,30,.)]%bPuts a ship repair task in the queue. &DO_START_SHOW Master Ugnaught=@pemit %1=[center([name(me)],76)]%r[repeat(=,76)][switch(words(lattr(me/task_*)),0,%rThe Queue is empty.,%r[ljust(#,5)][ljust(Task,10)][ljust(Trans or Type,20)][ljust(Option,15)]Price[setq(0,sort(iter(lattr(me/task_*),after(##,_))))][iter(lnum(1,words(%q0)),%r[ljust(##.,5)][ljust(extract(setr(2,v(task_[extract(%q0,##,1)])),1,1,|),10)][ljust(switch(isdbref(extract(%q2,2,1,|)),1,get(extract(%q2,2,1,|)/trans),extract(%q2,2,1,|)),20)][ljust(switch(gt(words(%q2,|),3),1,extract(%q2,3,1,|),None),15)][last(%q2,|)])])]%r%r[name(me)] can utilize [sub(val(v(data_max)),val(v(extract(time(),2,1))))] credits towards ship building this month.%r[repeat(=,76)] &HELP_START_SHOW Master Ugnaught=[ljust(START/SHOW QUEUE,30,.)]%bDisplays the task queue. &DO_START_CANCEL Master Ugnaught=@pemit %1=[switch([isnum(setr(0,first(rest(%0))))][lte(%q0,words(lattr(me/task_*)))],0*, Error: You must specify the queue tasking by number that you wish to cancel. Use START/SHOW QUEUE for a list of the tasks that can be cancelled.,10, Error: '%q0' is an invalid task number. Check START/SHOW QUEUE for a list of the tasks that can be cancelled.,11, Tasking cancelled.[setq(1,sort(iter(lattr(me/task_*),after(##,_))))][wipe(me/task_[extract(%q1,%q0,1)])])] &HELP_START_CANCEL Master Ugnaught=[ljust(START/CANCEL ,30,.)]%bCancels the specified task. Use START/SHOW%r[space(31)]QUEUE to see the numerical list of tasks. &DO_START_UPGRADE Master Ugnaught=@pemit %1=[switch(u(fun_can-upgrade,%0),0*, Error: '%q0' doesn't appear to be a valid upgrade type. Check START/HELP for help.,10*, Error: '[last(first(%0,=))]' doesn't appear to be a valid ship DBREF or Transponder.,110*, Error: The ship is not within range of this facility.,1110*, Error: There is a problem with that particular type of upgrade. The error is:%r%q8%r,11110, Error: This facility is incapable of performing upgrades.,11111, Adding task to queue...[switch(words(lattr(me/task*)),0,%rThe task can be completed immediately.,%rThere are other tasks ahead of this one. Complete those tasks%, or cancel them. Check START/HELP for details.)][u(fun_pre-final-%q0)])] &DATA_EXIT-DESC Master Ugnaught=Before you is an opening, leading in and out of the ship. Controls to one side allow for easy locking and pressurization. With the proper equipment available, it could be used for deep-space docking. &FUN_CAN-UPGRADE-HYPERDRIVE Master Ugnaught=[switch(hasattr(%q1,baseline_stats),0,set(%q1,baseline_stats:[get(%q1/stat_stats)]))][switch([t(setr(9,member(first(v(data_hyperdrive-upgrades),|),setr(4,mul(first(after(%1,HYPERDRIVE%b)),10)))))][lt(%q4,extract(get(%q1/stat_stats),7,1,|))][switch(hasattr(me,data_illegal),1,1,lt(sub(%q9,member(first(v(data_hyperdrive-upgrades),|),extract(get(%q1/baseline_stats),7,1,|))),3))],0*,0[setq(8,The specified multiplier is not within the standard range. Multipliers are numerical and include: 3%, 2%, 1%, 1.5%, .8%, and .6. .5 is also possible%, but is not a legal upgrade.)],10*,0[setq(8,The specified multiplier is not faster then the ship's current hypderive multiplier.)],110,0[setq(8,The specified upgrade would exceed the legal bounds of upgrading.)],111,1)] &FUN_CAN-UPGRADE-HULL Master Ugnaught=[switch(hasattr(%q1,baseline_stats),0,set(%q1,baseline_stats:[get(%q1/stat_stats)]))][switch([t(setr(9,member(first(v(data_hull-upgrades),|),setr(4,first(after(%1,HULL%b))))))][gt(%q4,fdiv(extract(get(%q1/stat_stats),2,1,|),extract(get(%q1/baseline_stats),2,1,|)))],0*,0[setq(8,The specified upgrade is not within the range for this modification. A multiplier should be specified for increasing the hull. The possible choices include: 1.1%, 1.25%, and 1.5.)],10,0[setq(8,The specified multiplier for the hull is not greater then the currently modified hull.)],11,1)] &FUN_CAN-UPGRADE-NAVCOMP Master Ugnaught=[switch(hasattr(%q1,baseline_stats),0,set(%q1,baseline_stats:[get(%q1/stat_stats)]))][switch([t(setr(9,member(first(v(data_navcomp-upgrades),|),setr(4,first(after(%1,NAVCOMP%b))))))][gt(%q4,extract(get(%q1/stat_stats),9,1,|))],0*,0[setq(8,The specified upgrade is not within the range for this modification. A maximum number of hyperdrives should be specifed for upgrading the Nav-Comp. The possible choices include: 5%, 7%, 10%, 15%, 20%, and 30.)],10,0[setq(8,The specified number for maximum jumps in Nav-Comp is not greater then what the Nav-Comp can currently contain.)],11,1)] &FUN_CAN-UPGRADE-ENGINES Master Ugnaught=[switch(hasattr(%q1,baseline_stats),0,set(%q1,baseline_stats:[get(%q1/stat_stats)]))][switch([t(setr(9,member(first(v(data_engines-upgrades),|),setr(4,first(after(%1,ENGINES%b))))))][gt(%q4,fdiv(extract(get(%q1/stat_stats),1,1,|),extract(get(%q1/baseline_stats),1,1,|)))],0*,0[setq(8,The specified upgrade is not within the range for this modification. A multiplier should be specified for increase to the engines. The possible choices include: 1.1%, 1.25%, and 1.5.)],10,0[setq(8,The specified multiplier for the engines is not greater then the currently modified engine.)],11,1)] &FUN_CAN-UPGRADE-SENSORS Master Ugnaught=[switch(hasattr(%q1,baseline_comm),0,set(%q1,baseline_comm:[get(%q1/comm_stats)]))][switch([t(setr(9,member(v(data_sensors-upgrades),setr(4,first(after(%1,SENSORS%b))))))][gt(%q4,fdiv(extract(get(%q1/comm_stats),3,1,|),extract(get(%q1/baseline_comm),3,1,|)))],0*,0[setq(8,The specified upgrade is not within the range for this modification. A multiplier should be specified for increasing the sensors. The possible choices include: 1.25%, 1.5%, 1.75%, and 2.)],10,0[setq(8,The specified multiplier for the sensors is not greater then the currently modified sensors.)],11,1)] &FUN_CAN-UPGRADE-SHIELDS Master Ugnaught=[switch(hasattr(%q1,baseline_stats),0,set(%q1,baseline_stats:[get(%q1/stat_stats)]))][switch([t(setr(9,member(first(v(data_shield-upgrades),|),setr(4,first(after(%1,SHIELDS%b))))))][gt(%q4,fdiv(extract(get(%q1/stat_stats),3,1,|),extract(get(%q1/baseline_stats),3,1,|)))],0*,0[setq(8,The specified upgrade is not within the range for this modification. A multiplier should be specified for increasing the shields. The possible choices include: 1.1%, 1.25%, and 1.5.)],10,0[setq(8,The specified multiplier for the shields is not greater then the currently modified shields.)],11,1)] &DATA_HULL-UPGRADES Master Ugnaught=1.1 1.25 1.5|5 10 30 &DATA_SENSORS-UPGRADES Master Ugnaught=1.25 1.5 1.75 2 &DATA_HYPERDRIVE-UPGRADES Master Ugnaught=30 20 15 10 8 6 5|1000 3100 4100 5500 8000 10000 18000 &DATA_NAVCOMP-UPGRADES Master Ugnaught=5 7 10 15 20 30|1000 2000 3000 4400 6500 8000 &DATA_UPGRADES Master Ugnaught=HULL SENSORS HYPERDRIVE NAVCOMP ENGINES SHIELDS &FUN_PRE-FINAL-HYPERDRIVE Master Ugnaught=%rThe cost for the upgrade will be: [setr(7,mul(switch(first(name(%q1)),CAPITAL:,2,1),fold(fun_add-costs,extract(last(v(data_hyperdrive-upgrades),|),setr(6,match(first(v(data_hyperdrive-upgrades),|),extract(get(%q1/baseline_stats),7,1,|))),add(1,sub(%q9,%q6))))))].[set(me,task_[secs()]:UPGRADE|%q1|HYPERDRIVE|%q4|%q7)] &DATA_CANUPGRADE Master Ugnaught=1 &FUN_CAN-UPGRADE Master Ugnaught=[setq(1,switch(isdbref(last(first(%0,=))),1,last(first(%0,=)),get(v(data_shipdb)/trans_[last(first(%0,=))])))][t(member(v(data_upgrades),setr(0,first(after(%0,=)))))][isdbref(%q1)][or(nearby(me,%q1),u(fun_isdocked))][t(u(fun_can-upgrade-%q0,%q1,last(%0,=)))][hasattr(me,DATA_CANUPGRADE)] &FUN_ADD-COSTS Master Ugnaught=[add(%0,%1)] @@ @@ Now for some rooms. @swi hasattr(me,no_dig)=1,{@pemit me=Okay, this could be a little spammy.;@dig/tel Space;@set here=no_command;@set here=floating;@set here=Dark;@desc here=This is where ships exist when they are not landed or travelling through hyperspace.;@set me=space:%l;@dig/tel Hyperspace;@set here=no_command;@set here=floating;@set here=Dark;@desc here=This is where ships go when they are travelling in hyperspace.;@set me=hyperspace:%l;@tel me=[v(current_loc)]},{@pemit me=Because you have the dig() function working, this will be far less spammy.;@set me=space:[dig(Space)];@set me=hyperspace:[dig(Hyperspace)];@set v(space)=floating;@set v(hyperspace)=floating} @@ End of part 9. @set me=!Quiet @wait 5=@pemit me=Ninth part completed. You may begin the next part. (Only do them in sequence.)