Jump to content

Jfirewall

Miembro
  • Contador contenido

    359
  • Ingreso

  • Última visita

  • Días ganados

    19

Mensajes publicados 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.

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

  2. hace 25 minutos, Pegasus dijo:

    El elemental no lo recomiendo implementar ya que os va a chocar con los daños de los personajes "Bug" Y el de la calidad de los items estan publicos casi por todos los foros

     

    Eso lo editas, los mismos archivos originales traen donde editar el daño.

  3. 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.

  4. en lo personal yo lo uso mejor en pet y monturas, me parece muy molesto esa puta bandera en un pet o una montura

     

    976bedf6bfba4af57e9978c3704c6514.gif

     

    91a5ecbc619d9ac07005fa91dcb6b20f.gif

     

    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;

     

  5. hace 1 hora, pere85 dijo:

    ¿Cuando en español?

     

    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.

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     

  6. hace 20 minutos, KnightFall dijo:

    que sepa las funciones pueden estar dentro de la misma quest que implementes, pero por arranque de sistema para compilar si no equivoco siempre debe agregarse si no no te compila por la función faltante :down_2:

    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 

  7. 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...