Hikayeler

Reklam vermek için turkmmo@gmail.com

[C++] Yeni WS Başlangıç Sistemi

  • Konuyu başlatan Rien
  • Başlangıç tarihi
  • Cevaplar 5
  • Görüntüleme 2K
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Rien

Yönetici
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Yönetici
Dergi Editörü
Yönetici
Turnuva
Admin
Yarışma
VIP Üye
Paylaşım
Katılım
19 Kas 2009
Konular
1,185
Mesajlar
4,186
Online süresi
26g 11109s
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!


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::Dead(LPCHARACTER pkChr, DWORD dwKillerPID)

# Değiştir

#ifdef ENABLE_3_2_1_GO
bool CPVPManager::Dead(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::Dead %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::Dead(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::Dead %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

Aşağıdaki effect dosyasını isterseniz bir klasörün içine atıp ardından kapatıp packınıza atıp indexe ekleyin, isterseniz mevcut packınızın içine atıp kapatın.


 
paylaşıldı zaten az kontrol edip paylaşın
 
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)

Geri
Üst