Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 30 окт 2017, 19:14

May be
Код: Выделить всё
getWorstSecSkill
should be called twice - first time to calculate value of map object for this hero and second time to remove some secondary skill when hero already enter to object.

Tomorrow I will propose some variant of this procedure.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 31 окт 2017, 14:07

Something like this :smile1:
(I'm aware that AI have no need in Scouting, still...)

Код: Выделить всё
int getWorstSecSkill (*_Hero_ ourHero)
{

    if((int)ourHero->second_skill[HSS_NAVIGATION] > 0 && ! isWaterMap())
        return HSS_NAVIGATION;
       
    if((int)ourHero->second_skill[HSS_NECROMANCY] > 0 && ! isNecromancyNeeded())
    {
        removeSkeletsFromArmy();
        return HSS_NECROMANCY;
    }
   
    if(ourHero->level >= 10 && ourHero->level < 20)
    {
        if((int)ourHero->second_skill[HSS_FIRST_AID] == 1 && ! haveHeroTent)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] == 1 && ! haveHeroBallista)
            return HSS_ARTILLERY;
       
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] == 1)
            return HSS_EAGLE_EYE;
       
        if((int)ourHero->second_skill[HSS_SCOUTING] == 1)
            return HSS_SCOUTING;
       
        if((int)ourHero->second_skill[HSS_PATHFINDING] == 1)
            return HSS_PATHFINDING;

        if((int)ourHero->second_skill[HSS_MYSTICISM] == 1)
            return HSS_MYSTICISM;
    }
   
    if(ourHero->level >= 20 && ourHero->level < 30)
    {
        if((int)ourHero->second_skill[HSS_FIRST_AID] > 0)
        if((int)ourHero->second_skill[HSS_FIRST_AID] < 3 && ! haveHeroTent)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] > 0)
        if((int)ourHero->second_skill[HSS_ARTILLERY] < 3 && ! haveHeroBallista)
            return HSS_ARTILLERY;
       
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] > 0)
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] < 3)
            return HSS_EAGLE_EYE;
       
        if((int)ourHero->second_skill[HSS_SCOUTING]] > 0)
        if((int)ourHero->second_skill[HSS_SCOUTING] < 3)
            return HSS_SCOUTING;
       
        if((int)ourHero->second_skill[HSS_PATHFINDING] > 0)
        if((int)ourHero->second_skill[HSS_PATHFINDING] < 3)
            return HSS_PATHFINDING;

        if((int)ourHero->second_skill[HSS_MYSTICISM] > 0)
        if((int)ourHero->second_skill[HSS_MYSTICISM] < 3)
            return HSS_MYSTICISM;
    }
   
    if(ourHero->level >= 30)
    {
        if((int)ourHero->second_skill[HSS_FIRST_AID] >0)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] >0)
            return HSS_ARTILLERY;
       
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] >0)
            return HSS_EAGLE_EYE;
       
        if((int)ourHero->second_skill[HSS_SCOUTING] >0)
            return HSS_SCOUTING;
       
        if((int)ourHero->second_skill[HSS_PATHFINDING] >0
            return HSS_PATHFINDING;

        if((int)ourHero->second_skill[HSS_MYSTICISM] >0)
            return HSS_MYSTICISM;
    }
   
   
    if((int)ourHero->second_skill[HSS_FIRST_AID] > 0)
    {
        if(armyAISum() / second_skill[HSS_FIRST_AID] > 20000)
            return HSS_FIRST_AID;
    }
       
    if((int)ourHero->second_skill[HSS_ARTILLERY] > 0)
    {
        int attack = ourHero->attack;
        if(attack == 0)
            attack = 1;
        if(armyAISum() / (second_skill[HSS_ARTILLERY] * attack) > 2000)
            return HSS_ARTILLERY;
    }
       
    return 29;
}

Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 31 окт 2017, 14:16

Value of this object on Map could be quite small, for example:

Код: Выделить всё
int multiplier = 1;
if(hero->level >= 10 && hero->level < 20)
    multiplier = 2;
if(hero->level >= 20 && hero->level < 30)
    multiplier = 3;
ValueOfMarketTime = ValueOfMarlettoTown * multiplier;


If getWorstSecSkill have returned 29, then value of Market of Time for this Hero will be 0.
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: Как создать плагин для HD мода

Сообщение RoseKavalier » 01 ноя 2017, 02:01

Looks like a good start, testing will probably be required to fine tune in any case :smile20:

Value of object should also take into account #sskills I think.

Код: Выделить всё
if (hero->second_skill_count < 6) // or any other #sskills
    return 0;
int multiplier = 1;
if(hero->level >= 10 && hero->level < 20)
    multiplier = 2;
if(hero->level >= 20 && hero->level < 30)
    multiplier = 3;
ValueOfMarketTime = ValueOfMarlettoTown * multiplier;


I'm a bit busy for a few more days but after that I will start working on dialog/GUI for human; I think we should make a DEF or PCX/BMP for background.
For the text we can add .ini files like SoD_SP that lets you choose translation. It's really not difficult, I use a public ini parser and modified it a bit. It does the job very well.

I'm thinking I should start learning a bit of Russian to communicate better, 90% of H3 modders seem to be Russian)
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 01 ноя 2017, 16:13

Still Artillery and First Aid are not so bad skills and should be removed with great cautions. And Necromancy too...
I think it would be better (numerical parameters could be clarified):

Код: Выделить всё
int getWorstSecSkill (_Hero_ ourHero)
{
   int attack = ourHero->attack;
   
    if((int)ourHero->second_skill[HSS_NAVIGATION] > 0 && ! isWaterMap)
        return HSS_NAVIGATION;
       
    if((int)ourHero->second_skill[HSS_NECROMANCY] > 0 && ! isNecromancyNeeded())
    {
      if(skeletsAISum()/armyAISum() < 0.3)
         removeSkeletsFromArmy();
        return HSS_NECROMANCY;
    }
   
    if(ourHero->level >= 10 && ourHero->level < 20)
    {     
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] == 1)
            return HSS_EAGLE_EYE;
       
        if((int)ourHero->second_skill[HSS_SCOUTING] == 1)
            return HSS_SCOUTING;
      
      if((int)ourHero->second_skill[HSS_FIRST_AID] == 1 && ! ourHero->DoesHasArtifact(AID_FIRST_AID_TENT))
         if(armyAISum() / second_skill[HSS_FIRST_AID] > 15000)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] == 1 && ! ourHero->DoesHasArtifact(AID_BALLISTA))
         if(armyAISum() / pow(second_skill[HSS_ARTILLERY] * attack, 0.8) > 4000)
            return HSS_ARTILLERY;
       
        if((int)ourHero->second_skill[HSS_PATHFINDING] == 1)
            return HSS_PATHFINDING;

        if((int)ourHero->second_skill[HSS_MYSTICISM] == 1)
            return HSS_MYSTICISM;
         
      if((int)ourHero->second_skill[HSS_FIRST_AID] == 1)
         if(armyAISum() / second_skill[HSS_FIRST_AID] > 30000)
            return HSS_FIRST_AID;
       
      if((int)ourHero->second_skill[HSS_ARTILLERY] == 1)
         if(armyAISum() / pow(second_skill[HSS_ARTILLERY] * attack, 0.8) > 8000)
            return HSS_ARTILLERY;
   }
   
    if(ourHero->level >= 20 && ourHero->level < 30)
    {       
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] > 0)
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] < 3)
            return HSS_EAGLE_EYE;
       
        if((int)ourHero->second_skill[HSS_SCOUTING]] > 0)
        if((int)ourHero->second_skill[HSS_SCOUTING] < 3)
            return HSS_SCOUTING;
      
      if((int)ourHero->second_skill[HSS_FIRST_AID] > 0)
        if((int)ourHero->second_skill[HSS_FIRST_AID] < 3 && ! ourHero->DoesHasArtifact(AID_FIRST_AID_TENT))
         if(armyAISum() / second_skill[HSS_FIRST_AID] > 12500)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] > 0)
        if((int)ourHero->second_skill[HSS_ARTILLERY] < 3 && ! ourHero->DoesHasArtifact(AID_BALLISTA))
         if(armyAISum() / pow(second_skill[HSS_ARTILLERY] * attack, 0.8) > 3000)
            return HSS_ARTILLERY;
         
        if((int)ourHero->second_skill[HSS_PATHFINDING] > 0)
        if((int)ourHero->second_skill[HSS_PATHFINDING] < 3)
            return HSS_PATHFINDING;

        if((int)ourHero->second_skill[HSS_MYSTICISM] > 0)
        if((int)ourHero->second_skill[HSS_MYSTICISM] < 3)
            return HSS_MYSTICISM;
      
      if((int)ourHero->second_skill[HSS_FIRST_AID] > 0)
       if((int)ourHero->second_skill[HSS_FIRST_AID] < 3)
         if(armyAISum() / second_skill[HSS_FIRST_AID] > 25000)
            return HSS_FIRST_AID;

      if((int)ourHero->second_skill[HSS_ARTILLERY] > 0)
      if((int)ourHero->second_skill[HSS_ARTILLERY] < 3)
         if(armyAISum() / pow(second_skill[HSS_ARTILLERY] * attack, 0.8) > 6000)
   }
   
    if(ourHero->level >= 30)
    {       
        if((int)ourHero->second_skill[HSS_EAGLE_EYE] >0)
            return HSS_EAGLE_EYE;
       
        if((int)ourHero->second_skill[HSS_SCOUTING] >0)
            return HSS_SCOUTING;
      
        if((int)ourHero->second_skill[HSS_FIRST_AID] > 0 && ! ourHero->DoesHasArtifact(AID_FIRST_AID_TENT))
         if(armyAISum() / second_skill[HSS_FIRST_AID] > 10000)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] > 0 && ! ourHero->DoesHasArtifact(AID_BALLISTA))
         if(armyAISum() / pow(second_skill[HSS_ARTILLERY] * attack, 0.8) > 2000)
            return HSS_ARTILLERY;
      
      if((int)ourHero->second_skill[HSS_PATHFINDING] >0
            return HSS_PATHFINDING;

        if((int)ourHero->second_skill[HSS_MYSTICISM] >0)
            return HSS_MYSTICISM;
      
        if((int)ourHero->second_skill[HSS_FIRST_AID] >0)
         if(armyAISum() / second_skill[HSS_FIRST_AID] > 20000)
            return HSS_FIRST_AID;
       
        if((int)ourHero->second_skill[HSS_ARTILLERY] >0)
         if(armyAISum() / pow(second_skill[HSS_ARTILLERY] * attack, 0.8) > 4000)
            return HSS_ARTILLERY;
    }
         
    return 29;
}



Procedure isNecromancyNeeded:
Код: Выделить всё
bool isNecromancyNeeded(_Hero_ ourHero)
{
        int numberOfAllTowns = o_GameMgr->GetPlayer(hero->owner_id)->towns_count;
       
   if(CALL_2(double, __thiscall, 0x4E3F40, &ourHero, 0) < 0.25 && numberOfNecroTowns()/numberOfAllTowns < 0.3
            && undeadsAISum() < 10000)
             return false;
   return true;
}
Последний раз редактировалось Ben80 05 ноя 2017, 15:46, всего редактировалось 8 раз(а).
Вернуться к началу

offlineНмеса  
 
Сообщения: 9
Зарегистрирован: 02 ноя 2017, 16:04
Пол: Не указан
Поблагодарили: 2 раз.

Re: Как создать плагин для HD мода

Сообщение Нмеса » 02 ноя 2017, 16:09

Ben80, неожиданно наткнулся на твои плагины на df2 форуме для навыков Eagle Eye и Learning и просто прослезился от этого. Хотел бы вот только попросить, если не сложно - перевести фразу "Благодаря навыку Орлиный Глаз, charname выучил следующее заклинание" на английский язык для людей с данной версией.
Я пытался сделать это сам, обмазывался Visual Studio и C++, но так и не понял как редактируется код, ибо полный ноль.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 02 ноя 2017, 16:11

Нмеса писал(а):

Ben80, неожиданно наткнулся на твои плагины на df2 форуме для навыков Eagle Eye и Learning и просто прослезился от этого. Хотел бы вот только попросить, если не сложно - перевести фразу "Благодаря навыку Орлиный Глаз, charname выучил следующее заклинание" на английский язык для людей с данной версией.
Я пытался сделать это сам, обмазывался Visual Studio и C++, но так и не понял как редактируется код, ибо полный ноль.


Хорошо, выложу английскую версию.

Вот. Работает ?
NewEagleEye_Eng.zip
(4.33 КБ) Скачиваний: 171
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Как создать плагин для HD мода

Сообщение Ben80 » 02 ноя 2017, 16:22

When complete set of plugins will be finished they all will be translated for English, including all text messages and game descriptions.
Вернуться к началу

offlineНмеса  
 
Сообщения: 9
Зарегистрирован: 02 ноя 2017, 16:04
Пол: Не указан
Поблагодарили: 2 раз.

Re: Как создать плагин для HD мода

Сообщение Нмеса » 02 ноя 2017, 16:25

Ben80 писал(а):

Нмеса писал(а):

Ben80, неожиданно наткнулся на твои плагины на df2 форуме для навыков Eagle Eye и Learning и просто прослезился от этого. Хотел бы вот только попросить, если не сложно - перевести фразу "Благодаря навыку Орлиный Глаз, charname выучил следующее заклинание" на английский язык для людей с данной версией.
Я пытался сделать это сам, обмазывался Visual Studio и C++, но так и не понял как редактируется код, ибо полный ноль.


Хорошо, выложу английскую версию.

Вот. Работает ?
NewEagleEye_Eng.zip


Да, спасибо за оперативность.
http://www.picshare.ru/view/8339474/
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: Как создать плагин для HD мода

Сообщение RoseKavalier » 04 ноя 2017, 15:15

Under way! I based the look on University.
Изображение

Maybe skills should cost more to forget as they become more advanced, maybe something like:
Basic 2,000
Advanced 3,500
Expert 5,000

Also added this to _Hero_. I'll put up the whole code a bit later when I'm done making adjustments.
Код: Выделить всё
int ShownSSkillPosition(int position) {
   for (int i = 0; i < 28; i++) {
      if (this->second_skill_show[i] == position)
         return i;
   }
   return 0;
}
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5