- Katılım
- 6 Kas 2021
- Mesajlar
- 2,434
- Tepkime puanı
- 3,676
- Puanları
- 113
- Yaş
- 30
- Konum
- Türkiye
- Dc
- fatihbulut
Konu Alıntıdır
Bu zaman kadar çok başlangıç level paylaşıldı hepsinde hp bugu var.
hp bugu nasıl yapılıyor?
Örneğin oyuna 90 level başladın 4300 hp ile başlıyorsun
Statü sıfırlama yapınca hp 5500 oluyor.
Bu paylaşımda öyle sorun yok.
Şu an paylaşacağım sistem sourcede zaten ekli
Başlangıç level ve parayı input_login.cpp den ayarlanıyor
configlere
china_event_server: 1
Ekle
input_login.cpp
Ilgili yere ekle
Bu zaman kadar çok başlangıç level paylaşıldı hepsinde hp bugu var.
hp bugu nasıl yapılıyor?
Örneğin oyuna 90 level başladın 4300 hp ile başlıyorsun
Statü sıfırlama yapınca hp 5500 oluyor.
Bu paylaşımda öyle sorun yok.
Şu an paylaşacağım sistem sourcede zaten ekli
Başlangıç level ve parayı input_login.cpp den ayarlanıyor
configlere
china_event_server: 1
Ekle
input_login.cpp
Ilgili yere ekle
Kod:
if (china_event_server)
{
table->level = 35;
for (int i = 1; i < 35; ++i)
{
int iHP = number(JobInitialPoints[job].hp_per_lv_begin, JobInitialPoints[job].hp_per_lv_end);
int iSP = number(JobInitialPoints[job].sp_per_lv_begin, JobInitialPoints[job].sp_per_lv_end);
table->sRandomHP += iHP;
table->sRandomSP += iSP;
table->stat_point += 3;
}
table->hp += table->sRandomHP;
table->sp += table->sRandomSP;
table->gold = 1000000;
}
Kod:
bool NewPlayerTable2(TPlayerTable * table, const char * name, BYTE race, BYTE shape, BYTE bEmpire)
{
if (race >= MAIN_RACE_MAX_NUM)
{
sys_err("NewPlayerTable2.OUT_OF_RACE_RANGE(%d >= max(%d))\n", race, MAIN_RACE_MAX_NUM);
return false;
}
unsigned job;
if (!RaceToJob(race, &job))
{
sys_err("NewPlayerTable2.RACE_TO_JOB_ERROR(%d)\n", race);
return false;
}
sys_log(0, "NewPlayerTable2(name=%s, race=%d, job=%d)", name, race, job);
memset(table, 0, sizeof(TPlayerTable));
strlcpy(table->name, name, sizeof(table->name));
table->level = 1;
table->job = race;
table->voice = 0;
table->part_base = shape;
table->st = JobInitialPoints[job].st;
table->dx = JobInitialPoints[job].dx;
table->ht = JobInitialPoints[job].ht;
table->iq = JobInitialPoints[job].iq;
table->hp = JobInitialPoints[job].max_hp + table->ht * JobInitialPoints[job].hp_per_ht;
table->sp = JobInitialPoints[job].max_sp + table->iq * JobInitialPoints[job].sp_per_iq;
table->stamina = JobInitialPoints[job].max_stamina;
#if defined(ENABLE_WOLFMAN_CHARACTER) && defined(USE_LYCAN_CREATE_POSITION)
table->x = LYCAN_CREATE_START_X(bEmpire, job) + number(-300, 300);
table->y = LYCAN_CREATE_START_Y(bEmpire, job) + number(-300, 300);
#else
table->x = CREATE_START_X(bEmpire) + number(-300, 300);
table->y = CREATE_START_Y(bEmpire) + number(-300, 300);
#endif
table->z = 0;
table->dir = 0;
table->playtime = 0;
table->gold = 0;
table->skill_group = 0;
if (china_event_server)
{
table->level = 35;
for (int i = 1; i < 35; ++i)
{
int iHP = number(JobInitialPoints[job].hp_per_lv_begin, JobInitialPoints[job].hp_per_lv_end);
int iSP = number(JobInitialPoints[job].sp_per_lv_begin, JobInitialPoints[job].sp_per_lv_end);
table->sRandomHP += iHP;
table->sRandomSP += iSP;
table->stat_point += 3;
}
burası zaten ekli başlangıç level itemleri burdan düzenleniyor.
input_db.cpp
[CODE] if (china_event_server)
{
t.window = INVENTORY;
t.count = 1;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
struct SInitialItem
{
DWORD dwVnum;
BYTE pos;
};
const int MAX_INITIAL_ITEM = 9;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
{ {11243, 2}, {12223, 3}, {15103, 4}, { 93, 1}, {16143, 8}, {17103, 9}, { 3083, 0}, {13193, 11}, {14103, 12}, },
{ {11443, 0}, {12363, 3}, {15103, 4}, { 1053, 2}, { 2083, 1}, {16083, 7}, {17083, 8}, {13193, 9}, {14103, 10}, },
{ {11643, 0}, {12503, 2}, {15103, 3}, { 93, 1}, {16123, 4}, {17143, 7}, {13193, 8}, {14103, 9}, { 0, 0}, },
{ {11843, 0}, {12643, 1}, {15103, 2}, { 7083, 3}, { 5053, 4}, {16123, 6}, {17143, 7}, {13193, 8}, {14103, 9}, },
#ifdef ENABLE_WOLFMAN_CHARACTER
{ {21023, 2}, {12223, 3}, {21513, 4}, { 6023, 1}, {16143, 8}, {17103, 9}, { 0, 0}, {13193, 11}, {14103, 12}, },
#endif
};
int job = pPacketDB->player.byJob;
for (int i=0; i < MAX_INITIAL_ITEM; i++)
{
if (initialItems[job][i].dwVnum == 0)
continue;
t.id = ITEM_MANAGER::instance().GetNewID();
t.pos = initialItems[job][i].pos;
t.vnum = initialItems[job][i].dwVnum;
db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(TPlayerItem));
db_clientdesc->Packet(&t, sizeof(TPlayerItem));
}
}
table->hp += table->sRandomHP;
table->sp += table->sRandomSP;
table->gold = 1000000;
}
return true;
}