Szorzók autómatikus beállítása

Indította RealKorf, 2018-04-30, 11:26:46

Sziasztok!

Szeretném megoldani, hogy a szerveren a szorzókat resi után automatikusan beállítsa, illetve, hogy ha lejárna a szorzó akkor is újra rakja.

Erre valakinek van esetleg megoldása?

2018-04-30, 15:03:55 #1 Utolsó szerkesztés: 2018-04-30, 15:13:15 Szerző: Distraught
szerintem a CPrivManager konstruktorát írd át erre (priv_manager.cpp):

for(int i=0;i<MAX_PRIV_NUM;++i)
{
for(int j=0;j<EMPIRE_MAX_NUM;++j)
{
m_aakPrivEmpireData[i][j].m_value = SZÓRZÓÉRTÉKE;
m_aakPrivEmpireData[i][j].m_end_time_sec = get_global_time()+60*60*24*7;
}
}

C++ programmer at Gameloft

Köszönöm szépen a válaszod. Azt le tudnád írni, hogy pontosan mit kell lecserélni, vagy mi után kell ezt tenni?

2018-04-30, 15:51:32 #3 Utolsó szerkesztés: 2018-04-30, 17:57:59 Szerző: Meli
Vagy itt egy egyszerűbb.
Keresd meg azt a részt ahol ellenőrzi a szorzók értékét és hívd meg ezt utána.

Hívd meg így:

empire_rate();


Funkció:

static bool empire_rate()
{
for (int type = 0; type <= 4; type++)
CPrivManager::instance().GiveEmpirePriv(0, type, 1000, 0, get_global_time() + 60 * 60 * 24 * 365 * 60);
}

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2018-04-30, 16:21:06 #4 Utolsó szerkesztés: 2018-04-30, 16:37:27 Szerző: RealKorf
Köszönöm a válaszokat!

Első működik!

Meli, a tiédet nem próbáltam, de biztosan az is jó lett volna!

-----------------------------------------------------------------------------
Vagyis azt hittem, hogy működik, de nem. Csak kiirja, hogy 500% de alap szorzo van. És ha rakok rá parancsal, utána sem lesz jó. Gondolom, rosszul tettem be Distraught  :(

Idézetet írta: RealKorf Dátum 2018-04-30, 16:21:06
Köszönöm a válaszokat!

Első működik!

Meli, a tiédet nem próbáltam, de biztosan az is jó lett volna!

-----------------------------------------------------------------------------
Vagyis azt hittem, hogy működik, de nem. Csak kiirja, hogy 500% de alap szorzo van. És ha rakok rá parancsal, utána sem lesz jó. Gondolom, rosszul tettem be Distraught  :(

Megírtam a kódot, csak tudnunk kellene, hogy hol hívjuk meg.
Per pill beletettem az input_loginba és most működik.
Csak eléggé csúnya megoldás ez így.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

A funkciót hova tegyem be?

Szerinted a későbbiekben lehet gond, hogy így van megoldva?

2018-04-30, 18:20:11 #7 Utolsó szerkesztés: 2018-04-30, 22:54:02 Szerző: [MOD]Ken
Meli függvényéből tedd bele inkább akkor már a CPrivManager konstruktorába a memset után ezt a 2 sort:
for (int type=0;type<=4;++type)
GiveEmpirePriv(0, type, 1000, 0, get_global_time() + 60 * 60 * 24 * 365 * 60);

C++ programmer at Gameloft

2018-04-30, 18:28:23 #8 Utolsó szerkesztés: 2018-04-30, 18:31:18 Szerző: Meli
Idézetet írta: RealKorf Dátum 2018-04-30, 18:01:18
A funkciót hova tegyem be?

Szerinted a későbbiekben lehet gond, hogy így van megoldva?

Na itt van tessék:
config.cpp

keresd ezt:
void config_init(const string& st_localeServiceName)

fölé ezt:

void LoadPrivRate()
{
for (int type = 1; type <= 4; type++) //Típusok (Item, Yang, Yang bomba, Exp)
CPrivManager::instance().GiveEmpirePriv(0, type, 1000, 0, get_global_time() + 60 * 60 * 24 * 365 * 60);
}



Ugyan ebben a függvényben: (void config_init(const string& st_localeServiceName))

void config_init(const string& st_localeServiceName)
{
[...]
CWarMapManager::instance().LoadWarMapInfo(NULL);
FN_log_adminpage();
}


Ez fölé:

CWarMapManager::instance().LoadWarMapInfo(NULL);


Ezt add:

LoadPrivRate();


[spoiler]Ha segítettem jöhet a + ^^
[/spoiler]

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”


Idézetet írta: RealKorf Dátum 2018-04-30, 19:09:21
Nekem hibával fut le:



Bocs!

Ezt az incluedok közé tedd:

#include "priv_manager.h"

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2018-04-30, 22:28:45 #11 Utolsó szerkesztés: 2018-04-30, 22:53:19 Szerző: [MOD]Ken
vagy sokkal egyszerűbb, ha a priv_manager.h-ban a (vége fele találod)
struct SPrivEmpireData
{
int m_value;
time_t m_end_time_sec;
};


részt az alábbira módosítod:
struct SPrivEmpireData
{
int m_value = [color=red]SZORZÓ[/color];
time_t m_end_time_sec = get_global_time() + 60*60*24*365;
};


A fájl legelejére pedig
#include "utils.h"

Ezután a priv_manager.cpp-ben kitörlöd ami van a konstruktorban.
Nézzen ki így:
CPrivManager::CPrivManager()
{
}

C++ programmer at Gameloft


Ezt hagyjuk inkább. A CPrivManager::CPrivManager() -be (priv_manager.cpp) szerepeljen ennyi:
for(int i=0;i<MAX_PRIV_NUM;++i)
   for(int j=0;j<EMPIRE_MAX_NUM;++j)
      GiveEmpirePriv(j, i, SZORZÓ, 0, get_global_time() + 60*60*24*365);

C++ programmer at Gameloft

2018-04-30, 23:02:34 #14 Utolsó szerkesztés: 2018-04-30, 23:05:51 Szerző: Meli
Idézetet írta: Distraught Dátum 2018-04-30, 22:56:43
Ezt hagyjuk inkább. A CPrivManager::CPrivManager() -be (priv_manager.cpp) szerepeljen ennyi:
for(int i=0;i<MAX_PRIV_NUM;++i)
   for(int j=0;j<EMPIRE_MAX_NUM;++j)
      GiveEmpirePriv(j, i, SZORZÓ, 0, get_global_time() + 60*60*24*365);

Distraught, minek teszed ciklusba az empire-t?
A birodalomnak (j) 0 ás értéket kell adni, hogy minden birodalomban adja a bónuszt.

UI: Nem fog elindulni a game, csak a db.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

ebben semmi arra való utalást nem látok:

void CPrivManager::GiveEmpirePriv(BYTE empire, BYTE type, int value, BYTE bLog, time_t end_time_sec)
{
if (MAX_PRIV_NUM <= type)
{
sys_err("PRIV_MANAGER: GiveEmpirePriv: wrong empire priv type(%u)", type);
return;
}

sys_log(0, "Set Empire Priv: empire(%d) type(%d) value(%d) duration_sec(%d)", empire, type, value, end_time_sec-get_global_time());

value = MINMAX(0, value, 1000);
end_time_sec = MINMAX(0, end_time_sec, get_global_time()+60*60*24*7);

SPrivEmpireData& rkPrivEmpireData=m_aakPrivEmpireData[type][empire];
rkPrivEmpireData.m_value = value;
rkPrivEmpireData.m_end_time_sec = end_time_sec;

if (value)
{
char buf[100];
snprintf(buf, sizeof(buf), LC_TEXT("%s의 %s이 %d%% 증가했습니다!"), GetEmpireName(empire), GetPrivName(type), value);

if (empire)
SendNotice(buf);
else
SendLog(buf);
}
else
{
char buf[100];
snprintf(buf, sizeof(buf), LC_TEXT("%s의 %s이 정상으로 돌아왔습니다."), GetEmpireName(empire), GetPrivName(type));

if (empire)
SendNotice(buf);
else
SendLog(buf);
}

if (bLog)
{
LogManager::instance().CharLog(0, empire, type, value, "EMPIRE_PRIV", "", "");
}
}

C++ programmer at Gameloft

IdézEzt hagyjuk inkább. A CPrivManager::CPrivManager() -be (priv_manager.cpp) szerepeljen ennyi:
for(int i=0;i<MAX_PRIV_NUM;++i)
   for(int j=0;j<EMPIRE_MAX_NUM;++j)
      GiveEmpirePriv(j, i, SZORZÓ, 0, get_global_time() + 60*60*24*365);

Ezzel nekem Hiba a szerver kapcsolatban hibát ad  :(

Nem értem miért öli meg a gamet... Én is próbáltam már amúgy ezt a megoldást.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

És mi lenne, ha ezt megcsinálnám:
http://metin2hungary.net/index.php/topic,193909.msg1021860.html#msg1021860

Utána pedig időzített PHP scriptel adnám meg neki a szorzót  ;D

Idézetet írta: RealKorf Dátum 2018-04-30, 23:15:22
És mi lenne, ha ezt megcsinálnám:
http://metin2hungary.net/index.php/topic,193909.msg1021860.html#msg1021860

Utána pedig időzített PHP scriptel adnám meg neki a szorzót  ;D

A huzsihun-os témákat hanyagold sztm :D

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”