Hop til indhold
Stavox

DoktorDim

Medlem+
  • Antal indlæg

    1374
  • Medlem siden

  • Senest besøgt

  • Dage Vundet

    6

Indlæg skrevet af DoktorDim

  1. Kunne forstå at nogle godt gad have denne E2, så i stedet for at den bliver videresolgt, så kommer den bare her. 

     

    Guide

    Begge E2'er skal placeres før koden virker. Forstå nedenstående kode som resten af guiden - ellers skal jeg nok svare på evt. spørgsmål.. engang.

     

    IKKE FÆRDIGUDVIKLET

    Spoiler
    @name PostNord v2.0
    @inputs VehicleSensor:entity
    @outputs 
    @persist [Parcels, Employees, ParcelsDepot, TrackIDs, Vehicles, Blacklist, Difference, Data]:table [AwaitQueue, Queue, DepotTimes, DeliveryTimes, MailEmployees, Adverts]:array ReadyToEject:number
    @trigger 
    
    if(first()){
        runOnAllChat(1)
        
        Company = table()
        Color = vec()
        
        foreach(K, V:string = getDeliveryCompanyIDs()){
            if(V:find(owner():steamID())){
                Company = getDeliveryCompany(V)
            }
        }
        
        switch(Company["SkinID", number]){
            case 1,
                Color = vec(0, 160, 215)
                break
            
            case 2,
                Color = vec(212, 5, 17)
                break
            
            case 3,
                Color = vec(255, 181, 0)
                break
            
            case 4,
                Color = vec(6, 26, 177)
                break
                
                
            case 5,
                Color = vec(255, 102, 0)
                break
        }
        
        Data = table(
            "Name" = Company["Name", string],
            "LowerName" = Company["LowerName", string],
            "Color" = Color,
            "Company" = Company,
            "MailDepot" = Company["MailDepot", entity],
            
            "LatestVehicle" = noentity(),
            "AutoAdvert" = 0
    
        )
        
        Data["MailDepot", entity]:setAutoRemoval(90)
        print(owner():forward())
        Vehicles = table(
            "models/metrohd/merc_vito.mdl" = 6,
            "models/metrohd/vw_multivan.mdl" = 6,
            "models/metrohd/scania_s730.mdl" = 12
        )
        
        function string getClock(){
            UTC = dateUTC()
            
            return format("%02d.%02d", UTC["hour", number] + 1, UTC["min", number])
        }
        
        function printLayout(Text:string){
            printColor(Data["Color", vector], Data["Name", string]," Admin - ", vec(255), Text)
        }
        
        function pushQueue(Player:entity, Text:string){
            if(Blacklist:exists(Player:steamID())){
                return
            }
            
            elseif(!Queue:count()){
                timer("nextQueue", 975)
            }
            
            Queue:pushEntity(Player)
            Queue:pushString(Text)
        }
        
        timer("checkDepot", 1500)
        timer("updatePractical", 750)
        timer("checkDelivery", 950)
    }
    
    elseif(clk(clkName())){
        switch(clkName()){
            case "checkDelivery",
                foreach(K, V:entity = MailEmployees){
                    AimEntity = V:aimEntity()
                    
                    if(V:inVehicle() | !AimEntity:isParcel() | Parcels[AimEntity:getParcelId(), table]["Status", string] == "delivered" | V:pos():distance(AimEntity:getParcelDestination():pos()) > 750){
                        continue
                    }
    
                    ParcelID = AimEntity:getParcelId()
                    Parcel = Parcels[ParcelID, table]
                    DeliveryTime = curtime() - Parcel["DeliveryTime", number]
                    SteamID = Parcel["Driver", entity]:steamID()
                    Employee = Employees[SteamID, table]
                    Employees[SteamID, table]["DeliveryTimes", array]:pushNumber(DeliveryTime)
                    
                    if(Employee["ParcelsVehicle", table]:exists(ParcelID)){
                        Employees[SteamID, table]["ParcelsDelivered", array]:pushString(ParcelID)
                        Employees[SteamID, table]["ParcelsVehicle", table]:remove(ParcelID)
                        printLayout(format("%s leverede pakken %d til %s p%s %d sekunder.", Parcel["DriverName", string], Parcel["TrackID", number], Parcel["OwnerName", string], aa(), DeliveryTime))
                    }
                    
                    else{
                        printLayout("Noget gik galt.")
                        print("The WRONG parcelID has been delivered.. Got vs. expected parcelID: " + ParcelID + " - " + Employees[SteamID, table]["ParcelsVehicle", array][1, string])
                    }
                    
                    Parcels[ParcelID, table] = Parcel:merge(table(
                        "Status" = "delivered",
                        "LastSeen" = getClock(),
                        "DeliveryTime" = DeliveryTime
                    ))
                    
                    DeliveryTimes:pushNumber(DeliveryTime)
                    
                    pushQueue(Parcel["Owner", entity], format("K%sre kunde\nDu kan nu gl%sde dig over, at vores chauff%sr %s netop har afleveret pakken %d til %s.\n\nTak fordi du valgte %s!", ae(), ae(), oe(), Parcel["DriverName", string], Parcel["TrackID", number], Parcel["MailboxFormat", string], Data["Name", string]))
                }
                
                timer("checkDelivery", 500)
                break
                
            case "checkDepot",
                timer("checkDepot", 2500)
            
                if(!Difference:count()){
                    Depot = getParcelsInDepot()
                    
                    if(ParcelsDepot:toString() == Depot:toString()){
                        break
                    }
                    
                    Difference = Depot:difference(ParcelsDepot)
                    ParcelsDepot = Depot:clone()
                }
               
                for(I = 1, Difference:count() > 3 ? 3 : Difference:count()){
                    Parcel = Difference[1, table]
                    
                    if(Parcels:exists(Parcel["ParcelID", string])){
                        continue
                    }
                    
                    Mailbox = entity(Parcel["DeliveryID", number])
                    MailboxName = Mailbox:getMailboxName()
                    TrackID = int(Parcel["InitShipping", number])
                    TrackIDs[TrackID, string] = Parcel["ParcelID", string]
                    Parcels[Parcel["ParcelID", string], table] = table(
                        "Owner" = Parcel["Owner", entity],
                        "OwnerName" = Parcel["Owner", entity]:name(),
                        "LastSeen" = getClock(),
                        "DepotTime" = curtime(),
                        "Status" = "indepot",
                        "TrackID" = TrackID,
                        "MailboxFormat" = Mailbox:getMailboxType() == "pakkeboks" ? "pakkeboksen ved " + MailboxName : "postkassen ved " + MailboxName
                    )
                    
                    pushQueue(Parcel["Owner", entity], format("K%sre kunde\nVi har registeret din pakkes ankomst til vores pakkecenter. Du kan forvente dens ankomst om %d min. F%slg dens rejse gennem kommandoen: '!%s %d'.\n\nMvh. %s", ae(), Data["AverageDepotTime", number] + Data["AverageDeliveryTime", number], oe(), Data["LowerName", string], TrackID, Data["Name", string]))
                    Difference:remove(1)
                }
    
                break
            
            case "ejectParcel",
                Driver = VehicleSensor:owner()
                SteamID = Driver:steamID()
                
                if(Vehicles[VehicleSensor:model(), number] > Employees[SteamID, table]["ParcelsVehicle", table]:count() & ParcelsDepot:count()){
                    ParcelID = ParcelsDepot[1, table]["ParcelID", string]
                    
                    
                    if(Parcels:exists(ParcelID)){
                        Parcel = Parcels[ParcelID, table]
                        DepotTime = Parcel["DepotTime", number]
                        
                        if(Parcel["Status", string] == "indepot"){
                            DepotTime = curtime() - Parcel["DepotTime", number]
                            Employees[SteamID, table]["ParcelsVehicle", table][ParcelID, number] = 1
                            
                            DepotTimes:pushNumber(DepotTime)
                            AwaitQueue:pushEntity(Parcel["Owner", entity])
                            AwaitQueue:pushString(format("K%sre kunde\nDin pakke %d har netop forladt vores pakkecenter, og er nu p%s vej til %s. Du kan forvente dens ankomst om %d min.\n\nMvh. %s", ae(), Parcel["TrackID", number], aa(), Parcel["MailboxFormat", string], Employees[SteamID, table]["AverageDeliveryTime", number], Data["Name", string]))
                        }
                        
                        Parcels[ParcelID, table] = Parcel:merge(table(
                            "Status" = "intransit",
                            "LastSeen" = getClock(),
                            "DeliveryTime" = curtime(),
                            "DepotTime " = DepotTime,
                            "Driver" = Driver,
                            "DriverSteamID" = SteamID,
                            "DriverName" = Driver:name()
                        ))
                        printLAyout("Ejecting
                        ejectParcelFromDepot(ParcelID, Data["MailDepot", entity]:right())
                    }
                }
                
                timer("ejectParcel", 2500)
                break
                
            case "nextQueue",
                printLayout(Queue:shiftEntity():toString() +  " - " + Queue:shiftString())
                
                if(Queue:count()){
                    timer("nextQueue", 975)
                }
                
                break
                
            case "updatePractical",
                MailEmployees = getMailEmployees()
                OldEmployees = Employees:clone()
                
                foreach(K, V:entity = MailEmployees){
                    SteamID = V:steamID()
                    
                    if(Employees:exists(SteamID)){
                        Employees[SteamID, table] = OldEmployees[SteamID, table]:clone()
                        Employees[SteamID, table]["AverageDeliveryTime", number] = ceil(Employees[SteamID, table]["DeliveryTimes", array]:average() / 60, 0)
                        continue
                    }
                    
                    Employees[SteamID, table] = table(
                        "DeliveryTimes" = array(),
                        "ParcelsDelivered" = array(),
                        "ParcelsVehicle" = table(),
                        "AverageDeliveryTime" = 5
                    )
                }
                
                Data["AverageDepotTime", number] = DepotTimes:count() ? ceil(DepotTimes:average() / 60, 0) : 5 #Using the function ceil to round it up instead of rounding it down.
                Data["AverageDeliveryTime", number] = DeliveryTimes:count() ? ceil(DeliveryTimes:average() / 60, 0) : 5
                
                if(Data["AutoAdvert", number]){
                    Players = players()
                    Name = Players[randint(1, Players:count()), entity]:name()
                    
                    Adverts = array(
                        format("%s - Fra %s: \"Jeg m%s bare indr%smme, at %s er de bedste, n%sr det ang%sr leveringstiden!\"", Data["Name", string], Name, aa(), oe(), Data["Name", string], aa(), aa()),
                        format("%s - Fra %s: \"%s har bare den bedste service. Ingen af deres konkurrenter n%srmer sig dem!\"", Data["Name", string], Name, Data["Name", string], ae()),
                        format("%s - Fra: %s: \"Jeg bestilte min pakke i g%sr aftes, og den er allerede ankommet med %s!\"", Data["Name", string], Name, aa(), Data["Name", string]),
                        format("%s - Fra: %s: \"Jeg er helt vild med %s's track and trace system! Det fungere bare super godt.\"", Data["Name", string], Name, Data["Name", string])
                    )
                    
                    printLayout("say /advert " + Adverts[randint(1, Adverts:count()), string])
                }
                
                timer("updatePractical", 180000)
                break
        }
    }
    
    elseif(~VehicleSensor){
        if(VehicleSensor:isVehicle() & Employees:exists(VehicleSensor:owner():steamID())){
            Data["LatestVehicle", entity] = VehicleSensor
            timer("ejectParcel", 2500)
        }
        
        else{
            stoptimer("ejectParcel")
            
            for(I = 1, AwaitQueue:count() / 2){
                pushQueue(AwaitQueue:shiftEntity(), AwaitQueue:shiftString())
            } 
        }
    }
    
    elseif(chatClk()){
        LastSaid = lastSaid():lower():explode(" ")
        LastSpoke = lastSpoke()
        
        if(LastSpoke == owner() & Queue:count()){
            stoptimer("nextQueue")
            timer("nextQueue", 975)
        }
        
        if(LastSaid[1, string] == "!" + Data["LowerName", string]){
            switch(LastSaid[2, string]){
                case "stats",
                    Argument = LastSaid:concat(" ", 3)
                    Ent = Argument:length() ? findPlayerByName(Argument) : owner()
                    SteamID = Ent:steamID()
                    
                    if(!Employees:exists(LastSpoke:steamID())){
                        pushQueue(LastSpoke, format("Denne kommando er kun tilg%sngelig for ansatte i %s.", ae(), Data["Name", string]))
                        break
                    }
                    
                    elseif(!Ent:isPlayer()){
                        pushQueue(Ent, format("Ingen resultater fundet efter s%sgningen: '%s'.", oe(), Argument))
                        break
                    }
                    
                    elseif(!Employees:exists(SteamID)){
                        pushQueue(Ent, format("%s er ikke ansat i din virksomhed.", Ent:name()))
                        break
                    }
                    
                    Employee = Employees[SteamID, table]
                    
                    ## TODO : Make this cmd work
                    pushQueue(Ent, format("Statistiker over %s arbejde\nPakker leveret: %d\nPakker i postbil: %d\nGns. leveringstid: %d min", Ent:name(), Employee["ParcelsDelivered", array]:count(), Employee["ParcelsVehicle", array]:count(), Employee["AverageDeliveryTime", number]))
                    break
                    
                case "fix",
                    Ent = Argument:length() ? findPlayerByName(Argument) : owner()
                    SteamID = Ent:steamID()
                    Employee = Employees[SteamID, table]
                    
                    if(!Employees:exists(LastSpoke:steamID())){
                        pushQueue(LastSpoke, format("Denne kommando er kun tilg%sngelig for ansatte i %s.", ae(), Data["Name", string]))
                        break
                    }
                    
                    elseif(!Ent:isPlayer()){
                        if(LastSpoke == owner()){
                            printLayout(format("Ingen resultater fundet efter s%sgningen: '%s'.", oe(), Argument))
                            break
                        }
                        
                        pushQueue(LastSpoke, format("Ingen resultater fundet efter s%sgningen: '%s'.", oe(), Argument))
                        break
                    }
                    
                    elseif(!Employees:exists(SteamID)){
                        if(LastSpoke == owner()){
                            printLayout(format("%s er ikke ansat i virksomheden.", Ent:name()))
                            break
                        }
                        
                        pushQueue(LastSpoke, format("%s er ikke ansat i virksomheden.", Ent:name()))
                        break
                    }
                    
                    elseif(!Employees[SteamID, table]["ParcelsVehicle", table]:count()){
                        if(LastSpoke == owner()){
                            printLayout(format("Ingen pakker blev fundet i %s's postbil.", Ent:name()))
                            break
                        }
                        
                        pushQueue(LastSpoke, format("Ingen pakker blev fundet i %s's postbil.", Ent:name()))
                        break
                    }
                    
                    List = ""
                    
                    foreach(K, V:string = Employees[SteamID, table]["ParcelsVehicle", array]){
                        if(getParcelStatus(V) != "unknown"){
                            continue
                        }
                        
                        List = format("%s \n %d", List, V)
                        Employees[SteamID, table]["ParcelsVehicle", array]:remove(K)
                    }
                    
                    if(List){
                        if(LastSpoke == owner()){
                            printLayout(format("Der blev fundet en fejl ved f%slgende pakker i %s's postbil: %s", oe(), Ent:name(), List))
                            break
                        }
                        
                        pushQueue(LastSpoke, format("Der blev fundet en fejl ved f%slgende pakker i %s's postbil: %s", oe(), Ent:name(), List))
                        break
                    }
                    
                    if(LastSpoke == owner()){
                        printLayout(format("Der blev ingen fejl fundet. Hvis du fortsat oplever problemer, s%s Pr%sv at aflever en pakke og pr%sv samme kommando igen.", aa(), oe(), oe()))
                        break
                    }
                    pushQueue(LastSpoke, format("Der blev ingen fejl fundet. Hvis du fortsat oplever problemer, s%s Pr%sv at aflever en pakke og pr%sv samme kommando igen.", aa(), oe(), oe()))
                    
                    break
                
                case "test",
                    printTable(Employees)
                    break
                
                case "stop",
                    SteamID = LastSpoke:steamID()
                    
                    if(Blacklist:exists(SteamID)){
                        Blacklist:remove(SteamID)
                        
                        pushQueue(LastSpoke, format("K%sre kunde\nDu vil nu igen modtage opdateringer p%s fremtidige bestilte pakker.\n\nMvh. %s", ae(), Data["Name", string]))
                        break   
                    }
                    
                    Blacklist[SteamID, number] = 1
                    
                    pushQueue(LastSpoke, format("K%sre kunde\n Du vil ikke l%sngere modtage opdateringer p%s fremtidige bestilte pakker.\n\nMvh. %s", ae(), ae(), aa(), Data["Name", string]))
                    break
                    
                default,
                    ParcelID = TrackIDs[LastSaid[2, string]:toNumber(), string]
                    
                    if(Parcels:exists(ParcelID)){
                        Parcel = Parcels[ParcelID, table]
                        
                        switch(Parcel["Status", string]){
                            case "indepot",
                                pushQueue(LastSpoke, format("K%sre kunde\nPakke %s ligger i vores depot, og afventer en ledig chauff%sr medtager den. Denne fase tager normalt blot %d min.\n\nMvh. %s", ae(), LastSaid[2, string], oe(), Data["AverageDepotTime", number], Data["Name", string]))
                                break
                            
                            case "intransit",
                            pushQueue(LastSpoke, format("K%sre kunde\nPakken %s forlod vores depot kl. %s, og er allerede p%s vej til %s. Leveringstiden tager normalt %d min. Vi gl%sder os til at levere den!\n\nMvh. %s", ae(), LastSaid[2, string], Parcel["LastSeen", string], aa(), Parcel["MailboxFormat", string], Employees[Parcel["DriverSteamID", string], table]["AverageDeliveryTime", number], ae(), Data["Name", string]))
                                
                                break
                                
                            case "delivered",
                                pushQueue(LastSpoke, format("K%sre kunde\nPakken %s blev leveret kl. %s af vores chauff%sr %s til %s.\n\nMvh. %s", ae(), LastSaid[2, string], Parcel["LastSeen", string], oe(), Parcel["DriverName", string], Parcel["MailboxFormat", string], Data["Name", string]))
                                break
                        }
                    }
                    
                    else{
                        pushQueue(LastSpoke, format("K%sre kunde\nDet indtastede pakkenummer eksistere ikke. Tjek om du evt. skulle have tastet forkert.\n\nMvh. %s", ae(), Data["Name", string]))
                    }
            }
        }
    }

     

    Spoiler

    @name PostNord E2 - Helper
    @inputs DeliveryTruck:entity
    @persist [Data, Depot]:table CompanyID:string

    if(first()){
        dsSetScope(0)
        dsJoinGroup("PostNord")
        
        function printLayout(Text:string){
            printColor(vec(0, 160, 214), "PostNord - ", vec(255), Text)
        }
        
        DeliveryCompanys = getDeliveryCompanyIDs()
        
        foreach(K, V:string = DeliveryCompanys){
            DeliveryCompany = getDeliveryCompany(V)

            if(DeliveryCompany["OwnerEntity", entity] == owner()){
                CompanyID = V
            }
        }

        timer("check.parcelDelivered", 50)
        timer("check.depot", 2000)
        timer("check.prices", 30000)
    }

    if(clk(clkName())){
        switch(clkName()){
            case "check.parcelDelivered",
                Employees = getMailEmployees()
                Parcels = array()
                Drivers = array()
                
                foreach(K, V:entity = Employees){
                    if(V:inVehicle()){
                        continue
                    }
                    
                    Ent = V:aimEntity()
                    
                    if(!Ent:isParcel() ?: Data:exists(Ent:getParcelId()) ?: V:pos():distance(Ent:getParcelDestination():pos()) > 750){
                        continue
                    }
                    
                    Data[Ent:getParcelId(), number] = 1
                    Drivers:pushEntity(V)
                    Parcels:pushEntity(Ent)
                }
                
                if(Parcels:count()){
                    dsSend("parcelDelivered", "PostNord", table(Drivers, Parcels))
                }
                
                timer("check.parcelDelivered", 500)
                break
            
            case "check.depot",
                OldDepot = Depot:clone()
                Depot = getParcelsInDepot()
                
                if(OldDepot[1, table]["ParcelID", string] == Depot[1, table]["ParcelID", string] & OldDepot[Depot:count(), table]["ParcelID", string] == Depot[OldDepot:count(), table]["ParcelID", string]){
                }
                
                else {
                    print("Something has changed in the depot!")
                    dsSend("newParcel", "PostNord", Depot)
                }
                
                timer("check.depot", 2500)
                break
            
            case "check.prices",
                DeliveryCompanys = getDeliveryCompanyIDs()
                Company = getDeliveryCompany(CompanyID)
                CompanyPrice = Company["Prices", table]["FromPerson", number] + Company["Prices", table]["FromWeb", number] + Company["Prices", table]["ToHouse", number] + Company["Prices", table]["ToBox", number]
                
                if(DeliveryCompanys:count() == 1 & CompanyPrice != 4000){
                    printLayout("TIP: Du har i " + oe() + "jeblikket ingen konkurrenter. Overvej at h" + ae() + "ve dine priser.")
                    exit()
                }
                
                BestPrice = 0
                OfferPrice = 0
                
                foreach(K, V:string = DeliveryCompanys){
                    CompanyPrices = getDeliveryCompany(V)["Prices", table]
                    OfferPrice = CompanyPrices["FromPerson", number] + CompanyPrices["FromWeb", number] + CompanyPrices["ToHouse", number] + CompanyPrices["ToBox", number]
                        
                    if(BestPrice > OfferPrice){
                        BestPrice = OfferPrice
                    }
                }
                    
                if(CompanyPrice > OfferPrice){
                    printLayout("TIP: En af dine konkurrenter har lavere priser end dig. Overvej at s" + ae()+ "nke dine priser.")
                }
                
                timer("check.prices", 150000)
        }
    }

     

     

    postnord_v2.txt postnord_e2_-_helper.txt

    • Sejt 1
  2. Det allerførste jeg gjorde - da der blev affyret skud, var at melde situationen til politiet. Indtil politiet har meldt deres ankomst til os, så har jeg vel ret til at forsvare mig selv? I denne situation blev vi på intet tidspunkt informeret om, at nu var politiet ankommet. Hvordan skulle vi nogensinde vide, at nu stod én politibetjent ligepludselig udenfor? Vi kan jo ikke se igennem vægge.

     

    Desuden prøvede vi - som der også blev nævnt i forklaring på situationen, at åbne dørene ud til, da flere råbte, at gerningsmanden var død. Straks efter dørene blev åbnet,  blev der igen affyret skud rettet mod os.

    • +Rep 1
  3. Der er to forskellige perspektiver af denne sag. Jeg har udelukkende reageret på, at der på flere tidspunkter blev affyret skud mod dørene. Derfor mener jeg, at personerne som har stået derude - og som ikke nødvendigvis har haft noget med situationen at gøre, har stået på det forkerte sted på det forkerte tidspunkt.

     

    Man kan sætte situationen op som et almindeligt raid. Vi forsvare os selv udfra den viden vi har, eftersom vi står bag vægge og ikke kan se udspillet af situationen.

    • +Rep 2
    • -Rep 1
  4. v1.0 changelog

    - Bedre optimeret igen. Credit: @Trixx❤️

    - E2'en tjekker nu i en radius på 20 meter i stedet for 22,5 meter.

    - Hastigheden for hvor ofte E2'en skal tjekke er blevet hævet med min. 100%. E2'en tjekker nu såfremt ingen biler er i nærheden to gange i sekundet og ellers en gang i sekundet.

    - E2'en vil nu selv tjekke, om den bliver overbelastet.

    - Man kan nu hente E2'en ned som dupe i version v1.0.

    - Mindre småfejl er blevet fixet.

    • +Rep 3
  5. 39 minutter siden, xKow skrev:

    Tror ikke mange ville bruge dette job, da det hurtigt vil blive kedeligt, at gå rundt dag ind og ud, og prøve at finde biler der er parkeret ulovligt, fordi hvis dette blev et job, ville folk jo passe meget mere på med hvordan de parkere, fordi de ved der er en vagt der går rundt og holder øje. Og det vil også betyde at der er ikke er god penge i jobbet, som gør at folk ikke vil være jobbet.

    Tror ikke dette er et job, som ville fungere godt på serveren, desværre.

    Jeg ville da gerne, når jeg alligevel bare står AFK og tager cases.

    • +Rep 1
    • Sjovt 1
×
×
  • Tilføj...

COOKIE- OG PRIVATLIVSPOLITIK PÅ STAVOX.DK

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privatlivspolitik - Vilkår for brug.