Помощь - Поиск - Участники - Календарь
Полная Версия: Вопрос про снижение цены теха
Real4X Forum > Real4X > Q & A
eStalker
Насколько снижается цена теха при продвижении по дереву развития?
Например есть тех
0 3 0 5 0 0
цена 100ресов

как она измениться взависимости от развития энергии, или биологии,
или оружия, или оружия(+1) и конструкции(+2)

ну все варианты перечислять бессмысленно - основное правило какое?
Korsar
если не ошибаюсь, цена теха = исходной цене + константа * число изученных техов
Musoid
ИМХО не так просто.

С уважением.
Alex
Ну примерно так:
CODE
 for(BYTE c=0;c<eTechnology::m_Counter;c++){
   for(BYTE i=0;i<m_Category[c].m_Counter;i++){
     TBaseTechnology* pSItem = TTechnology::This->Technology(c,i);
     TBaseTechnology* pPItem = Technology(c,i); if(NOT pPItem) continue;
     if(pPItem==NULL OR (pPItem->m_Flags&TBaseTechnology::FLG_MaxCheapen)) continue;
     // Расчет уменьшения цены постройки технологии
     long SDelta = LONG_MAX;
     for(BYTE f=0;f<eFieldOfStudy::m_Counter;f++){
       // Поиск наименьшего превышения уровня технологий по всем полям
       short LDelta = (short)(dLevels[f] - pPItem->m_ResearchLevel[f]);
       if(LDelta==0 AND pPItem->m_ResearchLevel[f]>0)
         break;
       else if(LDelta<SDelta)
         SDelta = LDelta;
     }
     if(f!=eFieldOfStudy::m_Counter) continue;
     SDelta*=4; // 4% за каждое превышение
     if(SDelta>76){
       pPItem->m_Flags|=TBaseTechnology::FLG_MaxCheapen;
       SDelta = 76;
     }
     // Уменьшение цены
     for(BYTE m=0;m<eConstructionCost::m_Counter;m++){
       long newCost = pSItem->m_Cost[m] - SDelta * pSItem->m_Cost[m] / 100;
       pPItem->m_Cost[m] = (short)iif(newCost<1 AND pSItem->m_Cost[m]>0,1,newCost);
     }
   }
 }
Korsar
нерпавильно понял вопрос - показалось, что речь шла об удорожании изучения самого теха
eStalker
Спасибо Alex, красивый ответ.. только плохо понятный 8-) это вообще что за язык?? 8-))
Musoid
Насколько я вижу, это Си.

С уважением.
AlexSmall
Это вообще-то С++. Но насколько я понял, речь то все таки шла не об уменшении цени постройки конкретного теха, а об увеличении цены других техов при изучении например какого-то одного(или нескольких соседних).
Так что вопрос пока не отвечен...
eStalker
вопрос был мой! и как раз про снижение цены теха, а не увеличения его исследования,
Alex вполне ответил на него, только C++ какой то кривой...
P.S. Кол-во МИНЕРАЛОВ уменьшается в той-же пропорции?
Alex
Ты поокуратней про C++, это ХМ писал.
А это по второму вопросу:
CODE
struct eConstructionCost{
 enum{
   Ironium,
   Uranium,
   Liberium,
   Resource,
   m_Counter
 };


Ну если ты все понял, может всем остальным по-русски напишешь, а то лениво. Потомки оценят. wink.gif
Stratus
QUOTE(Korsar @ Mar 25 2005, 04:27 AM)
если не ошибаюсь, цена теха = исходной цене + константа * число изученных техов

мну думать что после lvl 10 формула уже другая wink.gif
...и скорее всего там число изученных техов превращается в число изученных техов для данной области wink.gif
Alex
Ну уж тогда я и по второму вопросу выложу все карты, авось ХМ не обидется:

CODE
   double LevelCost(BYTE field)const{
     const bFieldOfStudy &fs = m_FS[field];
     return floor((StandardCost(fs.m_Level)+fs.m_Level*fs.m_AdditiveCost)*fs.m_RaceCoeff);
   }

CODE
void TResearch::RecalculateACost(){
 for(BYTE f=0;f<eFieldOfStudy::m_Counter;f++){
   long ACost = 0;
   for(BYTE s=0;s<eFieldOfStudy::m_Counter;s++){
     if(s==f) continue;
     ACost+=(m_FS[s].m_Level-1)*10;
   }
   m_FS[f].m_AdditiveCost = ACost;
 }
}


"Истина где-то рядом"
D_R_K
кстати.. а можно переделать техэдитор, чтобы он под новый клиент работал?
Alex
можно, хотя там вся трабла в картинках - оставь старые bmp и все будет работать
Valerich
QUOTE(Alex @ Mar 25 2005, 13:17) *



Ну если ты все понял, может всем остальным по-русски напишешь, а то лениво. Потомки оценят. wink.gif


Поддерживаю! smile.gif Тоже интересно будет почитать в переводе, а то в подлиннике что-то смысел не улавливаю. unsure.gif
Weonard
Ща ХМ увидит такое количество кусков сурца сервера и хватится за голову(или за топор... =) ).
lonewolf
QUOTE(Alex @ Mar 25 2005, 13:17) *
может всем остальным по-русски напишешь, а то лениво. Потомки оценят. wink.gif


для этого желательно хоть примерно знать что такое m_Counter, чем eTechnology отличается от TTechnology и TBaseTechnology, что делает TTechnology::This->Technology(c,i); когда верно условие (NOT pPItem)... иначе "хливкие шорьки пырялись по наве, и хрюкотали зелюки как мюмзики в мове"
Это "lo-fi" версия форума. Для просмотра полной версии для получения большей информации, форматирования и просмотра изображений, пожалуйста нажмите сюда.
Русская версия Invision Power Board © 2001-2018 Invision Power Services, Inc.