//::Constants //::--------------------------------------------------------------------------- const string SERVERVAULT = "/home/tyler/Desktop/NeverwinterNights/NWN/servervault"; //::Prototypes //::--------------------------------------------------------------------------- //::Returns true if leto is online int Leto_GetIsOnline( ); //::Returns the path to oPC's file string Leto_GetBicPath( object oPC ); //::Executes a letoscript that will alter the character file //::This function will boot the PC //::NOTE This function should not run on the PC as (s)he'll's getting booted //::Use the GenerateLetoScript* functions to setup a script //::Example: //::string sScript = GenerateLetoScriptSetAbility( ABILITY_CHARISMA, 10 ); //::sScript += GenerateLetoScriptAddFeat( FEAT_EPIC_DEVASTATING_CRITICAL_HANDAXE ); //::ExecuteFileWritingOperation(oPC, sScript ); //::Result: The PC is booted and when he logs in he'll have devcrit handaxe and 10 cha void Leto_ExecuteFileWritingOperation( object oPC, string sScript, int nBoot = TRUE ); //::Executes a file reading leto script //::This does not require booting //::Fields: //::------ //::FirstName //::LastName //::Description //::DescriptionOverr //::IsPC //::IsDM //::Tag //::Conversation //::Interuptable //::Age //::Gender //::Race //::Subrace //::StartingPackage //::Deity //::MClassLevUpIn //::willbonus //::fortbonus //::refbonus //::Gold //::BaseAttackBonus //::RefSaveThrow //::WillSaveThrow //::FortSaveThrow //::ArmorClass //::OverrideBAB //::Str //::Dex //::Int //::Wis //::Con //::Cha //::NeutralAC //::SoundSetFile //::FootstepType //::Plot //::NoPermaDeath //::Disarmable //::BodyBag //::HitPoints //::CurrentHitPoints //::MaxHitPoints //::PregameCurrent //::Experiance //::MovementRate //::Portait //::GoodEvil //::LawfulChaotic //::Color_Skin //::Color_Hair //::Color_Tattoo1 //::Color_Tattoo2 //::Phenotype //::Appearance_Type //::Appearance_Head //::Tail_New //::Wings_New //::FactionID //::ChallengeRating //::BodyPart_Neck //::BodyPart_Torso //::BodyPart_Belt //::BodyPart_Pelvis //::BodyPart_LShoul //::BodyPart_LBicep //::BodyPart_LFArm //::BodyPart_LHand //::BodyPart_LThigh //::BodyPart_LShin //::BodyPart_LFoot //::BodyPart_RShoul //::BodyPart_RBicep //::BodyPart_RFArm //::BodyPart_RHand //::BodyPart_RThigh //::BodyPart_RShin //::BodyPart_RFoot //::CompanionType //::CompanionName //::SkillPoints //::DetectMode //::StealthMode //::MasterID //::CreatureSize //::IsDestroyable //::IsCommandable //::IsImmortal //::Lootable //::BodyBagId //::DecayTime //::TemplateResRef //::ScriptHeartBeat //::ScriptOnNotice //::SctiptSpellAt //::ScriptAttacked //::ScriptDamaged //::ScriptDisturbed //::ScriptEndRound //::ScriptDialogue //::ScriptSpawn //::ScriptRested //::ScriptDeath //::ScriptUserDefine //::ScriptOnBlocked //::CombatRoundData //::AreaId //::SitObject //::AmbientAnimState //::CreatnScrtFird //::CreatnScrptFird //::PM_IsPolymorphed //::Listening //::XPosition //::YPosition //::ZPosition //::XOrientation //::YOrientation //::ZOrientation //::AnimationDay //::AnimationTime //::EncounterObject string Leto_ExecuteFileReadingOperation( object oPC, string sFieldToRead ); //::Return letoscript code to change the racial on oPC //::Use ExecuteFileWritingOperation() to execute the script //::All strings GenerateLeto* functions returns are stackable //::Fields: //::------ //::FirstName //::LastName //::Description //::DescriptionOverr //::IsPC //::IsDM //::Tag //::Conversation //::Interuptable //::Age //::Gender //::Race //::Subrace //::StartingPackage //::Deity //::MClassLevUpIn //::willbonus //::fortbonus //::refbonus //::Gold //::BaseAttackBonus //::RefSaveThrow //::WillSaveThrow //::FortSaveThrow //::ArmorClass //::OverrideBAB //::Str //::Dex //::Int //::Wis //::Con //::Cha //::NeutralAC //::SoundSetFile //::FootstepType //::Plot //::NoPermaDeath //::Disarmable //::BodyBag //::HitPoints //::CurrentHitPoints //::MaxHitPoints //::PregameCurrent //::Experiance //::MovementRate //::Portait //::GoodEvil //::LawfulChaotic //::Color_Skin //::Color_Hair //::Color_Tattoo1 //::Color_Tattoo2 //::Phenotype //::Appearance_Type //::Appearance_Head //::Tail_New //::Wings_New //::FactionID //::ChallengeRating //::BodyPart_Neck //::BodyPart_Torso //::BodyPart_Belt //::BodyPart_Pelvis //::BodyPart_LShoul //::BodyPart_LBicep //::BodyPart_LFArm //::BodyPart_LHand //::BodyPart_LThigh //::BodyPart_LShin //::BodyPart_LFoot //::BodyPart_RShoul //::BodyPart_RBicep //::BodyPart_RFArm //::BodyPart_RHand //::BodyPart_RThigh //::BodyPart_RShin //::BodyPart_RFoot //::CompanionType //::CompanionName //::SkillPoints //::DetectMode //::StealthMode //::MasterID //::CreatureSize //::IsDestroyable //::IsCommandable //::IsImmortal //::Lootable //::BodyBagId //::DecayTime //::TemplateResRef //::ScriptHeartBeat //::ScriptOnNotice //::SctiptSpellAt //::ScriptAttacked //::ScriptDamaged //::ScriptDisturbed //::ScriptEndRound //::ScriptDialogue //::ScriptSpawn //::ScriptRested //::ScriptDeath //::ScriptUserDefine //::ScriptOnBlocked //::CombatRoundData //::AreaId //::SitObject //::AmbientAnimState //::CreatnScrtFird //::CreatnScrptFird //::PM_IsPolymorphed //::Listening //::XPosition //::YPosition //::ZPosition //::XOrientation //::YOrientation //::ZOrientation //::AnimationDay //::AnimationTime //::EncounterObject string Leto_GenerateLetoScriptChangeBicField( string sBicField, string sValue ); //::Return letoscript code to modify a skill on oPC //::Use ExecuteFileWritingOperation() to execute the script //::All strings GenerateLeto* functions returns are stackable //::nLevel determines which level in the bicfield the modification //::should be linked to if that level is undone so is the letochange //::if nLevel = -1 no levellist changing will happen //::SKILL_* constants are used string Leto_GenerateLetoScriptModifySkill( int nSkill, int nModify, int nLevel = -1 ); //::Return letoscript code to add nFeat to oPC //::Use ExecuteFileWritingOperation() to execute the script //::All strings GenerateLeto* functions returns are stackable //::nLevel determines which level in the bicfield the modification //::should be linked to if that level is undone so is the letochange //::if nLevel = -1 no levellist changing will happen string Leto_GenerateLetoScriptAddFeat( int nFeat, int nLevel = -1 ); //::Return letoscript code to remove nFeat from oPC //::Use ExecuteFileWritingOperation() to execute the script //::All strings GenerateLeto* functions returns are stackable string Leto_GenerateLetoScriptRemoveFeat( int nFeat ); //::Return letoscript code to modify a ability score on oPC //::Use ExecuteFileWritingOperation() to execute the script //::All strings GenerateLeto* functions returns are stackable //::ABILITY_* constants are used to determin ability //::Note nwn handles its own races for example if you want a elf //::to have 10 con you'd have to set nSet to 12 as nwn is subracting 2 string Leto_GenerateLetoScriptModifyAbility( int nAbility, int nSet ); //::Function definitions //::--------------------------------------------------------------------------- string Leto_GenerateLetoScriptModifySkill( int nSkill, int nModify, int nLevel = -1 ){ if( nLevel == -1 )return "/SkillList/["+ IntToString( nSkill ) +"]/Rank = /SkillList/["+ IntToString( nSkill ) +"]/Rank +"+IntToString( nModify )+"; "; nLevel--; return "/SkillList/["+ IntToString( nSkill ) +"]/Rank = /SkillList/["+ IntToString( nSkill ) +"]/Rank +"+IntToString( nModify )+"; "+ "/LvlStatList/["+ IntToString( nLevel ) +"]/SkillList/["+ IntToString( nSkill ) +"]/Rank = "+IntToString( nModify )+"; "; } //::--------------------------------------------------------------------------- string Leto_GenerateLetoScriptChangeBicField( string sBicField, string sValue ){ return "/" + sBicField + "='" + sValue + "';"; } //::--------------------------------------------------------------------------- string Leto_GenerateLetoScriptModifyAbility( int nAbility, int nMod ){ string sAbility; switch( nAbility ){ case ABILITY_CHARISMA: sAbility = "Cha";break; case ABILITY_CONSTITUTION: sAbility = "Con";break; case ABILITY_DEXTERITY: sAbility = "Dex";break; case ABILITY_INTELLIGENCE: sAbility = "Int";break; case ABILITY_STRENGTH: sAbility = "Str";break; case ABILITY_WISDOM: sAbility = "Wis";break; default: return ""; } return "/"+sAbility+" += '" +IntToString( nMod )+ "';"; } //::--------------------------------------------------------------------------- string Leto_GenerateLetoScriptRemoveFeat( int nFeat ){ return "replace 'Feat', " + IntToString( nFeat ) + ", DeleteParent;"; } //::--------------------------------------------------------------------------- string Leto_GenerateLetoScriptAddFeat( int nFeat, int nLevel = -1 ){ if( nLevel == -1 )return "add /FeatList/Feat, "+IntToString( nFeat )+", gffWord;"; nLevel--; return "add /FeatList/Feat, "+IntToString( nFeat )+", gffWord;"+ "add /LvlStatList/["+ IntToString( nLevel ) +"]/FeatList/Feat, "+IntToString( nFeat )+", gffWord;"; } //::--------------------------------------------------------------------------- string Leto_ExecuteFileReadingOperation( object oPC, string sFieldToRead ){ object oMod = GetModule(); string sPath = Leto_GetBicPath( oPC ); string sEXEScript = "$RealFile = q<" + sPath + ">;" + "$EditFile = $RealFile + '.utc';" + "FileRename $RealFile, $EditFile;" + "%bic = $EditFile or die;" + "print /" + sFieldToRead + ";" + "%bic = '>';" + "close %bic;" + "FileRename $EditFile, $RealFile;"; SetLocalString( oMod, "NWNX!LETO!SCRIPT", sEXEScript ); return GetLocalString( oMod, "NWNX!LETO!SCRIPT" ); } //::--------------------------------------------------------------------------- void ExecuteLetoScript(string sScript) { SetLocalString( GetModule( ), "NWNX!LETO!SCRIPT", sScript ); } //::--------------------------------------------------------------------------- void Leto_ExecuteFileWritingOperation( object oPC, string sScript, int nBoot = TRUE ){ string sPath = Leto_GetBicPath( oPC ); if( nBoot ) BootPC( oPC ); string sEXEScript = "$RealFile = q<" + sPath + ">;" + "$EditFile = $RealFile + '.utc';" + "FileRename $RealFile, $EditFile;" + "%bic = $EditFile or die;" + sScript + "%bic = '>';" + "close %bic;" + "FileRename $EditFile, $RealFile;"; DelayCommand(1.0, ExecuteLetoScript(sEXEScript)); } //::--------------------------------------------------------------------------- string Leto_GetBicPath( object oPC ){ ExportSingleCharacter( oPC ); object oMod = GetModule(); string sPath = SERVERVAULT + GetPCPlayerName( oPC ) + "/"; SetLocalString( oMod, "NWNX!LETO!SCRIPT", "print q<" + sPath + "> + FindNewestBic q<" + sPath + ">;" ); return GetLocalString( oMod, "NWNX!LETO!SCRIPT" ); } //::--------------------------------------------------------------------------- int Leto_GetIsOnline( ){ SetLocalString( GetModule( ), "NWNX!LETO!SCRIPT", "print 'is_very_alive_today'" ); return ( GetLocalString( GetModule( ), "NWNX!LETO!SCRIPT" ) == "is_very_alive_today" ? TRUE: FALSE ); } //::Main; uncomment for testing //::--------------------------------------------------------------------------- //void main(){}