Ir al contenido

Foto

Bitte helft mir!


  • Por favor identifícate para responder
11 respuestas en este tema

#1
nameless2

nameless2
  • Members
  • 8 mensajes
Seit einiger Zeit passiert mir im Toolset so etwas, dass ich immer wenn ich ein Script abspeichere, die Fehlermeldung "Invalid decleration type" kommt. Kann mir jemand sagen, was das bitte bedeuten soll?:blush: 

#2
Rauschebart

Rauschebart
  • Members
  • 44 mensajes
So wie die Fehlermeldung klingt hast Du in dem Script eine Variable falsch deklariert, z.B. einen String als Zahl oä. . Wenn das mit mehreren Scripts passiert, schau dir vielleicht auch mal die Header-Dateien an, die du in allen Scripten verwendest.
So ohne Script ist eine genaue Fehleranalyse sicher nicht möglich, i.R. steht in der Statusleiste doch, an welcher Stelle der Fehler auftritt, also die Zeile und die 2 - 3 darüber mal genauer studieren, ob dort Variable verwendet werden und wie die deklariert sind.

#3
nameless2

nameless2
  • Members
  • 8 mensajes
Ich kenn mich leider noch nicht gut mit Scripten aus, also.. hier hab ich ,mal ein Script wo der Fehler auftaucht:

if(IsPartyMember(oCreature)) {
object oFollower = GetObjectByTag("mensch_krieger");
UT_HireFollower(oCreature, oFollower);
}

Achja der Fehler tritt in Zeile 1 auf 
Übrigens danke für die schnelle Hilfe!:)

Editado por nameless2, 22 mayo 2011 - 08:17 .


#4
nameless2

nameless2
  • Members
  • 8 mensajes
Ich wusste nicht mehr was ich tun soll, also hab ich das Script nach einem anderen Forum  nun etwas umgeschrieben. Ich bekomme nicht mehr "Invalid declaretion type" aber dafur nun:


party_1.nss - party_1.nss(2): No right bracket on expression
Das Script sieht nun so aus:
void main(){
if(IsPartyMember(oCreature))
{object oFollower = GetObjectByTag("mensch_krieger");
UT_HireFollower(oCreature, oFollower);
}
}

Nun ich hab alle Klammern probiert zu änderen aber: IMMER GLEICHER ERROR
Also wie gesagt: Ich hab vom Scripten wenig bis gar keine Ahnung, da ich erst angefangen habe.
Das Script hab ich übrigens aus Dragon Age Toolset Builder Wiki. Hier ist das Script wie es drin steht:

if(IsPartyMember(oCreature)) {
object oFollower = GetObjectByTag("myfollower");
UT_HireFollower(oCreature, oFollower);
}

DANKE! im Vorraus!

Editado por nameless2, 22 mayo 2011 - 02:11 .


#5
Rauschebart

Rauschebart
  • Members
  • 44 mensajes
Ich nehme an oCreature ist als
object oCreature = GetEventCreator(ev);
deklariert?
und ich verstehe deine Programmierung so, dass bei einem bestimmten Ereignis durch oCreature ausgelöst, "mensch-krieger" dein Gruppenbegleiter werden soll?

Der Fehler scheint in der UT_HireFollower -Funktion zu stecken. Hier lautet die Deklaration


void UT_HireFollower(

object oFollower,
int bPreventLevelup = FALSE

);



wenn man aus deiner Programmierung dort oCreature herausnimmt,
if(IsPartyMember(oCreature)) {

object oFollower = GetObjectByTag("mensch_krieger");

UT_HireFollower(oFollower);

}

läuft sie auch sauber durch. Wofür ist dort oCreature?

#6
nameless2

nameless2
  • Members
  • 8 mensajes
Erstens danke für die schnelle Hilfe! Das oCreature ähm Ehrlich gesagt keine Ahnung, ich hab das Script aus dem Toolset Builder Wiki unter Useful Scripts herauskopiert, da ich im Scripten ne ziemliche Niete bin.
Ich hab nun dein Script rein kopiert und nun bekomme ich schon wieder:
Invalid declaration type in der 1.Zeile

#7
Rauschebart

Rauschebart
  • Members
  • 44 mensajes
aber du hast dran gedacht, die gesamte Programmierung aus dem 1. Abschnitt dieses wikiTeils bis einschließlich
object oCreature = GetEventCreator(ev)
der if-Anweisung voranzustellen?

#8
mr.frost72

mr.frost72
  • Members
  • 313 mensajes
mit einem doppel click auf den fehler, zeigt er dir die leiste an, wo der fehler ist... warum meldest du dich nicht hier an, da helfen dir viel mehr leute !!!

http://www.dragon-ag...kshop.de/forum/

#9
mihlena

mihlena
  • Members
  • 141 mensajes
Also kommt ja immer drauf an, wie die Gefährten angeheuert werden sollen, ob durch Dialog oder Trigger, ob sie schon da stehen oder gespawnt werden.
Ein ganz einfaches Skript wäre z.B dieses:

#include "utility_h"
#include "wrappers_h"
#include "events_h"

void main()
{
object oPC = GetHero();
object oFollower = GetObjectByTag("gefolgsmann1");
UT_HireFollower(oFollower);
SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE);
//Diese letzte Zeile ist wichtig, damit der Follower mitlevelt)
}

#10
GameScripting

GameScripting
  • Members
  • 26 mensajes
@Milena
Bist du dir da ganz sicher?
Wenn man nämlich die Definitionen der Funktionen betrachtet wird die Funktion SetFollowerState ausgeführt:

Definitionen der Relevanten Funktionen:
void UT_HireFollower(object oFollower, int bPreventLevelup = FALSE)
{
    object oPC = GetPartyLeader();
    if(!IsObjectValid(oFollower))
    {
        Log_Trace(LOG_CHANNEL_SYSTEMS, "UT_HireFollower", "INVALID FOLLOWER OBJECT!", OBJECT_SELF, LOG_SEVERITY_CRITICAL);
        return;
    }

    Log_Trace(LOG_CHANNEL_SYSTEMS, "utility_h.UT_HireFollower",
        "Trying to hire follower: " + GetTag(oFollower));

    if(_UT_GetIsPlotFollower(oFollower))
    {
        Log_Trace(LOG_CHANNEL_SYSTEMS, "utility_h.UT_HireFollower",
            "This function can not be used for plot followers! - use plot flags instead!", oFollower, LOG_SEVERITY_CRITICAL);
        return;
    }

    SetAutoLevelUp(oFollower, 2);
    SetGroupId(oFollower, GetGroupId(oPC));
    WR_SetFollowerState(oFollower, FOLLOWER_STATE_ACTIVE, TRUE, 0, TRUE);
    //SendPartyMemberHiredEvent(oFollower, FALSE, 0, bPreventLevelup);

    //Show the AOE flag when the PC is a mage and aquires a follower or the follower hired is a mage
    if(GetLocalInt(GetModule(), TUTORIAL_ENABLED) && (GetCreatureCoreclass(oPC) == class_WIZARD || GetCreatureCoreclass(oFollower) == class_WIZARD))
    {
        WR_SetPlotFlag(PLT_TUT_FRIENDLY_AOE, TUT_FRIENDLY_AOE_1, TRUE);
    }
}

void WR_SetFollowerState(object oCreature, int nState, int nSendEvent = TRUE, int nMinLevel = 0, int bPreventLevelup = FALSE)
{
    int nOldState = GetFollowerState(oCreature);
    int nOldSubState = GetFollowerSubState(oCreature);
    Log_Trace(LOG_CHANNEL_SYSTEMS_WRAPPERS,
            "wrappers_h.WR_SetFollowerSubState",
            "OLD STATE: " + _GetFollowerStateName(nOldSubState), oCreature);

    Log_Trace(LOG_CHANNEL_SYSTEMS_WRAPPERS,
            "wrappers_h.WR_SetFollowerSubState",
            "NEW STATE: " + _GetFollowerStateName(nState), oCreature);


    // change event script if the follower is in or out of the party.
    switch(nState)
    {
        case FOLLOWER_STATE_LOCKEDACTIVE:
        case FOLLOWER_STATE_ACTIVE:
        {
            // remove stationary flag
            SetLocalInt(oCreature, AI_FLAG_STATIONARY, 0);
            // Adding follower to active party
            if(GetLocalInt(GetModule(), TUTORIAL_ENABLED))
                WR_SetPlotFlag(PLT_TUT_CONTROL_FOLLOWERS, TUT_CONTROL_FOLLOWERS_1, TRUE);
            SetEventScript(oCreature, RESOURCE_SCRIPT_PLAYER_CORE);

            if(IsPartyPerceivingHostiles(oCreature) & GetCombatState(oCreature) == FALSE)
                SetCombatState(oCreature, TRUE);

            // Remove from any team
            SetTeamId(oCreature, -1);

            // set interactive (in case some very bad script messed it up)
            SetObjectInteractive(oCreature, TRUE);

            // Set player rank
            SetCreatureRank(oCreature, CREATURE_RANK_PLAYER);

            SetImmortal(oCreature, FALSE);
            SetPlot(oCreature, FALSE);
            if(GetPartyLeader() != oCreature)
                SetFollowPartyLeader(oCreature, TRUE);
            SetLocalInt(oCreature, AMBIENT_SYSTEM_STATE, 0); // AMBIENT_SYSTEM_DISABLED

            InitHeartbeat(oCreature, CONFIG_CONSTANT_HEARTBEAT_RATE);

            if(nSendEvent)
                SendPartyMemberHiredEvent(oCreature, FALSE, nMinLevel, bPreventLevelup);
            break;
        }
        case FOLLOWER_STATE_AVAILABLE:
        case FOLLOWER_STATE_INVALID:
        case FOLLOWER_STATE_UNAVAILABLE:
        case FOLLOWER_STATE_SUSPENDED:
        {
            if(IsSummoned(oCreature) && nState != FOLLOWER_STATE_INVALID)
            {
                 Log_Trace(LOG_CHANNEL_SYSTEMS_WRAPPERS, "WR_SetFollowerState",
                    "Trying to apply an invalid state to a summoned creature - aborting change");
                 return;
            }
            // -----------------------------------------------------------------
            // Non party members do not get a heartbeat
            // -----------------------------------------------------------------
            EndHeartbeat(oCreature);

            // Remove effects
            Effects_RemoveAllEffects(oCreature);
            // -----------------------------------------------------------------
            // Georg: We got a problem with removing modal effects this person
            //        might have applied to others. Reason: By the time this
            //        event fires, they are no longer in the party and can not
            //        remove ukpeep effects of others. The following code takes
            //        care of that
            // -----------------------------------------------------------------
            object[]  partyList = GetPartyList();
            int     nArraySize = GetArraySize(partyList);
            int     iMember;

            for (iMember = 0; iMember < nArraySize; iMember++)
            {
                RemoveEffectsByParameters(partyList[iMember],EFFECT_TYPE_UPKEEP, ABILITY_INVALID, oCreature); //first all upkeep effects
                RemoveEffectsByParameters(partyList[iMember],EFFECT_TYPE_INVALID, ABILITY_INVALID, oCreature); //then all others
            }

            SetEventScript(oCreature, RESOURCE_SCRIPT_CREATURE_CORE);

            SetGroupId(oCreature, GROUP_FRIENDLY);

            // set interactive (in case some very bad script messed it up)
            SetObjectInteractive(oCreature, TRUE);


            if (!IsSummoned(oCreature))
            {
                // Setting immortal so follower can't be killed outside of party
                // Note: a few places in the game allow the follower to be killed outside of the party but they
                // set the follower script to be player_core so he would rise again when combat over.
                SetImmortal(oCreature, TRUE);
            }

            // If follower is currently in the ACTIVE party then fire a partry-member-fired event
            if(nSendEvent)
            {
                if(GetFollowerState(oCreature) == FOLLOWER_STATE_ACTIVE || GetFollowerState(oCreature) == FOLLOWER_STATE_LOCKEDACTIVE)
                    SendPartyMemberFiredEvent(oCreature);
            }
            break;
        }


    }

    SetFollowerState(oCreature, nState); // An dieser Stelle wird die Funktion ausgerufen ;)
}

Aber wenn du das sagst :devil:

#11
mihlena

mihlena
  • Members
  • 141 mensajes
Pöh, soll ich für ne winzige Skriptzeile etwa diesen ganzen Wust durchlesen ;)?

#12
nameless2

nameless2
  • Members
  • 8 mensajes
Danke mihlena! Dein Script funktioniert endlich!
Ich hab eben keine Ahnung vom Scripten.
Vielen Dank!