Script problem, runs once fine and on second run it crashes

Post » Tue Apr 28, 2015 1:52 pm

Hello all I've been fooling around with this script all day. It logs what you have equipped.
It was written originally by Shanjaq with his co-op multiplayer mod.
I haven't changed much at all(didn't need to). But for some reason it freezes the entire program on the second time it is ran in-game.
I don't know what's causing it, I've checked all the MWSE functions through other scripts and they work fine, including xinventory and setcontent.
What am I missing? :o
Also, is there a better way to do this? Since there are no arrays, you need a lot of conditional blocks because each "Article" variable has a different name.

Spoiler

Begin AAAMOEquipWrite    xlogmessage "initializing variables equip write"    stopscript AAAMOEquipWrite        ;misc stuff    short test    short done    short step    long pcid;30        ;inventory    long invref ;1    long invcount ;2    long IsEquipped;3        ;all articles of equipment    short ACount    long Article1;4    long Article2;5    long Article3;6    long Article4;7    long Article5;8    long Article6;9    long Article7;10    long Article8;11    long Article9;12    long Article10;13    long Article11;14    long Article12;15    long Article13;16    long Article14;17    long Article15;18    long Article16;19    long Article17;20    long buffer1;21    long buffer2;22    long buffer3;23    long buffer4;24    long buffer5;25    long buffer6;26    long buffer7;27    long buffer8;28    long buffer9;29    set test to 0    set done to 0    set step to 0    set invref to 0    set invcount to 0    set pcid to 0    set IsEquipped to 0    set ACount to 0    setx pcid to xGetRef "player"    xSetRef pcid    xLogMessage, "Starting equip write"    setx Article1,invcount,invref to xInventory    ifx ( invcount )        set done to 0        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article1                    ifx ( IsEquipped )                        set step to 0                        setx Article2,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article1,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article2                    ifx ( IsEquipped )                        set step to 0                        setx Article3,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article2,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article1 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article3                    ifx ( IsEquipped )                        set step to 0                        setx Article4,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article3,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article2 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article4                    ifx ( IsEquipped )                        set step to 0                        setx Article5,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article4,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article3 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article5                    ifx ( IsEquipped )                        set step to 0                        setx Article6,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article5,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article4 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article6                    ifx ( IsEquipped )                        set step to 0                        setx Article7,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article6,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article5 to 0        endif        xLogMessage, "Middle equip write"        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article7                    ifx ( IsEquipped )                        set step to 0                        setx Article8,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article7,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article6 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article8                    ifx ( IsEquipped )                        set step to 0                        setx Article9,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article8,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article7 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article9                    ifx ( IsEquipped )                        set step to 0                        setx Article10,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article9,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article8 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article10                    ifx ( IsEquipped )                        set step to 0                        setx Article11,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article10,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article9 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article11                    ifx ( IsEquipped )                        set step to 0                        setx Article12,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article11,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article10 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article12                    ifx ( IsEquipped )                        set step to 0                        setx Article13,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article12,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article11 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article13                    ifx ( IsEquipped )                        set step to 0                        setx Article14,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article13,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article12 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article14                    ifx ( IsEquipped )                        set step to 0                        setx Article15,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article14,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article13 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article15                    ifx ( IsEquipped )                        set step to 0                        setx Article16,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article15,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article14 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article16                    ifx ( IsEquipped )                        set step to 0                        setx Article17,invcount,invref to xNextStack invref                        set ACount to ACount + 1                    else                        setx Article16,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article15 to 0        endif        if ( done == 0 )            set step to 1            whilex ( step )                ifx ( invref )                    setx IsEquipped to XHasItemEquipped Article17                    ifx ( IsEquipped )                        set step to 0                        set ACount to ACount + 1                    else                        setx Article17,invcount,invref to xNextStack invref                    endif                else                    set step to 0                    set done to 1                endif            endwhile        else            set Article16 to 0        endif        if ( done == 1 )            set Article17 to 0        endif    endif    xLogMessage, "Ending equip write"        ;messagebox "stupid number thingy %g" ACount        ;set test to 0        ;if ( ACount == 17 )        ;    set test to 1        ;    set ACount to 0        ;endif        ;ifx ( test )        ;    xLogMessage "BAMF::EQUIP1: %s|%s|%s|%s|%s|%s|%s|%s|%s~" Article1 Article2 Article3 Article4 Article5 Article6 Article7 Article8 Article9        ;    xLogMessage "BAMF::EQUIP2: %s|%s|%s|%s|%s|%s|%s|%s||" Article10 Article11 Article12 Article13 Article14 Article15 Article16 Article17        ;    return        ;endif    set test to 0        ;MessageBox, "acount=%g" ACount    xLogMessage, "Outputting equip write"    if ( ACount > 9 )        set test to 1        set buffer1 to Article10        set buffer2 to Article11        set buffer3 to Article12        set buffer4 to Article13        set buffer5 to Article14        set buffer6 to Article15        set buffer7 to Article16        set buffer8 to Article17    else        set buffer1 to Article1        set buffer2 to Article2        set buffer3 to Article3        set buffer4 to Article4        set buffer5 to Article5        set buffer6 to Article6        set buffer7 to Article7        set buffer8 to Article8        set buffer9 to Article9    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s|%s|%s|%s|%s|%s~||" Article1 Article2 Article3 Article4 Article5 Article6 Article7 Article8 Article9        set ACount to ACount - 9    endif    set test to 0    if ( ACount == 9 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s|%s|%s|%s|%s|%s||" buffer1 buffer2 buffer3 buffer4 buffer5 buffer6 buffer7 buffer8 buffer9        return    endif    set test to 0    if ( ACount == 8 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s|%s|%s|%s|%s||" buffer1 buffer2 buffer3 buffer4 buffer5 buffer6 buffer7 buffer8        return    endif    set test to 0    if ( ACount == 7 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s|%s|%s|%s||" buffer1 buffer2 buffer3 buffer4 buffer5 buffer6 buffer7        return    endif    set test to 0    if ( ACount == 6 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s|%s|%s||" buffer1 buffer2 buffer3 buffer4 buffer5 buffer6        return    endif    set test to 0    if ( ACount == 5 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s|%s||" buffer1 buffer2 buffer3 buffer4 buffer5        return    endif    set test to 0    if ( ACount == 4 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s|%s||" buffer1 buffer2 buffer3 buffer4        return    endif    set test to 0    if ( ACount == 3 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s|%s||" buffer1 buffer2 buffer3        return    endif    set test to 0    if ( ACount == 2 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s|%s||" buffer1 buffer2        return    endif    set test to 0    if ( ACount == 1 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU %s||" buffer1        return    endif    set test to 0    if ( ACount == 0 )        set test to 1    endif    ifx ( test )        xLogMessage "UPDATE::EQU misc_com_bottle_01||"        return    endifend
User avatar
Sudah mati ini Keparat
 
Posts: 3605
Joined: Mon Jul 23, 2007 6:14 pm

Post » Tue Apr 28, 2015 12:57 am

I think you can't put
setx / ifx /whilex etc.
inside
if ( var == something )
blocks
User avatar
Crystal Clarke
 
Posts: 3410
Joined: Mon Dec 11, 2006 5:55 am

Post » Tue Apr 28, 2015 4:56 pm

Yeah, I figured it out just as you posted that! LOL, thanks man.
Works like a charm now. Solved.

User avatar
Hannah Whitlock
 
Posts: 3485
Joined: Sat Oct 07, 2006 12:21 am


Return to III - Morrowind