コード例 #1
0
    /// <summary>
    /// Do work on the paper stacks of this desk.
    /// Returns true if there is still more work to be done.
    /// </summary>
    public bool DoWork(float PapersPerTick)
    {
        if (mAssignedPaperStacks.Count == 0)
        {
            return(false);
        }

        CContractStack stack = mAssignedPaperStacks[0];

        if (stack.DoWork(PapersPerTick))
        {
            if (_item != null)
            {
                ((CItemDesk)_item).mCompletedStacks.Add(new CCompletedContractStack(stack.mDoneWork));
                //.mCompletedPapers += (int)stack.mDoneWork;
            }

            mAssignedPaperStacks.Remove(stack);
            mPaperStackUpdateTick = mWorld.mGameTick;
        }

        if (mAssignedPaperStacks.Count == 0)
        {
            return(false);
        }

        return(true);
    }
コード例 #2
0
    /// <summary>
    /// Fill out properties for a new contract.
    /// </summary>
    public void InitContract(CClientCompany Company, int Tier, int Player)
    {
        mTier    = Tier;
        mCompany = Company;
        mOwner   = Player;

        //CContractDefinition def = CGame.Datastore.mContract;
        mOwner = -1;
        mName  = "Audit Report";

        float stackLow         = 5;
        float stackHigh        = 10;
        float deadlineLow      = 18;
        float deadlineHigh     = 36;
        float penaltyRate      = 10;
        float acceptExpiryTime = 90;

        CContractTier tier = mWorld.mContractTiers[Tier];


        float rngMod = mWorld.SimRnd.GetNextFloat();

        int totalPapers = (int)((int)((float)(tier.mMulHigh - tier.mMulLow) * rngMod) + tier.mMulLow) * 100;

        totalPapers += (int)(totalPapers * Company.mPaperMul * Tier);

        mStackCount       = (int)((int)((float)(stackHigh - stackLow) * rngMod) + stackLow);
        mStackCount      += (int)(mStackCount * Company.mStackMul * Tier);
        mTotalStartPapers = 0;

        int papersPerStack = totalPapers / mStackCount;

        mStacks = new CContractStack[mStackCount];
        for (int i = 0; i < mStackCount; ++i)
        {
            mStacks[i]            = new CContractStack();
            mStacks[i].mContract  = this;
            mStacks[i].mTotalWork = papersPerStack;
            mTotalStartPapers    += papersPerStack;
        }

        mPenalty = Tier / 10 * totalPapers;

        int deadline = (int)(mWorld.SimRnd.GetNextFloat() * (float)(deadlineHigh - deadlineLow) * 10.0f);

        deadline     += (int)(deadline * Company.mDeadlineMul * Tier);
        mDeadlineTime = deadline * CWorld.TICKS_PER_SECOND;

        mAvailableFor   = (int)acceptExpiryTime * CWorld.TICKS_PER_SECOND;
        mAvailableUntil = mWorld.mGameTick + mAvailableFor;

        //Debug.Log("Contract generated - Papers: " + mStartPapers + " Deadline: " + deadlineSecsRounded + "secs");
    }
コード例 #3
0
    /// <summary>
    /// Assign contract units to this desk.
    /// </summary>
    public void AssignContractUnits(CContractStack Paper)
    {
        if (Paper == null)
        {
            Debug.LogError("Can't assign null to desk");
            return;
        }

        if (GetFreePaperStackSlots() == 0)
        {
            Debug.LogError("Put too many contract papers on desk.");
            return;
        }

        Paper.mDistributed = true;
        mAssignedPaperStacks.Add(Paper);
        mPaperStackUpdateTick = mWorld.mGameTick;
    }