int KHero::LuaSetMoveTarget(Lua_State* L)
{
    BOOL        bRetCode        = false;
    int         nTopIndex       = 0;
    BOOL        bMove           = false;
    int         nDirection      = 0;

    nTopIndex = Lua_GetTopIndex(L);
    if (nTopIndex == 1)
    {
        m_AIData.eTargetType = KTARGET_OBJ;
        m_AIData.dwTargetObjID = (DWORD)Lua_ValueToNumber(L, 1);
    }
    else if(nTopIndex == 3)
    {
        m_AIData.eTargetType = KTARGET_POSITION;
        m_AIData.nTargetX = (DWORD)Lua_ValueToNumber(L, 1);
        m_AIData.nTargetY = (DWORD)Lua_ValueToNumber(L, 2);
        m_AIData.nTargetZ = (DWORD)Lua_ValueToNumber(L, 3);

        MAKE_IN_RANGE(m_AIData.nTargetX, 0, m_pScene->GetLength());
        MAKE_IN_RANGE(m_AIData.nTargetY, 0, m_pScene->GetWidth());
    }

    return 0;
}
Beispiel #2
0
void KCampManager::AddScore(int nScore)
{   
    m_nScore += nScore;
    
    if (nScore > 0)
    {
        while (m_nScore >= m_nLevelScore[m_nLevel] && m_nLevel < CAMP_LEVEL_COUNT - 1)
        {
            m_nScore -= m_nLevelScore[m_nLevel];
            m_nLevel++;
        }
    }
    else
    {
        while (m_nScore <= -m_nLevelScore[CAMP_LEVEL_COUNT - m_nLevel - 1] && m_nLevel > 0)
        {
            m_nScore += m_nLevelScore[CAMP_LEVEL_COUNT - m_nLevel - 1];
            m_nLevel--;
        }
    }
    
    MAKE_IN_RANGE(m_nScore, -m_nLevelScore[CAMP_LEVEL_COUNT - m_nLevel - 1], m_nLevelScore[m_nLevel]);

    m_bUpdate = true;

    g_pSO3GameCenter->m_GameServer.DoSyncCampInfo(-1);
}
// 精确到万分之一,不要轻易改
int KHeroData::GetLadderWinRate()
{
    int nWinRate = 0;
    int nToltalCount = m_nLadderWinCount + m_nLadderLoseCount;

    if (nToltalCount > 0)
    {
        nWinRate = 10000 * (int64_t)(m_nLadderWinCount) / nToltalCount;
    }
    
    MAKE_IN_RANGE(nWinRate, 0, 10000);

    return nWinRate;
}
Beispiel #4
0
BOOL KSkillList::AddSkillExp(DWORD dwSkillID, DWORD dwExp)
{
    BOOL                bResult         = false;
    BOOL                bRetCode        = false;
    int                 nOdds           = 0;
    DWORD               dwSkillExp      = 0;
	KSkill*             pSkill          = NULL;
    const KPlayerSkill* cpPlayerSkill   = NULL;
    PLAYER_SKILL_LIST::const_iterator cit;
    
    cit = m_PlayerSkillList.find(dwSkillID);
	KG_PROCESS_ERROR(cit != m_PlayerSkillList.end());
    cpPlayerSkill = &cit->second;

	pSkill = g_pSO3World->m_SkillManager.GetSkill_RAW(dwSkillID, cit->second.dwLevel);
	KG_PROCESS_ERROR(pSkill);
	KG_PROCESS_ERROR(pSkill->m_dwLevelUpExp);

    nOdds = (int)g_Random(KILO_NUM);
    KG_PROCESS_SUCCESS(nOdds + pSkill->m_nExpAddOdds < KILO_NUM);

    dwSkillExp = cpPlayerSkill->dwExp + dwExp;

    MAKE_IN_RANGE(dwSkillExp, 0, pSkill->m_dwLevelUpExp);

    bRetCode = UpdateSkill(dwSkillID, cpPlayerSkill->dwLevel, dwSkillExp);

    if (CanRealizeSkill(dwSkillID))
    {
        LearnSkill(dwSkillID, true);
    }

Exit1:
    bResult = true;
Exit0:
	return bResult;
}