-
Contador contenido
321 -
Ingreso
-
Última visita
-
Días ganados
31
Todo lo publicado por Kenshi Torres
-
Tienes el dum proto que no dañe los archivos mob proto y item proto
- 24 respuestas
-
- nilsonmax
- programasjuegosmax
-
(y 3 mas)
Etiquetado con:
-
Alguien tiene el link en este sistema
-
Como implementaste ese sistema lo tienes
-
link de descarga:
-
link imagen 4nuCbab — ImgBB (ibb.co) link de descarga:
-
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:
-
link de descarga:
-
spam [C++] Bendición del Grupo chamán [Auto-Bendición Bug Resuelto]
contestación a Kenshi Torres por Kenshi Torres en Offtopic
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.cpp Cambie 30 con la posibilidad de éxito que desee. Ejemplo:
-
Akron2 - Ultima actualización 01/12/2020
contestación a XhebasT1an por Kenshi Torres en Servidores y Clientes
Cuando hablo de msn me refiero a ejemplo el archivo que colocas los gr -
Buscar en pvp.cpp: Agregar
-
Elixir rojo y azul como en estos servidores pvp. buscar en char_item.ccp Agrega abajo: búscar en char_item.ccp Agrega abajo
-
spam [C++] Bendición del Grupo chamán [Auto-Bendición Bug Resuelto]
un tema publicó Kenshi Torres en Offtopic
Server/game/src/skill.h se abre y se busca; agrega abajo char_skill.cpp se abre y busca; 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 -
Akron2 - Ultima actualización 01/12/2020
contestación a XhebasT1an por Kenshi Torres en Servidores y Clientes
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
-
SE BUSCA PERSONA CON EXPERIENCIA EN SOURCE
contestación a 𝗔𝗿𝗲𝘀 por Kenshi Torres en Ayudas y preguntas
Como que solo instalación -
Ya has atribuido la funcion Inventorywindow te falta un import para que se te atribuya esa funcion
-
Metin2-Karakter-Kilit-Sistemi.rar
-
Explicación Gyazo : Cuando comienza el duelo, el efecto es 3-2-1 go. Muy agradable. Si está editando archivos tipo ws, le sugiero que lo instale service.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. ymir work.rar
-
-
Link : https://github.com/LarryWatterson/Empire-War-System
-
Video tutorial como instalar busqueda de la tienda offline
un tema publicó Kenshi Torres en Programación
Link de sistema : https://github.com/blackdragonx61/Metin2-Private-Shop-Search