-
Notifications
You must be signed in to change notification settings - Fork 342
Open
Labels
E2This issue is related to E2This issue is related to E2
Description
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
Labels
E2This issue is related to E2This issue is related to E2