Dahan's Skill System

DSS was designed especially for a multi-user text-based gaming environment, after long use and experimentation of other skill systems. MUSHes often use skill systems to arbitrate combat and other tasks, with the intention of providing a fair and equal means of handling situations which could possibly lead to a character's death. Many table-top systems have been adapted to on-line use before, but are often awkward due to a number of factors. I have tried to design the system for both ease of use, flexibility, and realism. I hope you enjoy the results.

Author: Dahan
Category: Other
Compatibility: CobraMUSH, PennMUSH.

Instructions

Copy and paste the below code into a compatible MUSH or MUX.

MUSHCode for Dahan's Skill System

@@ Start Installation

@@ DSS Database(#105Wnz)
@@ Type: Thing Flags: WIZARD NO_COMMAND STARTUP
@@ Owner: Skilly Zone: *NOTHING* Pennies: 10
@@ Parent: *NOTHING*

@create DSS Database
@set DSS Database=Wizard

&COST_LANG Database=25
&DB_GLOBAL Database=#104
&DB_HELP Database=#106
@DESCRIBE Database=This object is the heart of the skills system. It contains data about attributes, skills, feats, and health levels. Also included are global functions and private u-functions. It also protects certain attributes it uses to store data on players. This object does not include help files or any commands.%r%rThe following attribute prefixes are used:%r%tDB_%tUsed for important database numbers.%r%tFN_%tUsed for internal u-functions.%r%tFUN_%tUsed for global functions.%r%tLIST_%tUsed for various lists.%r%tSF_%tUsed to store pre-approved skill focuses.%r%rOther important attributes:%r%tSTARTUP, DESCRIBE.
&FN_ADD Database=add(%0,%1)
&FN_ADD_FIRST Database=add(first(%0),first(%1))
&FN_ADJ_SKILL Database=[ifelse([t(setr(0,grab(v(List_Skills),[first(%1,:)][ifelse(gte(words(%1,:),2),:*,%b*)],|)))],[setq(1,fold(FN_Adj_Skill2,[squish(after(%q0,&))],[%0] 1 0))][round(add(mul(%2,extract(%q1,2,1)),extract(%q1,3,1)),0)],#-1 Invalid skill name.)]
&FN_ADJ_SKILL2 Database=[extract(%0,1,1)] [sub(extract(%0,2,1),before(%1,_))] [add(extract(%0,3,1),mul(before(%1,_),ulocal(FN_GetBaseLevel2,extract(%0,1,1),after(%1,_))))]
&FN_ATTR_COST Database=[mul(10,sub(ulocal(FN_Cost,%2),ulocal(FN_Cost,ulocal(FN_GetBaseAttr,%0,%1))))]
&FN_ATTR_MODS Database=[setq(0,repeat(0%b,[words(v(List_Attrs))]))][squish(iter([get(%0/Species)],ifelse(neq(0,words(setr(1,grab(v(List_Attr_Mods),[##] *,|)))),setq(0,vadd(%q0,rest(%q1))),)))][%q0]
&FN_CLINE Database=[ansi(g,[repeat(-,sub(37,ceil(fdiv(strlen(%0),2))))]<)] [ansi(rh,%0)] [ansi(g,>[repeat(-,sub(37,div(strlen(%0),2)))])]
&FN_COLOR_NUM Database=[ansi(switch(%0,>100,c,>66,g,>33,y,r),%0)]
&FN_COST Database=[switch(%0,>90,add(145,mul(sub(%0,90),4)),>75,add(100,mul(sub(%0,75),3)),>50,add(50,mul(sub(%0,50),2)),%0)]
&FN_DIE Database=[mul(sign(%0),ifelse(eq(%0,0),0,die(1,abs(%0))))]
&FN_DMG_ROLL Database=[fdiv(add(1,floor(switch(rand(200),100,%0,>100,[add(%0,mul(sub(100,%0),fdiv(mod(#$,100),100)))],[div(mul(%0,mod(#$,100)),100)]))),100)]
&FN_FOOTER Database=%b[ansi(b,`-[repeat(=,72)]-')]
&FN_GETATTR Database=[extract(extract(get(%0/DSS_Attrs),1,1,|),match(v(List_Attrs),%1),1)]
&FN_GETBASEATTR Database=[extract(extract(get(%0/DSS_Attrs),3,1,|),match(v(List_Attrs),%1),1)]
&FN_GETBASELEVEL Database=[ifelse(match(v(List_Attrs),%1),ulocal(FN_GetBaseAttr,%0,%1),ulocal(FN_GetBaseSkill,%0,%1))]
&FN_GETBASELEVEL2 Database=[ifelse(match(v(List_Attrs),%1),ulocal(FN_GetAttr,%0,%1),ulocal(FN_GetBaseSkill,%0,%1))]
&FN_GETBASESKILL Database=[ifelse(t(setr(0,grab(get(%0/DSS_Skills),[%1] *,|))),extract(%q0,3,1),0)]
&FN_GETLEVEL Database=[ifelse(match(v(List_Attrs),%1),ulocal(FN_GetAttr,%0,%1),ulocal(FN_GetSkill,%0,%1))]
&FN_GETSKILL Database=[setq(0,grab(get(%0/DSS_Skills),[%1] *,|))][switch([t(%q0)][t(match(v(List_Skills),[first(%1,:)][ifelse(gte(words(%1,:),2),:*,%b*)],|))],1*,extract(%q0,2,1),01,ulocal(FN_Adj_Skill,%0,%1,0),#-1 Invalid skill)]
&FN_HASSKILLS Database=[eq(3,words(get(%0/DSS_Attrs),|))]
&FN_HEADER Database=[center([ansi(rh,. o O)] [ansi(wh,%0)] [ansi(rh,O o .)],78)]%r[ansi(b,%b.-[repeat(=,72)]-.)]
&FN_ILINE Database=%b[ansi(b,>---<)] [ansi(mh,%0)] [ansi(b,>[repeat(-,sub(67,strlen(%0)))]<)]
&FN_ISADMIN Database=[orflags(%0,Wr)]
&FN_ISAMMO Database=[t(match(lparent(%0),#119))]
&FN_ISARMOR Database=[t(match(lparent(%0),#118))]
&FN_ISFS Database=0
&FN_ISWEAPON Database=[t(match(lparent(%0),#114))]
&FN_PARSE_ATTR Database=[grab(v(List_Attrs),[%0]*)]
&FN_PARSE_SKILL Database=[first(first(setr(9,grab(v(List_Skills),[edit(squish(before(%0,:)),%b,_)]*,|))),:)][ifelse(gte(words(%q9,:),2),:[lcstr(edit(squish(after(%0,:)),%b,_))],)]
&FN_PMATCH Database=[switch(pmatch(%0),#-1,locate(%#,%0,PTahilmna),#$)]
&FN_REPLACE Database=[squish([extract(%0,1,dec(%1))] [%2] [extract(%0,inc(%1),sub(words(%0),%1))])]
&FN_SEEALSO Database=%r[u(FN_Line)]%r[center(See also: [iter(%0,[ansi(y,edit(##,_,%b))],,\,%b)].,78)]
&FN_SETATTR Database=[set(%0,DSS_Attrs:[vadd(setr(0,extract(get(%0/DSS_Attrs),2,1,|)),setr(1,[u(FN_Replace,extract(get(%0/DSS_Attrs),3,1,|),match(v(List_Attrs),%1),%2)]))]|[%q0]|[%q1])][ulocal(FN_Update_Skills,%0)]
&FN_SETLEVEL Database=[ifelse(match(v(List_Attrs),%1),ulocal(FN_SetAttr,%0,%1),ulocal(FN_SetSkill,%0,%1))]
&FN_SETSKILL Database=[set(%0,DSS_Skills:[setunion([ifelse(eq(%2,0),,[%1] [ulocal(FN_Adj_Skill,%0,%1,%2)] [%2])],setdiff(get(%0/DSS_Skills),grab(get(%0/DSS_Skills),[%1] *,|),|),|)])]
&FN_SHEET Database=[setq(0,secure(%0))][switch([isdbref(%q0)][u(FN_HasSkills,%q0)],11,[ulocal(FN_Sheet_Top,%q0)][ulocal(FN_Sheet_Attr,%q0)][ulocal(FN_Sheet_Skill,%q0)][ulocal(FN_Sheet_Feat,%q0)][ulocal(FN_Sheet_Lang,%q0)][ulocal(FN_Sheet_Gear,%q0)][ulocal(FN_Sheet_Health,%q0)][ulocal(FN_Footer)],0*,[u(MSG_NotPlayer)],10,[u(MSG_NoTraits)],[u(MSG_Crit)])]
&FN_SHEET2 Database=[setq(0,secure(%0))][setq(1,extract(Attr Skill Feat Lang Gear Health,match(Attributes Skills Feats Languages Gear Health,[%1]*),1))][switch([isdbref(%q0)][u(FN_HasSkills,%q0)],11,[ulocal(FN_Sheet_Top,%q0)][ulocal(FN_Sheet_[%q1],%q0)][ulocal(FN_Footer)],0*,[u(MSG_NotPlayer)],10,[u(MSG_NoTraits)],[u(MSG_Crit)])]
&FN_SHEET_ATTR Database=[u(FN_ILine,Attributes)]%r[ansi(b,|)]%b[repeat([ljust(ansi(c,Attribute),15)][ljust(ansi(c,Adj Base),10)],3)][ansi(b,|%r|%b[repeat([ansi(b,repeat(~,24))]%b,3)])][iter(extract(v(List_Attrs),1,6),[ifelse(mod(sub(#@,1),3),,[ansi(b,|%r|%b)])][ljust(ansi(y,[##]:),15)][rjust(extract(extract(get(%0/DSS_Attrs),1,1,|),#@,1),3)]%b[rjust([extract(extract(get(%0/DSS_Attrs),3,1,|),#@,1)],4)]%b%b,,)][ansi(b,|)]%r
&FN_SHEET_FEAT Database=[ifelse(words(get(%0/DSS_Feats)),[u(FN_ILine,Feats)]%r[ansi(b,|)]%b[iter(u(FN_Sort3Col,get(%0/DSS_Feats)),[ifelse(or(eq(#@,1),mod(sub(#@,1),3)),,[ansi(b,|%r|%b)])][ljust(edit(##,_,%b),25)],,)][ansi(b,|)]%r,)]
&FN_SHEET_GEAR Database=[u(FN_ILine,Gear)]%r[ansi(b,|)]%b[ljust([ansi(y,Armor:)] [ifelse(isdbref(get(%0/DSS_Armor)),name(get(%0/DSS_Armor)),None)],37)][ljust([ansi(y,Weapon:)] [ifelse(isdbref(get(%0/DSS_Weapon)),name(get(%0/DSS_Weapon)),None)],38)][ansi(b,|)]%r
&FN_SHEET_HEALTH Database=[setq(0,u(FN_WP,%0))][setq(1,u(FN_SP,%0))][setq(2,u(FN_GetAttr,%0,Strength))][u(FN_ILine,Health)][ifelse(words(get(%0/DSS_WP)),%r[ansi(b,|)][ansi(c,[rjust(#,3)][rjust(WP,3)]%b[ljust(Description,50)]%b[rjust(Occurred,17)])]%b[ansi(b,|)]%r[ansi(b,|[rjust(~~ ~~,6)]%b[repeat(~,50)]%b[repeat(~,17)]%b|)][iter(get(%0/DSS_WP),%r[ansi(b,|)][rjust(#@,3)][rjust(first(##),3)]%b[ljust(left(edit(extract(##,4,1),_,%b),50),50)]%b[rjust(timestring(sub(secs(),extract(##,2,1))),17)]%b[ansi(b,|)],|,)]%r[ansi(b,|[space(76)]|)],)]%r[ansi(b,|)][ljust(%b[ansi(y,Status:)] [ulocal(FN_Status,%0)] [ansi(c,\()][sub(100,div(mul(100,%q0),%q2))]\% Healthy[ansi(c,\))],38)][ljust(%b[ansi(y,Stun Points:)] [%q1],38)][ansi(b,|%r|)][ljust(%b[ansi(y,Consitution:)] [%q2],38)][ljust(%b[ansi(y,Wound Points:)] [%q0],38)][ansi(b,|)]%r[ifelse(match(get(%0/DSS_Feats),Unconscious),[ansi(b,|[space(76)]|%r|)][center(ansi(c,May be revived [ifelse(lte([setr(4,add(get(%0/DSS_SP),mul(60,sub(%q0,%q2)),mul(-1,secs())))],0),now.,in [timestring(%q4)].)]),76)][ansi(b,|)]%r,)]
&FN_SHEET_LANG Database=[u(FN_ILine,Languages)]%r[ansi(b,|)]%b[iter(u(FN_Sort3Col,get(%0/DSS_Languages)),[ifelse(or(eq(#@,1),mod(sub(#@,1),3)),,[ansi(b,|%r|%b)])][ljust([ifelse(match(##,get(%0/DSS_Lingo)),[ansi(yh,*)][ansi(wh,edit(##,_,%b))][ansi(yh,*)],edit(##,_,%b))],25)],,)][ansi(b,|)]%r
&FN_SHEET_SKILL Database=[ifelse(words(get(%0/DSS_Skills),|),[u(FN_ILine,Skills)]%r[ansi(b,|)]%b[ansi(c,[rjust(Adj,4)]%bBase%b[ljust(Skill,28)][rjust(Adj,4)]%bBase%b[ljust(Skill,27)])][ansi(b,|%r| [repeat(~,36)]%b%b[repeat(~,36)])] [iter(ulocal(FN_Sort2Col,get(%0/DSS_Skills),|),[ifelse(mod(sub(#@,1),2),,[ansi(b,|%r|)])][ifelse(comp(_,##),[rjust(u(FN_Color_Num,extract(##,2,1)),5)][rjust(u(FN_Color_Num,extract(##,3,1)),4)]%b%b[ljust(ansi(w,[edit(before(first(##),:),_,%b)][ifelse(gte(words(first(##),:),2),: [squish(edit(after(first(##),:),_,%b))],)]),26)],[space(37)])],|)]%b[ansi(b,|)]%r,)]
&FN_SHEET_TOP Database=[u(FN_Header,[name(%0)]'s Sheet)]%r[ansi(b,|)]%b[ljust([ansi(y,Species:)] [get(%0/Species)],25)][ljust([ansi(y,Gender:)] [get(%0/Sex)],25)][ljust([ansi(y,Age:)] [get(%0/age)],25)][ansi(b,|%r|)]%b[ljust([ansi(y,Experience Points:)] [get(%0/DSS_XP)],25)][ljust([ansi(y,Health:)] [u(FN_Status,%0)],50)][ansi(b,|)]%r
&FN_SKILL_COST Database=[sub(ulocal(FN_Cost,%2),ulocal(FN_Cost,ulocal(FN_GetBaseSkill,%0,%1)))]
&FN_SORT2COL Database=[setq(0,sort(%0,a,%1))][setq(1,ceil(fdiv(words(%q0,%1),2)))][iter(lnum(mul(2,%q1)),[setq(2,extract(%q0,add(1,mul(mod(##,2),%q1),mod(div(##,2),%q1)),1,%1))][ifelse(%q2,%q2,_)],,%1)]
&FN_SORT3COL Database=[setq(0,sort(%0,a))][setq(1,ceil(fdiv(words(%q0),3)))][iter(lnum(mul(3,%q1)),[setq(2,extract(%q0,add(1,mul(mod(##,3),%q1),mod(div(##,3),%q1)),1))][ifelse(%q2,%q2,_)])]
&FN_SORT_WP Database=[comp(extract(%0,2,1),extract(%1,2,1))]
&FN_SP Database=[ceil(max(0,fdiv(sub(val(get(%0/DSS_SP)),secs()),60)))]
&FN_STATUS Database=[ifelse(isdbref(%0),ifelse(match(get(%0/DSS_Feats),Dead),Dead,ifelse(match(get(%0/DSS_Feats),Unconscious),Unconscious,ifelse(gt(ulocal(FN_WP,%0),0),Injured,ifelse(gt(ulocal(FN_SP,%0),0),Dazed,Healthy)))),#-1 I can't see that here.)]
&FN_TOHIT_ROLL Database=[sub(%0,add(ulocal(FN_Die,%2),max(0,sub(%1,ulocal(FN_Die,ceil(mul(100,fdiv(100,abs(%2)))))))))]
&FN_UPDATE Database=[set(%0,DSS_Attrs:[vadd(setr(0,ulocal(FN_Attr_Mods,%0)),setr(1,extract(get(%0/DSS_Attrs),3,1,|)))]|[%q0]|[%q1])][u(FN_Update_Skills,%0)][u(FN_Update_Health,%0)]
&FN_UPDATE_HEALTH Database=[setq(0,u(FN_SP,%0))][setq(1,u(FN_WP,%0))][setq(2,ulocal(FN_GetAttr,%0,Strength))][set(%0,DSS_Feats:[setunion(get(%0/DSS_Feats),[switch([gt(%q1,%q2)][gt(add(%q0,%q1),%q2)],1*,Dead,01,Unconscious,)])]
&FN_UPDATE_SKILLS Database=[set(%0,DSS_Skills:[iter(get(%0/DSS_Skills),[extract(##,1,1)] [ulocal(FN_Adj_Skill,%0,extract(##,1,1),extract(##,3,1))] [extract(##,3,1)],|,|)])]
&FN_VADD Database=vadd(%0,%1)
&FN_WP Database=[ifelse(words(get(%0/DSS_WP),|),fold(FN_Add_First,get(%0/DSS_WP),0,|),0)]
&FUN_GETBASESKILL DSS Database=[ifelse(u(FN_IsAdmin,%@),[ulocal(FN_GetBaseLevel,ulocal(FN_Pmatch,secure(%0)),edit(squish(secure(%1)),%b,_))],#-1 Permission denied.)]
&FUN_GETSKILL Database=[ifelse(u(FN_IsAdmin,%@),[ulocal(FN_GetLevel,ulocal(FN_Pmatch,secure(%0)),[edit(squish(first(secure(%1),:)),%b,_)][ifelse(words(after(secure(%1),:)),:[edit(squish(after(secure(%1),:)),%b,_)],)])],#-1 Permission denied.)]
&FUN_HASFEAT Database=[ifelse(u(FN_IsAdmin,%@),t(match(get(ulocal(FN_PMatch,secure(%0))/DSS_Feats),edit(squish(secure(%1)),%b,_))),#-1 Permission denied.)]
&FUN_HASSKILLS Database=[ulocal(FN_HasSkills,ulocal(FN_Pmatch,secure(%0)))]
&FUN_HASWEAPON Database=[isdbref(get(ulocal(FN_Pmatch,secure(%0))/DSS_WEAPON))]
&FUN_HSTATUS Database=[ulocal(FN_Status,ulocal(FN_Pmatch,secure(%0)))]
&FUN_ISARMOR Database=[ulocal(FN_IsArmor,secure(%0))]
&FUN_ISWEAPON Database=[ulocal(FN_IsWeapon,secure(%0))]
&FUN_WEAPON Database=[default(ulocal(FN_Pmatch,secure(%0))/DSS_Weapon,#-1)]
&LIST_ATTRS Database=Strength Dexterity Perception Intelligence
&LIST_ATTR_MODS Database=
&LIST_FEATS Database=
&LIST_LANGUAGES Database=English
&LIST_SKILLS Database=
&MSG_CRIT Database=[ansi(rh,-)] Critical error. Report this bug at once!
&MSG_INCAPACITATED Database=[ansi(rh,-)] You are in no condition to do that.
&MSG_NOTADMIN Database=[ansi(rh,-)] You must be an admin to use this command.
&MSG_NOTATTR Database=[ansi(rh,-)] That is not a valid attribute name.
&MSG_NOTFEAT Database=[ansi(rh,-)] That is not a valid feat.
&MSG_NOTLANG Database=[ansi(rh,-)] That is not a valid language.
&MSG_NOTNAME Database=[ansi(rh,-)] That is not a valid attribute or skill name.
&MSG_NOTPLAYER Database=[ansi(rh,-)] No player with that name could be located.
&MSG_NOTRAITS Database=[ansi(rh,-)] That player is not configured for the skills system yet.
&MSG_NOTSKILL Database=[ansi(rh,-)] That is not a valid skill name.
&MSG_PREREQS Database=[ansi(rh,-)] You do not meet the prereqs to increase this trait.
@STARTUP Database=@drain %!;@notify %!;@dolist BG_Approved DSS_Armor DSS_Attrs DSS_Feats DSS_Languages DSS_Lingo DSS_Skills DSS_SP DSS_Weapon DSS_WP DSS_XP Species Status={@attribute/access/retroactive [##]=no_command no_inherit no_clone mortal_dark wizard};@dolist [lattr(%!/FUN_*)]={@function [rest(##,_)]=%!,##}


@@ DSS Help Files(#106Wn)
@@ Type: Thing Flags: WIZARD NO_COMMAND
@@ Owner: Skilly Zone: *NOTHING* Pennies: 10
@@ Parent: *NOTHING*

@create DSS Help Files
@set DSS Help Files=Wizard

&CMD_RAISE Help=$+raise * to *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%0)))][setq(2,max(0,min(100,val(secure(%1)))))][ifelse(ulocal(v(DB_Database)/FN_HasSkills,%#),switch([t(words(%q0))][t(words(%q1))],1*,[ifelse([setq(3,ulocal(v(DB_Database)/FN_Attr_Cost,%#,%q0,%q2))][gte(%q3,0)],ifelse([gte(get(%#/DSS_XP),%q3)],[ulocal(v(DB_Database)/FN_SetAttr,%#,%q0,%q2)][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])][ansi(gh,-)] You +raise your [ansi(y,%q0)] to [ansi(y,%q2)] at a cost of [ansi(y,%q3)] experience points.,[ansi(rh,-)] You do not have the [ansi(y,%q3)] experience points required for that.),[ansi(rh,-)] You cannot +lower [ansi(y,%q0)] with +raise.)],01,[ifelse([or([not(match(%q1,*:*))],[match(get(%#/DSS_Skills),[%q1],|)],[match(get(v(DB_Database)/SF_[first(%q1,:)]),[after(%q1,:)])])],ifelse([setq(3,ulocal(v(DB_Database)/FN_Skill_Cost,%#,%q1,%q2))][gte(%q3,0)],ifelse([gte(get(%#/DSS_XP),%q3)],[ulocal(v(DB_Database)/FN_SetSkill,%#,%q1,%q2)][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])]You +raise your [ansi(y,edit(%q1,_,%b))] to [ansi(y,%q2)] at cost of [ansi(y,%q3)] experience points.,[ansi(rh,-)] You do not have the [ansi(y,%q3)] experience points required for that.),[ansi(rh,-)] You cannot +lower [ansi(y,%q1)] with +raise.),[ansi(rh,-)] That is not a pre-approved skill focus for [ansi(y,first(%q1,:))].)],[u(v(DB_Database)/MSG_NotName)]),[u(v(DB_Database)/MSG_NoTraits)])]
&DB_DATABASE Help=#105
&DB_GLOBAL Help=#104
&FN_FOOTER Help=[ansi(b,-[repeat(=,76)]-)]
&FN_HEADER Help=[center([ansi(rh,. o O)] [ansi(wh,%0)] [ansi(rh,O o .)],78)]%r[ansi(b,-[repeat(=,76)]-)]
&FN_HELP Help=[u(FN_Header,[iter(edit(rest(%0,_),_,%b),capstr(lcstr(##)))])]%r[u(%0)]%r[u(FN_Footer)]
&FN_LINE Help=%b%b[ansi(b,repeat(~,74))]
&FN_RLJUST Help=[space(2)][ansi(wh,ucstr(%0))][rjust(%1,sub(74,strlen(%0)),.)]
&FN_SEEALSO Help=%r[u(FN_Line,b)]%r[center(See also: [iter(%0,[ansi(y,edit(##,_,%b))],,\,%b)].,78)]
&FN_SHELP Help=[setq(0,grab(get(v(DB_Database)/List_Skills),[%0]*,|))][u(FN_Header,Skill: [edit(%0,_,%b)])]%r[ansi(yh,Can be used untrained:)] [ifelse(extract(%q0,3,1),Yes,No)].%r[ansi(yh,Skill Adjusters:)] [ifelse(words(after(%q0,&)),iter(after(%q0,&),[mul(100,first(##,_))]%% [edit(after(##,_),_,%b)],,\,%b),None)]. [ifelse(gte(words(first(%q0),:),2),%r[ansi(yh,Pre-approved Focuses:)] [iter(get(v(DB_Database)/SF_[%0]),edit(##,_,%b),,\,%b)].,)]%r[ansi(yh,Description:)] [u(SK_[%0])][ifelse(extract(%q0,2,1),%r%r[ansi(rh,Note:)] You must be force sensitive to learn or use this skill.,)]%r[u(FN_Footer)]
&HELP_+ADDFEAT Help=%b%b[ansi(rh,+addfeat)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<feat>)]%r%r%b%bThis command allows an admin to give a player any feat. Experience points are automatically charged or refunded. Players should use +select instead.[u(FN_SeeAlso,+delfeat +newfeat +remfeat Feats List_Feats)]
&HELP_+ADDLANG Help=%b%b[ansi(rh,+addlang)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<language>)]%r%r%b%bThis command allows an admin to give a player any known language. Experience points are automatically charged or refunded. Players should use +select instead.[u(FN_SeeAlso,+dellang +newlang +remlang Languages List_Languages)]
&HELP_+ADDSP Help=%b%b[ansi(rh,+addsp)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<#>)]%r%r%b%bThis command is used to give a player stun points. While the staff may do this to anyone, mortals may give only themselves stun points. Stun points wear off automatically at the rate of one per minute.[u(FN_SeeAlso,+delsp +addwound +delwound +revive Health)]
&HELP_+ADDWOUND Help=%b%b[ansi(rh,+addwound)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<#>)][ansi(rh,/)][ansi(y,<describe>)]%r%r%b%bThis command is used to give a player wounds. The wound description will be truncated at 52 characters, so be concise. While the staff may do this to anyone, mortals may wound themselves.[u(FN_SeeAlso,+addsp +delsp +delwound +revive Health)]
&HELP_+ATASKROLL Help=%b%b[ansi(rh,+ataskroll)] [ansi(y,<player>)][ansi(rh,/)][ansi(y,<skill/attribute>)] [ansi(rh,at)] [ansi(y,<difficulty>)]%r%r%b%bAttributes and skills are tested in the same way. The system randomly picks a number between zero and the difficulty. If your adjusted attribute or skill is greater than that number, you succeed. Otherwise you fail. In either case, a number will be displayed showing how well you succeeded or failed. This number is computed by subtracting the random number from your adjusted attribute or skill level. This command allows an admin to roll a the specified trait on a player. The results of the roll is reported to the admin and everyone at the player's location.[u(FN_SeeAlso,+staskroll +taskroll Attributes Skills)]
&HELP_+ATTACK Help=%b%b[ansi(rh,+attack)] [ansi(y,<player>)] [ansi(rh,at)] [ansi(y,<difficulty>)]%r%r%b%bThis will preform the necessary rolls involved in attacking another player, including to-hit and damage rolls, factoring skills, weapons, and armor as needed. However, be warned this does not actually inflict damage, it only makes a recommendation as to degree of damage and if the attack succeeds. When in doubt in the area of difficulty, the default is 100. Higher difficulties makes attacks more difficult.[u(FN_SeeAlso,Combat +addsp +addwound)]
&HELP_+DELFEAT Help=%b%b[ansi(rh,+delfeat)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<feat>)]%r%r%b%bThis command allows an admin to remove any feat from a player. Experience points are automatically charged or refunded.
&HELP_+DELLANG Help=%b%b[ansi(rh,+dellang)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<language>)]%r%r%b%bThis command allows an admin to remove any known language from a player. Experience points are automatically charged or refunded.
&HELP_+DELSP Help=%b%b[ansi(rh,+delsp)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<#>)]%r%r%b%bThis command allows an admin to remove stun points from a character. Stun points wear off automatically at the rate of one per minute.[u(FN_SeeAlso,+addsp +addwound +delwound +revive Health)]
&HELP_+DELWOUND Help=%b%b[ansi(rh,+delwound)] [ansi(y,<#>)]%r%r%b%bThis will allow an admin to remove the <#>th wound from a player's sheet, where the first wound is the oldest.[u(FN_SeeAlso,+addwound +addsp +delsp +revive Health)]
&HELP_+GIVEXP Help=%b%b[ansi(rh,+givexp)] [ansi(y,<player>)][ansi(rh,=)][ansi(y,<amount>)]%r%r%b%bThis command allows an admin to give a player experience points. It is possible to 'give' a negative number of points to a player, thus taking them away.[u(FN_SeeAlso,Experience_Points)]
&HELP_+NEWFEAT Help=%b%b[ansi(rh,+newfeat)] [ansi(y,<name>)][ansi(rh,/)][ansi(y,<0 if admin setable only\, else 1>)][ansi(rh,/)][ansi(y,<xp cost>)]%r%r%b%bThis command allows an admin to create a new standard feat.[u(FN_SeeAlso,+addfeat +delfeat +remfeat +select Feats List_Feats)]
&HELP_+NEWFOCUS Help=%b%b[ansi(rh,+newfocus)] [ansi(y,<skill>:<focus>)]%r%r%b%bThis command allows the staff to add new skill focuses to a skill's pre-approved list of skill focuses. This only works for skills that actually have a skill focus.[u(FN_SeeAlso,+remfocus List_Force_Skills List_Skills Skills)]
&HELP_+NEWLANG Help=%b%b[ansi(rh,+newlang)] [ansi(y,<language>)]%r%r%b%bThis command adds a new language to the pre-approved language list.[u(FN_SeeAlso,+addlang +dellang +remlang +select Languages List_Languages)]
&HELP_+NEWSKILL Help=%b%b[ansi(rh,+newskill)] [ansi(y,<name>)][ansi(rh,/)][ansi(y,<Is Force skill?>)][ansi(rh,/)][ansi(y,<Can use untrained?>)][ansi(rh,/)][ansi(y,<adjusters>)][ansi(rh,/)][ansi(y,<desc>)]%r%r%b%bThis command allows an admin to easily add new skills to the skills system. Care should be taken to properly format the adjusters string. It should resemble the following string: 0.15_Dexterity 0.05_Perception[u(FN_SeeAlso,+raise +remskill +setskill List_Force_Skills List_Skills Skills)]
&HELP_+RAISE Help=%b%b[ansi(rh,+raise)] [ansi(y,<skill/attribute>)] [ansi(rh,to)] [ansi(y,<level>)]%r%r%b%bThis command will raise your skill or attribute to the level specified, providied you have enough experience points and pass the prerequistes.[u(FN_SeeAlso,+setattr +setskill Attributes Experience_Points Skills)]
&HELP_+RELOAD Help=%b%b[ansi(rh,+reload)] [ansi(y,<weapon>)]%r%r%b%bProvided you have the specified weapon, and appropriate ammo in your inventory, this will reload your weapon.[u(FN_SeeAlso,+unload)]
&HELP_+REMFEAT Help=%b%b[ansi(rh,+remfeat)] [ansi(y,<feat>)]%r%r%b%bThis command allows an admin to remove a feat from the system. It will not however remove that feat from any player who had it before. Please note that you need to type out the feat name in full.[u(FN_SeeAlso,+addfeat +delfeat +newfeat +select Feats List_Feats)]
&HELP_+REMFOCUS Help=%b%b[ansi(rh,+remfocus)] [ansi(y,<skill>:<focus>)]%r%r%b%bThis command allows the staff to remove a skill focus from a skill's pre-approved list of skill focuses. This only works for skills that actually have a skill focus.[u(FN_SeeAlso,+newfocus List_Force_Skills List_Skills Skills)]
&HELP_+REMLANG Help=%b%b[ansi(rh,+dellang)] [ansi(y,<language>)]%r%r%b%bThis command deletes a language to the pre-approved language list.[u(FN_SeeAlso,+addlang +dellang +newlang +select Languages List_Languages)]
&HELP_+REMOVE Help=%b%b[ansi(rh,+remove)]%r%r%b%bThis command allows a player to remove body armor.[u(FN_SeeAlso,+wear)]
&HELP_+REMSKILL Help=%b%b[ansi(rh,+remskill)] [ansi(y,<skill>)]%r%r%b%bThis skill allows an admin to delete a skill from the skills system. This can cause complications for any player who had that skill, so take caution when using ths command. Also, you need to type out every letter of the skill name.[u(FN_SeeAlso,+newskill +raise +setskill List_Force_Skills List_Skills Skills)]
&HELP_+REVIVE Help=%b%b[ansi(rh,+revive)] [ansi(y,\[<player>\])]%r%r%b%bThis command is used to wake up someone after they have been unconscious for a while. Without arguments, the default person to waken is yourself. Admin should note that they need to be in the same area as the target to wake them up.[u(FN_SeeAlso,+addsp +delsp +addwound +delwound Health)]
&HELP_+SAY Help=%b%b[ansi(rh,+say)] [ansi(y,<text>)]%r%r%b%bThis will cause you to speak with the language you selected using the [ansi(rh,+speak)] command. Only others who know that language and staff will understand you.[u(FN_SeeAlso,+select +speak Languages List_Languages)]
&HELP_+SELECT Help=%b%b[ansi(rh,+select)] [ansi(y,<feat/language>)]%r%r%b%bThis command allows a player to add a feat or learn a language to thier character sheet. Not all feats are availible however. Experience points are subtracted as needed. Languages cost [get(v(DB_Database)/Cost_Lang)] xp per language. Feat costs are listed in +sinfo list feats.[u(FN_SeeAlso,+addfeat +addlang +delfeat +dellang Feats Languages List_Feats List_Languages)]
&HELP_+SETATTR Help=%b%b[ansi(rh,+setattr)] [ansi(y,<player>)][ansi(rh,/)][ansi(y,<attribute>)][ansi(rh,=)][ansi(y,<level>)]%r%r%b%bThis command allows an admin to set a player's attribute to a given level. Experience points are automatically charged or refunded, but prereqs nor level limitations are checked.[u(FN_SeeAlso,+raise Attributes List_Attributes)]
&HELP_+SETSKILL Help=%b%b[ansi(rh,+setskill)] [ansi(y,<player>)][ansi(rh,/)][ansi(y,<skill>)][ansi(rh,=)][ansi(y,<level>)]%r%r%b%bThis command allows an admin to set a player's skill to a given level. Experience points are automatically charged or refunded, but prerequites are not checked and experience points can be driven into negative territory with this command. Please be careful with typing out skill focuses in full, as the pre-approved list is not checked.[u(FN_SeeAlso,+raise Skills List_Skills List_Force_Skills)]
&HELP_+SHEET Help=%b%b[ansi(rh,+sheet)] [ansi(y,\[<player>\])]%r%b%b[ansi(rh,+sheet/)][ansi(y,<catagory>)] [ansi(y,\[<player>\])]%r%b%b[ansi(rh,+sheet/mail)] [ansi(y,<player>)]%r%r%b%bThe first form of this command displays a character sheet, which contains useful data about a character's abilities, health, and other things. Only staff may view other player's +sheets in this way.%r%b%bThe second form of this command displays only a partial sheet, but otherwise works like the first form. Valid catagories are: Attributes, Skills, Feats, Languages, Gear, Health.%r%b%bThe third form of this command allows you to @mail your own sheet to anyone you wish. You should never be required to do this, but you may of your own volition.
&HELP_+SINFO Help=%b%b[ansi(rh,+sinfo)] [ansi(y,\[<topic>\])]%r%r%b%bThis command displays documentation specific to the skills system. If no argument is specified, it displays the table of contents of the skills system documentation.
&HELP_+SPEAK Help=%b%b[ansi(rh,+speak)] [ansi(y,<language>)]%r%r%b%bThis will set the langauge you speak in, when using the [ansi(rh,+say)] command. You may only select a language to speak that you know.[u(FN_SeeAlso,+say +select Languages List_Languages)]
&HELP_+STASKROLL Help=%b%b[ansi(rh,+staskroll)] [ansi(y,<player>)][ansi(rh,/)][ansi(y,<skill/attribute>)] [ansi(rh,at)] [ansi(y,<difficulty>)]%r%r%b%b%bAttributes and skills are tested in the same way. The system randomly picks a number between zero and the difficulty. If your adjusted attribute or skill is greater than that number, you succeed. Otherwise you fail. In either case, a number will be displayed showing how well you succeeded or failed. This number is computed by subtracting the random number from your adjusted attribute or skill level. This command allows an admin to roll a the specified trait on a player. The results of the roll is reported to the admin only. The 's' stands for 'secret', as in secretly preforming a task roll.[u(FN_SeeAlso,+staskroll +taskroll Attributes Skills)]
&HELP_+TASKROLL Help=%b%b[ansi(rh,+taskroll)] [ansi(y,<skill/attribute>)] [ansi(rh,at)] [ansi(y,<difficulty>)]%r%r%b%bAttributes and skills are tested in the same way. The system randomly picks a number between zero and the difficulty. If your adjusted attribute or skill is greater than that number, you succeed. Otherwise you fail. In either case, a number will be displayed showing how well you succeeded or failed. This number is computed by subtracting the random number from your adjusted attribute or skill level. This command will preform a roll for the specified skill or attribute, and announce the results to everyone at your location.[u(FN_SeeAlso,+ataskroll +staskroll Attributes Skills)]
&HELP_+TOGGLE Help=%b%b[ansi(rh,+toggle)] [ansi(y,<setting>)]%r%r%b%bThis command changes the weapon setting of the currently wielded weapon. Not all weapons have multiple settings. This is mainly intended for blasters with kill and stun settings, but some melee weapons might have this capacity as well.[u(FN_SeeAlso,+attack +wield Combat)]
&HELP_+UNLOAD Help=%b%b[ansi(rh,+unload)] [ansi(y,<weapon>)]%r%r%b%bProvided you have the specified weapon in your inventory, this will unload it.[u(FN_SeeAlso,+reload)]
&HELP_+UNWIELD Help=%b%b[ansi(rh,+unwield)]%r%r%b%bThis command allows a player to unready a weapon.[u(FN_SeeAlso,+wield)]
&HELP_+UPDATE Help=%b%b[ansi(rh,+update)] [ansi(y,\[<player>\])]%r%r%b%bVery rarely, changes in armor, species, or medical condition will affect your abilities without updating your adjusted attributes and skills. This command will update the attributes and skills of a player. Only staff may +update other players.
&HELP_+WEAR Help=%b%b[ansi(rh,+wear)] [ansi(y,<armor>)]%r%r%b%bThis command allows a player to put on some body armor.[u(FN_SeeAlso,+remove)]
&HELP_+WIELD Help=%b%b[ansi(rh,+wield)] [ansi(y,<weapon>)]%r%r%b%bThis command allows you to wield or ready a weapon for use.[u(FN_SeeAlso,+unwield)]
&HELP_ABOUT_DSS Help=%tDSS is short for Dahan's Skill System. It was designed especially for a multi-user text-based gaming environment, after long use and experimentation of other skill systems. MUSHes often use skill systems to arbitrate combat and other tasks, with the intention of providing a fair and equal means of handling situations which could possibly lead to a character's death. Many table-top systems have been adapted to on-line use before, but are often awkward due to a number of factors. I have tried to design the system for both ease of use, flexibility, and realism. I hope you enjoy the results.%r%r[space(39)]Dahan
&HELP_ATTRIBUTES Help=%tAttributes measure certain universal qualities about your character. These can be tested when no skill seems to apply to a given task. They also may affect how proficient you are with certain skills. You may increase your attributes over time by using experience points. Your species, armor, or health may effect how high or low your attributes may be modified (adjusted). This adjusted rating is the one actually used for skill adjustment or task rolls.[u(FN_SeeAlso,+raise +taskroll List_Attributes)]
&HELP_COMBAT Help=%tCombat is mostly automated, with fairly simple commands to attack one another, ready a weapon, or to wear armor. When a one character shoots another, success or failure is shown to the room and damage is recommended. Please note it's up to the victim to apply the damage to themselves. Despite all this, there are still several things players should learn if they are to combat one another.%r%r%bo Before combat breaks out, request a judge.%r%bo Once a judge is present, accept their rulings.%r%bo NEVER powerplay. Only pose what you do, and not how the others reacts.%r%bo Unlike MUDs, killing does not have an experience point reward.[u(FN_SeeAlso,Health +addsp +addwound +attack +wield +wear)]
&HELP_EXPERIENCE_POINTS Help=%tExperience points are a reward for good and active roleplaying. You may use experience points (or XP for short) to improve your attributes and skills, to gain new feats, or to learn new langauges.%r%r%b%b[ansi(wh,XP Costs:)] Skill costs change with the base level of the skill. Each point to raise a skill between zero and fifty costs 1 experience point. This cost increases to 2 xp for each point between 50 and 75, 3 xp for each point between 75 and 90, and 4 xp per point over 90. Attribute costs work like skills, but are ten times greater. Feat costs are shown in the feat list. Langauges cost [get(v(DB_Database)/Cost_Lang)] xp each.[u(FN_SeeAlso,+givexp +raise +select)]
&HELP_FEATS Help=%tFeats describe special qualities about your character, which you either have or don't have. There is no in-between. Some feats you may be able to select, others may be automatic for your species, and some still might only be granted by the staff. While feats usually improve your abilities, some restrict it, or just make you a little different.[u(FN_SeeAlso,+select Languages List_Feats List_Languages)]
&HELP_FUNCTIONS Help Files=%b%b[ansi(rh,getskill\()][ansi(y,<target>)][ansi(rh,\))] - Returns the adjusted skill or attribute.%r%b%b[ansi(rh,getbaseskill\()][ansi(y,<target>)][ansi(rh,\))] - Returns the base skill or attribute.%r%b%b[ansi(rh,hasfeat\()][ansi(y,<target>)][ansi(rh,\,)][ansi(y,<feat>)][ansi(rh,\))] - Returns 1 if target has feat, else 0.%r%b%b[ansi(rh,hasskills\()][ansi(y,<target>)][ansi(rh,\))] - Returns 1 is target has skills, else 0.%r%b%b[ansi(rh,hstatus\()][ansi(y,<target>)][ansi(rh,\))] - Returns health status of a target.%r%b%b[ansi(rh,isarmor\()][ansi(y,<target>)] - Returns 1 is target is weapon, else 0.%r%b%b[ansi(rh,isweapon\()][ansi(y,<target>)][ansi(rh,\))] - Returns 1 is target is armor, else 0.
&HELP_GLOBAL_COMMANDS Help=The following commands may be used by anyone. However, some are of limited in use should any player involved not completed chargen, while others are of expanded use to members of the staff.%r[iter(+sheet +sinfo +raise +taskroll +update +select +say +speak +addsp +addwound +revive +attack +wield +unwield +toggle +reload +unload +wear +remove,[ifelse(mod(dec(#@),5),,%r)][ljust(ansi(wh,ucstr(##)),15)])]%r%rThe following commands may only be used by the staff.%r[iter(+givexp +setattr +setskill +newskill +remskill +newfocus +remfocus +ataskroll +staskroll +addfeat +delfeat +newfeat +remfeat +addlang +dellang +newlang +remlang +delsp +delwound,[ifelse(mod(dec(#@),5),,%r)][ljust(ansi(wh,ucstr(##)),15)])]%r%rTo learn about any command, type [ansi(rh,+sinfo)] [ansi(y,<command>)]
&HELP_HEALTH Help=%tDSS uses a somewhat more complex wound system than other RPGs, taking advantage of the computerized nature of MUSHes. Each time you take damage, the system records how, who, and when damage was inflicted. Damage works on two levels: stun and wound points. Stun damage dissipates rapidly and often leaves no permanent side effects, while wound damage leaves physical injuries that often take time to heal. Should a player's stun and wound point total exceed the player's wound capacity, they are rendered unconscious. However, if a player's wound point total exceeds the player's wound capacity, they are rendered dead. Different kinds of weapons inflict different kinds of damage. One nice side effect is that unarmed combat is usually not lethal.
&HELP_INDEX Help=[setq(0,ulocal(v(DB_Database)/FN_Sort3Col,lattr(%!/HELP_*)))][iter(%q0,[ifelse(mod(dec(#@),3),,%r)][ljust(capstr(lcstr(edit(rest(##,_),_,%b))),25)])]%r%r[ansi(rh,Note: There is an +sinfo file for every one of the [words(get(v(DB_Database)/List_Skills),|)] skills.)]
&HELP_LANGUAGES Help=%tLanguages represent your ability to read, write, speak, and understand a given language. They work like feats, showing either complete ignorance or complete understanding, but are handled separately from feats for convenience. Some species may not be able to speak in certain langauges.[u(FN_SeeAlso,+say +select +speak Feats List_Feats List_Languages)]
&HELP_LIST_ATTRIBUTES Help=%b[ansi(wh,Strength)] - This attributes measures your raw strength, you ability to exert force with your muscles.%r%r%b[ansi(wh,Dexterity)] - This is a measure of your agility, speed, and fine motor control.%r%r%b[ansi(wh,Strength)] - This is a measure of how tough you are. How much punishment you can take, or how much you can drink is based of this attribute.%r%r%b[ansi(wh,Intelligence)] - This is a measure of your reasoning and problem solving abilities.%r%r%b[ansi(wh,Perception)] - This is a measure of how alert you are to your enviroment, and how quickly you can determine if something feels wrong.%r%r%b[ansi(wh,Charisma)] - This is a measure of how adept you are when dealing with people, though not necessarily how appealing you are.%r%r%b[ansi(wh,Force)] - Unless you are force sensitive, you will never notice this aspect about yourself. It's an overall measurement of how in tune you are with the Force, and how well you can use it.[u(FN_SeeAlso,+raise Attributes)]
&HELP_LIST_FEATS Help=%r[space(7)][ansi(c,[ljust(Feat,25)][rjust(XP,4)][space(6)][ljust(Feat,25)][rjust(XP,4)])]%r[space(7)][ansi(b,[repeat(~,29)][space(6)][repeat(~,29)])][setq(0,ulocal(v(DB_Database)/FN_Sort2Col,get(v(DB_Database)/List_Feats),|))][iter(%q0,[ifelse(mod(dec(#@),2),[space(6)],%r[space(7)])][ifelse(comp(_,##),[ljust(edit(extract(##,1,1),_,%b),25,.)][rjust(ifelse(extract(##,2,1),extract(##,3,1),ansi(rh,N/A)),4,.)],)],|,)]%r[u(FN_SeeAlso,+select Feats Languages List_Languages)]
&HELP_LIST_FORCE_SKILLS Help=[setq(0,iter(graball(get(v(DB_Database)/List_Skills),* 1 ? &*,|),first(##),|))][setq(1,ulocal(v(DB_Database)/FN_Sort3Col,%q0))][iter(%q1,[ifelse(mod(dec(#@),3),,%r%b)][ljust(edit(##,_,%b),25)])]%r%r[ansi(rh,Note: There is an +sinfo file for every one of the [words(%q0)] force skills)][u(FN_SeeAlso,+raise List_Skills Skills)]
&HELP_LIST_LANGUAGES Help=[setq(0,ulocal(v(DB_Database)/FN_Sort3Col,get(v(DB_Database)/List_Languages)))][iter(%q0,[ifelse(mod(dec(#@),3),,%r%b)][ljust(edit(##,_,%b),25)])]%r[u(FN_SeeAlso,+select Feats Languages List_Feats)]
&HELP_LIST_SKILLS Help=[setq(0,iter(graball(get(v(DB_Database)/List_Skills),* 0 ? &*,|),first(##),|))][setq(1,ulocal(v(DB_Database)/FN_Sort3Col,%q0))][iter(%q1,[ifelse(mod(dec(#@),3),,%r%b)][ljust(edit(##,_,%b),25)])]%r%r%b[ansi(rh,Note: There is an +sinfo file for every one of the [words(%q0)] regular skills)][u(FN_SeeAlso,+raise List_Force_Skills Skills
&HELP_LIST_SPECIES Help=[center(See: ICINFO SPECIES,78)]
&HELP_NOTES Help=@ulock old skills to me.%rAnnounce conversion%r@mail sheets to everyone.%rFind old XP and refund somehow.%rConvert:%r%tMedpacs%r%tBacta Tanks%r%tMarkets%r%tHspace skills device%r%t+nom system%r%tWeapons%r%tArmor%r%tAmmo%r%tAstrogation%r%tVehicle parents%r%tDroids%r%tDitch some old +help files: combat (group), +sheet/mail, etc. Ditto with +sheet/mail global.%r%tChargen rooms, with variable exits to allow re-chargens for skills%rAdjust FN_IsWeapon, FN_IsArmor, and all DB_* attributes on new system.%rOpen up new skills system.
&HELP_SKILLS Help=%b%bSkills measure how proficient you are when performing certain tasks. They are rated on a scale of zero to one hundred. You may use xp to improve your base skill level, which represents you knowledge in that field.%r%r%b%b[ansi(wh,Skill Adjusters:)] In practice, your attributes have a big impact in how well you are when preforming tasks. DSS thus adjusts your skills, using a weighted average based on your other abilities and the specific skill. For example, the Climb skill has an adjuster of 40%% Strength. Therefore, Adjusted Climb Skill = 0.4 * Adjusted Strength + 0.6 * Base Climb Skill.%r%r%b%b[ansi(wh,Skill Focuses:)] Sometimes, it's easier to define a general skill that focuses in many specializations. You could then have many instances of the same skill, each with a different focus and at a different skill level. DSS does this for some skills. The syntax for using a skill with a focus involved replacing [ansi(c,<Skill>)] with [ansi(c,<Skill>:<Focus>)] for all commands. For example, you could learn Knowledge: architecture, which wouldn't effect your Knowledge: organized crime.[u(FN_SeeAlso,+raise +taskroll List_Force_Skills List_Skills)]
&HELP_TABLE_OF_CONTENTS Help=[u(FN_RLJust,About DSS,Introduction by the designer.)]%r[u(FN_RLJust,Traits,How the system works.)]%r[u(FN_RLJust,Combat,How combat works.)]%r[u(FN_RLJust,GLOBAL COMMANDS,How you may use the system.)]%r[u(FN_RLJust,FUNCTIONS,How code may use the system.)]%r[u(FN_RLJust,Index,Complete listing of all +sinfo entries.)]
&HELP_TRAITS Help=%tThe skills system allows us to objectively define the abilities and disabilities any character. These abilities or disabilities are refered to as character traits. Below is a list of the kinds of character traits DSS uses. Please read the entry for each one.%r%r[u(FN_Line)]%r[u(FN_RLJust,Experience Points,The path to self improvement.)]%r[u(FN_RLJust,Attributes,Your overall strengths and weaknesses.)]%r[u(FN_RLJust,Skills,All the things you have learned to do.)]%r[u(FN_RLJust,Feats,Unique special qualities about you.)]%r[u(FN_RLJust,Languages,What you can speak or understand.)]%r[u(FN_RLJust,Health,How do you feel?)]


@@ DSS Global Commands(#104W)
@@ Type: Thing Flags: WIZARD
@@ Owner: Skilly Zone: *NOTHING* Pennies: 10
@@ Parent: *NOTHING*

@create DSS Global Commands
@set DSS Global Commands=!No_Command
@set DSS Global Commands=Wizard

&CMD_ADDFEAT Global=$+addfeat *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,grab(get(v(DB_Database)/List_Feats),[edit(squish(secure(%1)),%b,_)]*,|))][setq(2,first(%q1))][setq(3,extract(%q1,3,1))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][not(match(get(%q0/DSS_Feats),%q2))][t(%q1)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},1110*,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] allready has the [ansi(y,%q2)] feat.},11110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotFeat)]},11111,{@pemit %#=You give [name(%q0)] the [ansi(y,edit(%q2,_,%b))] feat at a cost of [ansi(y,%q3)] experience points.[pemit(%q0,[ansi(y,%N)] gives you the [ansi(y,%q2)] feat for [ansi(y,%q3)] experience points.)][set(%q0,DSS_Feats:[setunion(get(%q0/DSS_Feats),%q2)])][set(%q0,DSS_XP:[sub(val(get(%q0/DSS_XP)),%q3)])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_ADDLANG Global=$+addlang *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,grab(get(v(DB_Database)/List_Languages),[edit(squish(secure(%1)),%b,_)]*))][setq(3,get(v(DB_Database)/Cost_Lang))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][not(match(get(%q0/DSS_Languages),%q1))][t(%q1)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},1110*,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] allready knows [ansi(y,edit(%q1,_,%b))].},11110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotLang)]},11111,{@pemit %#=You give [name(%q0)] the [ansi(y,edit(%q1,_,%b))] language at a cost of [ansi(y,%q3)] experience points.[pemit(%q0,[ansi(y,%N)] gives you the [ansi(y,edit(%q1,_,%b))] language for [ansi(y,%q3)] experience points.)][set(%q0,DSS_Languages:[setunion(get(%q0/DSS_Languages),%q1)])][set(%q0,DSS_XP:[sub(val(get(%q0/DSS_XP)),%q3)])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_ADDSP Global=$+addsp *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,max(0,val(secure(%1))))][or(ulocal(v(DB_Database)/FN_IsAdmin,%#),match(%q0,%#))][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)]=0*,{@pemit %#=Permission denied.},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},111,{think [set(%q0,DSS_SP:[add(max(secs(),val(get(%q0/DSS_SP))),mul(60,%q1))])][ulocal(v(DB_Database)/FN_Update_Health,%q0)][pemit(%#,[ansi(gh,-)] [ansi(y,name(%q0))] has taken [ansi(y,%q1)] points of stun damage. [capstr(subj(%q0))] is currently [ansi(y,setr(2,ulocal(v(DB_Database)/FN_Status,%q0)))].)][oemit([loc(%q0)]/[%#],GAME: [ansi(y,%N)] gives [ansi(y,name(%q0))] [ansi(y,%q1)] stun points. [capstr(subj(%q0))] looks [ansi(y,lcstr(%q2))].)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_ADDWOUND Global=$+addwound *=*/*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,max(0,val(secure(%1))))][setq(2,left(edit(squish(secure(%2)),%b,_),52))][or(ulocal(v(DB_Database)/FN_IsAdmin,%#),match(%q0,%#))][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)]=0*,{@pemit %#=Permission denied.},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},111,{think [set(%q0,DSS_WP:[ifelse(words(get(%q0/DSS_WP)),[get(%q0/DSS_WP)]|,)][%q1] [secs()] [sub(secs(),3600)] [%q2])][ulocal(v(DB_Database)/FN_Update_Health,%q0)][pemit(%#,[ansi(gh,-)] [ansi(y,name(%q0))] has taken [ansi(y,%q1)] points of wound damage. [capstr(subj(%q0))] is currently [ansi(y,setr(2,ulocal(v(DB_Database)/FN_Status,%q0)))].)][oemit([loc(%q0)]/[%#],GAME: [ansi(y,%N)] has give [ansi(y,name(%q0))] [ansi(y,%q1)] wound points. [capstr(subj(%q0))] looks [ansi(y,lcstr(%q2))].)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_ATASKROLL Global=$+ataskroll */* at *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%1)))][setq(2,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%1)))][setq(3,val(secure(%2)))][setq(4,ulocal(v(DB_Database)/FN_Die,%q3))][ifelse(ulocal(v(DB_Database)/FN_IsAdmin,%#),ifelse(ulocal(v(DB_Database)/FN_HasSkills,%q0),switch([t(words(%q1))][t(words(%q2))],1*,[ifelse(or(not(match(%q1,Force)),[ulocal(v(DB_Database)/FN_IsFS,%q0)]),You test [ansi(y,name(%q0))]'s [setr(5,[ansi(y,%q1)] against a [ansi(y,%q3)] difficulty. The result is [ifelse(gte(setr(6,sub(ulocal(v(DB_Database)/FN_GetAttr,%q0,%q1),%q4)),0),ansi(gh,successful),ansi(rh,unsuccessful))] \([ansi(c,%q6)]\).)][oemit(%#,[ansi(y,name(%q0))] tests [poss(%q0)] [%q5])],[ansi(rh,-)] [ansi(y,name(%q0))] must be force sensitive to test [ansi(y,%q1)].)],01,[setq(5,grab(get(v(DB_Database)/List_Skills),[before(%q2,:)]*,|))][ifelse(or(not(extract(%q5,2,1)),[ulocal(v(DB_Database)/FN_IsFS,%q0)]),ifelse(or(extract(%q5,3,1),match(get(%q0/DSS_Skills),[%q2] *,|)),You test [ansi(y,name(%q0))]'s [setr(6,[ansi(y,%q2)] against a [ansi(y,%q3)] difficulty. The result is [ifelse(gte(setr(7,sub(ulocal(v(DB_Database)/FN_GetSkill,%q0,%q2),%q4)),0),ansi(gh,successful),ansi(rh,unsuccessful))] \([ansi(c,%q7)]\).)][oemit(%#,[ansi(y,name(%q0))] tests [poss(%q0)] [%q6])],[ansi(rh,-)] You may not test [ansi(y,edit(%q2,_,%b))] untrained.),[ansi(rh,-)] [ansi(y,name(%q0))] must be force sensitive to test [ansi(y,%q2)].)],[ulocal(v(DB_Database)/MSG_NotName)]),[ulocal(v(DB_Database)/MSG_NoTraits)]),[ulocal(v(DB_Database)/MSG_NotAdmin)])]
&CMD_ATTACK Global=$+attack * at *:@swi [setq(0,locate(%#,secure(%0),hln))][setq(1,max(1,val(secure(%1))))][not(match(Unconscious Dead,get(%#/DSS_Feats)))][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%#)][ulocal(v(DB_Database)/FN_HasSkills,%q0)]=0*,{@pemit %#=[ansi(rh,-)] You are in no condition to attack anyone.},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110*,{@pemit %#=[ansi(rh,-)] You are not configured for the skills system yet.},1110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},1111,{think [ifelse(ulocal(v(DB_Database)/FN_IsWeapon,setr(2,get(%#/DSS_Weapon))),[setq(3,ulocal(v(DB_Database)/FN_ToHit_Roll,ulocal(v(DB_Database)/FN_GetSkill,%#,ulocal(%q2/Attack_Skill)),ulocal(v(DB_Database)/FN_GetSkill,%q0,[ulocal(%q2/Defense_Skill)]),add(ulocal(%q2/Accuracy),%q1)))][setq(4,ifelse(gte(%q3,0),ulocal(v(DB_Database)/FN_Dmg_Roll,%q3),0))][setq(5,mul(%q4,ulocal(%q2/Max_SP)))][setq(6,mul(%q4,ulocal(%q2/Max_WP)))],[setq(3,ulocal(v(DB_Database)/FN_ToHit_Roll,ulocal(v(DB_Database)/FN_GetSkill,%#,Melee:unarmed),ulocal(v(DB_Database)/FN_GetSkill,%q0,Dodge_Melee),%q1))][setq(4,ifelse(gte(%q3,0),ulocal(v(DB_Database)/FN_Dmg_Roll,%q3),0))][setq(5,ceil(mul(%q4,div(ulocal(v(DB_Database)/FN_GetAttr,%#,Strength),2))))][setq(6,0)])][ifelse(ifelse(isdbref(%q2),ulocal(%q2/FN_CanUse,%#),1),[ulocal(%q2/AAttack)][ifelse(isdbref(get(%q0/DSS_Armor)),[setq(7,ulocal(get(%q0/DSS_Armor)/Threshold))][setq(8,ulocal(get(%q0/DSS_Armor)/Rating))],[setq(7,0)][setq(8,0)])][setq(5,round(add(mul(sub(%q5,%q7),sub(1,%q8)),mul(%q8,sub(%q6,%q7))),0))][setq(6,round(mul(sub(%q6,%q7),sub(1,%q8)),0))][remit(%l,[ansi(y,%N)] [ifelse(gt(%q4,0),ansi(gh,successfully),ansi(rh,unsuccessfully))] attacks [ansi(y,name(%q0))] [ifelse(isdbref(%q2),using a [ansi(y,name(%q2))],unarmed)] at a [ansi(y,%q1)] difficulty. \([ansi(c,%q3)]\)[ifelse(gt(%q4,0),%rThe attack should deal [switch([gt(%q5,0)][gt(%q6,0)],11,[ansi(ch,%q5)] stun points and [ansi(mh,%q6)] wound points,10,[ansi(ch,%q5)] stun points,01,[ansi(mh,%q6)] wound points,no damage)].,)])],[pemit(%#,[ansi(rh,-)] You cannot attack with your weapon right now. Make sure it's loaded.)])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_DELFEAT Global=$+delfeat *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,grab(get(%q0/DSS_Feats),[edit(squish(secure(%1)),%b,_)]*))][setq(2,grab(get(v(DB_Database)/List_Feats),[edit(squish(secure(%1)),%b,_)]*,|))][setq(3,extract(%q2,3,1))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][t(%q2)][t(%q1)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},1110*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotFeat)]},11110,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] doesn't have the [ansi(y,edit(first(%q2),_,%b))] feat.},11111,{@pemit %#=You remove [name(%q0)]'s [ansi(y,edit(%q1,_,%b))] feat with a refund of [ansi(y,%q3)] experience points.[pemit(%q0,[ansi(y,%N)] removes your [ansi(y,edit(%q1,_,%b))] feat with a refund of [ansi(y,%q3)] experience points.)][set(%q0,DSS_Feats:[setdiff(get(%q0/DSS_Feats),%q1)])][set(%q0,DSS_XP:[add(val(get(%q0/DSS_XP)),%q3)])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_DELLANG Global=$+dellang *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,grab(get(%q0/DSS_Languages),[edit(squish(secure(%1)),%b,_)]*))][setq(2,grab(get(v(DB_Database)/List_Languages),[edit(squish(secure(%1)),%b,_)]*))][setq(3,get(v(DB_Database)/Cost_Lang))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][t(%q2)][t(%q1)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},1110*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotLang)]},11110,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] doesn't know [ansi(y,%q2)].},11111,{@pemit %#=You remove [name(%q0)]'s [ansi(y,edit(%q1,_,%b))] language with a refund of [ansi(y,%q3)] experience points.[pemit(%q0,[ansi(y,%N)] removes your [ansi(y,edit(%q1,_,%b))] language with a refund of [ansi(y,%q3)] experience points.)][set(%q0,DSS_Languages:[setdiff(get(%q0/DSS_Languages),%q1)])][set(%q0,DSS_XP:[add(val(get(%q0/DSS_XP)),%q3)])][ifelse(match(get(%q0/DSS_Lingo),%q1),set(%q0,DSS_Lingo:[first(get(%q0/DSS_Languages))]),)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_DELSP Global=$+delsp *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,max(0,val(secure(%1))))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},111,{think [set(%q0,DSS_SP:[sub(get(%q0/DSS_SP),mul(60,%q1))])][ulocal(v(DB_Database)/FN_Update_Health,%q0)][pemit(%#,[ansi(gh,-)] [ansi(y,name(%q0))] has lost [ansi(y,%q1)] points of stun damage. [capstr(subj(%q0))] is currently [ansi(y,setr(2,ulocal(v(DB_Database)/FN_Status,%q0)))].)][oemit([loc(%q0)]/[%#],GAME: [ansi(y,name(%q0))] has lost [ansi(y,%q1)] stun points and looks [ansi(y,lcstr(%q2))].)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_DELWOUND Global=$+delwound *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,extract(get(%q0/DSS_WP),val(secure(%1)),1,|))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][isnum(first(%q1))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},1110,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] doesn't have that wound number.},1111,{think [set(%q0,DSS_WP:[remove(get(%q0/DSS_WP),%q1,|)])][ulocal(v(DB_Database)/FN_Update_Health,%q0)][pemit(%#,[ansi(gh,-)] You have removed [ansi(y,first(%q1))] wound point from [ansi(y,name(%q0))]. This damage was inflicted [ansi(y,convsecs(extract(%q1,2,1)))] for the following reason: [ansi(y,edit(extract(%q1,4,1),_,%b))])][pemit(%q0,You feel better.)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_GIVEXP Global=$+givexp *=*:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,val(secure(%1)))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)]=0*,{@pemit %#=Permission denied.},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},111,{@pemit %#={You give [ansi(y,name(%q0))] [ansi(y,%q1)] experience points. [capstr(subj(%q0))] now has [ansi(y,add(val(get(%q0/DSS_XP)),%q1))] experience points.[set(%q0,DSS_XP:[add(val(get(%q0/DSS_XP)),%q1)])]};@pemit %q0={[ansi(y,%N)] gave you [ansi(y,%q1)] experience points.}},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_MAIL_SHEET Global=$+sheet/mail *:@swi [isdbref(setr(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0))))][ulocal(v(DB_Database)/FN_HasSkills,%#)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},10,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},11,{@pemit %#={[ansi(gh,-)] You @mail your character sheet to [ansi(y,name(%q0))].};@mail [%q0]=[%N]'s +sheet/[ulocal(v(DB_Database)/FN_Sheet,%#)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_NEWFEAT Global=$+newfeat */*/*:@swi [setq(0,edit(squish(secure(%0)),%b,_))][setq(1,grab(get(v(DB_Database)/List_Feats),[%q0] *,|))][setq(2,t(secure(%1)))][setq(3,val(secure(%2)))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][eq(0,words(%q1))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10,{@pemit %#=[ansi(rh,-)] [ansi(y,edit(first(%q1),_,%b))] is an existing feat.},11,{@pemit %#=You create the [ansi(y,edit(%q0,_,%b))] feat. Players [ansi(y,ifelse(%q2,may,may not))] select it, and it costs [ansi(y,%q3)] experience points.[set(v(DB_Database),List_Feats:[setunion(get(v(DB_Database)/List_Feats),[%q0] [%q2] [%q3],|)])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_NEWFOCUS Global=$+newfocus *:@swi [setq(0,ulocal(v(DB_Database)/FN_Parse_Skill,[secure(%0)]))][setq(1,before(%q0,:))][setq(2,after(%q0,:))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][t(words(%q1))][t(words(%q2))][t(match(get(v(DB_Database)/SF_[%q1]),%q2))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotSkill)]},110*,{@pemit %#=[ansi(rh,-)] Either [ansi(y,%q1)] doesn't take a skill focus or no valid focus was given.},1110,{@pemit %#=[ansi(g,-)] [ansi(y,[%q1]:[%q2])] is now a preapproved skill.[set(v(DB_Database),SF_[%q1]:[setunion(get(v(DB_Database)/SF_[%q1]),%q2)])]},1111,{@pemit %#=[ansi(rh,-)] [ansi(y,[%q1]:[%q2])] is allready pre-approved.},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_NEWLANG Global=$+newlang *:@pemit %#=[setq(0,edit(squish(secure(%0)),%b,_))][switch([ulocal(v(DB_Database)/FN_IsAdmin,%#)][t(match(get(v(DB_Database)/List_Languages),%q0))],0*,[ulocal(v(DB_Database)/MSG_NotAdmin)],11,[ansi(rh,-)] That language already exists.,10,[ansi(gh,-)] You have added the [ansi(y,edit(%q0,_,%b))] language.[set(v(DB_Database),List_Languages:[setunion(%q0,get(v(DB_Database)/List_Languages))])],[ulocal(v(DB_Database)/MSG_Crit)])]
&CMD_NEWSKILL Global=$+newskill */*/*/*/*:@swi [setq(0,edit(squish(before(secure(%0),:)),%b,_))][setq(1,ifelse(gte(words(secure(%0),:),2),1,0))][setq(2,grab(get(v(DB_Database)/List_Skills),[%q0][ifelse(%q1,:*,%b*)],|))][setq(3,t(secure(%1)))][setq(4,t(secure(%2)))][setq(5,squish(secure(%3)))][setq(6,%4)][ulocal(v(DB_Database)/FN_IsAdmin,%#)][eq(0,words(%q2))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10,{@pemit %#=[ansi(rh,-)] [ansi(y,edit(%q0,_,%b))] is an existing skill.},11,{@pemit %#=You create the [ansi(y,edit(%q0,_,%b))] skill.[ifelse(%q3,%bPlayers must be force sensitive to develop it.,)][set(v(DB_Database),List_Skills:[setunion(get(v(DB_Database)/List_Skills),[%q0][ifelse(%q1,:_any,)] [%q3] [%q4] & [%q5],|)])][set(v(DB_Help),SK_[%q0]:[%q6])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_RAISE Global=$+raise * to *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%0)))][setq(2,max(0,min(100,val(secure(%1)))))][ifelse(ulocal(v(DB_Database)/FN_HasSkills,%#),switch([t(words(%q0))][t(words(%q1))],1*,[ifelse(or(not(match(%q0,Force)),[ulocal(v(DB_Database)/FN_IsFS,%#)]),[ifelse([setq(3,ulocal(v(DB_Database)/FN_Attr_Cost,%#,%q0,%q2))][gte(%q3,0)],ifelse([gte(get(%#/DSS_XP),%q3)],[ulocal(v(DB_Database)/FN_SetAttr,%#,%q0,%q2)][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])][ansi(gh,-)] You +raise your [ansi(y,%q0)] to [ansi(y,%q2)] at a cost of [ansi(y,%q3)] experience points.,[ansi(rh,-)] You do not have the [ansi(y,%q3)] experience points required for that.),[ansi(rh,-)] You cannot +lower [ansi(y,%q0)] with +raise.)],[ansi(rh,-)] You must be force sensitive to develop [ansi(y,%q0)].)],01,[ifelse([or(not(extract(grab(get(v(DB_Database)/List_Skills),[first(%q1,:)]*,|),2,1)),[ulocal(v(DB_Database)/FN_IsFS,%#)])],[ifelse([or([not(match(%q1,*:*))],[match(get(%#/DSS_Skills),[%q1] *,|)],[match(get(v(DB_Database)/SF_[first(%q1,:)]),[after(%q1,:)])])],ifelse([setq(3,ulocal(v(DB_Database)/FN_Skill_Cost,%#,%q1,%q2))][gte(%q3,0)],ifelse([gte(get(%#/DSS_XP),%q3)],[ulocal(v(DB_Database)/FN_SetSkill,%#,%q1,%q2)][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])]You +raise your [ansi(y,edit(%q1,_,%b))] to [ansi(y,%q2)] at cost of [ansi(y,%q3)] experience points.,[ansi(rh,-)] You do not have the [ansi(y,%q3)] experience points required for that.),[ansi(rh,-)] You cannot +lower [ansi(y,%q1)] with +raise.),[ansi(rh,-)] That is not a pre-approved skill focus for [ansi(y,first(%q1,:))].)],[ansi(rh,-)] You must be force sensitive to develop [ansi(y,%q1)].)],[ulocal(v(DB_Database)/MSG_NotName)]),[ulocal(v(DB_Database)/MSG_NoTraits)])]
&CMD_READY Global=$ready *:@pemit %#=[ansi(rh,-)] This command no longer exists. Use +wield instead.
&CMD_RELOAD Global=$+reload *:@swi [setq(0,locate(%#,secure(%0),i))][setq(1,)][squish(iter(lcon(%#),ifelse(and(ulocal(v(DB_Database)/Fn_IsAmmo,##),match(get(##/ammo_type),get(%q0/ammo_type),^)),setq(1,##),)))][isdbref(%q0)][isdbref(%q1)][u(v(DB_Database)/FN_IsWeapon,%q0)][gt(get(%q0/Ammo_Max),0)][eq(get(%q0/Ammo),0)]=0*,{@pemit %#=[ansi(rh,-)] No weapon could be found with that name.},10*,{@pemit %#=[ansi(rh,-)] You have no ammunition for that kind of weapon!},110*,{@pemit %#=[ansi(rh,-)] [name(%q0)] is not a weapon!},1110*,{@pemit %#=[ansi(rh,-)] [name(%q0)] can't be loaded!},11110,{@pemit %#=[ansi(rh,-)] [name(%q0)] is allready loaded!},11111,{th [set(%q0,Ammo:[val(mul(get(%q0/Ammo_Max),get(%q1/Ammo)))])][set(%q0,Ammo_Parent:[parent(%q1)])];@remit %l=[ansi(y,%N)] loads [ansi(y,name(%q1))] into %p [ansi(y,name(%q0))].;@nuke %q1;@nuke %q1},{@pemit %#=[u(MSG_Crit)]}
&CMD_REMFEAT Global=$+remfeat *:@swi [setq(0,edit(squish(secure(%0)),%b,_))][setq(1,grab(get(v(DB_Database)/List_Feats),[%q0] *,|))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][eq(3,words(%q1))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10,{@pemit %#=[ansi(rh,-)] [ansi(y,edit(%q0,_,%b))] is not an existing feat.},11,{@pemit %#=You remove the [ansi(y,edit(first(%q1),_,%b))] feat from the system. Players who had this feat before however still has it.[set(v(DB_Database),List_Feats:[setdiff(get(v(DB_Database)/List_Feats),[%q1],|)])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_REMFOCUS Global=$+remfocus *:@swi [setq(0,ulocal(v(DB_Database)/FN_Parse_Skill,[secure(%0)]))][setq(1,before(%q0,:))][setq(2,after(%q0,:))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][t(words(%q1))][t(words(%q2))][not(match(get(v(DB_Database)/SF_[%q1]),%q2))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotSkill)]},110*,{@pemit %#=[ansi(rh,-)] Either [ansi(y,%q1)] doesn't take a skill focus or no valid focus was given.},1110,{@pemit %#=[ansi(g,-)] [ansi(y,[%q1]:[%q2])] is no longer a preapproved skill.[set(v(DB_Database),SF_[%q1]:[setdiff(get(v(DB_Database)/SF_[%q1]),%q2)])]},1111,{@pemit %#=[ansi(rh,-)] [ansi(y,[%q1]:[%q2])] is not pre-approved.},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_REMLANG Global=$+remlang *:@pemit %#=[setq(0,grab(get(v(DB_Database)/List_Languages),[squish(secure(%0))]))][switch([ulocal(v(DB_Database)/FN_IsAdmin,%#)][t(%q0)],0*,[ulocal(v(DB_Database)/MSG_NotAdmin)],10,[ansi(rh,-)] That language does not exist.,11,[ansi(gh,-)] You have deleted the [ansi(y,edit(%q0,_,%b))] language. Players who have learned this language may still use it however.[set(v(DB_Database),List_Languages:[setdiff(get(v(DB_Database)/List_Languages),%q0)])],[ulocal(v(DB_Database)/MSG_Crit)])]
&CMD_REMOVE Global=$+remove:@swi [isdbref(setr(0,get(%#/DSS_Armor)))]=0,{@pemit %#=[ansi(rh,-)] You have no armor to remove.},1,{@remit %l=[ulocal(%q0/AUnready)][wipe(%#/DSS_Armor)][lock(%q0/drop,)][lock(%q0/give,)]},{@pemit %#=[ulocal(MSG_Crit)]}
&CMD_REMOVE2 Global=$+remove *:@swi [isdbref(setr(0,get(%#/DSS_Armor)))]=0,{@pemit %#=[ansi(rh,-)] You have no armor to remove.},1,{@remit %l=[ulocal(%q0/AUnready)][wipe(%#/DSS_Armor)][lock(%q0/drop,)][lock(%q0/give,)]},{@pemit %#=[ulocal(MSG_Crit)]}
&CMD_REMSKILL Global=$+remskill *:@swi [setq(0,edit(squish(before(secure(%0),:)),%b,_))][setq(1,ifelse(gte(words(secure(%0),:),2),1,0))][setq(2,grab(get(v(DB_Database)/List_Skills),[%q0][ifelse(%q1,:*,%b*)],|))][setq(3,t(secure(%1)))][setq(4,squish(secure(%2)))][setq(5,secure(%3))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][neq(0,words(%q2))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10,{@pemit %#=[ansi(rh,-)] [ansi(y,edit(%q0,_,%b))] is not an existing skill.},11,{@pemit %#=You remove the [ansi(y,edit(%q0,_,%b))] skill.[set(v(DB_Database),List_Skills:[setdiff(get(v(DB_Database)/List_Skills),[%q2],|)])][wipe(v(DB_Help)/SK_[%q0])]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_REVIVE Global=$+revive:@swi [ulocal(v(DB_Database)/FN_HasSkills,%#)][match(Unconscious Dead,ulocal(v(DB_Database)/FN_Status,%#))][lt(add(ulocal(v(DB_Database)/FN_SP,%#),ulocal(v(DB_Database)/FN_WP,%#)),ulocal(v(DB_Database)/FN_GetAttr,%#,Strength))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},10*,{@pemit %#=[ansi(rh,-)] You aren't unconscious.},12*,{@pemit %#=[ansi(rh,-)] The dead cannot be revived from eternal slumber.},110,{@pemit %#=[ansi(rh,-)] You aren't ready to wake up yet.},111,{@pemit %#=[ansi(gh,-)] You awaken from your slumber.[set(%#,DSS_Feats:[setdiff(get(%#/DSS_Feats),Unconscious)])][oemit(%#,%N wakes up.)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_REVIVE2 Global=$+revive *:@swi [setq(0,locate(%#,secure(%0),hln))][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][match(Unconscious Dead,ulocal(v(DB_Database)/FN_Status,%q0))][lt(add(ulocal(v(DB_Database)/FN_SP,%q0),ulocal(v(DB_Database)/FN_WP,%q0)),ulocal(v(DB_Database)/FN_GetAttr,%q0,Strength))]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},110*,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] isn't unconscious.},12*,{@pemit %#=[ansi(rh,-)] The dead cannot be revived from eternal slumber.},1110,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] isn't ready to wake up yet.},1111,{@pemit [%q0]=%N wakes you from your slumber.[set(%q0,DSS_Feats:[setdiff(get(%q0/DSS_Feats),Unconscious)])][oemit(%q0,[%N] wakes [name(%q0)] up.)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_SAY Global=$+say *:think [ifelse(t(setr(0,get(%#/DSS_Lingo))),[pemit(%#,You say in [%q0]\, "[objeval(%#,%0)]")][iter(setdiff(lcon(%l),%#),[pemit(##,ifelse(match(get(##/DSS_Languages),%q0),%N says in [%q0]\, "[objeval(%#,%0)]",%N says something in [%q0].[ifelse(ulocal(v(DB_Database)/FN_IsAdmin,##),%r[ansi(c,Admin Translation:)] [objeval(%#,%0)],)]))])],[pemit(%#,[ansi(rh,-)] Please select a language to speak in.)])]
&CMD_SELECT Global=$+select *:@pemit %#=[ifelse([ulocal(v(DB_Database)/FN_HasSkills,%#)],switch([setq(0,secure(%0))][setq(1,grab(get(v(DB_Database)/List_Feats),[%q0]*,|))][setq(2,grab(get(v(DB_Database)/List_Languages),[%q0]*))][t(words(%q1))][t(words(%q2))],1*,[setq(4,extract(%q1,1,1))][ifelse(extract(%q1,2,1),ifelse(match(get(%#/DSS_Feats),%q4),[ansi(rh,-)] You allready have the [ansi(y,edit(%q4,_,%b))] feat.,ifelse(gte(get(%#/DSS_XP),[setr(3,extract(%q1,3,1))]),You now have the [ansi(y,edit(%q4,_,%b))] feat.[set(%#,DSS_Feats:[setunion(get(%#/DSS_Feats),%q4)])][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])],You are short [ansi(y,sub(get(%#/DSS_XP),%q3))] experience points.)),[ansi(rh,-)] You may not select the [ansi(y,edit(%q4,_,%b))] feat. Only staff may apply that feat via +addfeat.)],01,[ifelse(match(get(%#/DSS_Languages),%q2),[ansi(rh,-)] You allready know the [ansi(y,edit(%q2,_,%b))] language.,ifelse(gte(get(%#/DSS_XP),[setr(3,get(v(DB_Database)/Cost_Lang))]),You now understand the [ansi(y,edit(%q2,_,%b))] language.[set(%#,DSS_Languages:[setunion(get(%#/DSS_Languages),%q2)])][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])],You are short [ansi(y,sub(get(%#/DSS_XP),%q3))] experience points.))],[ansi(rh,-)] Invalid feat or language name.),[ulocal(v(DB_Database)/MSG_NoTraits)])]
&CMD_SETATTR Global=$+setattr */*=*:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%1)))][setq(2,val(secure(%2)))][ifelse(ulocal(v(DB_Database)/FN_IsAdmin,%#),ifelse(isdbref(%q0),ifelse(ulocal(v(DB_Database)/FN_HasSkills,%q0),ifelse([t(%q1)],[setq(3,ulocal(v(DB_Database)/FN_Attr_Cost,%q0,%q1,%q2))][ulocal(v(DB_Database)/FN_SetAttr,%q0,%q1,%q2)][set(%q0,DSS_XP:[sub(val(get(%q0/DSS_XP)),%q3)])][pemit(%q0,[ansi(gh,-)] [ansi(y,%N)] sets your base [ansi(y,%q1)] to [ansi(y,%q2)] [ifelse(gte(%q3,0),at cost of,with a refund)] of [ansi(y,abs(%q3))] experience points.)][ansi(gh,-)] You set [ansi(y,name(%q0))]'s base [ansi(y,%q1)] to [ansi(y,%q2)] [ifelse(gte(%q3,0),at cost of,with a refund)] of [ansi(y,abs(%q3))] experience points.,[ulocal(v(DB_Database)/MSG_NotAttr)]),[ulocal(v(DB_Database)/MSG_NoTraits)]),[ulocal(v(DB_Database)/MSG_NotPlayer)]),[ulocal(v(DB_Database)/MSG_NotAdmin)])]
&CMD_SETSKILL Global=$+setskill */*=*:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(4,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%1)))][setq(1,first(%q4,:))][setq(2,after(%q4,:))][ifelse(ulocal(v(DB_Database)/FN_IsAdmin,%#),ifelse(isdbref(%q0),ifelse(ulocal(v(DB_Database)/FN_HasSkills,%q0),ifelse([t(%q1)],[setq(3,max(0,min(100,val(secure(%2)))))][setq(5,ulocal(v(DB_Database)/FN_Skill_Cost,%q0,%q4,%q3))][ulocal(v(DB_Database)/FN_SetSkill,%q0,[%q4],%q3)][set(%q0,DSS_XP:[sub(val(get(%q0/DSS_XP)),%q5)])][pemit(%q0,[ansi(gh,-)] [ansi(y,%N)] sets your base [ansi(y,%q4)] to [ansi(y,%q3)] [ifelse(gte(%q5,0),at cost of,with a refund)] of [ansi(y,abs(%q5))] experience points.)][ansi(gh,-)] You set [ansi(y,name(%q0))]'s base [ansi(y,%q4)] to [ansi(y,%q3)] [ifelse(gte(%q5,0),at cost of,with a refund)] of [ansi(y,abs(%q5))] experience points.,[ulocal(v(DB_Database)/MSG_NotSkill)]),[ulocal(v(DB_Database)/MSG_NoTraits)]),[ulocal(v(DB_Database)/MSG_NotPlayer)]),[ulocal(v(DB_Database)/MSG_NotAdmin)])]
&CMD_SHEET2 Global=$+sheet/*:@pemit %#=[setq(0,ifelse(gt(words(secure(%0)),1),ulocal(v(DB_Database)/FN_Pmatch,rest(secure(%0))),%#))][setq(1,grab(Attributes Skills Feats Languages Gear Health mail,[first(secure(%0))]*))][switch( [or(ulocal(v(DB_Database)/FN_IsAdmin,%#),match(%#,%q0))][match(mail,%q1)][t(words(%q1))],0*,Permission denied.,11*,,100,[ansi(rh,-)] Invalid switch.,101,ulocal(v(DB_Database)/FN_Sheet2,%q0,%q1),ulocal(v(DB_Database)/MSG_Crit))]
&CMD_SHEETA Global=$+sheet *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,locate(%#,secure(%0),Tan))][switch([ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][isdbref(%q1)],0*,ulocal(v(DB_Database)/MSG_NotAdmin),11*,ulocal(v(DB_Database)/FN_Sheet,%q0),100,ulocal(v(DB_Database)/MSG_NotPlayer),101,ulocal(v(DB_Database)/FN_Sheet,%q1),)]
&CMD_SHEETP Global=$+sheet:@pemit %#=[ulocal(v(DB_Database)/FN_Sheet,%#)]
&CMD_SINFO Global=$+sinfo:@pemit %#=[ulocal(v(DB_Help)/FN_HELP,HELP_Table_of_Contents)]
&CMD_SINFO2 Global=$+sinfo *:@pemit %#=[setq(0,edit(squish(secure(%0)),%b,_))][switch([setq(1,grab(sort(lattr(v(DB_Help)/HELP_*),a),HELP_[%q0]*))][setq(2,first(grab(get(v(DB_Database)/List_Skills),[before(%q0,:)]* *,|)))][t(%q2)][t(%q1)],1*,[ulocal(v(DB_HELP)/FN_SHELP,before(%q2,:),%#)],01,[ulocal(v(DB_HELP)/FN_HELP,%q1,%#)],No +sinfo file was found under that name.)]
&CMD_SKILLS Global=$+skills:@pemit %#=[ansi(yh,-)] Try [ansi(rh,+sinfo)] [ansi(y,List Skills)] instead.
&CMD_SKILLS2 Global=$+skills *:@pemit %#=[ansi(yh,-)] Try [ansi(rh,+sinfo)] [ansi(y,List Skills)] instead.
&CMD_SPEAK Global=$+speak:@pemit %#=[ansi(gh,-)] You are currently speaking in [edit(secure(get(%#/DSS_Lingo)),_,%b)].
&CMD_SPEAK2 Global=$+speak *:@swi [setq(0,grab(get(%#/DSS_Languages),[secure(%0)]*))][t(%q0)][t(match(get(%#/DSS_Feats),Limited_Speech))]=0*,{@pemit %#=[ansi(rh,-)] You do not know how to speak that langauge.},10,{@pemit %#=[ansi(gh,-)] You will now speak in [edit(%q0,_,%b)].[set(%#,DSS_Lingo:[%q0])]},11,{@pemit %#=[ansi(rh,-)] You may understand but never speak other languages.},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_STASKROLL Global=$+staskroll */* at *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%1)))][setq(2,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%1)))][setq(3,val(secure(%2)))][setq(4,ulocal(v(DB_Database)/FN_Die,%q3))][ifelse(or(ulocal(v(DB_Database)/FN_IsAdmin,%#),match(%q0,%#)),ifelse(ulocal(v(DB_Database)/FN_HasSkills,%q0),switch([t(words(%q1))][t(words(%q2))],1*,[ifelse(or(not(match(%q1,Force)),[ulocal(v(DB_Database)/FN_IsFS,%q0)]),You test [ansi(y,name(%q0))]'s [ansi(y,%q1)] against a [ansi(y,%q3)] difficulty. The result is [ifelse(gte(setr(6,sub(ulocal(v(DB_Database)/FN_GetAttr,%q0,%q1),%q4)),0),ansi(gh,successful),ansi(rh,unsuccessful))] \([ansi(c,%q6)]\).,[ansi(rh,-)] [ansi(y,name(%q0))] must be force sensitive to test [ansi(y,%q1)].)],01,[setq(5,grab(get(v(DB_Database)/List_Skills),[before(%q2,:)]*,|))][ifelse(or(not(extract(%q5,2,1)),[ulocal(v(DB_Database)/FN_IsFS,%q0)]),ifelse(or(extract(%q5,3,1),match(get(%q0/DSS_Skills),[%q2] *,|)),You test [ansi(y,name(%q0))]'s [ansi(y,%q2)] against a [ansi(y,%q3)] difficulty. The result is [ifelse(gte(setr(7,sub(ulocal(v(DB_Database)/FN_GetSkill,%q0,%q2),%q4)),0),ansi(gh,successful),ansi(rh,unsuccessful))] \([ansi(c,%q7)]\).,[ansi(rh,-)] You may not test [ansi(y,edit(%q2,_,%b))] untrained.),[ansi(rh,-)] [ansi(y,name(%q0))] must be force sensitive to test [ansi(y,%q2)].)],[ulocal(v(DB_Database)/MSG_NotName)]),[ulocal(v(DB_Database)/MSG_NoTraits)]),[ulocal(v(DB_Database)/MSG_NotAdmin)])]
&CMD_TASKROLL Global=$+taskroll * at *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%0)))][setq(2,val(secure(%1)))][setq(3,ulocal(v(DB_Database)/FN_Die,%q2))][ifelse(ulocal(v(DB_Database)/FN_HasSkills,%#),switch([t(words(%q0))][t(words(%q1))],1*,[ifelse(or(not(match(%q0,Force)),[ulocal(v(DB_Database)/FN_IsFS,%#)]),You test your [setr(4,[ansi(y,%q0)] against a [ansi(y,%q2)] difficulty. The result is [ifelse(gte(setr(5,sub(ulocal(v(DB_Database)/FN_GetAttr,%#,%q0),%q3)),0),ansi(gh,successful),ansi(rh,unsuccessful))] \([ansi(c,%q5)]\).)][oemit(%#,[ansi(y,%N)] tests [poss(%#)] [%q4])],[ansi(rh,-)] You must be force sensitive to test [ansi(y,%q0)].)],01,[setq(4,grab(get(v(DB_Database)/List_Skills),[before(%q1,:)]*,|))][ifelse(or(not(extract(%q4,2,1)),[ulocal(v(DB_Database)/FN_IsFS,%#)]),ifelse(or(extract(%q4,3,1),match(get(%#/DSS_Skills),[%q1] *,|)),You test your [setr(5,[ansi(y,%q1)] against a [ansi(y,%q2)] difficulty. The result is [ifelse(gte(setr(6,sub(ulocal(v(DB_Database)/FN_GetSkill,%#,%q1),%q3)),0),ansi(gh,successful),ansi(rh,unsuccessful))] \([ansi(c,%q6)]\).)][oemit(%#,[ansi(y,%N)] tests [poss(%#)] [%q5])],[ansi(rh,-)] You may not test [ansi(y,edit(%q1,_,%b))] untrained.),[ansi(rh,-)] You must be force sensitive to test [ansi(y,%q1)].)],[ulocal(v(DB_Database)/MSG_NotName)]),[ulocal(v(DB_Database)/MSG_NoTraits)])]
&CMD_TOGGLE Global=$+toggle *:@pemit %#=[ifelse(isdbref(setr(1,get(%#/DSS_Weapon))),[setq(0,grab(get(%q1/Modes),secure(%0),|))][ifelse(words(%q0),ifelse(match(%q0,get(%q1/Curr_Mode)),[ansi(rh,-)] Your weapon is allready on that setting.,[remit(%l,[ansi(wh,%N)] flips the mode toggle on %p [ansi(wh,name(%q1))]\, switching it to [ansi(wh,%q0)] mode.)][set(%q1,Curr_Mode:[%q0])]),[ansi(rh,-)] You weapon lacks that setting.)],[ansi(rh,-)] You are not wielding a weapon.)]
&CMD_UNLOAD Global=$+unload *:@swi [setq(0,locate(%#,secure(%0),i))][isdbref(%q0)][u(v(DB_Database)/FN_IsWeapon,%q0)][gt(get(%q0/Ammo),0)]=0*,{@pemit %#=[ansi(rh,-)] No weapon could be found with that name.},10*,{@pemit %#=[ansi(rh,-)] [name(%q0)] is not a weapon!},110,{@pemit %#=[ansi(rh,-)] [name(%q0)] isn't loaded!},111,{th [setq(1,create(Ammo: [get(%q0/Ammo_Type)]))][name(%q1,[name(%q1)] - [edit(%q1,#,)])][parent(%q1,default(%q0/Ammo_Parent,#714))][set(%q1,Ammo:[fdiv(get(%q0/Ammo),get(%q0/Ammo_Max))])][set(%q1,Ammo_Type:[get(%q0/Ammo_Type)])][ifelse(eq(get(%q1/Ammo),get(extract(lparent(%q1),2,1)/Ammo)),wipe(%q1/Ammo),)][ifelse(eq(0,comp(get(%q1/Ammo_Type),get(extract(lparent(%q1),2,1)/Ammo_Type))),wipe(%q1/Ammo_Type),)][tel(%q1,%#)][wipe(%q0/Ammo)][wipe(%q0/Ammo_Parent)];@remit %l=[ansi(y,%N)] unloads %p [ansi(y,name(%q0))].},{@pemit %#=[u(MSG_Crit)]}
&CMD_UNREADY Global=$unready:@pemit %#=[ansi(rh,-)] This command no longer exists. Use +unwield instead.
&CMD_UNWIELD Global=$+unwield:@swi [isdbref(setr(0,get(%#/DSS_Weapon)))]=0,{@pemit %#=[ansi(rh,-)] You have no weapon to unwield.},1,{@remit %l=[ansi(y,%N)] puts %p [ansi(y,name(%q0))] away.[wipe(%#/DSS_Weapon)][lock(%q0/drop,)][lock(%q0/give,)]},{@pemit %#=[ulocal(MSG_Crit)]}
&CMD_UNWIELD2 Global=$+unwield *:@swi [isdbref(setr(0,get(%#/DSS_Weapon)))]=0,{@pemit %#=[ansi(rh,-)] You have no weapon to unwield.},1,{@remit %l=[ansi(y,%N)] puts %p [ansi(y,name(%q0))] away.[wipe(%#/DSS_Weapon)][lock(%q0/drop,)][lock(%q0/give,)]},{@pemit %#=[ulocal(MSG_Crit)]}
&CMD_UPDATE Global=$+update:@swi [ulocal(v(DB_Database)/FN_HasSkills,%#)]=1,{@pemit %#=[ansi(gh,-)] Your attributes and skills have been updated.[ulocal(v(DB_Database)/FN_Update,%#)][ulocal(v(DB_Database)/FN_Update_Health,%#)]},0,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_UPDATE2 Global=$+update *:@swi [setq(0,ulocal(v(DB_Database)/FN_Pmatch,secure(%0)))][ulocal(v(DB_Database)/FN_IsAdmin,%#)][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)]=0*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotAdmin)]},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_NotPlayer)]},110,{@pemit %#=[ulocal(v(DB_Database)/MSG_NoTraits)]},111,{@pemit %#={[ansi(gh,-)] [name(%q0)]'s attributes and skills have been updated.[ulocal(v(DB_Database)/FN_Update,%q0)][ulocal(v(DB_Database)/FN_Update_Health,%#)]};@pemit %q0={[ansi(gh,-)] Your attributes and skills have been updated.}},{@pemit %#=[ulocal(v(DB_Database)/MSG_Crit)]}
&CMD_WEAR Global=$+wear *:@swi [setq(0,locate(%#,secure(%0),i))][isdbref(%q0)][ulocal(v(DB_Database)/FN_IsArmor,%q0)][isdbref(get(%#/DSS_Armor))]=0*,{@pemit %#=[ansi(rh,-)] No body armor could be found.},10*,{@pemit %#=[ansi(rh,-)] That is not body armor.},111,{@pemit %#=[ansi(rh,-)] You are allready wearing [ansi(wh,name(get(%#/DSS_Armor)))].},110,{@remit %l=[ulocal(%q0/AReady)][set(%#,DSS_Armor:%q0)][lock(%q0/drop,=%q0)][lock(%q0/give,=%q0)]},{@pemit %#=[ulocal(MSG_Crit)]}
&CMD_WIELD Global=$+wield *:@swi [setq(0,locate(%#,secure(%0),i))][isdbref(%q0)][not(words(setinter(get(%#/DSS_Feats),Dead Unconscious)))][ulocal(v(DB_Database)/FN_IsWeapon,%q0)][not(isdbref(get(%#/DSS_Weapon)))]=0*,{@pemit %#=[ansi(rh,-)] No weapon could be found.},10*,{@pemit %#=[ulocal(v(DB_Database)/MSG_Incapacitated)]},110*,{@pemit %#=[ansi(rh,-)] That is not a weapon.},1110,{@pemit %#=[ansi(rh,-)] You are allready wielding [ansi(wh,name(get(%#/DSS_Weapon)))].},1111,{@remit %l=[ansi(y,%N)] readies %p [ansi(y,name(%q0))] for use.[set(%#,DSS_Weapon:%q0)][lock(%q0/drop,=%q0)][lock(%q0/give,=%q0)]},{@pemit %#=[ulocal(MSG_Crit)]}
&DB_DATABASE Global=#105
&DB_HELP Global=#106
@DESCRIBE Global=[iter(sort(lattr(%!),a),[ifelse(mod(sub(#@,1),3),,%r)][ljust(##,25)])]


@@ DSS Chargen Commands(#112W)
@@ Type: Thing Flags: WIZARD
@@ Owner: Skilly Zone: *NOTHING* Pennies: 10
@@ Parent: *NOTHING*

@create DSS Chargen Commands
@set DSS Chargen Commands=!No_Command
@set DSS Chargen Commands=Wizard

&CMD_DESELECT Chargen=$+deselect *:@pemit %#=[ifelse([ulocal(v(DB_Database)/FN_HasSkills,%#)],switch([setq(0,secure(%0))][setq(1,grab(get(v(DB_Database)/List_Feats),[%q0]*,|))][setq(2,grab(get(v(DB_Database)/List_Languages),[%q0]*))][t(words(%q1))][t(words(%q2))],1*,[setq(4,extract(%q1,1,1))][ifelse(extract(%q1,2,1),ifelse(match(get(%#/DSS_Feats),%q4),ifelse(gte(get(%#/DSS_XP),[setr(3,mul(-1,extract(%q1,3,1)))]),You no longer have the [ansi(y,edit(%q4,_,%b))] feat.[set(%#,DSS_Feats:[setdiff(get(%#/DSS_Feats),%q4)])][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])],You are short [ansi(y,sub(get(%#/DSS_XP),%q3))] experience points.),[ansi(rh,-)] You dont have the [ansi(y,edit(%q4,_,%b))] feat.),[ansi(rh,-)] You may not deselect the [ansi(y,edit(%q4,_,%b))] feat. Only staff may remove that feat via +delfeat.)],01,[ifelse(match(get(%#/DSS_Languages),%q2),ifelse(gte(get(%#/DSS_XP),[setr(3,mul(-1,get(v(DB_Database)/Cost_Lang)))]),You no longer understand the [ansi(y,edit(%q2,_,%b))] language.[set(%#,DSS_Languages:[setdiff(get(%#/DSS_Languages),%q2)])][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])],You are short [ansi(y,sub(get(%#/DSS_XP),%q3))] experience points.),[ansi(rh,-)] You dont know the [ansi(y,edit(%q2,_,%b))] language.)],[ansi(rh,-)] Invalid feat or language name.),[ulocal(v(DB_Database)/MSG_NoTraits)])]
&CMD_LOWER Chargen=$+lower * to *:@pemit %#=[setq(0,ulocal(v(DB_Database)/FN_Parse_Attr,secure(%0)))][setq(1,ulocal(v(DB_Database)/FN_Parse_Skill,secure(%0)))][ifelse(ulocal(v(DB_Database)/FN_HasSkills,%#),switch([t(words(%q0))][t(words(%q1))],1*,[setq(2,max(40,val(secure(%1))))][setq(3,ulocal(v(DB_Database)/FN_Attr_Cost,%#,%q0,%q2))][ifelse(lte(%q3,0),[ulocal(v(DB_Database)/FN_SetAttr,%#,%q0,%q2)][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])][ansi(gh,-)] You +lower your [ansi(y,%q0)] to [ansi(y,%q2)] with a refund of [ansi(y,mul(-1,%q3))] experience points.,[ansi(rh,-)] You cannot +raise [ansi(y,%q0)] with +lower.)],01,[setq(2,max(0,val(secure(%1))))][setq(3,ulocal(v(DB_Database)/FN_Skill_Cost,%#,%q1,%q2))][ifelse(lte(%q3,0),[ulocal(v(DB_Database)/FN_SetSkill,%#,%q1,%q2)][set(%#,DSS_XP:[sub(get(%#/DSS_XP),%q3)])][ansi(gh,-)] You +lower your [ansi(y,%q1)] to [ansi(y,%q2)] with a refund of [ansi(y,mul(-1,%q3))] experience points.,[ansi(rh,-)] You cannot +raise [ansi(y,%q0)] with +lower.)],[ulocal(v(DB_Database)/MSG_NotName)]),[ulocal(v(DB_Database)/MSG_NoTraits)])]
&CMD_RESET Chargen=$+reset:@pemit %#=[setq(0,grab(sort(lattr(%!/RACE_*),a),RACE_[edit(squish(secure(get(%#/Species))),%b,_)]))][ifelse(words(%q0),,setq(0,RACE_Human))][setq(1,v(%q0))]You [ifelse(ulocal(v(DB_Database)/FN_HasSkills,%#),reinitialize,initialize)] your skill data.[set(%#,FIXED)][set(%#,DSS_XP:[extract(%q1,1,1,$)])][set(%#,DSS_Attrs:[vadd(setr(2,ulocal(v(DB_Database)/FN_Attr_Mods,%#)),setr(3,70 70 70 70 70 70 40))]|[%q2]|[%q3])][set(%#,DSS_Skills:[extract(%q1,2,1,$)])][set(%#,DSS_Feats:[extract(%q1,3,1,$)])][set(%#,DSS_Languages:[extract(%q1,4,1,$)])][set(%#,DSS_Lingo:[first(extract(%q1,4,1,$))])][set(%#,DSS_SP:0)][wipe(%#/DSS_Armor)][wipe(%#/DSS_Weapon)][ulocal(v(DB_Database)/FN_Update_Skills,%#)]
&DB_DATABASE Chargen=#105
@DESCRIBE Chargen=%tIn this phase of chargen, you may select your skills and/or feats. Useful commands in this room are as follows:%r%r%b%b[ansi(rh,+reset)] - Resets your character sheet.%r%b%b[ansi(rh,+sinfo)] [ansi(y,\[<topic>\])] - Displays documentation about the skills system.%r%b%b[ansi(rh,+sheet)] - Displays all your skills information.%r%b%b[ansi(rh,+sinfo)] [ansi(y,list attributes)] - Displays what skills the system has.%r%b%b[ansi(rh,+sinfo)] [ansi(y,list skills)] - Displays what skills the system has.%r%b%b[ansi(rh,+raise)] [ansi(y,<attribute/skill>)] [ansi(rh,to)] [ansi(y,<level>)] - Raises a attribute or skill.%r%b%b[ansi(rh,+lower)] [ansi(y,<attribute/skill>)] [ansi(rh,to)] [ansi(y,<level>)] - Lowers a attribute or skill.%r%b%b[ansi(rh,+sinfo)] [ansi(y,list feats)] - Lists all feats players can select.%r%b%b[ansi(rh,+sinfo)] [ansi(y,list languages)] - Lists all feats players can select.%r%b%b[ansi(rh,+select)] [ansi(y,<feat/language>)] - Adds that feat or language to your sheet.%r%b%b[ansi(rh,+deselect)] [ansi(y,<feat/language>)] - Removes that feat or language from your sheet.
&RACE_HUMAN Chargen=1200$$$English



@@ PARENT: Medpac - 1091(#1091Xn)
@@ Type: Thing Flags: SAFE NO_COMMAND
@@ Owner: Skilly Zone: *NOTHING* OOC Building Pesos: 0
@@ Parent: *NOTHING*

@create PARENT: Medpac
@set PARENT: Medpac=Safe
@set PARENT: Medpac=!No_Command

&CMD_HELP Medpac=$MP HELP:@pemit %#=[u(v(DB_Database)/FN_Header,Medpac Commands)]%r%b%b[ansi(rh,MP HELP)] - Displays this screen.%r%b%b[ansi(rh,MP SCAN)] [ansi(y,<player>)] - Displays a character's health status.%r%b%b[ansi(rh,MP TREAT)] [ansi(y,<player>)] [ansi(rh,FOR WOUND)] [ansi(y,<#>)] - Lets you tend to a player's <#>th wound.%r[u(v(DB_Database)/FN_Footer)]
&CMD_SCAN Medpac=$MP SCAN *:@pemit %#=[ifelse(isdbref(setr(0,locate(%#,secure(%0),hln))),ulocal(FN_Scan,%q0),[u(MSG_NotFound)])]
&CMD_TREAT Medpac=$MP TREAT * FOR WOUND *:@swi [setq(0,locate(%#,secure(%0),hln))][setq(1,extract(get(%q0/DSS_WP),val(secure(%1)),1,|))][setq(2,ulocal(v(DB_Database)/FN_GetSkill,%#,Treat_Injury))][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][not(not(or(match(get(%q0/DSS_Feats),Droid),match(get(%q0/DSS_Feats),Dead))))][t(words(%q1))][gte(%q2,extract(%q1,1,1))]=0*,{@pemit %#=[u(MSG_NotFound)]},10*,{@pemit %#=[u(v(DB_Database)/MSG_NoTraits)]},110*,{@pemit %#=[u(MSG_Dead)]},1110*,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] doesn't have that wound number.},11110,{@pemit %#=[ansi(rh,-)] You lack sufficent skill to handle that severe an injury with these tools.},11111,{think [setq(3,sub(%q2,add(1,rand(100))))][switch([gte(secs(),extract(%q1,3,1))][gte(%q3,0)],0*,[pemit(%#,[ansi(rh,-)] You may not tend this injury again for another [timestring(max(1,sub(extract(%q1,3,1),secs())))].)],10,[remit(%l,%N tries to tend to [name(%q0)]'s injuries\, but doesn't seem to improve matters.)][set(%q0,DSS_WP:[edit(get(%q0/DSS_WP),%q1,[extract(%q1,1,2)] [add(3600,secs())] [extract(%q1,4,1)])])],11,[setq(4,max(1,div(%q3,10)))][set(%q0,DSS_WP:[sortby(v(DB_Database)/FN_Sort_WP,setunion([ifelse(gt(sub(first(%q1),%q4),0),[sub(first(%q1),%q4)] [extract(%q1,2,1)] [add(3600,secs())] [extract(%q1,4,1)],)],setdiff(get(%q0/DSS_WP),%q1,|),|),|)])][remit(%l,%N tends to [name(%q0)]'s injuries.)][pemit(%#,You improve [name(%q0)]'s condition.)][pemit(%q0,You feel better.)])]},{@pemit %#=[u(v(DB_Database)/MSG_Crit)]}
&DB_DATABASE Medpac=#362
@DESCRIBE Medpac=%tThis is a sturdy, square shaped metallic box with a thick black strap hanging from it. Although metallic it appears to have a muted black coloration and on its cover the caduceus, an image of a snake wrapped around a staff.%r[ifelse(u(FN_CanUse),\(For instructions\, type [ansi(rh,MP HELP)]\),\(Due to your condition\, you may not use this.\))]
&FN_CANUSE Medpac=[not(words(setinter(Dead Unconscious,get(%#/DSS_Feats))))]
&FN_SCAN Medpac=[ifelse([u(v(DB_Database)/FN_HasSkills,%0)],[ulocal(v(DB_Database)/FN_Header,[name(%0)]'s Medical Scan)]%r[ansi(b,|)]%b[ljust([ansi(y,Species:)] [get(%0/Species)],25)][ljust([ansi(y,Gender:)] [get(%0/Sex)],25)][ljust([ansi(y,Age:)] [get(%0/age)],25)][ansi(b,|)]%r[ulocal(v(DB_Database)/FN_Sheet_Health,%0)][ulocal(v(DB_Database)/FN_Footer)],[u(v(DB_Database)/MSG_NoTraits)])]
&MSG_DEAD Medpac=[ansi(rh,-)] You cannot raise the dead!
&MSG_NOTFOUND Medpac=[ansi(rh,-)] Unable to locate person.


@@ Droid Repair Tools - 5490(#5490WX)
@@ Type: Thing Flags: WIZARD SAFE
@@ Owner: Skilly Zone: *NOTHING* OOC Building Pesos: 0
@@ Parent: *NOTHING*

@create Droid Repair Tools
@set Droid Repair Tools=Safe
@set Droid Repair Tools=Wizard

&CMD_HELP Droid Repair Tools=$DT HELP:@pemit %#=[u(v(DB_Database)/FN_Header,Medpac Commands)]%r%b%b[ansi(rh,DT HELP)] - Displays this screen.%r%b%b[ansi(rh,DT SCAN)] [ansi(y,<player>)] - Displays a character's health status.%r%b%b[ansi(rh,DT TREAT)] [ansi(y,<player>)] [ansi(rh,FOR WOUND)] [ansi(y,<#>)] - Lets you tend to a player's <#>th wound.%r[u(v(DB_Database)/FN_Footer)]
&CMD_SCAN Droid Repair Tools=$DT SCAN *:@pemit %#=[ifelse(isdbref(setr(0,locate(%#,secure(%0),hln))),ulocal(FN_Scan,%q0),[u(MSG_NotFound)])]
&CMD_TREAT Droid Repair Tools=$DT TREAT * FOR WOUND *:@swi [setq(0,locate(%#,secure(%0),hln))][setq(1,extract(get(%q0/DSS_WP),val(secure(%1)),1,|))][setq(2,ulocal(v(DB_Database)/FN_GetSkill,%#,Repair))][isdbref(%q0)][ulocal(v(DB_Database)/FN_HasSkills,%q0)][and(match(get(%q0/DSS_Feats),Droid),not(match(get(%q0/DSS_Feats),Dead)))][t(words(%q1))][gte(%q2,extract(%q1,1,1))]=0*,{@pemit %#=[u(MSG_NotFound)]},10*,{@pemit %#=[u(v(DB_Database)/MSG_NoTraits)]},110*,{@pemit %#=[u(MSG_Dead)]},1110*,{@pemit %#=[ansi(rh,-)] [ansi(y,name(%q0))] doesn't have that wound number.},11110,{@pemit %#=[ansi(rh,-)] You lack sufficent skill to handle that severe an injury with these tools.},11111,{think [setq(3,sub(%q2,add(1,rand(100))))][switch([gte(secs(),extract(%q1,3,1))][gte(%q3,0)],0*,[pemit(%#,[ansi(rh,-)] You may not tend this injury again for another [timestring(max(1,sub(extract(%q1,3,1),secs())))].)],10,[remit(%l,%N tries to tend to [name(%q0)]'s injuries\, but doesn't seem to improve matters.)][set(%q0,DSS_WP:[edit(get(%q0/DSS_WP),%q1,[extract(%q1,1,2)] [add(3600,secs())] [extract(%q1,4,1)])])],11,[setq(4,max(1,div(%q3,10)))][set(%q0,DSS_WP:[sortby(v(DB_Database)/FN_Sort_WP,setunion([ifelse(gt(sub(first(%q1),%q4),0),[sub(first(%q1),%q4)] [extract(%q1,2,1)] [add(3600,secs())] [extract(%q1,4,1)],)],setdiff(get(%q0/DSS_WP),%q1,|),|),|)])][remit(%l,%N tends to [name(%q0)]'s injuries.)][pemit(%#,You improve [name(%q0)]'s condition.)][pemit(%q0,You feel better.)])]},{@pemit %#=[u(v(DB_Database)/MSG_Crit)]}
&DB_DATABASE Droid Repair Tools=#362
@DESCRIBE Droid Repair Tools=%tThis is a sturdy, square shaped metallic box with a thick black strap hanging from it. Although metallic it appears to have a muted black coloration and on its cover the caduceus, an image of a snake wrapped around a staff.%r[ifelse(u(FN_CanUse),\(For instructions\, type [ansi(rh,DT HELP)]\),\(Due to your condition\, you may not use this.\))]
&FN_CANUSE Droid Repair Tools=[not(words(setinter(Dead Unconscious,get(%#/DSS_Feats))))]
&FN_SCAN Droid Repair Tools=[ifelse([u(v(DB_Database)/FN_HasSkills,%0)],[ulocal(v(DB_Database)/FN_Header,[name(%0)]'s Medical Scan)]%r[ansi(b,|)]%b[ljust([ansi(y,Species:)] [get(%0/Species)],25)][ljust([ansi(y,Gender:)] [get(%0/Sex)],25)][ljust([ansi(y,Age:)] [get(%0/age)],25)][ansi(b,|)]%r[ulocal(v(DB_Database)/FN_Sheet_Health,%0)][ulocal(v(DB_Database)/FN_Footer)],[u(v(DB_Database)/MSG_NoTraits)])]
&MSG_DEAD Droid Repair Tools=[ansi(rh,-)] You can only repair semi-damaged droids.
&MSG_NOTFOUND Droid Repair Tools=[ansi(rh,-)] Unable to locate person.


@@ PARENT: Bacta Tank(#5007Xen)
@@ Type: Thing Flags: SAFE ENTER_OK NO_COMMAND
@@ Owner: Skilly Zone: *NOTHING* OOC Building Pesos: 0
@@ Parent: *NOTHING*

@create PARENT: Bacta Tank
@set PARENT: Bacta Tank=Safe
@set PARENT: Bacta Tank=No_Command

&ACLONE Bacta=[lock(%!/leave,FN_CanLeave/1)][lock(%!/enter,FN_CanEnter/1)][set(%!,listen)][set(%!,Listen:*)]
@ADROP Bacta=think [lock(%!,=[%!])];@tr %!/AClone
@AENTER Bacta=think [set(%!,TIME_[%#]:[add(secs(),mul(60,ulocal(v(DB_Database)/FN_WP,%#)))]
@ALEAVE Bacta=think [wipe(%!/TIME_[%#])][wipe(%#/DSS_SP)][wipe(%#/DSS_WP)]
&CMD_IC Bacta=$+ic:th [pemit(%#,[ansi(hr,-)] You can't do that here.)]
&CMD_OOC Bacta=$+ooc:th [pemit(%#,[ansi(hr,-)] You can't do that here.)]
&DB_DATABASE Bacta=#362
@DESCRIBE Bacta=%r%tAn old 2-1B medical droid maintains a vigil with its bacta tank. The tank itself it large enough to contain one humanoid in a greenish solution of Bacta. A mouth and nose piece dangles from the top, which is usually connected to the patient during healing. At the moment, the bacta tank is [ansi(c,[ifelse(words(lcon(%!)),occupied,empty)])].%r%r[center(Type `[ansi(hr,enter [name(%!)])]' to use this tank.,80)]%r
@EFAIL Bacta=Sorry, [ifelse(eq(0,words(lcon(%!))),ifelse(match(get(%#/DSS_Feats),Dead),you are dead,you are not injured),this tank is already occupied)].
@ENTER Bacta=You enter the [name(%!)].
&FN_CANENTER Bacta=[and(eq(0,words(lcon(%!))),gt(ulocal(v(DB_Database)/FN_WP,%#),0),not(match(get(%#/DSS_Feats),Dead)))]
&FN_CANLEAVE Bacta=[ifelse(hasattr(%!,TIME_[%#]),not(lte(secs(),v(TIME_[%#]))),1)]
&IDESCRIBE Bacta=%r%tYou are floating inside a bacta tank, with a breathing mask over your nose and mouth. It is difficult to see outside, except for the glowing eyes of the 2-1B droid monitoring your condition. Besides, you're probably too drowsy to care much at the moment.%r%r[ifelse(isnum(v(TIME_[%#])),[center(ansi(c,You may leave the tank [ifelse(lte(secs(),v(TIME_[%#])),in [timestring(sub(v(TIME_[%#]),secs()))],now)].),78)]%r[center(Type `[ansi(rh,leave)]' to exit the tank.,78)],)]%r
@INPREFIX Bacta=From outside the tank,%b
@LEAVE Bacta=You leave the [name(%!)].
@LFAIL Bacta=You cannot leave until you are healed, at [ansi(c,timestring(sub(v(TIME_[%#]),secs())))].
@LISTEN Bacta=*
@OENTER Bacta=enters the [name(%!)].
@OLEAVE Bacta=is removed from the [name(%!)].
@OXENTER Bacta=enters the [name(%!)].
@OXLEAVE Bacta=is removed from the [name(%!)].


@@ Universal Ammo Parent - 714(#714In)
@@ Type: Thing Flags: TRUST NO_COMMAND
@@ Owner: Combat Zone: *NOTHING* OOC Building Pesos: 10
@@ Parent: *NOTHING*

@create Universal Ammo Parent
@set Universal Ammo Parent=trust
@set Universal Ammo Parent=safe

&AMMO Universal Ammo=1
&AMMO_DESC Universal Ammo=%tThis is a standard blaster ammunition cartridge, or, powercell. An electronic capacitor block, coming in different colors, it is three inches in length, and two inches in width. The front side of it is open, with five prongs sticking out, whilst the rear side has a small, single-prong hole. Likely, these prongs control power flow to the weapon.
&AMMO_TYPE Universal Ammo=Blaster Pack
&DESCRIBE Universal Ammo=[u(Ammo_Desc)]%r%r[ljust([ansi(gh,Amount:)] [round(mul(v(Ammo),100),0)]%%,39)][ansi(rh,Type:)] [v(Ammo_Type)]


@@ Universal Armor Parent - 1050(#1050In)
@@ Type: Thing Flags: TRUST NO_COMMAND
@@ Owner: Combat Zone: *NOTHING* OOC Building Pesos: 10
@@ Parent: *NOTHING*

@create Universal Armor Parent
@set Universal Armor Parent=SAFE

&AREADY Universal Armor=%N puts on %p [name(%!)].
&AUNREADY Universal Armor=%N removes %p [name(%!)].
&DESCRIBE Universal Armor=[u(ADesc)]%r%r[ljust([ansi(gh,Damage Threshold:)] [v(Threshold)],39)][ansi(rh,Protection Rating:)] [mul(100,v(Rating))]%%
&RATING Universal Armor=0.2
&THRESHOLD Universal Armor=5


@@ Universal Weapon Parent(#1092IXn)
@@ Type: Thing Flags: TRUST SAFE NO_COMMAND
@@ Owner: Combat Zone: *NOTHING* OOC Building Pesos: 0
@@ Parent: *NOTHING*

@create Universal Weapon Parent
@set Universal Weapon Parent=SAFE

&AATTACK Universal Weapon=[ifelse(gt(v(Ammo_Max),0),set(%!,Ammo:[sub(v(Ammo),1)])],)]
&ACCURACY Universal Weapon=0
&AFIRE Universal Weapon=%N attacks [name(%q0)] with %p [name(%!)].
&AMMO Universal Weapon=0
&AMMO_MAX Universal Weapon=0
&AMMO_TYPE Universal Weapon=Blaster Pack
&AREADY Universal Weapon=%N draws %p [name(%!)].
&ARELOAD Universal Weapon=%n loads a fresh [lcstr(v(Ammo_Type))] into %p [name(%!)].
&ATTACK_SKILL Universal Weapon=Ranged:blaster_pistols
&AUNLOAD Universal Weapon=%N pops out the [v(Ammo_Type)] from %p [name(%!)].
&AUNREADY Universal Weapon=%N puts %p [name(%!)] away.
&CURR_MODE Universal Weapon=Kill
&DEFENSE_SKILL Universal Weapon=Dodge_Ranged
&DESCRIBE Universal Weapon=[u(WDesc)]%r%r[ansi(gh,Accuracy:)] [add(100,ulocal(Accuracy))]\% \([ansi(c,[edit(ulocal(Attack_Skill),_,%b)] vs [edit(ulocal(Defense_Skill),_,%b)])]\)%r[ansi(rh,Maximum Damage:)] [ulocal(Max_SP)] Stun Points & [ulocal(Max_WP)] Wound points at current setting.[ifelse(gt(words(v(Modes),|),1),%r[ljust([ansi(mh,Current Setting:)] [v(Curr_Mode)],38)][ansi(mh,Possible Settings:)] [iter(v(Modes),##,|,\,%b)].,)][ifelse(gt(v(Ammo_Max),0),%r[ljust([ansi(mh,Ammo:)] [v(Ammo)] shots left of [v(Ammo_Max)] maximum.,38)][ansi(mh,Ammo Type:)] [v(Ammo_Type)].%r[ljust([ansi(mh,Weapon Range:)] [v(Range)],38)][ansi(mh,Firing Rate)]: [v(Firing_Rate)],)][ifelse(orflags(%#,Wr),%r[ansi(ch,Notes:)] [v(Anotes)],)]
&FN_CANUSE Universal Weapon=[ifelse(gt(v(Ammo_Max),0),gt(v(Ammo),0),1)]
&FN_ISRANGED Universal Weapon=0
&KILL_SP Universal Weapon=10
&KILL_WP Universal Weapon=100
&MAX_SP Universal Weapon=[v([edit(v(Curr_Mode),%b,_)]_SP)]
&MAX_WP Universal Weapon=[v([edit(v(Curr_Mode),%b,_)]_WP)]
&MODES Universal Weapon=Kill
&WDESC Universal Weapon=This is a weapon without a description. If you would like to submit a possible description to use, @mail one to Halcyon.


@@ Configure

think [iter(Help Global Chargen Medpac Bacta,set(##,DB_Database:[num(Database)]))]
think [iter(Database Help,set(##,DB_Global:[num(Global)]))]
think [iter(Database Global,set(##,DB_Help:[num(Help)]))]

@tel Global=#2

think Be sure to edit the FN_IsAmmo, FN_IsArmor, & FN_IsWeapon attributes on database.

@@ End