예제 #1
0
    static int Update(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        PlayerState_CrossOver obj = (PlayerState_CrossOver)LuaScriptMgr.GetNetObjectSelf(L, 1, "PlayerState_CrossOver");

        IM.Number arg0 = (IM.Number)LuaScriptMgr.GetNetObject(L, 2, typeof(IM.Number));
        obj.Update(arg0);
        return(0);
    }
예제 #2
0
    static int OnEnter(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        PlayerState_CrossOver obj  = (PlayerState_CrossOver)LuaScriptMgr.GetNetObjectSelf(L, 1, "PlayerState_CrossOver");
        PlayerState           arg0 = (PlayerState)LuaScriptMgr.GetNetObject(L, 2, typeof(PlayerState));

        obj.OnEnter(arg0);
        return(0);
    }
예제 #3
0
    static int CalcCrossRate(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        Player arg0 = (Player)LuaScriptMgr.GetNetObject(L, 1, typeof(Player));
        Player arg1 = (Player)LuaScriptMgr.GetNetObject(L, 2, typeof(Player));

        IM.Number o = PlayerState_CrossOver.CalcCrossRate(arg0, arg1);
        LuaScriptMgr.PushValue(L, o);
        return(1);
    }
예제 #4
0
    static int _CreatePlayerState_CrossOver(IntPtr L)
    {
        int count = LuaDLL.lua_gettop(L);

        if (count == 2)
        {
            PlayerStateMachine    arg0 = (PlayerStateMachine)LuaScriptMgr.GetNetObject(L, 1, typeof(PlayerStateMachine));
            GameMatch             arg1 = (GameMatch)LuaScriptMgr.GetNetObject(L, 2, typeof(GameMatch));
            PlayerState_CrossOver obj  = new PlayerState_CrossOver(arg0, arg1);
            LuaScriptMgr.PushObject(L, obj);
            return(1);
        }
        else
        {
            LuaDLL.luaL_error(L, "invalid arguments to method: PlayerState_CrossOver.New");
        }

        return(0);
    }
예제 #5
0
    static int get_crossed(IntPtr L)
    {
        object o = LuaScriptMgr.GetLuaObject(L, 1);
        PlayerState_CrossOver obj = (PlayerState_CrossOver)o;

        if (obj == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name crossed");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index crossed on a nil value");
            }
        }

        LuaScriptMgr.Push(L, obj.crossed);
        return(1);
    }
예제 #6
0
    override public void Update(IM.Number fDeltaTime)
    {
        PlayerState state = m_player.m_StateMachine.m_curState;

        if (state.m_eState != PlayerState.State.eCrossOver)
        {
            PlayerState_CrossOver stateCross = m_player.m_StateMachine.GetState(PlayerState.State.eCrossOver) as PlayerState_CrossOver;
            if (stateCross.crossed)                          // Cross over succeed.
            {
                if (IM.Random.value < new IM.Number(0, 300)) // Attack unreasoningly
                {
                    AI_Positioning aiPositioning = m_system.GetState(Type.ePositioning) as AI_Positioning;
                    aiPositioning.unreasonable = true;
                    Debug.Log("Attack unreasonable.");
                }
                else
                {
                    Player defender = m_player.GetDefender();
                    if (defender != null)                       // Still being defended.
                    {
                        List <SkillInstance> basicSkills = m_player.m_skillSystem.GetBasicSkillsByCommand(Command.CrossOver);
                        uint uBasicSkillCost             = basicSkills[0].skill.levels[1].stama;
                        if (m_player.m_stamina.m_curStamina >= new IM.Number((int)uBasicSkillCost))                             // Has enough stamina to cross again.
                        {
                            IM.Number crossRate = PlayerState_CrossOver.CalcCrossRate(m_player, defender);                      // Cross over success rate.
                            if (crossRate > new IM.Number(0, 600))
                            {
                                m_system.SetTransaction(this, new IM.Number(100), true);
                                return;
                            }
                        }
                    }
                }
            }
            else                // Cross over failed.
            {
                if (state.m_eState == PlayerState.State.eStand ||
                    state.m_eState == PlayerState.State.eRun ||
                    state.m_eState == PlayerState.State.eRush ||
                    state.m_eState == PlayerState.State.eHold)
                {
                    Player defender = m_player.GetDefender();
                    if (defender != null)
                    {
                        IM.Number crossRate = PlayerState_CrossOver.CalcCrossRate(m_player, defender); // Cross over success rate.
                        if (crossRate < new IM.Number(0, 200))                                         // Success rate is too low. Pass to teammate.
                        {
                            List <Player> teammates = new List <Player>(m_player.m_team.members);
                            teammates.Remove(m_player);
                            Player target = AIUtils.GetMostPriorPassTarget(teammates, m_player);
                            if (target != null)
                            {
                                AI_Pass passState = m_system.GetState(Type.ePass) as AI_Pass;
                                passState.m_toPass = target;
                                m_system.SetTransaction(passState, new IM.Number(100), true);
                                return;
                            }
                        }
                    }
                }
                else if (state.m_eState == PlayerState.State.eKnocked)                  // Wait knocked state over to do passing
                {
                    return;
                }
            }
            m_system.SetTransaction(AIState.Type.ePositioning);
        }
    }