Jump to content

Jfirewall

Miembro
  • Contador contenido

    359
  • Ingreso

  • Última visita

  • Días ganados

    19

Todo lo publicado por Jfirewall

  1. Hola, la funcion es simple en algunos casos algunos eventos o algunos regen que cargamos por quest que no vienen por dungeon los mapas quedan cargados de mobs metines etc.... con esta pequeña funcion lo que realizamos es eliminarlos del mapa limpiar el mapa de esos jefes para que en proximos eventos o lo que sea no este un numero excesivo de jefes o metines en el mapa que provoquen lag en los mapas por una sobre carga. https://github.com/Jfirewall/Clean-map-regen
  2. https://github.com/Jfirewall/block-drop-in-map
  3. Hola verifica que no se genera algun db.core o un game.core para poderte ayudar mas a fondo
  4. Jfirewall

    Closed

    compralo a los vendedores con ellos vas a la fija.
  5. Jfirewall

    Closed

    Eso lo editas, los mismos archivos originales traen donde editar el daño.
  6. una pregunta tienes shining en tu fuente, verifica si tienes shiningtable.txt en locale. desde ay podria agregarle cualquier efecto a tu atuendo o armadura.
  7. Excelente aporte gracias por apoyar la comunidad
  8. and how do you open the wom and yang system? do you have it as a button? or by quest?
  9. https://metin2zone.net/index.php?/topic/14250-instalar-metin2-simplificado/&tab=comments#comment-72453
  10. svside.com es mierda....., si sabes un poco editando 2 cositas quitas la proteccion que lo diga @Robert que es todo un hack
  11. service.h #define __LOAD_MOB_TXT__ #define __LOAD_CHEST_TXT__ buscas ACMD(do_reload) debajo de case 'c': // cube // ·ÎÄà ÇÁ·Î¼¼½º¸¸ °»»êÇÑ´Ù. Cube_init (); break; #if defined(__LOAD_CHEST_TXT__) || defined(__LOAD_MOB_TXT__) case 't': snprintf(szSpecialItemGroupFileName, sizeof(szSpecialItemGroupFileName), "%s/special_item_group.txt", LocaleService_GetBasePath().c_str()); ITEM_MANAGER::Instance().DestroyChestDropItem(); if (!ITEM_MANAGER::Instance().ReadSpecialDropItemFile(szSpecialItemGroupFileName)) { ch->ChatPacket(CHAT_TYPE_INFO, "Error al cargar special_item_group.txt."); return; } else { ch->ChatPacket(CHAT_TYPE_INFO, "Cargaste special_item_group."); } break; case 'm': snprintf(szMOBDropItemFileName, sizeof(szMOBDropItemFileName), "%s/mob_drop_item.txt", LocaleService_GetBasePath().c_str()); ITEM_MANAGER::Instance().DestroyMobDropItem(); if (!ITEM_MANAGER::Instance().ReadMonsterDropItemGroup(szMOBDropItemFileName)) { ch->ChatPacket(CHAT_TYPE_INFO, "Error al cargar mob_drop_item.txt."); return; } else { ch->ChatPacket(CHAT_TYPE_INFO, "Cargaste mob_drop_item."); } break; #endif agregar al final de item_manager.cpp #if defined (__LOAD_MOB_TXT__) || defined(__LOAD_CHEST_TXT__) void ITEM_MANAGER::DestroyMobDropItem() { if (!m_map_pkMobItemGroup.empty()) m_map_pkMobItemGroup.clear(); if (!m_map_pkDropItemGroup.empty()) m_map_pkDropItemGroup.clear(); if (!m_map_pkLevelItemGroup.empty()) m_map_pkLevelItemGroup.clear(); if (!m_map_pkGloveItemGroup.empty()) m_map_pkGloveItemGroup.clear(); } void ITEM_MANAGER::DestroyChestDropItem() { if (!m_map_pkSpecialItemGroup.empty()) m_map_pkSpecialItemGroup.clear(); } #endif en item_manager.h debajo de void GracefulShutdown(); agregar #if defined(__LOAD_MOB_TXT__) || defined(__LOAD_CHEST_TXT__) void DestroyMobDropItem(); void DestroyChestDropItem(); #endif Agregando esto no tienes necesidad de dar reboot solo reload t y reload m y automaticamente se carga en el juego.
  12. *Link Borrado* Ayudando un poco al foro a mejorar, traeré algunos sistemas que diseñe y ademas no usare, de pronto alguno si les sirva.
  13. en lo personal yo lo uso mejor en pet y monturas, me parece muy molesto esa puta bandera en un pet o una montura agregamos primero: #include "../gamelib/ItemManager.h" buscas void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire) debajo de CInstanceBase* pkInstMain=__GetMainInstancePtr(); agregas: CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer(); debajo de if (IsResource()) ponemos if (CItemData::COSTUME_MOUNT) return; if (GetRace() >= 53001 && GetRace() <= 53251) return;
  14. el segundo https://mega.nz/#!YBMEzIpY!xi5btcrNbco80Lic907wP9ZFtnW_naBaOTDO4R8DZGA
  15. local c,query = mysql_direct_query("SELECT * FROM account.account WHERE id = '"..pc.get_account_id().."' LIMIT 1;") if query[1].ok < 1 then say'existe un valor menor a 1' else say'existe un valor de 1'
  16. Muy buen trabajo buena suerte con tus ventas
  17. El servidor cuenta con un multilenguaje, el cual podrás configurarlo al idioma que tu desees, el cual te traducirá idioma de cliente, misiones y nuestros innovadores eventos. Te dejo una pequeña imagen, todavía no está terminado y tendrá un mejor estilo.
  18. tu puedes crear tus funciones dentro de una misma quest la funcionalidad de esto es para esto por ejm, tu creas una nueva funcion en tu source ejm questlua_pc int pc_zone(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ch->ChatPacket(CHAT_TYPE_INFO, "hola zone"); } quet zone begin state start begin when login begin pc.zone() end end end cuando tu compilas te generaria un error el cual seria que debes declarar esta funcion pc.zone, lo que hace lo que publico es quitar que te genere el error y solo compiles y ya, aclaro esto es para los que nos da pereza cada rato estar agregando y agregando funciones
  19. Hola, andaba creando funciones y me daba pereza agregar siempre en el quest_fuctions entonces decidí quitarlo desde mi qc Primero vamos a qc.cc y buscamos: enum parse_state dentro de esto eliminamos esto ST_FUNCTION_NAME, luego buscamos y eliminamos esto : int none_c_function(lua_State* L) { return 0; } set<string> function_defs; set<string> function_calls; void RegisterDefFunction(const string& fname) { function_defs.insert(fname); } void RegisterUsedFunction(const string& fname) { function_calls.insert(fname); } void CheckUsedFunction() { bool hasError = false; set<string> error_func; for (typeof(function_calls.begin()) it = function_calls.begin(); it != function_calls.end(); ++it) { if (function_defs.find(*it) == function_defs.end()) { hasError = true; error_func.insert(*it); } cout << "Used : " << *it << endl; } if (hasError) { cout << "Calls undeclared function! : " << endl; for (typeof(error_func.begin()) it = error_func.begin(); it != error_func.end(); ++it) { cout << *it << endl; } abort(); } } void load_quest_function_list(const char* filename) { ifstream inf(filename); string s; while (!inf.eof()) { inf >> s; if (inf.fail()) break; RegisterDefFunction(s); } } luego buscamos esto y lo eliminamos: load_quest_function_list("quest_functions"); luego buscamos esto y lo eliminamos: else if (t.token == TK_FUNCTION) { ps = ST_FUNCTION_NAME; luego buscamos esto y lo eliminamos OJO EXISTEN DOS ELIMINAR LOS DOS: if (!callname.empty()) { lookahead(&lexstate); if (lexstate.lookahead.token == '(') { RegisterUsedFunction(callname); registered = true; } callname.clear(); } else if (lexstate.t.token == '(') { if (!registered && prev.t.token == TK_NAME) RegisterUsedFunction(getstr(prev.t.seminfo.ts)); registered = false; } luego buscamos esto y lo eliminamos: case ST_FUNCTION_NAME: if (t.token == TK_NAME) { current_function_name = getstr(t.seminfo.ts); RegisterDefFunction(quest_name+"."+current_function_name); ps = ST_FUNCTION_ARG; } break; luego buscamos esto y lo eliminamos: CheckUsedFunction(); Compilamos nuestro qc, y listo ya no tendran que declarar mas funciones nuevas en el quest_fuctions
×
×
  • Crear nuevo...