- Mesaj
- 493
- Çözümler
- 23
- Beğeni
- 1.140
- Puan
- 654
- Ticaret Puanı
- 0
Hızlıca mantığına gireyim diğer svlerde nasıl bilmiyorum.
Olayımız bir affect tanımlanıyor ve bu affect 1 gün 1 hafta veya sınırsız olarak tanımlanıyor.
Bu tanımlanan affect karakter üzerinde aktif oldukça kullanılan skiller sınırsız kalıyor.(Değiştirilebilir.)
Kısa bi örnek skill parşömeni 1 günlük : Affect 1 gün olarak ayarlandı. Skiller 1 günlük süre boyunca o skilli açtığında süresiz şekilde aktif kalacak.
Eklenmesi gereken kontroller vardır elbet. Sadece kabataslak bi şekilde mantık yürüttüm ben. Daha bilgili arkadaşlar kullanacaklar için düzenleme önerebilir.
Örnek item_proto.txt:
Olayımız bir affect tanımlanıyor ve bu affect 1 gün 1 hafta veya sınırsız olarak tanımlanıyor.
Bu tanımlanan affect karakter üzerinde aktif oldukça kullanılan skiller sınırsız kalıyor.(Değiştirilebilir.)
Kısa bi örnek skill parşömeni 1 günlük : Affect 1 gün olarak ayarlandı. Skiller 1 günlük süre boyunca o skilli açtığında süresiz şekilde aktif kalacak.
Eklenmesi gereken kontroller vardır elbet. Sadece kabataslak bi şekilde mantık yürüttüm ben. Daha bilgili arkadaşlar kullanacaklar için düzenleme önerebilir.
Örnek item_proto.txt:
Kod:
70045 흑신의 이빨 ITEM_USE USE_SPECIAL 1 NONE NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0
affect.h aç arat::
AFFECT_QUEST_START_IDX = 1000
//üstüne ekle
AFFECT_SKILL_DURATION_EXTEND = 544,
char_item.cpp aç arat::
case USE_SPECIAL:
switch (item->GetVnum())
{
case ITEM_NOG_POCKET:
{
if (FindAffect(AFFECT_NOG_ABILITY))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
return false;
}
long time = item->GetValue(0);
long moveSpeedPer = item->GetValue(1);
long attPer = item->GetValue(2);
long expPer = item->GetValue(3);
AddAffect(AFFECT_NOG_ABILITY, POINT_MOV_SPEED, moveSpeedPer, AFF_MOV_SPEED_POTION, time, 0, true, true);
AddAffect(AFFECT_NOG_ABILITY, POINT_MALL_ATTBONUS, attPer, AFF_NONE, time, 0, true, true);
AddAffect(AFFECT_NOG_ABILITY, POINT_MALL_EXPBONUS, expPer, AFF_NONE, time, 0, true, true);
item->SetCount(item->GetCount() - 1);
}
break;
//altına ekle
case 70045:
{
// Skill sure uzatma (1 gun) (eklenen affectin süresi)
const long EXTEND_FLAG_DURATION = 60 * 60 * 24; // 1 gun
if (FindAffect(AFFECT_SKILL_DURATION_EXTEND))
{
ChatPacket(CHAT_TYPE_INFO, "Bu ozellik zaten aktif.");
return false;
}
AddAffect(AFFECT_SKILL_DURATION_EXTEND, POINT_NONE, 0, 0, EXTEND_FLAG_DURATION, 0, false);
ChatPacket(CHAT_TYPE_INFO, "Beceri parsomeni aktif.");
item->SetCount(item->GetCount() - 1);
}
break;
char_skill.cpp aç arat::
if (dwVnum == SKILL_MUYEONG)
{
pkSk->kDurationPoly.SetVar("k", k/*bSkillLevel*/);
pkSk->kDurationSPCostPoly.SetVar("k", k/*bSkillLevel*/);
int iDur = (long) pkSk->kDurationPoly.Eval();
iDur += GetPoint(POINT_PARTY_BUFFER_BONUS);
if (pkVictim == this)
AddAffect(dwVnum,
POINT_NONE, 0,
AFF_MUYEONG,
iDur,
(long) pkSk->kDurationSPCostPoly.Eval(),
true);
return BATTLE_NONE;
}
bool bAdded = false;
pkSk->kDurationPoly.SetVar("k", k/*bSkillLevel*/);
int iDur = (int) pkSk->kDurationPoly.Eval();
//altına ekle
//Öfke - SKILL_JEONGWI
//Hava Kılıcı - SKILL_GEOMKYUNG
//Güçlü Beden - SKILL_CHUNKEON
//Hafif Adım - SKILL_GYEONGGONG
//Büyülü Keskinlik - SKILL_GWIGEOM
//Dehşet - SKILL_TERROR
//Büyülü Zırh - SKILL_JUMAGAP
//Ateş Hayaleti - SKILL_MUYEONG
//Karanlık Koruma - SKILL_MANASHILED
//Kutsama - SKILL_HOSIN
//Yansıtma - SKILL_REFLECT
//Ejderha Yardımı - SKILL_GICHEON
//Çabukluk - SKILL_KWAESOK
//Yüksek Saldırı - SKILL_JEUNGRYEOK
if (this->FindAffect(AFFECT_SKILL_DURATION_EXTEND) &&
(dwVnum == SKILL_GEOMKYUNG || dwVnum == SKILL_EUNHYUNG ||
dwVnum == SKILL_JEONGWI || dwVnum == SKILL_CHUNKEON ||
dwVnum == SKILL_GYEONGGONG || dwVnum == SKILL_GWIGEOM ||
dwVnum == SKILL_TERROR || dwVnum == SKILL_JUMAGAP ||
dwVnum == SKILL_MUYEONG || dwVnum == SKILL_MANASHILED ||
dwVnum == SKILL_HOSIN || dwVnum == SKILL_REFLECT ||
dwVnum == SKILL_GICHEON || dwVnum == SKILL_KWAESOK ||
dwVnum == SKILL_JEUNGRYEOK))
{
iDur = 60 * 60 * 24 * 365;//1 yıl
}
Son düzenleme: