Jump to content

Kenshi Torres

Miembro
  • Contador contenido

    321
  • Ingreso

  • Última visita

  • Días ganados

    31

Todo lo publicado por Kenshi Torres

  1. Alguien tiene el link en este sistema
  2. Como implementaste ese sistema lo tienes
  3. link imagen 4nuCbab — ImgBB (ibb.co) link de descarga:
  4. 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:
  5. 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:
  6. Cuando hablo de msn me refiero a ejemplo el archivo que colocas los gr
  7. Elixir rojo y azul como en estos servidores pvp. buscar en char_item.ccp Agrega abajo: búscar en char_item.ccp Agrega abajo
  8. 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
  9. 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
  10. Ya has atribuido la funcion Inventorywindow te falta un import para que se te atribuya esa funcion
  11. Metin2-Karakter-Kilit-Sistemi.rar
  12. 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
  13. Link: https://mega.nz/file/wxQ0UDbI#leTDfiLmikoQW7SDO-OggjRAJhEOICMt3rnZzClbVSc
  14. Link : https://github.com/LarryWatterson/Empire-War-System
  15. Link de sistema : https://github.com/blackdragonx61/Metin2-Private-Shop-Search
×
×
  • Crear nuevo...