-
Contador contenido
321 -
Ingreso
-
Última visita
-
Días ganados
31
Mensajes publicados por Kenshi Torres
-
-
-
- Este es un tema popular.
- Este es un tema popular.
-
link de descarga:
QuoteDebes iniciar sesión para ver el contenido del enlace en esta publicación.- 𝗔𝗿𝗲𝘀, ♥ TesT ♥ y metin2lion.com reacciono a esto
- 3
-
Con esta corrección, bloqueará la posibilidad de duplicar artículos en una gran tienda fuera de línea cuando use la función 'Edit Item'.
en cmd_general.cpp buscar y remplazar esta funcion:
link:
QuoteDebes iniciar sesión para ver el contenido del enlace en esta publicación. -
-
hace 7 horas, PACI dijo:
No sé si reir por crear el tema en la sección de Programación, ó llorar por haberlo copiado y pegado en el traductor del google, que de por si ya dice que no te has enterado de lo que va.
Muevo el hilo a off-topic.Ps pense que servia entonces lo editare
-
A partir de aquí, cambia la probabilidad de que una piedra tenga éxito en el arma / armadura.
Ingrese char_item.cppQuoteif (number(1, 100) <= 30)
Cambie 30 con la posibilidad de éxito que desee.
Ejemplo:
Quoteif (number(1, 100) <= 80) //<-------------------- 80% al insertar una piedra al arma o armadura
-
hace 20 minutos, ranico0 dijo:
msn en armas? yo creia que era solo armaduras
Cuando hablo de msn me refiero a ejemplo el archivo que colocas los gr
-
-
Elixir rojo y azul como en estos servidores pvp.
buscar en char_item.ccpQuoteDebes iniciar sesión para ver el contenido del enlace en esta publicación.Agrega abajo:
QuoteDebes iniciar sesión para ver el contenido del enlace en esta publicación.búscar en char_item.ccp
QuoteDebes iniciar sesión para ver el contenido del enlace en esta publicación.Agrega abajo
QuoteDebes iniciar sesión para ver el contenido del enlace en esta publicación. -
Server/game/src/skill.h se abre y se busca;
QuoteSKILL_FLAG_FIRE = (1 << 26),
agrega abajo
QuoteSKILL_FLAG_PARTY = (1 << 27),
char_skill.cpp se abre y busca;
QuoteSKILL_RESIST_PENETRATE
agrega este codigo debajo de:
SKILL_RESIST_PENETRATE
};
struct FPartyPIDCollector { std::vector <DWORD> vecPIDs; FPartyPIDCollector() { } void operator () (LPCHARACTER ch) { vecPIDs.push_back(ch->GetPlayerID()); } };
Buscar en el mismo archivo;
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY)) pkVictim = this;
El siguiente codigo se agrega a continuación:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim) pkVictim = this;
Buscar en el mismo archivo;
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY)) pkVictim = this;
agrega a continuación:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim) pkVictim = this;
Buscar en el mismo archivo;
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY)) ComputeSkill(dwVnum, this); else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK)) ComputeSkill(dwVnum, pkVictim); else if (dwVnum == SKILL_BYEURAK) ComputeSkill(dwVnum, pkVictim); else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill()) ComputeSkill(dwVnum, pkVictim); m_dwLastSkillTime = get_dword_time(); return true; }
remplaza por los siguientes códigos:if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY)) ComputeSkill(dwVnum, this); else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim) ComputeSkill(dwVnum, this); else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty()) { FPartyPIDCollector f; GetParty()->ForEachOnMapMember(f, GetMapIndex()); for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++) { LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it); ComputeSkill(dwVnum, ch); } } else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK)) ComputeSkill(dwVnum, pkVictim); else if (dwVnum == SKILL_BYEURAK) ComputeSkill(dwVnum, pkVictim); else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill()) ComputeSkill(dwVnum, pkVictim); m_dwLastSkillTime = get_dword_time(); return true; }
guild.cpp se abre y se busca;
if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY)) { // 이미 걸려 있으므로 사용하지 않음. if (ch->FindAffect(pkSk->dwVnum)) return; victim = ch; }
El siguiente codigo se agrega a continuación:
if ((pkSk->dwFlag & SKILL_FLAG_PARTY)) { if (ch->FindAffect(pkSk->dwVnum)) return; victim = ch; }
abre en Navicat;
Navicat => Player => skill_proto =haga clic con el botón derecho en > y diga " Table design".
Llegamos al "setFlag" st y añadimos el valor "PARTY" al final.Después de agregar este valor, presionamos el botón "OK" y lo grabamos. Luego ingresamos skil_proto con el clic izquierdo y agregamos los valores de los ids "
dwVnum" a continuación en la columna "setFlag".
Agregamos el valor "PARTY" a los valores 94, 95, 96, 109, 110 y 111 dwVnum
- No leas o eres Puto reacciono a esto
- 1
-
hace 28 minutos, ranico0 dijo:
yo tengo problema para poder implementar armas no salen los correspondientes GR2 y lo he revisado y esta todo bien/ AYUDA/
Ya viste el numero del vnum que este en el msn
-
El problema esta en los vnum hay casi al final si cuentas una casilla de 0 cuenta de atras asia adelante 5 veces y notas un numero ese es el numero que debes colocar en tus msn para que coja tu armadura si no has hecho nunca te aparecera
-
Que si te funciono
-
Como que solo instalación
-
Ya has atribuido la funcion Inventorywindow te falta un import para que se te atribuya esa funcion
-
- Este es un tema popular.
- Este es un tema popular.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.- santos2002, AcidKiid, Emre Yavuz y 17 mas reacciono a esto
- 18
- 1
- 1
-
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
- alexander0195 reacciono a esto
- 1
-
Explicación
Debes iniciar sesión para ver el contenido del enlace en esta publicación.: Cuando comienza el duelo, el efecto es 3-2-1 go. Muy agradable. Si está editando archivos tipo ws, le sugiero que lo instaleservice.h:
#define ENABLE_3_2_1_GO
pvp.cpp:
# buscar void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim) # agregar debajo #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 # buscar void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim) # Remplazar #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 # buscar bool CPVPManager::Dead(LPCHARACTER pkChr, DWORD dwKillerPID) # remplazar #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:
# buscar AFFECT_DRAGON_SOUL_DECK_1 = 542, # Agregar debajo #ifdef ENABLE_3_2_1_GO AFFECT_PVP_START = 543, AFFECT_PVP_WIN = 544, #endif # buscar AFF_BITS_MAX # Agregar debajo #ifdef ENABLE_3_2_1_GO AFF_PVP_START, AFF_PVP_WIN, #endif
Finalmente, si desea que los archivos a los que he dado efecto agreguen un índice adicional, tire su paquete y luego tírelo a una carpeta, si desea desactivarlo, tírelo a su paquete actual.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.- Csabee Gazdik, Getzuga, [email protected] y 6 mas reacciono a esto
- 9
-
Link:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.- Feelo232, Frezi Op, Night-legionm2.com y 6 mas reacciono a esto
- 9
-
Link :
Debes iniciar sesión para ver el contenido del enlace en esta publicación.- Tonis BossGR, 𝗔𝗿𝗲𝘀, ChuchoGamer y 12 mas reacciono a esto
- 12
- 1
- 1
- 1
-
-
- Este es un tema popular.
- Este es un tema popular.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.- Richard Tamas, iMixxx, Marcos Pinheiro y 17 mas reacciono a esto
- 19
- 1
-
- Este es un tema popular.
- Este es un tema popular.
Help give_basic_weapon
en Quest
Publicado
Como implementaste ese sistema lo tienes