- Katılım
- 19 Kas 2009
- Konular
- 1,185
- Mesajlar
- 4,186
- Online süresi
- 26g 10906s
- Reaksiyon Skoru
- 2,666
- Altın Konu
- 32
- Başarım Puanı
- 344
- TM Yaşı
- 16 Yıl 5 Ay 5 Gün
- MmoLira
- 18,398
- DevLira
- 90
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Düelloya başlamadan önce 3-2-1 diye sayar daha sonra ws'yi başlatır.
service.h:
#define ENABLE_3_2_1_GO
pvp.cpp:
# Arat
void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
# Üstüne Ekle
#ifdef ENABLE_3_2_1_GO
EVENTINFO(start_duel_efect_info)
{
LPCHARACTER ch1;
LPCHARACTER ch2;
CPVP * pkPVP;
BYTE state;
start_duel_efect_info()
: ch1( NULL )
,ch2( NULL )
,pkPVP( NULL )
,state( 0 )
{
}
};
EVENTFUNC(start_duel_efect)
{
start_duel_efect_info * info = dynamic_cast<start_duel_efect_info *>(event->info);
if ((info == NULL) || (info->ch1 == NULL) || (info->ch2 == NULL) || (info->pkPVP == NULL)) return 0;
switch (info->state)
{
case 0:
{
info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/3.mse");
info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/3.mse");
info->state++;
return PASSES_PER_SEC(1);
break;
}
case 1:
{
info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/2.mse");
info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/2.mse");
info->state++;
return PASSES_PER_SEC(1);
break;
}
case 2:
{
info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/1.mse");
info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/1.mse");
info->state++;
return PASSES_PER_SEC(1);
break;
}
case 3:
{
info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/go.mse");
info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/go.mse");
if (info->pkPVP->Agree(info->ch1->GetPlayerID()))
{
info->ch2->ChatPacket(CHAT_TYPE_INFO, "Duelul cu: %s a inceput!", info->ch1->GetName());
info->ch1->ChatPacket(CHAT_TYPE_INFO, "Duelul cu: %s a inceput!", info->ch2->GetName());
}
return 0;
break;
}
}
return 0;
}
#endif
# Arat
void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
# Değiştir
#ifdef ENABLE_3_2_1_GO
void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
{
if (pkChr->IsDead() || pkVictim->IsDead() || pkChr->FindAffect(AFFECT_PVP_START))
return;
CPVP kPVP(pkChr->GetPlayerID(), pkVictim->GetPlayerID());
CPVP * pkPVP;
if (pkPVP = Find(kPVP.m_dwCRC))
{
start_duel_efect_info * info = AllocEventInfo<start_duel_efect_info>();
info->ch1 = pkChr;
info->ch2 = pkVictim;
info->pkPVP = pkPVP;
info->state = 0;
pkChr->AddAffect(AFFECT_PVP_START, APPLY_NONE, 0, 0, 5, 0, false);
event_create(start_duel_efect, info, 0);
return;
}
pkPVP = M2_NEW CPVP(kPVP);
pkPVP->SetVID(pkChr->GetPlayerID(), pkChr->GetVID());
pkPVP->SetVID(pkVictim->GetPlayerID(), pkVictim->GetVID());
m_map_pkPVP.insert(map<DWORD, CPVP *>::value_type(pkPVP->m_dwCRC, pkPVP));
m_map_pkPVPSetByID[pkChr->GetPlayerID()].insert(pkPVP);
m_map_pkPVPSetByID[pkVictim->GetPlayerID()].insert(pkPVP);
pkPVP->Packet();
char msg[CHAT_MAX_LEN + 1];
snprintf(msg, sizeof(msg), "Ai fost provocat la duel de: %s.", pkChr->GetName()); //e el
pkVictim->ChatPacket(CHAT_TYPE_INFO, msg);
pkChr->ChatPacket(CHAT_TYPE_INFO, "L-ai provocat la duel pe: %s.", pkVictim->GetName()); //is eu
// NOTIFY_PVP_MESSAGE
LPDESC pkVictimDesc = pkVictim->GetDesc();
if (pkVictimDesc)
{
TPacketGCWhisper pack;
int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
pack.bHeader = HEADER_GC_WHISPER;
pack.wSize = sizeof(TPacketGCWhisper) + len;
pack.bType = WHISPER_TYPE_SYSTEM;
strlcpy(pack.szNameFrom, pkChr->GetName(), sizeof(pack.szNameFrom));
TEMP_BUFFER buf;
buf.write(&pack, sizeof(TPacketGCWhisper));
buf.write(msg, len);
pkVictimDesc->Packet(buf.read_peek(), buf.size());
}
// END_OF_NOTIFY_PVP_MESSAGE
}
#else
void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
{
if (pkChr->IsDead() || pkVictim->IsDead())
return;
CPVP kPVP(pkChr->GetPlayerID(), pkVictim->GetPlayerID());
CPVP * pkPVP;
if ((pkPVP = Find(kPVP.m_dwCRC)))
{
// ???oC? ?o ?O?c¬c¬e ??!¤I c©I??!
if (pkPVP->Agree(pkChr->GetPlayerID()))
{
pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%scYO!Au?C cYe!Aa c©???!"), pkChr->GetName());
pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%scYO!Au?C cYe!Aa c©???!"), pkVictim->GetName());
}
return;
}
pkPVP = M2_NEW CPVP(kPVP);
pkPVP->SetVID(pkChr->GetPlayerID(), pkChr->GetVID());
pkPVP->SetVID(pkVictim->GetPlayerID(), pkVictim->GetVID());
m_map_pkPVP.insert(map<DWORD, CPVP *>::value_type(pkPVP->m_dwCRC, pkPVP));
m_map_pkPVPSetByID[pkChr->GetPlayerID()].insert(pkPVP);
m_map_pkPVPSetByID[pkVictim->GetPlayerID()].insert(pkPVP);
pkPVP->Packet();
char msg[CHAT_MAX_LEN + 1];
snprintf(msg, sizeof(msg), LC_TEXT("%scYO?? cYe!Aac©??!í?!í C©¬c©?cY?cY?. c©A©©!iC?!¤Ac¬e cYe!AaYi??Cc¬| C????a."), pkChr->GetName());
pkVictim->ChatPacket(CHAT_TYPE_INFO, msg);
pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s?c§!AO cYe!Aac©??!í?!í C©¬c©?cY?cY?."), pkVictim->GetName());
// NOTIFY_PVP_MESSAGE
LPDESC pkVictimDesc = pkVictim->GetDesc();
if (pkVictimDesc)
{
TPacketGCWhisper pack;
int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
pack.bHeader = HEADER_GC_WHISPER;
pack.wSize = sizeof(TPacketGCWhisper) + len;
pack.bType = WHISPER_TYPE_SYSTEM;
strlcpy(pack.szNameFrom, pkChr->GetName(), sizeof(pack.szNameFrom));
TEMP_BUFFER buf;
buf.write(&pack, sizeof(TPacketGCWhisper));
buf.write(msg, len);
pkVictimDesc->Packet(buf.read_peek(), buf.size());
}
// END_OF_NOTIFY_PVP_MESSAGE
}
#endif
# Arat
bool CPVPManager:ead(LPCHARACTER pkChr, DWORD dwKillerPID)
# Değiştir
#ifdef ENABLE_3_2_1_GO
bool CPVPManager:ead(LPCHARACTER pkChr, DWORD dwKillerPID)
{
CPVPSetMap::iterator it = m_map_pkPVPSetByID.find(pkChr->GetPlayerID());
if (it == m_map_pkPVPSetByID.end())
return false;
bool found = false;
sys_log(1, "PVPManager:ead %d", pkChr->GetPlayerID());
TR1_NS::unordered_set<CPVP*>::iterator it2 = it->second.begin();
while (it2 != it->second.end())
{
CPVP * pkPVP = *it2++;
DWORD dwCompanionPID;
if (pkPVP->m_players[0].dwPID == pkChr->GetPlayerID())
dwCompanionPID = pkPVP->m_players[1].dwPID;
else
dwCompanionPID = pkPVP->m_players[0].dwPID;
if (dwCompanionPID == dwKillerPID)
{
if (pkPVP->IsFight())
{
pkPVP->SetLastFightTime();
pkPVP->Win(dwKillerPID);
found = true;
break;
}
else if (get_dword_time() - pkPVP->GetLastFightTime() <= 15000)
{
found = true;
break;
}
}
}
LPCHARACTER pkChrW = CHARACTER_MANAGER::instance().FindByPID(dwKillerPID);
pkChrW->SpecificEffectPacket("d:/ymir work/effect/pvp/win.mse");
return found;
}
#else
bool CPVPManager:ead(LPCHARACTER pkChr, DWORD dwKillerPID)
{
CPVPSetMap::iterator it = m_map_pkPVPSetByID.find(pkChr->GetPlayerID());
if (it == m_map_pkPVPSetByID.end())
return false;
bool found = false;
sys_log(1, "PVPManager:ead %d", pkChr->GetPlayerID());
TR1_NS::unordered_set<CPVP*>::iterator it2 = it->second.begin();
while (it2 != it->second.end())
{
CPVP * pkPVP = *it2++;
DWORD dwCompanionPID;
if (pkPVP->m_players[0].dwPID == pkChr->GetPlayerID())
dwCompanionPID = pkPVP->m_players[1].dwPID;
else
dwCompanionPID = pkPVP->m_players[0].dwPID;
if (dwCompanionPID == dwKillerPID)
{
if (pkPVP->IsFight())
{
pkPVP->SetLastFightTime();
pkPVP->Win(dwKillerPID);
found = true;
break;
}
else if (get_dword_time() - pkPVP->GetLastFightTime() <= 15000)
{
found = true;
break;
}
}
}
return found;
}
#endif
affect.h:
# Arat
AFFECT_DRAGON_SOUL_DECK_1 = 542,
# Altına Ekle
#ifdef ENABLE_3_2_1_GO
AFFECT_PVP_START = 543,
AFFECT_PVP_WIN = 544,
#endif
# Arat
AFF_BITS_MAX
# Üstüne Ekle
#ifdef ENABLE_3_2_1_GO
AFF_PVP_START,
AFF_PVP_WIN,
#endif
- Katılım
- 15 Ocak 2021
- Konular
- 193
- Mesajlar
- 1,619
- Online süresi
- 2ay 18g
- Reaksiyon Skoru
- 751
- Altın Konu
- 21
- Başarım Puanı
- 169
- TM Yaşı
- 5 Yıl 3 Ay 5 Gün
- MmoLira
- 1,150
- DevLira
- 89
paylaşıldı zaten az kontrol edip paylaşın
- Katılım
- 19 Kas 2009
- Konular
- 1,185
- Mesajlar
- 4,186
- Online süresi
- 26g 10906s
- Reaksiyon Skoru
- 2,666
- Altın Konu
- 32
- Başarım Puanı
- 344
- TM Yaşı
- 16 Yıl 5 Ay 5 Gün
- MmoLira
- 18,398
- DevLira
- 90
Baktım göremedim. O yüzden paylaştımpaylaşıldı zaten az kontrol edip paylaşın
- Katılım
- 23 Şub 2021
- Konular
- 66
- Mesajlar
- 1,223
- Online süresi
- 3ay 4g
- Reaksiyon Skoru
- 612
- Altın Konu
- 1
- Başarım Puanı
- 166
- TM Yaşı
- 5 Yıl 1 Ay 26 Gün
- MmoLira
- 2,897
- DevLira
- 42
pwylaşıldı bu
- Durum
- Üzgünüz bu konu cevaplar için kapatılmıştır...
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 6
- Görüntüleme
- 669
- Cevaplar
- 23
- Görüntüleme
- 1K
- Cevaplar
- 0
- Görüntüleme
- 750










