Я работаю над симулятором для FFXIV;
Я очень близко подхожу к завершению, а затем сталкиваюсь с проблемой доступа к объектам, которая не позволяет мне получить доступ к статистике основного игрока. Мой проект можно найти по адресу: https://github.com/eein/chocobro
Я знаю, что я могу оптимизировать множество вещей. :П
В основном я использую грубую силу, чтобы объекты получили доступ к объектам, которые им нужны, но я ищу правильный способ делать что-то.
Я собираюсь начать его переписывать, так что не цепляйтесь слишком сильно за пример кода, но он там, чтобы увидеть проблему, с которой я столкнулся. :(
В идеале в следующей попытке я хотел бы сделать вот что: начать с класса игрока, который содержит всю информацию об объекте игрока (в будущем я хотел бы создать мультипликаторы для полного группового моделирования).
Что-то вроде:
int main(){
Player p = new Player();
public void setJob()
{
if (job == "bard"){ Player p = new Bard(); }
if (job == "warrior"){ Player p = new Warrior(); }
}
public class Player
{
private string name {get;set;}
private string job {get;set;}
private string STR;
private string DEX;
private string VIT;
//etc..
public virtual void rotation()
{
}
}
//I want to make the program a bit modular for jobs (roles/classes)
//So..
public class Bard : Player
{
public override void rotation()
{
heavyshot.execute();
//etc.
}
Ability heavyshot = new Heavyshot();
public class Heavyshot : Ability
{
public Heavyshot()
{
name = "Heavy Shot";
potency = 150;
dotPotency = 0;
recastTime = 2.5;
TPcost = 60;
animationDelay = 0.8;
abilityType = "Weaponskill";
castTime = 0.0;
duration = 0.0;
}
public override void impact()
{
//add heavier shot buff activation here
base.impact();
}
}
}
public class Ability{
public int cooldown;
public int cost;
public virtual void impact()
{
public virtual void impact()
{
//Deal some damage.
// !! - the key problem is here, i want to initiate a roll to compare to the players CRIT rating versus the roll to determine the bonus damage. But I can't access the initiated players crit from here. The rating may change depending on abilities used so I can't create a new object. I know i need an object reference but I can't figure it out...
log(time.ToString("F2") + " - " + name +
" Deals " + potency +
" Potency Damage. Next ability at: " + nextability);
}
}
Я, вероятно, не слишком ясен, но в основном я хочу иметь доступ к критическому урону игрока от способности, и я предполагаю, что способность не может быть настроена таким образом, чтобы она работала. Есть ли у кого-нибудь хорошее представление о том, какой шаблон проектирования я должен использовать, чтобы виртуальные функции в способностях могли получить доступ к статистике игроков родительских классов?
В идеале я хочу, чтобы класс барда содержал все способности и обновления характеристик, относящиеся к работе барда, после того как бард унаследует игрока и объект будет изменен так, чтобы он ссылался на объект барда, как мне сделать так, чтобы способности, созданные классом способностей, не при доступе к этой функции требуется ссылка на родительский объект во время создания.
Я запуталась, но огромное спасибо тем, кто понимает мою тарабарщину и может помочь!