Papyrusの分かりにくいエラー

Modを作ろう

何がいけないのかわかりにくいエラーをまとめます。

cannot call the member function xxxxxxx alone or on a type, must call it on a variable

オブジェクトのメンバ関数を呼び出しているつもりが、型のメンバ関数を呼んでしまっています。

364 (papyrus)

Scriptname SampleScript Extends SKI_ConfigBase

MyQuestAliasScript Property MyQuestAlias Auto ; クエストのリファレンスエイリアス

Function Test()
    MyQuestAlias.SampleFunction() ; 正しい
    MyQuestAliasScript.SampleFunction() ; 間違い
EndFunction

warning: Assigning None to a non-object variable named "::temp11"

関数が戻り値を返していません。

555 (papyrus)

Bool Function HasGold()
    ; Bool型の値を返すべきだけど返さずに終わってみる
EndFunction


Event OnInit()
    if HasGold() ; 何も返ってこない
        Debug.Trace("I have gold.")
    endif
EndFunction

Incorrect number of arguments passed. Expected 0, got 4.

必要な引数の定義がありません。

ModEventを送る側

引数が足りない ModEventを送る側 (papyrus)

Function SampleSender()
    SendModEvent("SampleEvent")
EndFunction

ModEventを受ける側

引数が足りない ModEventを受ける側 (papyrus)

Event OnInit()
    RegisterForModEvent("SampleEvent", "MySampleEventFunction")
EndEvent


; これは間違い
; なぜなら引数がないから
Event MySampleEventFunction()
    Debug.Notification("イベントを受け取りました。")
EndEvent


; これは正しい
; なぜなら引数が4つあるから
Event MySampleEventFunction(string eventName, string strArg, float numArg, Form sender)
    Debug.Notification("イベントを受け取りました。")
EndEvent

SendModEvent関数でイベントを発火させると、イベントを受け取る側は引数を4つ受け取ります。イベントを受けたときに実行する関数をRegisterForModEvent関数で指定しておくのですが、その指定する関数は引数を4つ受け取らなければなりません。

SendModEvent関数で引数を省略しても必ず4個送られるので、引数が不要な場合はModEvent関数を使うようにします。また、SendModEvent関数は引数にFormを指定できませんが、ModEvent関数なら指定できます。

argument 4 must be explicitly assigned to a parameter

引数の明示をはじめたら、それ以降は明示を省略できません。

code id=5022

オブジェクト参照がオブジェクト インスタンスに設定されていません。

コンパイラが不正終了すると起こるようです。

以下のコードで発生しました。

; SkyrimのOnBeginStateに引数はない
; 引数があるのはFallout 4
Event OnBeginState(String asLastState)
EndEvent
タイトルとURLをコピーしました