1. #1
    Ho bisogno di un po' d'aiuto con un errore di script che mi sta tirando scemo.

    Ho creato una mappa scenario per single player con due giocatori entrambi giocabili e ho piazzato per entrambi alcuni obbiettivi secondari oltre a quello principale. Tutti gli obbiettivi che ho dato al player 1 (ovviamente nel motore è definito player 0) funzionano alla perfezione, ma sto diventando matto per quelli del player 2 (nel motore, player 1)

    Gli obbiettivi sono settati come inizialmente inattivi e invisibili, e vengono attivati da appositi trigger (due sono region_enters e uno un object-touch)
    Ora, quando testo la giocabilità col player2 e arrivo ad attivare questi trigger mi becco questo messaggio di errore:

    (script)ERROR: objective 'strego_prison_1' is not exists

    (script)ERROR: objective 'con_cittastrego' is not exists
    ovviamente strego_prison_1 e con_cittastrego sono i nomi dei due obbiettivi attivati dal trigger. Stessa roba per gli altri obbiettivi (qui parlo solo di questi e di un altro per semplificare)
    Questo il codice delle funzioni che attivano i trigger:

    <pre class="ip-ubbcode-code-pre">--Mission script Start (attiva missione strego_prison_1)
    function StregoPrison_1()
    if GetCurrentPlayer() == omosapience and GetCurrentPlayer() == 2 then
    MessageBox(path.."strego_prison_1_desc.txt");
    SetObjectiveState ("strego_prison_1", OBJECTIVE_ACTIVE);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "strego_prison_1", nil);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "strego_prison_1", "StregoPrison_1");
    --Mission script End
    --Mission script Start (completa missione strego_prison_1 e attiva missione strego_prison_2)
    function StregoPrison_1_completed()
    if GetCurrentPlayer() == omosapience and GetCurrentPlayer() == 2 then
    MessageBox(path.."strego_prison_1_completed_desc.t xt");
    SetObjectiveState ("strego_prison_1", OBJECTIVE_COMPLETED);
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_1", nil );
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_1", "StregoPrison_1_completed" );
    --Mission script End
    --Mission script Start (completa missione strego_prison_2)
    function StregoPrison_2()
    if GetCurrentPlayer() == omosapience and GetCurrentPlayer() == 2 then
    MessageBox(path.."strego_prison_2_completed_desc.t xt");
    SetObjectiveState ("strego_prison_2", OBJECTIVE_COMPLETED);
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_2", nil );
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_2", "StregoPrison_2" );
    --Mission script End</pre>

    Per prima cosa ho controllato e ricontrollato che i nomi degli obbiettivi fossero quelli giusti e scritti precisi (si, i nomi di un paio di loro sono identici ai nomi degli oggetti da toccare per attivarli, ho fatto lo stesso anche per le missioni del player uno - ovviamente con nomi diversi da questi - e funziona tutto bene, per cui questo non dovrebbe essere il problema).
    Ovviamente ho fatto un botto di tentativi per capire che cosa non andasse, ecco uno degli ultimi check:

    <pre class="ip-ubbcode-code-pre">function StartStrego()
    walker = GetCurrentPlayer();
    if walker == 2 and omosapience == 2 then
    MessageBoxForPlayers(PLAYERFLT_2,path.."startstreg o.txt");
    --start check about objectives not working
    checkprison1 = GetObjectiveState("strego_prison_1", 2);
    checkprison2 = GetObjectiveState("strego_prison_2", 2);
    checkcitta = GetObjectiveState("con_cittastrego", 2);
    print ('check prison1:',checkprison1,'check prison2:',checkprison2,'check citta:',checkcitta);
    SetObjectiveState ("strego_prison_1", OBJECTIVE_ACTIVE);
    SetObjectiveState ("strego_prison_2", OBJECTIVE_ACTIVE);
    SetObjectiveState ("con_cittastrego", OBJECTIVE_ACTIVE);
    --end check about objectives not working
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", nil);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", "StartStrego");</pre>

    Questa funzione è chiamata praticamente all'inizio del gioco.
    Il comando print mi restituisce tre "1" come GetObjectiveState e poi casca nel solito errore:
    (script)ERROR: objective 'strego_prison_1' is not exists
    e si ferma lì.
    Gli altri due SetObjectiveState non se li fila manco di striscio. Le missioni non risultano attive nel pannello di gioco. Se proseguo nel gioco, quando arrivo agli altri trigger la console mi restituisce sempre la stessa cosa:

    (script)ERROR: objective 'strego_prison_1' is not exists

    (script)ERROR: objective 'con_cittastrego' is not exists
    Così parrebbe che questi obbiettivi non siano proprio presenti nel gioco o che abbiano nomi diversi, PERO' se invece di settarli come inattivi e invisibili li setto come attivi e visibili fin dall'inizio nell'editor, ecco che me li ritrovo attivi e visibili nel pannello delle missioni attive del gioco.

    Ho provato allora a fare un altro controllino via script tenendo l'obbiettivo "strego_prison_1" come initially ACTIVE e VISIBLE di default:

    <pre class="ip-ubbcode-code-pre">function StartStrego()
    walker = GetCurrentPlayer();
    if walker == 2 and omosapience == 2 then
    MessageBoxForPlayers(PLAYERFLT_2,path.."startstreg o.txt");
    --start check about objectives not working
    checkprison1 = GetObjectiveState("strego_prison_1", 2);
    checkprison2 = GetObjectiveState("strego_prison_2", 2);
    checkcitta = GetObjectiveState("con_cittastrego", 2);
    print ('first round - check prison1:',checkprison1,'check prison2:',checkprison2,'check citta:',checkcitta);
    SetObjectiveState ("strego_prison_1", OBJECTIVE_COMPLETED);
    SetObjectiveState ("strego_prison_2", OBJECTIVE_ACTIVE);
    SetObjectiveState ("con_cittastrego", OBJECTIVE_ACTIVE);
    checkprison1 = GetObjectiveState("strego_prison_1", 2);
    checkprison2 = GetObjectiveState("strego_prison_2", 2);
    checkcitta = GetObjectiveState("con_cittastrego", 2);
    print ('second round - check prison1:',checkprison1,'check prison2:',checkprison2,'check citta:',checkcitta);
    SetObjectiveState ("strego_prison_2", OBJECTIVE_ACTIVE);
    SetObjectiveState ("con_cittastrego", OBJECTIVE_ACTIVE);
    --end check about objectives not working
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", nil);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", "StartStrego");
    </pre>

    La funzione parte e mi spara il messaggio.

    in console mi ritrovo:
    first round - check prison1:2
    check prison2:1
    check citta:1
    che conferma che il gioco VEDE l'obbiettivo strego_prison_1 come ATTIVO e VISIBILE

    poi:
    (script)ERROR: objective 'strego_prison_1' is not exists
    che significa che il gioco NON VEDE l'obbiettivo strego_prison_1 come ESISTENTE!

    Dopo l'errore lo script di quella funzione non viene processato oltre, difatti non mi compare il secondo round di check. La regione non viene cancellata, posso rientrarci quante volte voglio e ogni volta la funzione riparte, mi spara il messagebox e poi le stesse risultanze in console che ho appena detto.
    La cosa più assurda è che il comando GetObjectiveState me li becca e me li descrive correttamente, mentre il comando SetObjectiveState dice che non esistono.

    Insomma questi obbiettivi ci sono e non riesco a capire perché cavolo se li triggero via script e cerco di modificare il loro status non li trova proprio e me li dà come non esistenti.

    Qualche idea su dove ho sbagliato?
    Share this post

  2. #2
    Ho bisogno di un po' d'aiuto con un errore di script che mi sta tirando scemo.

    Ho creato una mappa scenario per single player con due giocatori entrambi giocabili e ho piazzato per entrambi alcuni obbiettivi secondari oltre a quello principale. Tutti gli obbiettivi che ho dato al player 1 (ovviamente nel motore è definito player 0) funzionano alla perfezione, ma sto diventando matto per quelli del player 2 (nel motore, player 1)

    Gli obbiettivi sono settati come inizialmente inattivi e invisibili, e vengono attivati da appositi trigger (due sono region_enters e uno un object-touch)
    Ora, quando testo la giocabilità col player2 e arrivo ad attivare questi trigger mi becco questo messaggio di errore:

    <BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">(script)ERROR: objective 'strego_prison_1' is not exists

    (script)ERROR: objective 'con_cittastrego' is not exists </div></BLOCKQUOTE>

    ovviamente strego_prison_1 e con_cittastrego sono i nomi dei due obbiettivi attivati dal trigger. Stessa roba per gli altri obbiettivi (qui parlo solo di questi e di un altro per semplificare)
    Questo il codice delle funzioni che attivano i trigger:

    <pre class="ip-ubbcode-code-pre">--Mission script Start (attiva missione strego_prison_1)
    function StregoPrison_1()
    if GetCurrentPlayer() == omosapience and GetCurrentPlayer() == 2 then
    MessageBox(path.."strego_prison_1_desc.txt");
    SetObjectiveState ("strego_prison_1", OBJECTIVE_ACTIVE);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "strego_prison_1", nil);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "strego_prison_1", "StregoPrison_1");
    --Mission script End
    --Mission script Start (completa missione strego_prison_1 e attiva missione strego_prison_2)
    function StregoPrison_1_completed()
    if GetCurrentPlayer() == omosapience and GetCurrentPlayer() == 2 then
    MessageBox(path.."strego_prison_1_completed_desc.t xt");
    SetObjectiveState ("strego_prison_1", OBJECTIVE_COMPLETED);
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_1", nil );
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_1", "StregoPrison_1_completed" );
    --Mission script End
    --Mission script Start (completa missione strego_prison_2)
    function StregoPrison_2()
    if GetCurrentPlayer() == omosapience and GetCurrentPlayer() == 2 then
    MessageBox(path.."strego_prison_2_completed_desc.t xt");
    SetObjectiveState ("strego_prison_2", OBJECTIVE_COMPLETED);
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_2", nil );
    end;
    Trigger (OBJECT_TOUCH_TRIGGER, "strego_prison_2", "StregoPrison_2" );
    --Mission script End</pre>

    Per prima cosa ho controllato e ricontrollato che i nomi degli obbiettivi fossero quelli giusti e scritti precisi (si, i nomi di un paio di loro sono identici ai nomi degli oggetti da toccare per attivarli, ho fatto lo stesso anche per le missioni del player uno - ovviamente con nomi diversi da questi - e funziona tutto bene, per cui questo non dovrebbe essere il problema).
    Ovviamente ho fatto un botto di tentativi per capire che cosa non andasse, ecco uno degli ultimi check:

    <pre class="ip-ubbcode-code-pre">function StartStrego()
    walker = GetCurrentPlayer();
    if walker == 2 and omosapience == 2 then
    MessageBoxForPlayers(PLAYERFLT_2,path.."startstreg o.txt");
    --start check about objectives not working
    checkprison1 = GetObjectiveState("strego_prison_1", 2);
    checkprison2 = GetObjectiveState("strego_prison_2", 2);
    checkcitta = GetObjectiveState("con_cittastrego", 2);
    print ('check prison1:',checkprison1,'check prison2:',checkprison2,'check citta:',checkcitta);
    SetObjectiveState ("strego_prison_1", OBJECTIVE_ACTIVE);
    SetObjectiveState ("strego_prison_2", OBJECTIVE_ACTIVE);
    SetObjectiveState ("con_cittastrego", OBJECTIVE_ACTIVE);
    --end check about objectives not working
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", nil);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", "StartStrego");</pre>

    Questa funzione è chiamata praticamente all'inizio del gioco.
    Il comando print mi restituisce tre "1" come GetObjectiveState e poi casca nel solito errore:
    <BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">(script)ERROR: objective 'strego_prison_1' is not exists </div></BLOCKQUOTE>
    e si ferma lì.
    Gli altri due SetObjectiveState non se li fila manco di striscio. Le missioni non risultano attive nel pannello di gioco. Se proseguo nel gioco, quando arrivo agli altri trigger la console mi restituisce sempre la stessa cosa:

    <BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">(script)ERROR: objective 'strego_prison_1' is not exists

    (script)ERROR: objective 'con_cittastrego' is not exists </div></BLOCKQUOTE>

    Così parrebbe che questi obbiettivi non siano proprio presenti nel gioco o che abbiano nomi diversi, PERO' se invece di settarli come inattivi e invisibili li setto come attivi e visibili fin dall'inizio nell'editor, ecco che me li ritrovo attivi e visibili nel pannello delle missioni attive del gioco.

    Ho provato allora a fare un altro controllino via script tenendo l'obbiettivo "strego_prison_1" come initially ACTIVE e VISIBLE di default:

    <pre class="ip-ubbcode-code-pre">function StartStrego()
    walker = GetCurrentPlayer();
    if walker == 2 and omosapience == 2 then
    MessageBoxForPlayers(PLAYERFLT_2,path.."startstreg o.txt");
    --start check about objectives not working
    checkprison1 = GetObjectiveState("strego_prison_1", 2);
    checkprison2 = GetObjectiveState("strego_prison_2", 2);
    checkcitta = GetObjectiveState("con_cittastrego", 2);
    print ('first round - check prison1:',checkprison1,'check prison2:',checkprison2,'check citta:',checkcitta);
    SetObjectiveState ("strego_prison_1", OBJECTIVE_COMPLETED);
    SetObjectiveState ("strego_prison_2", OBJECTIVE_ACTIVE);
    SetObjectiveState ("con_cittastrego", OBJECTIVE_ACTIVE);
    checkprison1 = GetObjectiveState("strego_prison_1", 2);
    checkprison2 = GetObjectiveState("strego_prison_2", 2);
    checkcitta = GetObjectiveState("con_cittastrego", 2);
    print ('second round - check prison1:',checkprison1,'check prison2:',checkprison2,'check citta:',checkcitta);
    SetObjectiveState ("strego_prison_2", OBJECTIVE_ACTIVE);
    SetObjectiveState ("con_cittastrego", OBJECTIVE_ACTIVE);
    --end check about objectives not working
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", nil);
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "startstrego", "StartStrego");
    </pre>

    La funzione parte e mi spara il messaggio.

    in console mi ritrovo:
    <BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">first round - check prison1:2
    check prison2:1
    check citta:1 </div></BLOCKQUOTE>

    che conferma che il gioco VEDE l'obbiettivo strego_prison_1 come ATTIVO e VISIBILE

    poi:
    <BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">(script)ERROR: objective 'strego_prison_1' is not exists </div></BLOCKQUOTE>

    che significa che il gioco NON VEDE l'obbiettivo strego_prison_1 come ESISTENTE!

    Dopo l'errore lo script di quella funzione non viene processato oltre, difatti non mi compare il secondo round di check. La regione non viene cancellata, posso rientrarci quante volte voglio e ogni volta la funzione riparte, mi spara il messagebox e poi le stesse risultanze in console che ho appena detto.
    La cosa più assurda è che il comando GetObjectiveState me li becca e me li descrive correttamente, mentre il comando SetObjectiveState dice che non esistono.

    Insomma questi obbiettivi ci sono e non riesco a capire perché cavolo se li triggero via script e cerco di modificare il loro status non li trova proprio e me li dà come non esistenti.

    Qualche idea su dove ho sbagliato?
    Share this post