Domanda Skilltable.txt & Skilldesc.txt, chiedo aiuto su alcune informazioni

Stato
Discussione chiusa ad ulteriori risposte.

MbutuDugongo

Utente Emerald
6 Agosto 2011
908
43
197
389
Ultima modifica:
Buonasera ragazzi, scasinando sia sul DB del mio server sia sui file elencati nel titolo del thread, mi sono accorto che ci sono dei "codici" (passatemi il termine, non sono realmente codici) a me sconosciuti.
Questi "codici" sono i seguenti:

mwep
number
ar
chain

Lavorando sul bilanciamento delle abilità dei vari PG, mi interesserebbe sapere che valori hanno queste parole a livello di formule da settare sul DB e sulle tabelle .txt del client!

Ringrazio chiunque risponda alla discussione :D
 
Ultima modifica:
Ciao.

"mwep" e' uno scaling che include:
  1. un valore randomico scelto dall'intervallo fra attacco magico minimo (value1) e attacco magico massimo (value2)
  2. incremento globale (value5)
dell'arma indossata.

C++:
void SetPolyVarForAttack(LPCHARACTER ch, CSkillProto* pkSk, LPITEM pkWeapon)
{
    if (ch->IsPC())
    {
        if (pkWeapon && pkWeapon->GetType() == ITEM_WEAPON)
        {
            int iWep = number(pkWeapon->GetValue(3), pkWeapon->GetValue(4));
            iWep += pkWeapon->GetValue(5);

            int iMtk = number(pkWeapon->GetValue(1), pkWeapon->GetValue(2));
            iMtk += pkWeapon->GetValue(5);

            pkSk->SetPointVar("wep", iWep);
            pkSk->SetPointVar("mtk", iMtk);
            pkSk->SetPointVar("mwep", iMtk);
        }
        else
        {
            pkSk->SetPointVar("wep", 0);
            pkSk->SetPointVar("mtk", 0);
            pkSk->SetPointVar("mwep", 0);
        }
    }
    else
    {
        int iWep = number(ch->GetMobDamageMin(), ch->GetMobDamageMax());
        pkSk->SetPointVar("wep", iWep);
        pkSk->SetPointVar("mwep", iWep);
        pkSk->SetPointVar("mtk", iWep);
    }
}

"number" e' semplicemente un numero random nell'intervallo rappresentato dai due valori fra parentesi.

"ar" e' un moltiplicatore che aumenta tanto piu' alto sono il livello e la destrezza del player, e viene rapportato al medesimo valore del bersaglio, che in quel caso viene definito "er".
C++:
float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreTargetRating)
{
    int iARSrc;
    int iERSrc;

    if (LC_IsYMIR()) // õ¸¶
    {
        iARSrc = MIN(gPlayerMaxLevelStats, pkAttacker->GetPolymorphPoint(POINT_DX));
        iERSrc = MIN(gPlayerMaxLevelStats, pkVictim->GetPolymorphPoint(POINT_DX));
    }
    else
    {
        int attacker_dx = pkAttacker->GetPolymorphPoint(POINT_DX);
        int attacker_lv = pkAttacker->GetLevel();

        int victim_dx = pkVictim->GetPolymorphPoint(POINT_DX);
        int victim_lv = pkAttacker->GetLevel();

        iARSrc = MIN(gPlayerMaxLevelStats, (attacker_dx * 4 + attacker_lv * 2) / 6);
        iERSrc = MIN(gPlayerMaxLevelStats, (victim_dx * 4 + victim_lv * 2) / 6);
    }

    float fAR = ((float)iARSrc + 210.0f) / 300.0f; // fAR = 0.7 ~ 1.0

    if (bIgnoreTargetRating)
        return fAR;

    // ((Edx * 2 + 20) / (Edx + 110)) * 0.3
    float fER = ((float)(iERSrc * 2 + 5) / (iERSrc + 95)) * 3.0f / 10.0f;

    return fAR - fER;
}

"chain" e' un tipo di scaling usato solo dalla skill "Artiglio di Lampo", e ritorna un valore sempre piu' basso per ogni volta che la skill si ripete, e' essenzialmente cio' che diminuisce il danno di Artiglio di Lampo tanti piu' sono i bersagli coinvolti dalla skill.

C++:
    // for SKILL_CHAIN lighting
public:
    int GetChainLightningIndex() const { return m_iChainLightingIndex; }
    void IncChainLightningIndex() { ++m_iChainLightingIndex; }
    void AddChainLightningExcept(LPCHARACTER ch) { m_setExceptChainLighting.insert(ch); }
    void ResetChainLightningIndex() { m_iChainLightingIndex = 0; m_setExceptChainLighting.clear(); }
    int GetChainLightningMaxCount() const;
    const CHARACTER_SET& GetChainLightingExcept() const { return m_setExceptChainLighting; }

C++:
        m_pkSk->SetPointVar("chain", m_pkChr->GetChainLightningIndex());
        m_pkChr->IncChainLightningIndex();

C++:
    if (dwVnum == SKILL_CHAIN)
    {
        ResetChainLightningIndex();
        AddChainLightningExcept(pkVictim);
    }

C++:
    if (pkTarget)
    {
        pkChrVictim->CreateFly(FLY_CHAIN_LIGHTNING, pkTarget);
        pkChr->ComputeSkill(SKILL_CHAIN, pkTarget);
        pkChr->AddChainLightningExcept(pkTarget);
    }
    else
    {
        sys_log(1, "%s use chainlighting, but find victim failed near %s", pkChr->GetName(), pkChrVictim->GetName());
    }
 
  • Mi piace
Reazioni: MbutuDugongo
Ciao.

"mwep" e' uno scaling che include:
  1. un valore randomico scelto dall'intervallo fra attacco magico minimo (value1) e attacco magico massimo (value2)
  2. incremento globale (value5)
dell'arma indossata.

C++:
void SetPolyVarForAttack(LPCHARACTER ch, CSkillProto* pkSk, LPITEM pkWeapon)
{
    if (ch->IsPC())
    {
        if (pkWeapon && pkWeapon->GetType() == ITEM_WEAPON)
        {
            int iWep = number(pkWeapon->GetValue(3), pkWeapon->GetValue(4));
            iWep += pkWeapon->GetValue(5);

            int iMtk = number(pkWeapon->GetValue(1), pkWeapon->GetValue(2));
            iMtk += pkWeapon->GetValue(5);

            pkSk->SetPointVar("wep", iWep);
            pkSk->SetPointVar("mtk", iMtk);
            pkSk->SetPointVar("mwep", iMtk);
        }
        else
        {
            pkSk->SetPointVar("wep", 0);
            pkSk->SetPointVar("mtk", 0);
            pkSk->SetPointVar("mwep", 0);
        }
    }
    else
    {
        int iWep = number(ch->GetMobDamageMin(), ch->GetMobDamageMax());
        pkSk->SetPointVar("wep", iWep);
        pkSk->SetPointVar("mwep", iWep);
        pkSk->SetPointVar("mtk", iWep);
    }
}

"number" e' semplicemente un numero random nell'intervallo rappresentato dai due valori fra parentesi.

"ar" e' un moltiplicatore che aumenta tanto piu' alto sono il livello e la destrezza del player, e viene rapportato al medesimo valore del bersaglio, che in quel caso viene definito "er".
C++:
float CalcAttackRating(LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreTargetRating)
{
    int iARSrc;
    int iERSrc;

    if (LC_IsYMIR()) // õ¸¶
    {
        iARSrc = MIN(gPlayerMaxLevelStats, pkAttacker->GetPolymorphPoint(POINT_DX));
        iERSrc = MIN(gPlayerMaxLevelStats, pkVictim->GetPolymorphPoint(POINT_DX));
    }
    else
    {
        int attacker_dx = pkAttacker->GetPolymorphPoint(POINT_DX);
        int attacker_lv = pkAttacker->GetLevel();

        int victim_dx = pkVictim->GetPolymorphPoint(POINT_DX);
        int victim_lv = pkAttacker->GetLevel();

        iARSrc = MIN(gPlayerMaxLevelStats, (attacker_dx * 4 + attacker_lv * 2) / 6);
        iERSrc = MIN(gPlayerMaxLevelStats, (victim_dx * 4 + victim_lv * 2) / 6);
    }

    float fAR = ((float)iARSrc + 210.0f) / 300.0f; // fAR = 0.7 ~ 1.0

    if (bIgnoreTargetRating)
        return fAR;

    // ((Edx * 2 + 20) / (Edx + 110)) * 0.3
    float fER = ((float)(iERSrc * 2 + 5) / (iERSrc + 95)) * 3.0f / 10.0f;

    return fAR - fER;
}

"chain" e' un tipo di scaling usato solo dalla skill "Artiglio di Lampo", e ritorna un valore sempre piu' basso per ogni volta che la skill si ripete, e' essenzialmente cio' che diminuisce il danno di Artiglio di Lampo tanti piu' sono i bersagli coinvolti dalla skill.

C++:
    // for SKILL_CHAIN lighting
public:
    int GetChainLightningIndex() const { return m_iChainLightingIndex; }
    void IncChainLightningIndex() { ++m_iChainLightingIndex; }
    void AddChainLightningExcept(LPCHARACTER ch) { m_setExceptChainLighting.insert(ch); }
    void ResetChainLightningIndex() { m_iChainLightingIndex = 0; m_setExceptChainLighting.clear(); }
    int GetChainLightningMaxCount() const;
    const CHARACTER_SET& GetChainLightingExcept() const { return m_setExceptChainLighting; }

C++:
        m_pkSk->SetPointVar("chain", m_pkChr->GetChainLightningIndex());
        m_pkChr->IncChainLightningIndex();

C++:
    if (dwVnum == SKILL_CHAIN)
    {
        ResetChainLightningIndex();
        AddChainLightningExcept(pkVictim);
    }

C++:
    if (pkTarget)
    {
        pkChrVictim->CreateFly(FLY_CHAIN_LIGHTNING, pkTarget);
        pkChr->ComputeSkill(SKILL_CHAIN, pkTarget);
        pkChr->AddChainLightningExcept(pkTarget);
    }
    else
    {
        sys_log(1, "%s use chainlighting, but find victim failed near %s", pkChr->GetName(), pkChrVictim->GetName());
    }

Grazie mille ancora una volta! Volevo chiederti un'ultima cosa, ho notato che ci sono anche altre parole, ossia "con" e "atk", per cosa starebbero? Atk per attacco, ma su quale si basa? Scusa per tutte le domande ^^''
 
Grazie mille ancora una volta! Volevo chiederti un'ultima cosa, ho notato che ci sono anche altre parole, ossia "con" e "atk", per cosa starebbero? Atk per attacco, ma su quale si basa? Scusa per tutte le domande ^^''
con sta per vit, Atk (o minAtk e maxAtk) sta per:
C++:
m_playerStatus.SetPoint(POINT_MAX_ATK, __GetTotalAtk(m_dwWeaponMaxPower, m_dwWeaponAddPower));
ovvero:
C++:
DWORD CPythonPlayer::__GetTotalAtk(DWORD dwWeaponPower, DWORD dwRefineBonus)
{
    DWORD dwLvAtk=__GetLevelAtk();
    DWORD dwStAtk=__GetStatAtk();

    /////

    DWORD dwWepAtk;
    DWORD dwTotalAtk;

    int hr = __GetHitRate();
    dwWepAtk = __GetWeaponAtk(dwWeaponPower+dwRefineBonus);
    dwTotalAtk = dwLvAtk+(dwStAtk+dwWepAtk)*hr/100;

    return dwTotalAtk;
}
Attacco in base al livello + ((Attacco in base a STR + Attacco dell'arma)*hitrate)/100
e l'hitrate è calcolato in questo modo:
C++:
DWORD CPythonPlayer::__GetHitRate()
{
    int src = 0;
    src = (GetStatus(POINT_DX) * 4 + GetStatus(POINT_LEVEL) * 2)/6;
    return 100*(min(90, src)+210)/300;
}
 
  • Mi piace
Reazioni: MbutuDugongo
Stato
Discussione chiusa ad ulteriori risposte.