The Elder Scrolls & Fallout 3 Modding

на главную страницу сайта

Форум Oblivion, Skyrim & Fallout 3/4 Modding

Объявление

У нас есть свой сервер Дискорда. Заходите, пообщаемся.
Господа, те кто пользуются фотохостингом http://uploads.ru/ для размещения изображений. Рекомендую воспользоваться для упрощения загрузки вот этой программой.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » Редактор Creation Kit » Вопросы по скиптовому языку Папирус


Вопросы по скиптовому языку Папирус

Сообщений 31 страница 60 из 75

1

В этой теме задаем вопросы/обсуждаем скриптовый язык Скайрима - Папирус.

После первого ознакомления хочу сказать, что структура языка кажется практически идентичной Обливионскому. Добавилось больше атрибутов, блоки заменены на события (event). Но в целом пока что похожего больше, чем отличий.

Перечень материалов на русском:

Папирус. Туториал 1. Привет, мир!
http://modder.ucoz.ru/load/10-1-0-157
перевод первой части серии туториалов о Папирусе. Никаких откровений, но мало ли кому поможет...

Папирус. Туториал 2. Переменные и условия
http://modder.ucoz.ru/load/10-1-0-158
Перевод второго туториала из серии туториалов о скриптовом языке Папирус (Papyrus) редактора Creation Kit. Рассматриваются элементарные понятия связанные с переменными и операторами условий.

Папирус. Туториал 3. Введение в свойства и функции
http://modder.ucoz.ru/load/10-1-0-160
Перевод третьего туториала из серии туториалов о скриптовом языке Папирус (Papyrus) редактора Creation Kit. Введение в свойства и функции.

Настройка текстового редактора Notepad++ для работы с Папирусом
http://modder.ucoz.ru/load/10-1-0-161
Для работы со скриптами Папируса можно использовать сторонние текстовые редакторы - скрипты хранятся сейчас уже не в есп-файлах, а отдельно. Один из широко распространенных текстовых редакторов это Notepad++. В данном туториале расписано, как настроить Notepad++ для работы с Папирусом.
ЗЫ: перевод и дополнение статьи выложенной на английской ВИКИ.

Введение в Papyrus (тут много ценных мелочей, в общем о языке)
Состояния (тоже показалось интересным)
О типах переменных
Об операторах
Идентификаторы EditorID в языке Papyrus
Структура файла скрипта (Script File Structure)
Papyrus: базовая информация (очень большая и познавательная статья)

0

31

IgorLutiy написал(а):

Нашелся бы сейчас толковый организатор без привязки к какому-то сайту - может быть получилось бы собрать новую команду.

мне лень. ивлу пинай. в принципе вопрос дозрел. наберутся быстро.
:D

да-да мультипост. я кака. и флудераст.  :tomato:

0

32

7755, скромность я уже перерос)

Убери бокс и будет как в обле сообщение в левой части экрана.

Далее папки:

В сорсе лежат не компилированные скрипты - их ложить в мод не обязательно.
В папке Скрипт лежат компилированные скрипты и они обязательны.

Первые открывает любой текстовый редактор - хоть блокнот. Вторые в коде идут, да и редачить тебе их не надо. Я Нотепадом пользуюсь, так как привычней.

Там посмотришь проперты и добавишь один с ссылкой на армор, потом в списке выберешь тот амулет на котором скрипт. Обращаться к амулету только через проперт.

Scriptname ИмяСкрипта extends ObjectReference 
{Сюда краткую инфу о скрипте}
Armor Property eqCircle0003  Auto
Event OnEquipped(Actor akActor)
If (akActor == Game.GetPlayer())
    Game.GetPlayer().UnequipItem(eqCircle0003,1)
    Debug.Message("Сюда сообщение своё")
EndIf
EndEvent

Тут один мессадж. Больше я делал только для себя, тебе они не нужны)

+2

33

Netico написал(а):

Там посмотришь проперты и добавишь один с ссылкой на армор, потом в списке выберешь тот амулет на котором скрипт. Обращаться к амулету только через проперт.

тоесть как я делал - открывал амулет\шмотку потом нажимал добавить скрипт и писал скрипт - так не делать?
http://s2.uploads.ru/E4d27.jpg

0

34

7755, Жмешь Add - добавляешь скрипт. Вписываешь в него имя скрипта. Жмешь "ОК", потом станут активные три кнопки:
Add
Remove
Properties
Жмешь "Properties", потом "Add Property". Настраиваем его:
Type: Armor
Name: Называешь_так_как_потом_в_скрипте_будешь_обращаться_к_переменной(У меня "eqCircle0003")
Нажимаешь "ОК". Выбираешь его и жмешь слева кнопку "Edit Value" и ищешь в списке свой амулет. Если все правильно, то найдешь. Если нет, то будет морока делать по новой.

После этого уже редактируешь квест. В нем уже будет несколько строк.

А вообще на такие случаи аська должна быть) Мне проще за ручку провести пошагово)

Отредактировано Netico (2013-04-05 18:12:31)

0

35

7755 написал(а):

есть ли быстрый маленький просмотрщик\редактор для этих скриптов в виде отдельной программы

Есть и не один. Как вариант:
http://modder.ucoz.ru/load/10-1-0-161

7755 написал(а):

мне лень. ивлу пинай. в принципе вопрос дозрел. наберутся быстро.

Ивлу? Я же писал - нужен толковый организатор без привязки к конкретному сайту. Боюсь Ивл не подойдет сейчас ни по одному из параметров. Да и вообще я сейчас не знаю подобной кандидатуры.

Netico написал(а):

А вообще на такие случаи аська должна быть)

Аська проще. Но зато потом все, что там написано - уходит в никуда. А написанное и разжеванное на форуме может помочь и другим людям :)

+1

36

Igor_Ra написал(а):

разжеванное на форуме

мне пожалуйста уже готовое. вот спальный вагон ваще красавчег. если может пишет готовый скрипт с пояснениями, жаль редкий гость. кстати он папирусом занялся? если да то я спокоен за будущее модификаций в скайриме.
а то че то гляжу мало новичков на моддере про скайрим спрашивают.

Netico

Event OnEquipped(Actor akActor)
If (akActor == Game.GetPlayer())

akActor - это произвольное имя(может быть любое) для функции\действия\переменной? вобщем писать можно что угодно вместо этого да?

0

37

7755 написал(а):

кстати он папирусом занялся? если да то я спокоен за будущее модификаций в скайриме.

Сомневаюсь. Он любитель Фаллаута (и Сталкера, если не ошибаюсь), но не ТЕС.

7755 написал(а):

а то че то гляжу мало новичков на моддере про скайрим спрашивают.

Вот о чём я сегодня и писал.

0

38

7755 написал(а):

akActor - это произвольное имя(может быть любое) для функции\действия\переменной? вобщем писать можно что угодно вместо этого да?

Я в папирусе разбирался от твоего вопроса до готового квеста. По времени) Как я понял это атрибут и на замену ругается. Вероятнее всего есть другие атрибуты, но надо искать их и пробовать методом тыка. Пока не будет набор всех функций и атрибутов точно не скажу.

Igor_Ra написал(а):

Аська проще. Но зато потом все, что там написано - уходит в никуда. А написанное и разжеванное на форуме может помочь и другим людям

Это да, но иногда полезно провести по пунктам по ходу в кратце объясняя)

7755 написал(а):

а то че то гляжу мало новичков на моддере про скайрим спрашивают.

Так как мало что у вас есть) Новички обычно вбивают в поиске Скайрим, а на вас чаще ссылается Фол и Обла. Вот и получается. Да и много где ваши туторы воруют безбожно. Я с трудом нашел сайт перебирая по памяти адреса)

0

39

Давай попытаюсь с пояснениями, но сам еще толком не понял так что не пинать если где ошибусь.

Scriptname aaaMyAmuletScript extends ObjectReference

;Объявляем что данный файл есть скрипт с именем "aaaMyAmuletScript", который дополняет родительский скрипт
;"ObjectReference"

Armor Property eqCircle0003 Auto

;Переменная типа "Armor" с именем "eqCircle0003" автоматического размера(то есть движок сам поставит нужный ;размер)

Event OnEquipped(Actor akActor)

;Начинаем выполнение скрипта когда заскриптованный предмет одет актером.

If (akActor == Game.GetPlayer())
            ;Если актер использовавший предмет является игроком

    Game.GetPlayer().UnequipItem(eqCircle0003,1)
                  ;Обращаемся к ссылке на игрока и снимаем с него предмет помещая в инвентарь.

    Debug.Message("Сообщение")
                  ;Выводим сообщение на экран в левой верхней части.

EndIf
              ;Заканчиваем блок вариаций.

EndEvent
;Заканчиваем скрипт.

Что еще не понятно? Может поясню.

+2

40

Igor_Ra, в туторе по настройке Нотепада есть ссылка на файл "File:Papyrus.xml", но она не работает. Нет ли у вас случаем сего файла? Или где можно взять его?

P.S. На гугле забанен) (скорость соединения не способствует свободному серфу по просторам всемирной паутины)

P.S.S. Очень-очень-очень надо сей файлик.

Отредактировано Netico (2013-04-05 23:06:11)

0

41

Netico написал(а):

Так как мало что у вас есть) Новички обычно вбивают в поиске Скайрим, а на вас чаще ссылается Фол и Обла. Вот и получается. Да и много где ваши туторы воруют безбожно. Я с трудом нашел сайт перебирая по памяти адреса)

Может и мало, только вот где больше-то на русском? А Фолл и Обливион - это да.
Воруют уже пять лет. Сначала я боролся с этим, а потом надоело. Толку мало, а так может хоть кому польза будет.
А по поводу сайта - в каждом туториале есть ссылка на сайт и мой и-мейл.

Netico написал(а):

Вероятнее всего есть другие атрибуты, но надо искать их и пробовать методом тыка. Пока не будет набор всех функций и атрибутов точно не скажу.

Думаю начинать можно отсюда. Это раздел Папируса на англоязычной ВИКИ по редактору Скайрима.

Netico написал(а):

Что еще не понятно? Может поясню.

Отлично объяснено  :cool:

Netico написал(а):

в туторе по настройке Нотепада есть ссылка на файл "File:Papyrus.xml", но она не работает. Нет ли у вас случаем сего файла? Или где можно взять его?

Берем текст вот здесь:
http://www.creationkit.com/Papyrus_Autocomplete
вставляем в новый документ, который называем Papyrus.xml, дальше всё по инструкции. Это на официальной ВИКИ изменения произошли уже после перевода...

0

42

Netico
понял что akActor - жестко прописан и означает действие актера.  :writing:
эту страницу глянь

вроде это и есть Papyrus.xml

Код:
<NotepadPlus>
    <UserLang name="Papyrus" ext="psc">
        <Settings>
            <Global caseIgnored="yes" />
            <TreatAsSymbol comment="yes" commentLine="yes" />
            <Prefix words1="no" words2="no" words3="no" words4="no" />
        </Settings>
        <KeywordLists>
            <Keywords name="Delimiters">&quot;00&quot;00</Keywords>
            <Keywords name="Folder+">Event Function If State While</Keywords>
            <Keywords name="Folder-">EndEvent EndFunction EndIf EndState EndWhile Native</Keywords>
            <Keywords name="Operators">- ! % &amp; ( ) * , . / [ ] | + &lt; = &gt;</Keywords>
            <Keywords name="Comment">1{ 2} 0;</Keywords>
            <Keywords name="Words1">abs acos Activate Add AddAchievement AddDependentAnimatedObjectReference AddForm AddHavokBallAndSocketConstraint AddInventoryEventFilter AddItem AddPerk AddShout AddSpell AddToFaction AddToMap AdvanceSkill AllowBleedoutDialogue AllowPCDialogue Apply ApplyCrossFade ApplyHavokImpulse asin atan AttachAshPile BlockActivation CalculateEncounterLevel CalculateFavorCost CanFastTravelToMarker CanPayCrimeGold CaptureFrameRate Cast Ceiling CenterOnCell CenterOnCellAndWait Clear ClearArrested ClearDestruction ClearExtraArrows ClearForcedMovement ClearKeepOffsetFromActor ClearLookAt ClearPrison ClearTempEffects CloseUserLog CompleteAllObjectives CompleteQuest cos CreateDetectionEvent DamageActorValue DamageAV DamageObject DBSendPlayerPosition DebugChannelNotify DegreesToRadians Delete DeleteWhenAble Disable DisableNoWait DisablePlayerControls Dispel DispelAllSpells DispelSpell DoCombatSpellApply DropObject DumpAliasData Enable EnableAI ENableFastTravel EnableFastTravel EnableNoWait EnablePlayerControls EndFrameRateCapture EquipItem EquipShout EquipSpell EvaluatePackage FadeOutGame FailAllObjectives FastTravel FindClosestActor FindClosestReferenceOfAnyTypeInList FindClosestReferenceOfType FindRandomActor FindRandomReferenceOfAnyTypeInList FindRandomReferenceOfType FindWeather Fire Floor ForceActive ForceActorValue ForceAddRagdollToWorld ForceAV ForceFirstPerson ForceLocationTo ForceMovementDirection ForceMovementDirectionRamp ForceMovementRotationSpeed ForceMovementRotationSpeedRamp ForceMovementSpeed ForceMovementSpeedRamp ForceRefTo ForceRemoveRagdollFromWorld ForceStart ForceTargetAngle ForceTargetDirection ForceTargetSpeed ForceThirdPerson GameTimeToString Get GetActorBase GetActorOwner GetActorReference GetActorValue GetActorValuePercentage GetAlias GetAngleX GetAngleY GetAngleZ GetAnimationVariableBool GetAnimationVariableFloat GetAnimationVariableInt GetAssociatedSkill GetAt GetAV GetAverageFrameRate GetAVPercentage GetBaseActorValue GetBaseAV GetBaseObject GetBribeAmount GetBudgetCount GetBudgetName GetCasterActor GetClass GetClassification GetCombatState GetCombatTarget GetConfigName GetCrimeFaction GetCrimeGold GetCrimeGoldNonViolent GetCrimeGoldViolent GetCurrentBudget GetCurrentDestructionStage GetCurrentGameTime GetCurrentLocation GetCurrentMemory GetCurrentPackage GetCurrentRealTime GetCurrentScene GetCurrentStageID GetCurrentWeather GetCurrentWeatherTransition GetDeadCount GetDialogueTarget GetDistance GetEditorLocation GetEquippedItemType GetEquippedShield GetEquippedShout GetEquippedSpell GetEquippedWeapon GetFactionOwner GetFactionRank GetFactionReaction GetFavorPoints GetFlyingState GetForcedLandingMarker GetForm GetFormID GetGameSettingFloat GetGameSettingInt GetGameSettingString GetGiftFilter GetGoldAmount GetGoldValue GetHeadingAngle GetHeight GetHigestRelationshipRank GetHighestRelationshipRank GetInfamy GetInfamyNonViolent GetInfamyViolent GetItemCount GetItemHealthPercent GetKey GetKeywordData GetKiller GetLength GetLevel GetLeveledActorBase GetLightLevel GetLinkedRef GetLocation GetLockLevel GetLowestRelationshipRank GetMass GetMaxFrameRate GetMinFrameRate GetNoBleedoutRecovery GetNthLinkedRef GetOpenState GetOutgoingWeather GetOwningQuest GetParentCell GetPlatformName GetPlayer GetPlayerControls GetPlayerGrabbedRef GetPlayersLastRiddenHorse GetPositionX GetPositionY GetPositionZ GetRace GetReaction GetRealHoursPassed GetRef GetReference GetRefTypeAliveCount GetRefTypeDeadCount GetRegard GetRelationshipRank GetReputation GetScale GetSex GetSitState GetSize GetSkyMode GetSleepState GetStage GetStageDone GetState GetStolenItemValueCrime GetStolenItemValueNoCrime GetTargetActor GetTemplate GetTriggerObjectCount GetValue GetValueInt GetVersionNumber GetVoiceRecoveryTime GetVoiceType GetWidth GetWorldSpace GoToState GtLockLevel HasAssociation HasCommonParent HasEffectKeyword HasFamilyRelationship HasForm HasKeyword HasLOS HasMagicEffect HasMagicEffectWithKeyword HasNode HasParentRelationship HasPerk HasRefType HasSpell HideTitleSequenceMenu IgnoreFriendlyHits IncrementSkill IncrementSkillBy IncrementStat InterruptCast Is3DLoaded IsActionComplete IsActivateChild IsActivateControlsEnabled IsActivationBlocked IsActive IsAlarmed IsAlerted IsAllowedToFly IsArrested IsArrestingTarget IsAttached IsBleedingOut IsBribed IsCamSwitchControlsEnabled IsChild IsCleared IsCommandedActor IsCompleted IsDead IsDetectedBy IsDisabled IsDoingFavor IsEquipped IsEssential IsEuiped IsFactionInCrimeGroup IsFastTravelEnabled IsFightingControlsEnabled IsFlying IsFurnitureInUse IsFurnitureMarkerInUse IsGhost IsGuard IsHostile IsHostileToActor IsIgnoringFriendlyHits IsInCombat IsInDialogueWithPlayer IsInFaction IsInInterior IsInKillMove IsInMenuMode IsInterior IsIntimidated IsInvulnerable IsJournalControlsEnabled IsLoaded IsLockBroken IsLocked IsLookingControlsEnabled IsMapMarkerVisible IsMenuControlsEnabled IsMovementControlsEnabled IsObjectiveCompleted IsObjectiveDisplayed IsObjectiveFailed IsPlayerExpelled IsPlayersLastRiddenHorse IsPlayerTeammate IsPlaying IsProtected IsRunning IsSameLocation IsSneaking IsSneakingControlsEnabled IsSprinting IsStageDone IsStartin IsStarting IsStopped IsStopping IsTrespassing IsUnconscious IsUnique IsWeaponDrawn IsWordUnlocked KeepOffsetFromActor Kill KillSilent KnockAreaEffect LearnAllEffects LearnEffect LearnNextEffect Lock MessageBox ModActorValue ModAV ModCrimeGold ModFactionRank ModFavorPoints ModFavorPointsWithGlobal ModReaction ModRegard MoveTo MoveToInteractionLocation MoveToMyEditorLocation MoveToNode MoveToPackageLocation MoveToWhenUnloaded Mute Notification OpenInventory OpenUserLog OverBudget PathToReference Pause PlaceActorAtMe PlaceAtMe Play PlayAndWait PlayAnimation PlayAnimationAndWait PlayerKnows PlayerMoveToAndWait PlayerPayCrimeGold PlayGamebryoAnimation PlayIdle PlayIdleWithTarget PlayImpactEffect PlaySubGraphAnimation PlaySyncedAnimationAndWaitSS PlaySyncedAnimationSS PlayTerrainEffect PopTo pow PrecacheCharGen PrecacheCharGenClear ProcessTrapHit PushActorAway QueryStat QuitGame QuitToMainMenu RadiansToDegrees RandomFloat RandomInt RegisterForAnimationEvent RegisterForLOS RegisterForSingleLOSGain RegisterForSingleLOSLost RegisterForSingleUpdate RegisterForSingleUpdateGameTime RegisterForSleep RegisterForTrackedStatsEvent RegisterForUpdate RegisterForUpdateGameTime ReleaseOverride RemoteCast Remove RemoveAddedForm RemoveAllInventoryEventFilters RemoveAllItems RemoveCrossFade RemoveDependentAnimatedObjectReference RemoveFromAllFactions RemoveFromFaction RemoveHavokConstraints RemoveInventoryEventFilter RemoveItem RemovePerk RemoveShout RemoveSpell RequestAutoSave RequestModel RequestSave Reset ResetHealthAndLimbs ResetHelpMessage RestoreActorValue RestoreAV Resurrect Revert Say SendAnimationEvent SendAssaultAlarm SendPlayerToJail SendStealAlarm SendStoryEvent SendStoryEventAndWait SendTrespassAlarm SendWereWolfTransformation ServeTime Set SetActive SetActorCause SetActorOwner SetActorValue SetAlert SetAllowFlying SetAlly SetAlpha SetAngle SetAnimationVariableBool SetAnimationVariableFloat SetAnimationVariableInt SetAttackActorOnSight SetAV SetBeastForm SetBribed SetCameraTarget SetCleared SetCrimeFaction SetCrimeGold SetCrimeGoldViolent SetCriticalStage SetCurrentStageID SetDestroyed SetDoingFavor SetEnemy SetEssential SetFactionOwner SetFactionRank SetFogPlanes SetFogPower SetFootIK SetForcedLandingMarker SetFrequency SetGhost SetGodMode SetHeadTracking SetHudCartMode SetInChargen SetINIBool SetINIFloat SetINIInt SetINIString SetInstanceVolume SetIntimidated SetInvulnerable SetKeywordData SetLockLevel SetLookAt SetMotionType SetNoBleedoutRecovery SetNoFavorAllowed SetNotShowOnStealthMeter SetObjectiveCompleted SetObjectiveDisplayed SetObjectiveFailed SetOpen SetOutfit SetPlayerAIDriven SetPlayerControls SetPlayerEnemy SetPlayerExpelled SetPlayerReportCrime SetPlayerResistingArrest SetPlayerTeammate SetPosition SetProtected SetPublic SetRace SetRaction SetReaction SetRelationshipRank SetRestrained SetScale SetSittingRotation SetStage SetUnconscious SetValue SetValueInt SetVehicle SetVoiceRecoveryTime SetVolume ShakeCamera ShakeController Show ShowAsHelpMessage ShowBarterMenu ShowFirstPersonGeometry ShowGiftMenu ShowRaceMenu ShowRefPosition ShowTitleSequenceMenu ShowTrainingMenu sin SplineTranslateTo SplineTranslateToRefNode sqrt Start StartCannibal StartCombat StartFrameRateCapture StartObjectProfiling StartScriptProfiling StartStackProfiling StartTitleSequence StartVampireFeed Stop StopCombat StopCombatAlarm StopInstance StopObjectProfiling StopScriptProfiling StopStackProfiling StopTranslation TakeScreenshot tan TeachWord TetherToHorse ToggleAI ToggleCollisions ToggleMenus Trace TraceConditional TraceStack TraceUser TranslateTo TrapSoul TriggerScreenBlood TryToEnable TryToAddToFaction TryToDisable TryToEvaluatePackage TryToKill TryToMoveTo TryToRemoveFromFaction TryToReset TryToStopCombat UnequipAll UnEquipItem UnequipItem UnequipShout UnequipSpell UnLockOwnedDoorsInCell UnlockWord UnMute UnPause UnregisterForAnimationEvent UnregisterForLOS UnregisterForSleep UnregisterForTrackedStatsEvent UnregisterForUpdate UnregisterForUpdateGameTime UpdateCurrentInstanceGlobal UsingGamepad Wait WaitForAnimationEvent WaitGameTime WaitMenuMode WillIntimidateSucceed WornHasKeyword</Keywords>
            <Keywords name="Words2">OnActivate OnAnimationEvent OnAttachedToCell OnBeginState OnCellAttach OnCellDetach OnCellLoad OnClose OnCombatStateChanged OnContainerChanged OnDeath OnDying OnDestructionStageChanged OnDetachedFromCell OnEffectFinish OnEffectStart OnEndState OnEnterBleedout OnEquipped OnGainLOS OnGetUp OnGrab OnHit OnInit OnItemAdded OnItemRemoved OnLoad OnLocationChange OnLockStateChanged OnLostLOS OnMagicEffectApply OnObjectEquipped OnObjectUnequipped OnOpen OnPackageChange OnPackageEnd OnPackageStart OnRaceSwitchComplete OnRead OnRelease OnReset OnSell OnSleepStart OnSleepStop OnStoryActivateActor OnStoryAddToPlayer OnStoryArrest OnStoryAssaultActor OnStoryBribeNPC OnStoryCastMagic OnStoryChangeLocation OnStoryCraftItem OnStoryCrimeGold OnStoryCure OnStoryDialogue OnStoryDiscoverDeadBody OnStoryEscapeJail OnStoryFlatterNPC OnStoryHello OnStoryIncreaseLevel OnStoryIncreaseSkill OnStoryInfection OnStoryIntimidateNPC OnStoryJail OnStoryKillActor OnStoryNewVoicePower OnStoryPayFine OnStoryPickLock OnStoryPlayerGetsFavor OnStoryRelationshipChange OnStoryRemoveFromPlayer OnStoryScript OnStoryServedTime OnStoryTrespass OnTrackedStatsEvent OnTranslationAlmostComplete OnTranslationComplete OnTranslationFailed OnTrapHit OnTrapHitStart OnTrapHitStop OnTrigger OnTriggerEnter OnTriggerLeave OnUnequipped OnUnload OnUpdate OnUpdateGameTime OnWardHit</Keywords>
            <Keywords name="Words3">Action Activator ActiveMagicEffect Actor ActorBase Alias Ammo Apparatus Armor AssociationType Book Cell Class ConstructibleObject Container Debug Door EffectShader Enchantment EncounterZone Explosion Faction Flora Form FormList Furniture Game GlobalVariable Hazard Idle ImageSpaceModifier ImpactDataSet Ingredient Key Keyword LeveledActor LeveledItem LeveledSpell Light Location LocationAlias LocationRefType MagicEffect Math Message MiscObject MusicType ObjectReference Outfit Package Perk Potion Projectile Quest Race ReferenceAlias Scene Scroll Shout SoulGem Sound SoundCategory Spell Static TalkingActivator Topic TopicInfo Utility VisualEffect VoiceType Weapon Weather WordOfPower WorldSpace</Keywords>
            <Keywords name="Words4">As Auto AutoReadOnly Bool Conditional Debug Else ElseIf EndProperty Extends False Float Game Global Hidden Import Int Length New None Parent Property Return ScriptName Self String True Utility</Keywords>
        </KeywordLists>
        <Styles>
            <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
            <WordsStyle name="FOLDEROPEN" styleID="12" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="KEYWORD1" styleID="5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="KEYWORD2" styleID="6" fgColor="800000" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="KEYWORD3" styleID="7" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="KEYWORD4" styleID="8" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="COMMENT" styleID="1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="3" />
            <WordsStyle name="COMMENT LINE" styleID="2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="2" />
            <WordsStyle name="NUMBER" styleID="4" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" />
            <WordsStyle name="OPERATOR" styleID="10" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" />
            <WordsStyle name="DELIMINER1" styleID="14" fgColor="000000" bgColor="FFFF00" fontName="" fontStyle="2" />
            <WordsStyle name="DELIMINER2" styleID="15" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
            <WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
        </Styles>
    </UserLang>
</NotepadPlus>

енглиш не понимать. но кажись оно

0

43

7755 написал(а):

енглиш не понимать. но кажись оно

Это не оно. Это есть в самом туториале. Надо другое, я уже указал ссылку в предыдущем сообщении.

В связи с возникшей активностью что-то и у меня повилось желание что-нибудь попереводить. Писать - нет, а вот попереводить... И вообще - думаю надо вопросы по Папирусу в отдельную тему вынести.

ЗЫ: у нас оказывается даже тема такая уже есть. Пожалуй и правда сегодня ночью поперекидую сообщения по Папирусу из этой темы туда.

ЗЫЫ: пересмотрел, что у нас на Тиаруме переведено по Папирусу, кроме моих переводов. Итого:
Введение в Papyrus (тут много ценных мелочей, в общем о языке)
Состояния (тоже показалось интересным)
О типах переменных
Об операторах

0

44

Igor_Ra написал(а):

Введение в Papyrus (тут много ценных мелочей, в общем о языке)
Состояния (тоже показалось интересным)
О типах переменных
Об операторах

в теме папируса в первый пост это, галочку поставь отображать первый пост на всех страницах данной темы, плюс напиши в этом же посте волшебные слова скайрим, папирус, скрипт
народ будет знать где че лежит.

думаю на примере того же скрипта с амулетом королей в обле можно замутить министатейку "эволюция скриптов в играх бетезды" даже как второй пост в этой теме, пущщай люди сразу поймут что папирус - уже не те старые скрипты, а нечто новое. :flag:

Отредактировано 7755 (2013-04-05 23:56:38)

0

45

Igor_Ra написал(а):

А по поводу сайта - в каждом туториале есть ссылка на сайт и мой и-мейл.

Дык в том то и штука что стирают авторские)

Igor_Ra написал(а):

Это раздел Папируса на англоязычной ВИКИ по редактору Скайрима.

Вот и переведите))) Я на лету не переведу с английского и еще больше запутаюсь.

Igor_Ra написал(а):

Отлично объяснено

Спасибо)

7755 написал(а):

понял что akActor - жестко прописан и означает действие актера.

Нет, не действие. Действие актера означает та связка слов что идет после "Event". В данном случае действие актера это попытка одеть предмет.

Вот скачав файлик могу сказать следующее: akActor это ссылка. То есть к кому именно относится наш выбор действия OnEquipped. Удобно, как мне кажется. Не нужно прописывать много если ты хочешь настроить разные эффекты при одевании. К примеру можно сделать так что один и тот же предмет будет по разному реагировать на разных актеров. К примеру одев его на девушку запустится анимация танца1, а на парня анимация танца2. При этом строка "Event OnEquipped(Actor akAktor)" меняться не будет. Менять будем только в переборе вариаций.

Igor_Ra
попереводите подсказки к папирусу в Ноте)

0

46

7755 написал(а):

думаю на примере того же скрипта с амулетом королей в обле можно замутить министатейку "эволюция скриптов в играх бетезды" даже как второй пост в этой теме, пущщай люди сразу поймут что папирус - уже не те старые скрипты, а нечто новое

Вот и напиши :) Точнее ты её уже почти написал :)

0

47

Igor_Ra написал(а):

Вот и напиши

не. я ваще заткнул в скайримовский вариант. ни бум бум...

логика скрипта нифига не понятна. где что и как - не понимаю.

Netico написал(а):

попереводите подсказки к папирусу в Ноте)

кстати да. Игорь, переводи подсказки иди, солнце еще высоко.

блин а у меня акелпад для него таких иксмлок нима.

Отредактировано 7755 (2013-04-06 00:10:46)

0

48

Давайте дальше тут разбираться чтобы потом меньше переносить)

0

49

7755, с тебя пока достаточно и такого скрипта без логики) Я её и сам не совсем понимаю. Главное что скрипт снимает амулет и ложит кладет в инвентарь при попытке одевания оного.

Пойдемте в "Вопросы по папирусу"?

0

50

7755, вот что делает по твоему этот скрипт (при условии что вообще работает):

Scriptname aaaMyAmuletScript extends ObjectReference 

ObjectReference Property eqCircle0003 Auto
Armor Property eqCircle0003  Auto

Event OnActivate (ObjectReference akActionRef)

If (akActionRef == Game.GetPlayer())
    Game.GetPlayer().AddItem(eqCircle0003,1)
    Debug.MessageBox("Succsesfull")
EndIf

EndEvent

0

51

Netico написал(а):

вот что делает по твоему этот скрипт (при условии что вообще работает):

Скрипт висит на объекте, если объект активируется игроком - игроку добавляется предмет eqCircle0003. И вылазит дебаговское сообзение - все ок.
Вроде как-то так.

0

52

Igor_Ra, почти. Как я понял уже нельзя работать напрямую с объектом. "eqCircle0003" это переменная которой присвоено значение объекта "ClothesCirclet0003" (собственно диадемы которую и будем добавлять). Присваивается она через Properties-Add Property. Возможно я упустил что-то и можно работать и на прямую с объектом, но как видели у меня компиллер ругается на него.

Сейчас попытаюсь сделать маленький тутор с картинками. Тут выложу сообщением. (Это при условии что у меня Радикал не повиснет)

0

53

Netico написал(а):

Как я понял уже нельзя работать напрямую с объектом. "eqCircle0003" это переменная которой присвоено значение объекта "ClothesCirclet0003"

А, ну так логично. В скриптах мы обычно работаем с копией объекта, а не с самим объектом. Так и в Обливионе было.

Netico написал(а):

(Это при условии что у меня Радикал не повиснет)

Только не радикал.
Лучше http://uploads.ru/

0

54

Самым первым шагом создаем/редактируем предмет на который будем вешать наш скрипт.
У меня это диадема с ID "ClothesCirclet03" - Золотой обруч с рубином. Открываю его для редактирования (двойной клик левой или правой и "Edit").

http://s018.radikal.ru/i517/1304/87/55b44a630b31.jpg

Справа внизу есть поле "Script". В котором есть список всех скриптов и три кнопки:
"Add" - добавить скрипт на предмет, как новый так и уже существующий;
"Remove" - удалить скрипт с предмета;
"Properties" - переменные скрипта;

Чтобы добавить наш скрипт на предмет жмем "Add". Появляется новое окно где мы можем либо найти нужный скрипт используя фильтр, либо же добавить новый кликнув два раза на "[New Script]". После этого появляется еще одно окно уже с настройками непосредственно нашего скрипта. Рассмотрим что нам тут нужно:

http://s020.radikal.ru/i722/1304/71/df18e11e9236.jpg

"Name:" - имя нашего скрипта, зададим имя "aaMyFirstScript";
"Extends:" - родительский скрипт который мы будем расширять, в нашем случае это "ObjectReference "(он уже стоит по умолчанию);
Флажки "Hedden" и "Conditional" отвечают за то чтобы скрипт был скрыт(смысл этого не улавливаю) и что скрипт работает с квестом (если не ошибаюсь);
"Documentation String:" - тут можно произвольно описать наш скрипт.

Закончив редактировать атрибуты нашего скрипта жмем "ОК" и ждем пару секунд пока скрипт подготовится и добавится к предмету. Когда увидим что он добавился http://s019.radikal.ru/i642/1304/a0/612424494f64.jpg нажимаем кнопку "Properties" и смотрим на новое окно. Тут нас интересует кнопочка "Add Property" - жмем её.

И разбираем еще одно окно:
http://s019.radikal.ru/i608/1304/93/bb959331d426.jpg
"Type:" - тип переменной, у нас "Armor";
"Name:" - имя переменной, у нас "MyEqCircle";
Флажок "Array" - является ли наша переменная частью массива/массивом.

Задав тип и имя переменной жмем "ОК". Ждем пока переменная готовится и появляется в списке переменных.
http://s018.radikal.ru/i507/1304/a1/ad4eccc9f562.jpg
Вот наша переменная в списке слева. А справа стала активна кнопка "Edit Value", чем мы и воспользуемся. Жмем на неё и ищем в списке нашу диадему "ClothesCirclet03". Если же вы её не видите в списке, то, вероятнее всего, вы где-то ошиблись во время создания переменной - исправляем ошибки повторяя все действия последовательно.

Если же вы нашли нашу диадему, то жмите "ОК". Окно закроется и мы перейдем к финальной стадии написания нашего скрипта - собственно его написанию;)

Выделяем наш скрипт и жмем правую кнопку мышки. http://s57.radikal.ru/i157/1304/0a/dfcf3c627713.jpg В контекстном меню выбираем "Edit Source".

http://s020.radikal.ru/i716/1304/9f/45b4e820fff4.jpg
Как видите тут уже есть две строки:


Scriptname aaMyFirstScript extends ObjectReference 

Armor Property MyEqCircle  Auto 


Теперь допишем остальную часть скрипта:


Scriptname aaMyFirstScript extends ObjectReference

;Объявляем что данный файл есть скрипт с именем "aaMyFirstScript", который дополняет родительский скрипт
;"ObjectReference"

Armor Property MyEqCircle Auto

;Переменная типа "Armor" с именем "MyEqCircle" автоматического размера(то есть движок сам поставит нужный ;размер)

Event OnEquipped(Actor akActor)

;Начинаем выполнение скрипта когда заскриптованный предмет одет актером.

If (akActor == Game.GetPlayer())
  ;Если актер использовавший предмет является игроком

    Game.GetPlayer().UnequipItem(MyEqCircle,1)
  ;Обращаемся к ссылке на игрока и снимаем с него предмет помещая в инвентарь.

    Debug.Message("Сообщение")
  ;Выводим сообщение на экран в левой верхней части.

EndIf
  ;Заканчиваем блок вариаций.

EndEvent
;Заканчиваем скрипт.


После написания скрипта жмем Ctrl+F7 и ждем пока наш скрипт будет скомпилирован и проверен на ошибки. Если вы все сделали правильно то окно будет такого вида: http://s53.radikal.ru/i141/1304/96/d2737cf5f5a4.jpg

Сохраняем наш скрипт комбинацией клавиш Ctrl+S или через меню.

Все - наш скрипт готов. Идем в игру и тестируем его.

+1

55

Igor_Ra написал(а):

Только не радикал.

Поздно))

Сильно не пинать - я не мастер в обучении.

0

56

Netico написал(а):

Сильно не пинать - я не мастер в обучении.

Очень даже прилично. Еще бы файл плагина с готовым результатом - и можно выкладывать как туториал :)

Обновил первое сообщение в теме. Добавил ссылки на все (практически все) известные мне материалы по Папирусу на русском языке. Закрепил первое сообщение темы. Последняя ссылка в первом сообщении - новый перевод по структуре файла скрипта. Не сказать, что много полезного, но я для себя кое-что вынес новое. Теперь в отличии от языка Обливиона есть аж три типа комментариев, в том числе многострочные. Плюс упоминания о наследовании, полиморфизме... Похоже Папирус значительно более похож на традиыионные языки программирования, чем казалось изначально.

0

57

Igor_Ra написал(а):

Еще бы файл плагина с готовым результатом - и можно выкладывать как туториал

В смысле? В самом плагине изменений на пару бит. Все лежит в скрипте, а его полностью привел)

Igor_Ra написал(а):

Похоже Папирус значительно более похож на традиыионные языки программирования, чем казалось изначально.

Как я понял из вчерашних разборов, разрабы оставили его почти не измененным. К тому же теперь СКСЕ работает иначе. Если не ошибся, то теперь новые функции и атрибуты вносятся в родительский скрипт и доступны напрямую из Кита.

0

58

Netico написал(а):

В смысле? В самом плагине изменений на пару бит. Все лежит в скрипте, а его полностью привел)

Всмысле чтобы это было оформлено в небольшой готовый плагин, чтобы человек мог открыть его и посмотреть что и как сделано, если вдруг у него не будет получаться.

Netico написал(а):

Как я понял из вчерашних разборов, разрабы оставили его почти не измененным.

Кого и по сравнению с чем неизменным?

Netico написал(а):

К тому же теперь СКСЕ работает иначе. Если не ошибся, то теперь новые функции и атрибуты вносятся в родительский скрипт и доступны напрямую из Кита.

Про расширитель да, писалось как-то что принцип работы совсем иной. Надо порыться в этом направлении. Беда в том, что на оф сайте СКСЕ нет никакой документации. Хотя для расширителя под Обливион было все подробно расписано.

0

59

Igor_Ra написал(а):

Всмысле чтобы это было оформлено в небольшой готовый плагин, чтобы человек мог открыть его и посмотреть что и как сделано, если вдруг у него не будет получаться.

А, он оно как. Дык у меня все ровно своего хоста нет. Только временный.

Igor_Ra написал(а):

Кого и по сравнению с чем неизменным?

Язык. Судя по всему это тот же язык на котором делались все скрипты в игре, а не как в обливионе - только часть их них. По сути он работает на прямую с движком.

Igor_Ra написал(а):

Про расширитель да, писалось как-то что принцип работы совсем иной. Надо порыться в этом направлении. Беда в том, что на оф сайте СКСЕ нет никакой документации. Хотя для расширителя под Обливион было все подробно расписано.

Воть:

SKSE 1.5.11 Papyrus Functions

ActiveMagicEffect
- GetDuration
- GetTimeElapsed

Actor.psc
- GetWornForm
- GetSpellCount
- GetNthSpell

ActorBase.psc
- Get/SetCombatStyle
- GetOutfit
- SetClass
- Get/SetWeight
- GetNumHeadParts
- Get/SetNthHeadPart
- Get/SetFaceMorph
- Get/SetFacePreset
- Get/SetHairColor
- GetSpellCount
- GetNthSpell

Alias.psc
- GetName
- GetID

Apparatus.psc
- Get/SetQuality

Armor.psc
- Get/Set/ModArmorRating
- Get/SetSlotMask
- AddSlotTo/RemoveSlotFromMask
- GetMaskForSlot
- Slot properties
- IsBoots/Cuirass/Gauntlets/Helmet/Shield
- IsLightArmor/HeavyArmor/Clothing/Jewelry
- IsClothingBody/Head/Feet/Hands/Ring/Rich/Poor
- GetWeightClass
- Get/Set/ModelPath/IconPath/MessageIconPath
- Get/SetEnchantment
- GetNumArmorAddons
- GetNthArmorAddon

ArmorAddon.psc
- Get/SetModelPath
- GetModelNumTextureSets
- Get/SetModelNthTextureSet
- GetNumAdditionalRaces
- GetNthAdditionalRace

Book.psc
- GetSpell

Cell.psc
- GetNumRefs
- GetNthRef

ColorForm.psc
- GetRed/Green/Blue
- GetHue/Saturation/Luminosity

CombatStyle.psc
- Get/SetOffensiveMult
- Get/SetDefensiveMult
- Get/SetGroupOffensiveMult
- Get/SetAvoidThreatChance
- Get/SetMeleeMult
- Get/SetRangedMult
- Get/SetShoutMult
- Get/SetStaffMult
- Get/SetUnarmedMult
- Get/SetMeleeAttackStaggeredMult
- Get/SetMeleePowerAttackStaggeredMult
- Get/SetMeleePowerAttackBlockingMult
- Get/SetMeleeBashMult
- Get/SetMeleeBashRecoiledMult
- Get/SetMeleeBashAttackMult
- Get/SetMeleeBashPowerAttackMult
- Get/SetMeleeSpecialAttackMult
- Get/SetAllowDualWielding
- Get/SetCloseRangeDuelingCircleMult
- Get/SetCloseRangeDuelingFallbackMult
- Get/SetCloseRangeFlankingFlankMult
- Get/SetCloseRangeFlankingStalkMult
- Get/SetLongRangeStrafeMult
- Get/SetFlightHoverChance
- Get/SetFlightDiveBombChance
- Get/SetFlightFlyingAttackChance

ConstructibleObject.psc
- Get/SetResult
- Get/SetResultQuantity
- GetNumIngredients
- Get/SetNthIngredient
- Get/SetNthIngredientQuantity
- Get/SetWorkbenchKeyword

Enchantment.psc
- GetNumEffects
- GetNthEffectMagnitude
- GetNthEffectArea
- GetNthEffectDuration
- GetNthEffectMagicEffect
- GetCostliestEffectIndex

Form.psc
- GetType
- Get/SetName
- Get/SetWeight
- SetGoldValue
- GetNumKeywords
- GetNthKeyword
- HasKeywordString

FormType.psc
- properties listing Form.GetType return values.  Currently unusable.

Game.psc
- Get/Set/ModPerkPoints
- GetModCount
- GetModByName
- GetModName/Author/Description
- GetModDependencyCount
- GetNthModDependency
- SetGameSettingFloat/Int/Bool/String

HeadPart.psc
- GetType
- GetNumExtraParts
- GetNthExtraPart
- HasExtraPart
- GetIndexOfExtraPart
- GetValidRaces
- SetValidRaces

Ingredient.psc
- GetNumEffects
- GetNthEffectMagnitude
- GetNthEffectArea
- GetNthEffectDuration
- GetNthEffectMagicEffect
- GetCostliestEffectIndex

Input.psc
- IsKeyPressed
- TapKey
- HoldKey
- ReleaseKey
- GetNumKeysPressed
- GetNthKeyPressed

Keyword.psc
- GetString
- GetKeyword

Math.psc
- Left/RightShift
- LogicalAnd/Or/Xor/Not

ObjectReference.psc
- GetNumItems
- GetNthForm
- IsHarvested
- GetTotalItemWeight
- GetTotalArmorWeight
- SetItemHealthPercent
- GetItemMaxCharge
- Get/SetItemCharge

Outfit
- GetNumParts
- GetNthPart

Potion.psc
- IsFood
- GetNumEffects
- GetNthEffectMagnitude
- GetNthEffectArea
- GetNthEffectDuration
- GetNthEffectMagicEffect
- GetCostliestEffectIndex

Quest.psc
- GetQuest
- GetID
- GetPriority
- GetNumAliases
- GetNthAlias
- GetAliasByName

Race.psc
- GetSpellCount
- GetNthSpell
- IsRaceFlagSet, Set/ClearRaceFlag
- Various RaceFlag properties
- Various alias functions for info about specific race flags

Scroll.psc
- GetCastTime
- GetPerk
- GetNumEffects
- GetNthEffectMagnitude
- GetNthEffectArea
- GetNthEffectDuration
- GetNthEffectMagicEffect
- GetCostliestEffectIndex

Shout.psc
- Get/SetNthWordOfPower
- Get/SetNthSpell
- Get/SetNthRecoveryTime

SKSE.psc
- GetVersion
- GetVersionMinor
- GetVersionBeta
- GetVersionRelease

SoulGem.psc
- GetSoulSize
- GetGemSize

Spell.psc
- GetCastTime
- GetPerk
- GetNumEffects
- GetNthEffectMagnitude
- GetNthEffectArea
- GetNthEffectDuration
- GetNthEffectMagicEffect
- GetCostliestEffectIndex

StringUtl.psc
- GetLength
- GetNthChar
- IsLetter/Digit/Punctuation/Printable
- Find
- Substring
- AsOrd/Char

UI.psc
- IsMenuOpen

Utility.psc
- GetINIFloat/Int/Bool/String

Weapon.psc
- Get/SetBaseDamage
- Get/SetReach
- Get/SetSpeed
- Get/SetStagger
- Get/SetWeaponType
- Get/SetModelPath
- Get/SetIconPath
- Get/SetMessageIconPath
- Get/SetCritDamage
- Get/SetMin/MaxRange
- IsBattleaxe/Bow/Dagger/Greatsword/Mace/Sword/Warhammer/Waraxe
- Get/SetEnchantment

Как тут у вас оформлять нинаю - не пинать)

Отредактировано Netico (2013-04-06 16:34:26)

0

60

Netico написал(а):

Дык у меня все ровно своего хоста нет. Только временный.

У нас есть хост. Разместить можно например на русфолдере и мне ссылку.

Netico написал(а):

Судя по всему это тот же язык на котором делались все скрипты в игре, а не как в обливионе - только часть их них. По сути он работает на прямую с движком.

Думаю в Обливионе всё делалось на Обливионских скриптах. Не думаю, что там было что-то еще. ЧТо касается работает на прямую с движком, мне кажется скриптовый язык можно считать частью движка.

Netico написал(а):

Как тут у вас оформлять нинаю - не пинать)

Всё отлично. А откуда инфа - с официальной ВИКИ креатион кита? Нашел в комплекте с самим СКСЕ. Однако это лишь перечисление. К Обливионскому была солидная документация. Придется собирать по крупицам информацию с ВИКИ креатион кита.
И еще по поводу СКСЕ. Ну всё логично. Раньше скрипты были зашиты в редактор, сейчас же они идут отдельными файлами. Не надо заморачиваться, просто можно подключать внешние дополнительные скрипты и всё. По идее.

Пока что разбираюсь с ключевыми словами Папируса:

Ключевые слова

В языке Папирус имеется ряд ключевых (служебных) слов. Они не чувствительны к регистру, но вы не можете использовать эти слова в качестве идентификаторов, переменных либо каким-нибудь иным образом.

As
Auto
AutoReadOnly
Bool
Else
ElseIf
EndEvent
EndFunction
EndIf EndProperty
EndState
EndWhile
Event
Extends
False
Float
Function
Global
If
Import
Int
Length
Native
New
None
Parent
Property
Return
ScriptName
Self
State
String
True
While

0


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » Редактор Creation Kit » Вопросы по скиптовому языку Папирус