Example #1
0
        public void Climb(NPCInst npc, NPC.ClimbingLedge ledge)
        {
            if (!jumpTimer.IsReady)
            {
                return;
            }

            ClimbMoves move;
            var        gAI  = npc.BaseInst.gAI;
            float      dist = ledge.Location.Y - gAI.FeetY;

            if (dist < gAI.StepHeight)
            {
                return;
            }
            else if (dist < gAI.YMaxJumpLow)
            {
                move = ClimbMoves.Low;
            }
            else if (dist < gAI.YMaxJumpMid)
            {
                move = ClimbMoves.Mid;
            }
            else
            {
                move = ClimbMoves.High;
            }

            var stream = npc.BaseInst.GetScriptCommandStream();

            switch (move)
            {
            case ClimbMoves.High:
                stream.Write((byte)RequestMessageIDs.ClimbHigh);
                break;

            case ClimbMoves.Mid:
                stream.Write((byte)RequestMessageIDs.ClimbMid);
                break;

            case ClimbMoves.Low:
                stream.Write((byte)RequestMessageIDs.ClimbLow);
                break;

            default:
                return;
            }

            ledge.WriteStream(stream);

            NPC.SendScriptCommand(stream, NetPriority.Medium);
        }
Example #2
0
        public void DoClimb(ClimbMoves move, NPC.ClimbingLedge ledge)
        {
            ScriptAniJob job;

            switch (move)
            {
            case ClimbMoves.High:
                job = AniCatalog.Climbs.High;
                break;

            case ClimbMoves.Mid:
                job = AniCatalog.Climbs.Mid;
                break;

            case ClimbMoves.Low:
                job = AniCatalog.Climbs.Low;
                break;

            default:
                Logger.Log("Not existing climb move: " + move);
                return;
            }

            if (job == null)
            {
                return;
            }


            var stream = BaseInst.GetScriptVobStream();

            stream.Write((byte)ScriptVobMessageIDs.Climb);
            ledge.WriteStream(stream);
            BaseInst.SendScriptVobStream(stream);

            IsClimbing = true;
            ModelInst.StartAniJob(job, () => IsClimbing = false);
        }