Bitte helft mir!
Comenzado por
nameless2
, may 21 2011 07:55
#1
Escrito 21 mayo 2011 - 07:55
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?
#2
Escrito 21 mayo 2011 - 08:25
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.
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
Escrito 22 mayo 2011 - 08:13
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!
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
Escrito 22 mayo 2011 - 02:03
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!
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
Escrito 22 mayo 2011 - 02:26
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?
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
Escrito 23 mayo 2011 - 02:51
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
Ich hab nun dein Script rein kopiert und nun bekomme ich schon wieder:
Invalid declaration type in der 1.Zeile
#7
Escrito 23 mayo 2011 - 03:03
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?
object oCreature = GetEventCreator(ev)
der if-Anweisung voranzustellen?
#8
Escrito 24 mayo 2011 - 08:30
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/
http://www.dragon-ag...kshop.de/forum/
#9
Escrito 24 mayo 2011 - 08:32
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)
}
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
Escrito 24 mayo 2011 - 12:23
@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
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
#11
Escrito 24 mayo 2011 - 01:25
Pöh, soll ich für ne winzige Skriptzeile etwa diesen ganzen Wust durchlesen
?
#12
Escrito 24 mayo 2011 - 04:45
Danke mihlena! Dein Script funktioniert endlich!
Ich hab eben keine Ahnung vom Scripten.
Vielen Dank!
Ich hab eben keine Ahnung vom Scripten.
Vielen Dank!





Volver arriba






