Tam olaraktan nasıl yapılıyor anlatabilirmisiniz?Affect şeklinde verebilirsin. Tek affect üzerine hepsinin bonuslarını verebilirsin.
affect.h içerisine AFFECT_BASLANGIC şeklinde bir affect oluştur. Başlangıç sistemine göre sourceden vericeksen ona göre questten vereceksen ona göreTam olaraktan nasıl yapılıyor anlatabilirmisiniz?
İşte başlangıç sistemi henüz kurmadım önerebiliceğiniz bir başlangıç sistemi varsa onuda iletebilirmisiniz?affect.h içerisine AFFECT_BASLANGIC şeklinde bir affect oluştur. Başlangıç sistemine göre sourceden vericeksen ona göre questten vereceksen ona göre
örn.
ch->AddAffect(AFFECT_BASLANGIC, POINT_MAX_HP, 1000, 0, INFINITE_AFFECT_DURATION, 0, true, true)
ch->AddAffect(AFFECT_BASLANGIC, POINT_MAX_SP, 1000, 0, INFINITE_AFFECT_DURATION, 0, true, true)
int pc_give_eqboni(lua_State* L)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
BYTE job = ch->GetJob();
LPITEM item;
switch (job)
{
case JOB_WARRIOR:
case JOB_ASSASSIN:
case JOB_SURA:
case JOB_SHAMAN:
{
item = ch->GetWear(WEAR_HEAD);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_ATT_SPEED, 8);
item->SetForceAttribute(1, APPLY_HP_REGEN, 30);
item->SetForceAttribute(2, APPLY_SP_REGEN, 30);
item->SetForceAttribute(3, APPLY_DODGE, 15);
item->SetForceAttribute(4, APPLY_STEAL_SP, 10);
}
item = ch->GetWear(WEAR_WEAPON);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_CAST_SPEED, 20);
item->SetForceAttribute(1, APPLY_CRITICAL_PCT, 10);
item->SetForceAttribute(2, APPLY_PENETRATE_PCT, 10);
item->SetForceAttribute(3, APPLY_ATTBONUS_ANIMAL, 20);
item->SetForceAttribute(4, APPLY_NORMAL_HIT_DAMAGE_BONUS, 20);
}
item = ch->GetWear(WEAR_SHIELD);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_CON, 12);
item->SetForceAttribute(1, APPLY_BLOCK, 15);
item->SetForceAttribute(2, APPLY_STR, 12);
item->SetForceAttribute(3, APPLY_IMMUNE_STUN, 1);
item->SetForceAttribute(4, APPLY_INT, 12);
}
item = ch->GetWear(WEAR_BODY);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
item->SetForceAttribute(1, APPLY_CAST_SPEED, 20);
item->SetForceAttribute(2, APPLY_STEAL_HP, 10);
item->SetForceAttribute(3, APPLY_REFLECT_MELEE, 10);
item->SetForceAttribute(4, APPLY_ATT_GRADE_BONUS, 50);
}
item = ch->GetWear(WEAR_FOOTS);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
item->SetForceAttribute(1, APPLY_EXP_DOUBLE_BONUS, 20);
item->SetForceAttribute(2, APPLY_MOV_SPEED, 8);
item->SetForceAttribute(3, APPLY_ATT_SPEED, 8);
item->SetForceAttribute(4, APPLY_CRITICAL_PCT, 10);
}
item = ch->GetWear(WEAR_WRIST);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
item->SetForceAttribute(1, APPLY_MANA_BURN_PCT, 10);
item->SetForceAttribute(2, APPLY_PENETRATE_PCT, 10);
item->SetForceAttribute(3, APPLY_STEAL_HP, 10);
item->SetForceAttribute(4, APPLY_ATTBONUS_ANIMAL, 20);
}
item = ch->GetWear(WEAR_NECK);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
item->SetForceAttribute(1, APPLY_GOLD_DOUBLE_BONUS, 20);
item->SetForceAttribute(2, APPLY_CRITICAL_PCT, 10);
item->SetForceAttribute(3, APPLY_PENETRATE_PCT, 10);
item->SetForceAttribute(4, APPLY_HP_REGEN, 20);
}
item = ch->GetWear(WEAR_EAR);
if (item != NULL)
{
item->ClearAttribute();
item->SetForceAttribute(0, APPLY_MOV_SPEED, 10);
item->SetForceAttribute(1, APPLY_GOLD_DOUBLE_BONUS, 20);
item->SetForceAttribute(2, APPLY_POISON_REDUCE, 8);
item->SetForceAttribute(3, APPLY_ATTBONUS_ANIMAL, 20);
item->SetForceAttribute(4, APPLY_ATTBONUS_ORC, 20);
}
}
break;
}
}
{ "give_eqboni", pc_give_eqboni },


efekt verme işini quest te de yapabilirsin ki quest te yapmak daha aza kafa karıştırıcı olur. başlangıçta item verme sistemi olarakta bunu kullanabilirsin ama kullandığın başlangıç questide iş görür.
![]()
Yeni oluşturulan karakterlerin, belirlemiş olduğunuz item’lara (eşyalar) sahip şekilde oyuna başlamasını sağlar. İsterseniz bu item’ların karaktere giydirilmiş (donatılmış) olarak gelmesini de sağlayabilirsiniz. Ayrıca başlangıç item’ları için adet, bonuslar ve taşlar (soketler, yani süreli eşyalar) gibi özellikleri de ayarlayabilirsiniz.
Bu işlev yalnızca PlayerCreate (karakter oluşturulduğunda) sırasında çağrılır ve tetiklenir. Bu nedenle, eşyaların iki kez verilmesini önlemek için ayrıca bir görev bayrağına ihtiyaç yoktur. Tabloda yapılan...
- TheAdmin33
- başlangıc başlangıç ayarı başlangıç item başlangıç iteme efsun başlangıç itemleri başlangıçta item verme efsunlu item vermek item vermek metin2
- Yanıt: 0
- Forum: Metin2 Sistemleri (C++ / Python)
//Arat;
ALUA(pc_sf_dead)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
ch->Dead(0, 0);
return 0;
}
//Altına ekle;
ALUA(pc_sebnem_tanri_aff_add)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
const DWORD sebnem_vnum[] = { 50821, 50822, 50823, 50824, 50825,50826 };
for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++)
{
LPITEM item = ITEM_MANAGER::instance().CreateItem(sebnem_vnum[i]);
if (!item)
continue;
int affect_type = AFFECT_BLEND;
int apply_type = aApplyInfo[item->GetSocket(0)].bPointType;
int apply_value = item->GetSocket(1);
int apply_duration = item->GetSocket(2);
if (ch->FindAffect(affect_type, apply_type))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù."));
ITEM_MANAGER::instance().RemoveItem(item);
continue;
}
else
{
ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false);
ITEM_MANAGER::instance().RemoveItem(item);
}
}
const DWORD tanri_vnum[] = { 39017, 39018, 39019, 39020 };
for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++)
{
LPITEM item = ITEM_MANAGER::instance().CreateItem(tanri_vnum[i]);
if (!item)
continue;
int affect_type = item->GetValue(0);
int apply_type = aApplyInfo[item->GetValue(1)].bPointType;
int apply_value = item->GetValue(2);
int apply_duration = item->GetValue(3);
if (ch->FindAffect(affect_type, apply_type))
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù."));
ITEM_MANAGER::instance().RemoveItem(item);
continue;
}
else
{
ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false);
ITEM_MANAGER::instance().RemoveItem(item);
}
}
return 1;
}
//Arat;
{ "set_flag_dead", pc_sf_dead },
//Altına ekle;
{ "sebnem_tanri_aff_add", pc_sebnem_tanri_aff_add },
quest sebnem_tanri begin
state start begin
when login begin
pc.sebnem_tanri_aff_add
end
end
end
Muhtemelen sorunsuz olacaktır. Ancak yeni fonksiyon eklemeye gerek yok. Zaten bunu yapan fonksiyon var. affect.add_collect fonksiyonunu give_basic_weapon.luaya ekleyip hatta altında bilgilendirme mesajı bile eklersin.aşağıdakileri uygula;
questlua_pc.cpp://Arat; ALUA(pc_sf_dead) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ch->Dead(0, 0); return 0; } //Altına ekle; ALUA(pc_sebnem_tanri_aff_add) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); const DWORD sebnem_vnum[] = { 50821, 50822, 50823, 50824, 50825,50826 }; for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++) { LPITEM item = ITEM_MANAGER::instance().CreateItem(sebnem_vnum[i]); if (!item) continue; int affect_type = AFFECT_BLEND; int apply_type = aApplyInfo[item->GetSocket(0)].bPointType; int apply_value = item->GetSocket(1); int apply_duration = item->GetSocket(2); if (ch->FindAffect(affect_type, apply_type)) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù.")); ITEM_MANAGER::instance().RemoveItem(item); continue; } else { ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false); ITEM_MANAGER::instance().RemoveItem(item); } } const DWORD tanri_vnum[] = { 39017, 39018, 39019, 39020 }; for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++) { LPITEM item = ITEM_MANAGER::instance().CreateItem(tanri_vnum[i]); if (!item) continue; int affect_type = item->GetValue(0); int apply_type = aApplyInfo[item->GetValue(1)].bPointType; int apply_value = item->GetValue(2); int apply_duration = item->GetValue(3); if (ch->FindAffect(affect_type, apply_type)) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù.")); ITEM_MANAGER::instance().RemoveItem(item); continue; } else { ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false); ITEM_MANAGER::instance().RemoveItem(item); } } return 1; } //Arat; { "set_flag_dead", pc_sf_dead }, //Altına ekle; { "sebnem_tanri_aff_add", pc_sebnem_tanri_aff_add },
questlerin olduğu yerde quest_functions dosyası var onun içine "pc.sebnem_tanri_aff_add" ekle ve şu questi okut;
start_buff.lua:quest sebnem_tanri begin state start begin when login begin pc.sebnem_tanri_aff_add end end end
affect.add_collect(apply.CRITICAL_PCT, 20, 60*60*24*365)
affect . add_collect ( 54 , 270 , 60 * 60 * 24 * 500 )
affect . add_collect ( 53 , 170 , 60 * 60 * 24 * 500 )
affect . add_collect ( 37 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 7 , 41 , 60 * 60 * 24 * 500 )
affect . add_collect ( 15 , 50 , 60 * 60 * 24 * 500 )
affect . add_collect ( 16 , 50 , 60 * 60 * 24 * 500 )
affect . add_collect ( 8 , 60 , 60 * 60 * 24 * 500 )
affect . add_collect ( 69 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 70 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 64 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 65 , 20 , 60 * 60 * 24 * 500 )
say_reward ( "Karakterine şu özellikler sınırsız olarak eklendi ; " )
say ( "Şebnemlerin tüm özellikleri " )
say ( "Ejderha tanrı yaşamları özellikleri " )
say ( "Kritik ve delici isabetleri " )
say ( "Mor iksir , ve yeşil iksir özellikleri " )
say_reward ( "Karakterine süresiz olarak eklendi. " )
Aaa evet, özellikleri veriyoda iconlar görünmüyor.add_collect de efekti ve flagı seçemiyorsun sol üstte efeklerde nasıl gözükecek yunusum. ha arkadaşın öyle bir derdi yoksa senin dediğin doğru.

iconlarıda veriyo zannediyorum. 