Skip to content

Expression2 internal error: attempt to perform arithmetic on global 'cost' (a nil value) #3415

@TreePyro

Description

@TreePyro

This e2 provides an internal error when the BusInfo string input is changed:
Expression 2 (shitbox/bus e2): Internal error 'entities/gmod_wire_expression2/core/table.lua:850: attempt to perform arithmetic on global 'cost' (a nil value)' at line 72, char 9

The code for the e2 in question:

@inputs BusInfo:string PassengerSeats:array [Bus Driver DriverSeat]:entity DisableStops
@outputs [Output RequestOutput BusID]:string StopRequest PassengerCount MPH
@persist T BusInfoE:array MaxPassengers BusNum:string
@persist StationIndex Route:table

if(first()){
    T=0
    StopRequest = 0
    MPH = 0
    BusNum = "0"
    StationIndex = 0
    #holoCreate(0)
    
    #include "shitbox/busconfig/ssg2"
    
    PassengerCount = 0
    MaxPassengers = 35
    
    
    BusInfoE = BusInfo:explode("/")
    RequestOutput = "Press Space to request a stop. You will be dropped off at the next available stop."
    let DisplayTimer = function(){
        T++
        if(T>BusInfoE:count()-1){
            T=1
        }
        let Str = BusInfoE[T+1,string]
        Output = T>1 ? Str : BusNum + " " +Str
        #print(T)
        #print(BusInfoE)
    }
    let PassengerTimer = function(){
        if(!DisableStops & !StopRequest & MPH>5){
            let Win = 0
            #print("Begin rolling")
            for(X=1,PassengerCount){
                let Rando = randint(0,75)
                #print(Rando)
                if(Rando==0){
                    Win = 1
                }
            }
            if(Win){
                StopRequest = 1
            }
        }
    }
    timer(2,-1,DisplayTimer)
    timer(5,-1,PassengerTimer)
}

if(~BusInfo){
    BusInfoE = BusInfo:explode("/")
    BusID = BusInfoE[1,string]
    if(Routes:exists(BusID)){
        Route = Routes[BusID,table]
    }
}

function stationAnnouncement(S:string,Type:number){
    if(!Type){
        DriverSeat:hintDriver("Now approaching " + Route[BusID,string],4)
        foreach(X,Passenger:entity = PassengerSeats){
            Passenger:hintDriver("Now approaching " + Route[BusID,string],4)
        }
    }
}

if(changed(StationIndex)|(~BusInfo & Routes:exists(BusID))){
    if(StationIndex<=Route:count()){
        let FinalStop = Route[Route:maxIndex(),string]:explode("/")[2,string]
        let NextStop = Route[StationIndex,string]
        if(NextStop == FinalStop){
            BusInfo = BusID + "/"
        }elseif(StationIndex==Route:count()){
            BusInfo = BusID + " " + FinalStop + NextStop
            if(StationIndex>Route:count()){
                StationIndex = 0
            }
        }
    }
}


if(~BusInfo|first()){
    if(Routes:exists(BusID) & BusInfoE:count()==1){
        Route = Routes[BusID,table]
        BusInfoE[2,string] = "processing"
    }else{
        BusNum = BusID:explode(" ")[2,string]
        Route = table()
    }
}

event keyPressed(Ply:entity, Key:string, Dn:number, _:string){
    foreach(X:number,Pasajero:entity = PassengerSeats){
        if(Pasajero:driver() == Ply & Key == "space" & Dn & !StopRequest & !DisableStops){
            StopRequest = 1
            DriverSeat:hintDriver("Stop requested by Player passenger",4)
        }
    }
    
    if(Ply == Driver){
        if(Key=="1" & Dn){
            StopRequest = 0
        }
        
        if(Key=="h" & Dn){
            let Payload = table(
                "horn" = 1,
                "id" = BusID,
                "pos" = Bus:pos()
            )
            let Dir = Bus:forward():rotate(Driver:eyeAngles())
            #print(Dir:toString())
            #DriverSeat:ejectPod()
            #Driver:plySetPos(Bus:toWorld(Dir*3000))
            #holoPos(0,Bus:toWorld(Dir*3000))
            findInCone(Driver:pos(),Dir,3000,25)
            findClipToClass("gmod_wire_expression2")
            findClosest(Bus:pos()):sendRemoteEvent(Payload)
        }
    }
    
}

event chat(Ply:entity,Msg:string,_:number){
    if(Ply==Driver){
        if(Msg[1] == "."){
            hideChat(1)
        }
        let Xplode = Msg:explode(" ")
        if(Xplode[1,string] == ".busadd"){
            PassengerCount+=Xplode[2,string]:toNumber()
            DriverSeat:hintDriver("Added " + Xplode[2,string] + " passengers to the bus.",4)
            if(PassengerCount>MaxPassengers){
                DriverSeat:hintDriver("Passenger count overflowed!",4)
                PassengerCount = MaxPassengers
            }
        }
        if(Xplode[1,string] == ".busstop"){
            let Exitees = ceil(random(1,6)*((Xplode[2,string]:toNumber()+1)/2))
            let RandomAdd = randint(0,5)
            #let RandomAdd = 0
            #print("Rolled " + Exitees + " for Exitees; " + RandomAdd + " for RandomAdd.")
            if(!RandomAdd){
                Exitees+=randint(1,Exitees)
            }
            if(PassengerCount-Exitees<=0){
                DriverSeat:hintDriver(PassengerCount + " passengers have gotten off the bus. The bus is now empty.",4)
                PassengerCount = 0
            }else{
                DriverSeat:hintDriver(Exitees + " passengers have gotten off the bus.",4)
                PassengerCount-=Exitees
            }
        }
        if(Xplode[1,string] == ".pickup" & floor(MPH) == 0){
            let T = table(
                "pos" = Bus:pos(),
                "id" = BusID
            )
            broadcastRemoteEvent(T)
        }
    }
}

event tick(){
    MPH = abs(toUnit("mph",Bus:velL():x()))*4/3
    
    if(changed(StopRequest)){
            if(StopRequest){
                RequestOutput = "Stop Requested"
                Bus:soundPlay(0,0,"hl1/fvox/bell.wav")
            }else{
                RequestOutput = "Press Space to request a stop. You will be dropped off at the next bus station."
        }
    }
}

event remote(Sender:entity,_:entity,T:table){
    if(Sender:getName() == "shitbox/bus stop e2 v2"){
        let NewPeople = T["passengers",number]
        if(NewPeople){
            DriverSeat:hintDriver(NewPeople + " passengers got on the bus!",4)
            PassengerCount+=NewPeople
        }else{
            DriverSeat:printDriver("No passengers at this stop want to board " + BusID+"!")
            DriverSeat:printDriver(T["routes",table]:toString())
        }
    }
}

if(~DisableStops){
    if(DisableStops){
        StopRequest = 0
        RequestOutput = "Currently in a no-stop zone. Stop requests will be enabled when approaching a city."
    }
    
    if(!DisableStops){
        RequestOutput = "Stop Requests have been re-enabled. Request a stop by pressing Space."
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    E2This issue is related to E2

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions