- Mesaj
- 354
- Çözümler
- 16
- Beğeni
- 154
- Puan
- 529
- Ticaret Puanı
- 0
Arkadaşlar merhaba Hızlı Bk okuma sistemini ekliyorum da game source cmd_general.cpp dosyamdaki kodda bir sıkıntı var çözmeye çalıştım ama çözemedim yardımcı olabilirmissiniz.
Gelen Seysr:
Eklediğim Kod Satırı::
#ifdef ENABLE_FAST_SKILLBOOK_READ_SYSTEM
LPEVENT bktimer = NULL;
EVENTINFO(TMainEventInfo2)
{
LPCHARACTER kim;
long skillindexx;
TMainEventInfo2()
: kim(NULL)
, skillindexx(0)
{
}
};
EVENTFUNC(bk_event)
{
TMainEventInfo2* info = dynamic_cast<TMainEventInfo2*>(event->info);
if (info == NULL)
{
sys_err("ruh_event> <Factor> NULL pointer");
return 0;
}
LPCHARACTER ch = info->kim;
long skillindex = info->skillindexx;
if (NULL == ch || skillindex == 0)
return 0;
if (!ch->GetDesc())
return 0;
if (!ch)
return 0;
if (ch)
{
if (ch->CountSpecifyItem(50300) < 1)
return 0;
int skilllevel = ch->GetSkillLevel(skillindex);
if (skilllevel >= 30)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Grand Master"));
return 0;
}
int dwVnum = ch->BKBul(skillindex);
if (dwVnum == 999)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BK_SYSTEM_NOT_SKILL"));
return 0;
}
LPITEM item = ch->GetInventoryItem(dwVnum);
if (!item)
return 0;
if (item->GetVnum() != 50300 || item->GetSocket(0) != skillindex)
return 0;
if (ch->CountSpecifyItem(71001) > 0)
{
if (!ch->IsAffectFlag(513))
{
ch->AddAffect(513, aApplyInfo[0].bPointType, 0, 0, 536870911, 0, false);
ch->RemoveSpecifyItem(71001, 1);
}
}
if (ch->CountSpecifyItem(71001) < 1)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BK_SYSTEM_NOT_KR_ITEM"));
return 0;
}
if (ch->CountSpecifyItem(71094) >= 1)
{
if (!ch->IsAffectFlag(512))
{
ch->AddAffect(512, aApplyInfo[0].bPointType, 0, 0, 536870911, 0, false);
ch->RemoveSpecifyItem(71094, 1);
}
}
if (item->GetVnum() == 50300)
{
if (true == ch->LearnSkillByBook(skillindex))
{
if (item->GetVnum() == 50300 && item->GetSocket(0) == skillindex)
{
item->SetCount(item->GetCount() - 1);
int iReadDelay;
iReadDelay = number(SKILLBOOK_DELAY_MIN, SKILLBOOK_DELAY_MAX);
ch->SetSkillNextReadTime(skillindex, get_global_time() + iReadDelay);
}
}
else
{
if (item->GetVnum() == 50300 && item->GetSocket(0) == skillindex)
{
item->SetCount(item->GetCount() - 1);
int iReadDelay;
iReadDelay = number(SKILLBOOK_DELAY_MIN, SKILLBOOK_DELAY_MAX);
ch->SetSkillNextReadTime(skillindex, get_global_time() + iReadDelay);
}
}
}
return 1;
}
return 0;
}
ACMD(do_bkoku)
{
char arg1[256], arg2[256];
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
if (!*arg1 || !*arg2)
return;
int gelen = 0;
long skillindex = 0;
str_to_number(gelen, arg1);
str_to_number(skillindex, arg2);
if (gelen < 0 || skillindex < 0)
return;
if (!ch)
return;
if (!ch->IsPC())
return;
if (ch->IsDead() || ch->IsStun())
return;
if (ch->IsHack())
return;
#ifdef ENABLE_OFFLINE_SHOP_SYSTEM
if (ch->GetExchange() || ch->GetViewingShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
#else
if (ch->GetExchange() || ch->GetMyShop() || ch->GetShopOwner() || ch->IsOpenSafebox() || ch->IsCubeOpen())
#endif
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#ifdef ENABLE_ACCE_SYSTEM
if (ch->isAcceOpened(true) || ch->isAcceOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#endif
#ifdef ENABLE_AURA_SYSTEM
if (ch->isAuraOpened(true) || ch->isAuraOpened(false))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#endif
#ifdef ENABLE_PLAYER_SECURITY_SYSTEM
if (ch->IsActivateSecurity())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("GUVENLIK_KILIDI_ACIKKEN_BUNU_YAPAMASSIN"));
return;
}
#endif
#ifdef ENABLE_CHANGELOOK_SYSTEM
if (ch->isChangeLookOpened() == true)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#endif
#ifdef ENABLE_ITEM_COMBINATION_SYSTEM
if (ch->IsCombOpen() == true)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PLEASE_BEFORE_CLOSE_WINDOW_AND_USE_THIS_FUNCTION"));
return;
}
#endif
int skillgrup = ch->GetSkillGroup();
if (skillgrup == 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BK_SYSTEM_SKILL_NOT_N"));
return;
}
if (ch->CountSpecifyItem(50300) < 1)
return;
if (ch->GetMapIndex() == 246)
return;
if (gelen == 1)
{
int skilllevel = ch->GetSkillLevel(skillindex);
if (skilllevel >= 30)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BK_SYSTEM_SKILL_MAXLEVEL"));
return;
}
if (ch->GetQuestFlag("bk.yenisure") > get_global_time())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BK_SYSTEM_TIME_OUT_ONE_SECOND"));
return;
}
int dwVnum = ch->BKBul(skillindex);
if (dwVnum == 999)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("BK_SYSTEM_NOT_SKILL"));
return;
}
LPITEM item = ch->GetInventoryItem(dwVnum);
if (!item)
return;
if (item->GetVnum() != 50300 || item->GetSocket(0) != skillindex)
return;
if (ch->CountSpecifyItem(71001) > 0)
{
if (!ch->IsAffectFlag(513))
{
ch->AddAffect(513, aApplyInfo[0].bPointType, 0, 0, 536870911, 0, false);
ch->RemoveSpecifyItem(71001, 1);
}
}
if (ch->CountSpecifyItem(71094) >= 1)
{
if (!ch->IsAffectFlag(512))
{
ch->AddAffect(512, aApplyInfo[0].bPointType, 0, 0, 536870911, 0, false);
ch->RemoveSpecifyItem(71094, 1);
}
}
if (item->GetVnum() == 50300)
{
if (ch->FindAffect(AFFECT_SKILL_NO_BOOK_DELAY) == false && ch->CountSpecifyItem(71001) < 1)
{
ch->SkillLearnWaitMoreTimeMessage(ch->GetSkillNextReadTime(skillindex) - get_global_time());
return;
}
if (true == ch->LearnSkillByBook(skillindex))
{
if (item->GetVnum() == 50300 && item->GetSocket(0) == skillindex)
{
item->SetCount(item->GetCount() - 1);
int iReadDelay;
iReadDelay = number(SKILLBOOK_DELAY_MIN, SKILLBOOK_DELAY_MAX);
ch->SetSkillNextReadTime(skillindex, get_global_time() + iReadDelay);
}
}
else
{
if (item->GetVnum() == 50300 && item->GetSocket(0) == skillindex)
{
item->SetCount(item->GetCount() - 1);
int iReadDelay;
iReadDelay = number(SKILLBOOK_DELAY_MIN, SKILLBOOK_DELAY_MAX);
ch->SetSkillNextReadTime(skillindex, get_global_time() + iReadDelay);
}
}
ch->SetQuestFlag("bk.yenisure", get_global_time() + 1);
}
}
else if (gelen == 0) ///hepsi
{
if (bktimer)
event_cancel(&bktimer);
TMainEventInfo2* info = AllocEventInfo<TMainEventInfo2>();
info->kim = ch;
info->skillindexx = skillindex;
bktimer = event_create(bk_event, info, PASSES_PER_SEC(1));
}
return;
}
#endif
Hata Aldığım Bölüm::
if (item->GetVnum() == 50300)
{
if (ch->FindAffect(AFFECT_SKILL_NO_BOOK_DELAY) == false && ch->CountSpecifyItem(71001) < 1)
{
ch->SkillLearnWaitMoreTimeMessage(ch->GetSkillNextReadTime(skillindex) - get_global_time());
return;
}
Gelen Seysr:
Son düzenleme: