Jump to content

iraciz

Members
  • Posts

    562
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by iraciz

  1. Hi, can you guys please help me,  I'm using SavingAngel script from peopleperson collection and this npc basically revive one player in any map he is.

    the problem is that the order is resurrecting all chars and not only the name of the char that was input.

    I have tried 2 alternatives I know, like @alive, or @resurrect,  even changed the @ for a # in the script, but it fails.

     

     

    Here's the fragment of the lines

    	next;
    	mes "[Kasondra]";
    	mes "Ingresa el nombre de la pobre persona.";
    	mes "^FF0000Escribe el nombre exactamente, de lo contrario mis poderes fallarán y me debilitaré por nada.^000000";
    	if(select("Continuar:No importa")==2) { next; mes "[Kasondra]"; mes "Adios."; close3; }
    	input .@name$;
    	if(getmapxy(@map$,@x,@y,bl_pc,.@name$)!=0) 
    	{ next; mes "[Kasondra]"; mes "Lo siento, pero no puedo revivir fragmentos de tu imaginación."; close3; }
    	next;
    	if(zeny<1000000) { next; mes "[Kasondra]"; mes "¡Por favor, vete, me has lastimado más de lo que puedes saber!"; close3; }
    	set zeny,zeny-1000000;
    	atcommand "@revive "+.@name$+"";
    	specialeffect 338;
    	announce "Kasondra envía una ola poderosa por todo el mundo para resucitar a "+.@name$+".",8;
    	mes "[Kasondra]";
    	mes "Mi trabajo está hecho, ¡ahora debo descansar!";
    	close3;

     

    Is reviving al players in map, not only the choosen one.

     

     

     

  2. Users are not getting reward item, any idea? 

    I am using emistry 3.4 ROTD  and script is displaying this error:

    [Error]: buildin_getitem: Player with map id '0' is not found.  Don't know ehat line to edit up to date, in order to make chars get the rewarded item, thanks in advance

     

    prontera,109,171,6	script	Race of the Day	436,{
    set .@gmlevel,getgmlevel();
    
    do{
    	set .@menu,select("^4EEE94ROTD Information^000000",
    				( .@gmlevel < .gm_level )?"":"^FF0000[GM]^000000Set a New Monster's Race",
    				( .@gmlevel < .gm_level )?"":"^FF0000[GM]^000000Set EXP Bonus",		
    				( .@gmlevel < .gm_level )?"":"^FF0000[GM]^000000Set Item / Zeny Bonus",
    				"Close" );
    				
    	switch( .@menu ) {
    		Case 1:
    			mes "^FF0000ROTD^000000 se refiere a ^0000FFRace of the Day^000000";
    			mes "En otras palabras, significa que esa ^FF0000Raza de Monstruo^000000 que derrotes te otorgará ^FF0000Extra Bonus EXP / Item / Zeny ^000000.";
    			next;
    			mes "[ ^FF0000ROTD de Hoy^000000 ]";
    			mes "^0000FF"+.rotd$[.today_rotd]+"^000000 Race";
    			if ( .rotd_exp_bonus ) mes " ~ ^777777"+.rotd_exp_bonus+"% mas exp^000000";
    			if ( ( .rotd_item_amount && .rotd_item_rate ) || .rotd_zeny || .rotd_exp_bonus ) {
    				mes " ";
    				mes "Recompensa : "+( ( .rotd_item_rate )? .rotd_item_rate+"%":"" )+" : ";
    				if ( .rotd_item_amount && .rotd_item_rate ) mes " ~ ^777777"+.rotd_item_amount+" x "+getitemname( .rotd_item_id )+"^000000";
    				if ( .rotd_zeny ) mes " ~ ^777777"+.rotd_zeny+" Zeny^000000";
    				mes " ";
    				mes "Cantidades son aleatorias...";
    			}
    			break;
    		Case 2:
    			mes "Select new race.";
    			set .today_rotd,select( .rotd_menu$ ) - 1;
    			if ( .today_rotd >= .rotd_size ) set .today_rotd,rand( .rotd_size );
    			mes "New Race : ^777777"+.rotd$[.today_rotd]+"^000000";
    			delwaitingroom;
    			waitingroom "[ROTD]:"+.rotd$[.today_rotd]+" ",0;
    			break;
    		Case 3:
    			mes "Set new exp bonus. (%)";
    			input .rotd_exp_bonus,0,100;
    			if ( .rotd_exp_bonus ) mes "ROTD EXP : "+.rotd_exp_bonus+" %";
    			break;
    		Case 4:
    			mes "Set Rotd bonus";
    			mes "Inset Zeny Bonus";
    			input .@zeny;
    			mes "Insert Item ID";
    			do{
    				input .@item,0,40123; 
    				if ( !.@item ) close;
    			}while( getitemname( .@item ) == "null" );
    			mes "Enter amount.";
    			input .@amount,0,30000;
    			mes "Enter Rate to gain.";
    			input .@rate,0,100;
    			if ( .@amount && .@rate ) {
    				next;
    				mes "Updated item bonus : ( "+.@rate+"% )";
    				mes "^777777"+.@amount+" x "+getitemname( .@item )+"^000000";
    				mes "^777777"+.@zeny+" Zeny^000000";
    				if ( select( "Confirm","Cancel" ) == 1 ) {
    					set .rotd_item_id,.@item;	
    					set .rotd_item_amount,.@amount;
    					set .rotd_item_rate,.@rate;
    					set .rotd_zeny,.@zeny;
    					mes "Updated.";
    				}
    			}
    		default: close;
    	}
    	next;
    }while( .@menu != 5 );
    close;
    
    OnInit:
    	// min gm level
    	set .gm_level,80;
    
    	// monster race list
    	setarray .rotd$[0],
    		"Formless",
    		"Undead",
    		"Brute",
    		"Plant",
    		"Insect",
    		"Fish",
    		"Demon",
    		"Demi Human",
    		"Angel",
    		"Dragon";
    	set .rotd_size,getarraysize( .rotd$ );
    	for( set .@i,0; .@i < .rotd_size; set .@i,.@i + 1 )
    		set .rotd_menu$,.rotd_menu$ + .rotd$[.@i] +":";
    	set .rotd_menu$,.rotd_menu$ + "^0055FFRandom Race^000000";
    
    	// min party member lv to gain exp
    	set .party_level_range,10;
    
    // daily reset
    OnClock0000:
    	set .today_rotd,rand( .rotd_size );
    	set .rotd_exp_bonus,rand( 15,25 );
    	delwaitingroom;
    	waitingroom "[ROTD]:"+.rotd$[.today_rotd]+" ",0;
    	end;
    	
    OnNPCKillEvent:
    if ( getmonsterinfo( killedrid,MOB_RACE ) == .today_rotd ) {
    	set .@partyid,getcharid(1);
    	set .@mob_base_exp,(( getmonsterinfo( killedrid,MOB_BASEEXP ) / 100 ) * .rotd_exp_bonus );
    	set .@mob_job_exp,(( getmonsterinfo( killedrid,MOB_JOBEXP ) / 100 ) * .rotd_exp_bonus );
    	if ( .@partyid ) {
    		set .@aid,getcharid(3);
    		set .@baselevel,BaseLevel;
    		set .@map$,strcharinfo(3);
    		getpartymember .@partyid,1;
    		getpartymember .@partyid,2;
    		while( .@i < $@partymembercount ) {
    			if ( isloggedin( $@partymemberaid[.@i],$@partymembercid[.@i] ) )
    				if ( attachrid( $@partymemberaid[.@i] ) )
    					if ( strcharinfo(3) == .@map$ && ( BaseLevel - .@baselevel ) <= .party_level_range && ( BaseLevel - .@baselevel ) >= ~.party_level_range && Hp >= 1 ) {	
    						set BaseExp,( BaseExp + .@mob_base_exp );
    						set JobExp,( JobExp + .@mob_job_exp );
    						dispbottom "[ROTD Party] : "+.@mob_base_exp+" EXP";
    					}
    			set .@i,.@i + 1;
    		}
    		attachrid( .@aid );
    	}
    	else {
    		set BaseExp,( BaseExp + .@mob_base_exp );
    		set JobExp,( JobExp + .@mob_job_exp );
    		dispbottom "[ROTD SOLO] : "+.@mob_base_exp+" EXP";
    	}
    	if ( rand( 100 ) < .rotd_item_rate && .rotd_zeny ) 
    		set Zeny,Zeny + rand( .rotd_zeny );
    	if ( rand( 100 ) < .rotd_item_rate && .rotd_item_amount ) 
    		getitem .rotd_item_id,rand( .rotd_item_amount ),.@aid;
    }
    end;
    }
    

     

     

     

  3. [Error]:  Loading NPC file: npc/custom/dualkick.txt
    script error on npc/custom/dualkick.txt line 22
        script:add_word: invalid word. A word consists of undercores and/or alphanumeric characters, and valid variable prefixes/postfixes.
        17 : //===== Contact Info: ========================================
        18 : //= [Tauro]
        19 : //= Email: [email protected]
        20 : //= Discord: Trinity#7962
        21 : //============================================================
    *   22 : '-'    script  dl_map  -1,{
        23 : end;
        24 :
        25 :
        26 : OnInit:
        27 :        // 1= if you have gepard 0=if you do not use gepard
     

  4. [Error]:  Loading NPC file: npc/custom/woe1.5.txt
    script error on npc/custom/woe1.5.txt line 193
        parse_simpleexpr: unmatched ')'
       188 :                                                .@reward_zeny = .Reward_                                                                                        Leader[2];
       189 :                                        }
       190 :                                        query_sql("INSERT INTO `mail` (s                                                                                        end_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+
       191 :                                                  "'no-reply',"+.@cid[.@                                                                                        j]+",'** Siege Reward: "+getcastlename(.Castles$[.@i])+" **',"+
       192 :                                                  "'Brave one,% % Congra                                                                                        tulations!% Your guild has successfully occupied% territory in the War of Emperi                                                                                        um on% "+.@str$+".% % % % % [ Your reward is attached. ]',"+
    *  193 :                                                  .@reward_id+","+.@rewa                                                                                        rd_amt+",0,"+.'.'@reward_zeny+",UNIX_TIMESTAMP(NOW()))");
       194 :                                        if (!getd(".@str_"+.@cid[.@j]) &                                                                                        & isloggedin(.@aid[.@j],.@cid[.@j])) {
       195 :                                                setd ".@str_"+.@cid[.@j]                                                                                        ,1;
       196 :                                                message rid2name(.@aid[.                                                                                        @j]),"You've got mail! Please re-login to update your mailing list.";
       197 :                                        }
       198 :                                } else if (isloggedin(.@aid[.@j])) {
     

  5. It's done and solved, thankyou all for the support! Bless

    //mapflags
    prtg_cas01    mapflag    woe_consume
    prtg_cas02    mapflag    woe_consume
    prtg_cas03    mapflag    woe_consume
    prtg_cas04    mapflag    woe_consume
    prtg_cas05    mapflag    woe_consume

    payg_cas01    mapflag    woe_consume
    payg_cas02    mapflag    woe_consume
    payg_cas03    mapflag    woe_consume
    payg_cas04    mapflag    woe_consume
    payg_cas05    mapflag    woe_consume


    gefg_cas01    mapflag    woe_consume
    gefg_cas02    mapflag    woe_consume
    gefg_cas03    mapflag    woe_consume
    gefg_cas04    mapflag    woe_consume
    gefg_cas05    mapflag    woe_consume

    aldeg_cas01    mapflag    woe_consume
    aldeg_cas02    mapflag    woe_consume
    aldeg_cas03    mapflag    woe_consume
    aldeg_cas04    mapflag    woe_consume
    aldeg_cas05    mapflag    woe_consume

    arug_cas01    mapflag    woe_consume
    arug_cas02    mapflag    woe_consume
    arug_cas03    mapflag    woe_consume
    arug_cas04    mapflag    woe_consume
    arug_cas05    mapflag    woe_consume

    schg_cas01    mapflag    woe_consume
    schg_cas02    mapflag    woe_consume
    schg_cas03    mapflag    woe_consume
    schg_cas04    mapflag    woe_consume
    schg_cas05    mapflag    woe_consume

  6. I'm having issues in WoE, because the potions flagged for that maps are not consumed. can't be used.

    This flagged items are from easycore bg telma

        .@bgchar = getBattleFlag("bg_reserved_char_id");
        .@woechar = getBattleFlag("woe_reserved_char_id");
        mes "[Telma]";
        if (countitem(.@badge) < (.@cost*.@sets)) {
            mes "You don't have enoughts ^FF0000"+getitemname(.@badge)+"s^000000 to buy"+(.@amt*.@sets)+" "+getitemname(.@item_id)+"s.";
        } else if (!checkweight(.@item_id, .@amt*.@sets)) {
            mes "You are carrying to much weight.";
        } else {
            delitem .@badge, .@cost*.@sets;
            if (.@bg_item) // Battleground's Consumables
                getitem2 .@item_id,(.@amt*.@sets),1,0,0, 254, 0, .@bgchar & 0xFFFF, .@bgchar >> 0x10;
            else
                getitem2 .@item_id,(.@amt*.@sets),1,0,0, 254, 0, .@woechar & 0xFFF, .@woechar >> 0x10;

     

    BG ITEMS ARE WORKING FINE, THE PROBLEM IS THAT THE WOE FLAGGED ITEMS CAN'T BE USED IN THE WOE MAPS, ANY IDEA?

    80546827_10156727215144249_7381174020009361408_o.jpg.c9621844aeebd4cc6947af02eae6a410.jpg

     

    The WoE flagged item, is not consumed, I search every where and I can't find 

    Where are those battleflags? scr? confs? It seems that the easycore patch do not included this part in his release

        .@bgchar = getBattleFlag("bg_reserved_char_id");
        .@woechar = getBattleFlag("woe_reserved_char_id");

    getitem2 .@item_id,(.@amt*.@sets),1,0,0, 254, 0, .@woechar & 0xFFFF, .@woechar >> 0x10;

  7. Good day friends, I found this command, that shows in dispbottom a vending item in any player stores.

    But this information is only displayed for players on vending, The other users who try this command will ever show  "Nobody is selling it now."


    Is there any way to modify this code and allow all players to use it?

    Everyone, not only vending users.

    /*==========================================
    * @whosell - List who is vending the item (amount, price, and location).
    * revamped by VoidLess, original by zephyrus_cr
    *------------------------------------------*/
    ACMD_FUNC(whosell)
    {
       char item_name[100];
       int item_id = 0, j, count = 0, sat_num = 0;
       int s_type = 1; // search bitmask: 0-name,1-id, 2-card, 4-refine
       int refine = 0,card_id = 0;
       bool flag = 0; // place dot on the minimap?
       struct map_session_data* pl_sd;
       struct s_mapiterator* iter;
       unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0;
       struct item_data *item_data;
       nullpo_retr(-1, sd);
       if (!message || !*message) {
        clif_displaymessage(fd, "Use: @whosell (<+refine> )(<item_id>)(<[card_id]>) or @whosell <name>");
        return -1;
       }
       if (sscanf(message, "+%d %d[%d]", &refine, &item_id, &card_id) == 3){
        s_type = 1+2+4;
       }
       else if (sscanf(message, "+%d %d", &refine, &item_id) == 2){
        s_type = 1+4;
       }
       else if (sscanf(message, "+%d [%d]", &refine, &card_id) == 2){
        s_type = 2+4;
       }
       else if (sscanf(message, "%d[%d]", &item_id, &card_id) == 2){
        s_type = 1+2;
       }
       else if (sscanf(message, "[%d]", &card_id) == 1){
        s_type = 2;
       }
       else if (sscanf(message, "+%d", &refine) == 1){
        s_type = 4;
       }
       else if (sscanf(message, "%d", &item_id) == 1 && item_id == atoi(message)){
       //names, that start on num are not working
       //so implemented minumum item_id>500
       //or better make item_id == atoi(message) ?
        s_type = 1;
       }
       else if (sscanf(message, "%99[^\n]", item_name) == 1){
        s_type = 1;
        if ((item_data = itemdb_searchname(item_name)) == NULL){
    	    clif_displaymessage(fd, "Not found item with this name");
    	    return -1;
        }
        item_id = item_data->nameid;
       }
       else {
        clif_displaymessage(fd, "Use: @whosell (<+refine> )(<item_id>)(<[card_id]>) or @whosell <name>");
        return -1;
       }
    
       //check card
       if(s_type & 2 && ((item_data = itemdb_exists(card_id)) == NULL || item_data->type != IT_CARD)){
        clif_displaymessage(fd, "Not found a card with than ID");
        return -1;
       }
       //check item
       if(s_type & 1 && (item_data = itemdb_exists(item_id)) == NULL){
        clif_displaymessage(fd, "Not found an item with than ID");
        return -1;
       }
       //check refine
       if(s_type & 4){
        if (refine<0 || refine>10){
    	    clif_displaymessage(fd, "Refine out of bounds: 0 - 10");
    	    return -1;
        }
        /*if(item_data->type != IT_WEAPON && item_data->type != IT_ARMOR){
    	    clif_displaymessage(fd, "Use refine only with weapon or armor");
    	    return -1;
        }*/
       }
       iter = mapit_getallusers();
       for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
       {
        if( pl_sd->vender_id ) //check if player is vending
        {
    	    for (j = 0; j < pl_sd->vend_num; j++) {
    		    if((item_data = itemdb_exists(sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
    			    continue;
    		    if(s_type & 1 && sd->cart.u.items_cart[pl_sd->vending[j].index].nameid != item_id)
    			    continue;
    		    if(s_type & 2 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) ||
    						    (sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
    						    sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
    						    sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
    						    sd->cart.u.items_cart[pl_sd->vending[j].index].card[3] != card_id)))
    			    continue;
    		    if(s_type & 4 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) || sd->cart.u.items_cart[pl_sd->vending[j].index].refine != refine))
    			    continue;
    		    if(item_data->type == IT_ARMOR)
    			    snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %d[%d] | Price %d | Amount %d | Map %s[%d,%d] | Seller %s",sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					    ,pl_sd->vending[j].value
    					    ,pl_sd->vending[j].amount
    					    ,mapindex_id2name(pl_sd->mapindex)
    					    ,pl_sd->bl.x,pl_sd->bl.y
    					    ,pl_sd->status.name);
    		    else if(item_data->type == IT_WEAPON)
    			    snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %d[%d,%d,%d,%d] | Price %d | Amount %d | Map %s[%d,%d] | Seller %s",sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
    					    ,sd->cart.u.items_cart[pl_sd->vending[j].index].card[3]
    					    ,pl_sd->vending[j].value
    					    ,pl_sd->vending[j].amount
    					    ,mapindex_id2name(pl_sd->mapindex)
    					    ,pl_sd->bl.x,pl_sd->bl.y
    					    ,pl_sd->status.name);
    		    else
    			    snprintf(atcmd_output, CHAT_SIZE_MAX, "ID %d | Price %d | Amount %d | Map %s[%d,%d] | Seller %s",sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    					    ,pl_sd->vending[j].value
    					    ,pl_sd->vending[j].amount
    					    ,mapindex_id2name(pl_sd->mapindex)
    					    ,pl_sd->bl.x, pl_sd->bl.y
    					    ,pl_sd->status.name);
    		    if(pl_sd->vending[j].value < MinPrice) MinPrice = pl_sd->vending[j].value;
    		    if(pl_sd->vending[j].value > MaxPrice) MaxPrice = pl_sd->vending[j].value;
    		    clif_displaymessage(fd, atcmd_output);
    		    count++;
    		    flag = 1;
    	    }
    	    if(flag && pl_sd->mapindex == sd->mapindex){
    		    clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
    		    flag = 0;
    	    }
        }
       }
       mapit_free(iter);
       if(count > 0) {
        snprintf(atcmd_output,CHAT_SIZE_MAX, "Found %d ea. Prices from %dz to %dz", count, MinPrice, MaxPrice);
        clif_displaymessage(fd, atcmd_output);
       } else
        clif_displaymessage(fd, "Nobody is selling it now.");
       return 0;
    }

     

     

  8. - Necesitaremos el GRF EDITOR para extraer del GRF el sprite que queramos modificar

    BEST.png.640ca0d869db7c957981ed1f60f17e7b.png

    - Extraemos unicamente el SPR del objeto a editar,  Aislaremos nuestro SPRITE en una carpeta, lo rompemos (extraemos todos los bitmaps) con el programa SPRCONVIEW, para hacer esto tenemos que darle a la opción convert Spr to Bmp.

    En el primer boton Browse que muestra la imagen, eliges el sprite que descargaste y le das a convert. las imagenes que se van a extraer de este sprite van a ir a parar en la misma carpeta donde esta ubicado el sprite, por lo que no elegimos BMP directory. Se recomienda tener el sprite aislado en una carpeta nueva.... no queras llenar tu escritorio con mas de 100 iconos de bitmaps ?

    BEST.png.06704ad0eb220bfbdc4edb936ff7c23f.png

    Elegimos nuestra imagen Modelo, Preferiblemente una donde se vean todas las cualidades del objeto que vamos a RECOLOREAR, ELIMINAMOS EL RESTO

    BEST.thumb.png.4690c14e95dedbfd02082b6228886b6d.png

    El BITMAP elegido lo debemos abrir con el programa ADOBE CS6, Yo uso el portable
    adobe-photoshop-cs6-logo.jpg.65deada16df41ad00170e92333b0942c.jpg

    Una vez abierto el Adobe CS6.    Nos vamos a la parte que dice Archivo, y le damos a Abrir, ahí elegimos el bitmap que habíamos seleccionado, y una vez abierto nos vamos a la barra superior y elegimos imagen, Luego Modo, y por ultimo TABLA DE COLORES

    BEST.thumb.png.1efac0e4b65305049c2a4514d512699a.png

    Cuando se Abre la Tabla de Colores Elegimos la Cuenta Gotas, le Damos un solo Click

    BEST.png.4013d09c7050a26428c50fff26b25a75.png

    Buscamos la Porción de color que querramos editar! Y le damos SOLAMETE UN CLICK con el cuentagotas, Esto nos indicara de que cuadrante de la paleta procede  el color que elegimos.  YO CLICKIE EL PANTALON DEL WHITESMITH PARA SABER DONDE ESTABAN ESOS COLORES

    BEST.png.fddfffc10994269dd332b5d81134a3c4.png

    MUY IMPORTANTE A LA HORA DE EDITAR PALETAS, Es que no podemos editar lo que nos de la gana, NO PODEMOS ELEGIR UN SOLO CUADRITO! Tienes que elegir los 8 Cuadros de la regla donde se descubrió el color que acabas de clickear con el cuentagotas, PARA SELECCIAR LOS COLORES DEBES VOLVER A CLICKEAR EN EL CUENTAGOTAS PARA DESACTIVAR LA HERRAMIENTA.

    SI TE FIJAS EN LA IMAGEN AL VOLVER A CLICKEAR EL CUENTAGOTAS YA NO ESTARA EN HILIGHT! y ya con esto puedes seleccionar la rama de colores que descubriste

    BEST.png.47124688ef1d8555f19670b1ce3d95ce.png

    Seleccionamos la regla de colores que habíamos descubierto, SIEMPRE TIENES QUE ELEGIRLA desde el Extremo Izquierdo hasta el Derecho, MANTENIENDO PRESIONADO EL CLICK Y ARRASTRANDO EL CURSOR A LO LARGO DE ESOS 8 BITS..  ASEGURARTE DE SELECCIONAR UNICAMENTE ESOS 8 DONDE DESCUBRISTE EL COLOR CON EL CUENTAGOTAS, No puedes pasarte porque editarias otra porcion del dibujo que no quisieras.

    BEST.png.554e8125458bb49f8e282bad13a53e0c.png

    CUANDO LO TIENES SELECCIONADO SUELTA EL CLICK DEL MOUSE Y SALDRA LA PANTALLA DE EDICIÓN DE COLORES

    ELIGES EL PRIMER COLOR Y LE DAS OK

    BEST.png.91677d170cc598a839dc2d98bdba69bc.png

    CUANTO ELIGES EL PRIMER COLOR, SE ABRIRÁ EL SELECTOR DEL ULTIMO COLOR, Cuando vas seleccionando el ultimo color vas a ir viendo como va cambiando el color de regla que elegiste...

    BEST.png.b04d1f608bd4d7c5c4acffea9b323c70.png

    Lo que conseguimos con haber seleccionado los 8bits de la regla del color es un efecto mate que se ira aplicando en el color que descubrimos con el cuentagotas.

    La clave de un buen paletaje es Elegir Un primer color claro, y un ultimo color oscuro. Pero tu podrás hacerlo como mas te guste.

    Volvemos a utilizar nuestro cuentagotas para ver que mas podemos encontrar, esta vez seleccione los guantes del Whitesmith y descubri la regla de colores del Guante
    BEST.png.467dbb725bc75f3293a3428499b86114.png

    Repetiré el paso anterior, Desmarcare el gotero, Luego elegiré los 8 bits de la regla de colores donde encontré el color del guante! 
    Usare un gris claro como primer color y un negro oscuro como ultimo color, para ver que me resulta. 

    Descubrí que esta regla no solo abarca los guantes, si no que también comparte el color de los sujetadores de la camisa de nuestro Withesmith, y aquí es donde hago valido lo que dije anteriormente, QUE NO PODEMOS EDITAR LO QUE NOS DE LA GANA A VOLUNTAD. Solo podemos cambiar el matiz de la regla de colores.

    BEST.png.86ccc0c1655ce245648267f2da67103a.png

    Tras experimentar mas con el gotero, encontramos varias reglas de colores que pudimos editar en nuestro whitesmith y este es el resultado final, Felicidades pues poseemos un color que ni el mismo Kamishi y su popular pack de paletas ha hecho.

    BEST.png.b722ceb44cfb5e5fc15a15f0438959ea.png

    Le damos a guardar, y lo guardamos como MICROSOFT PAL

    BEST.png.89e7a3b86f831d0b2419d42e2cd1f7c3.png

    Ya tenemos nuestro Archivo PAL, Para visualizarlo deberemos abrir el SPRITE! ojo el spr no el bitmap.
    Y en la pestaña Palette  ponemos OPEN PALETE y seleccionamos la que recien guardamos. Podras ver el objeto en accion con la nueva gama de colores que le aplicaste

    BEST.png.f1a4452daa993a5f30880b9deea65739.png

    Ese archivo pal puedes enviarlo al grf donde tenga las palettes siempre y cuando utilizes el nombre correspondiente de job, y el numero de paleta en la cual quieres que se muestre ese color. Debo aclarar que para que esas paletas se muestren correctamente en el cliente deberás abrir el archivo y remover la firma, ESTO APLICA UNICAMENTE PARA PALETAS DE COLOR DE PELO Y COLOR DE ROPA DE JOBS.

    La firma que debes borrar es la que muestro seleccionada aqui en la imagen.

    BEST.png.dcbd8a9039eebf72b8ea7e7b3f4b4b69.png

    -----------------------------------------------------------------------------------------------------------------------------

    SI EN LUGAR DE UN JOB, EDITASTE UN ITEM, UN MONSTRUO O UN NPC, ARMA ETC,  SIMPLEMENTE ABRE EL SPRITE, CARGA LA PALETA Y DALE SAVE, aqui no hace falta remover firmas.

    BEST.png.af61252fe7ae0bb90be54aacd50bd4c1.png

     

    Con el tiempo y dedicación seras un experto, podrás crear armas nuevas a bases de recolor,

    103063522_10220148957528406_6268129620909077472_n.jpg.f66e5543fd656efac2722788a9811322.jpg

    Podrás generar nuevos colores de cabello

    103115653_116737520070511_229391431515178427_o.jpg.a86d57d306b150760c086879a4ff1763.jpg

    Podrás reparar las caras de algunos sprites donde los tintes o paletas manchan la cara

    BESTONE.jpg.6579ee61ca624b955a39786237ba36f2.jpg

    Podrás crear tus propios escudos y armas, insertando y modificando imágenes y armando los sprites a partir de bitmaps.

    s2029732166_RO_OrcHero28SD29.png.e0bab082ab05033a5c73c6344bded9b0.png

     

    • Upvote 5
  9.  

    logo.png.8e7fd5a413d004227f0d41e96e85ff4d.png

    1- DESCARGAR NUESTRO EMULADOR

    Lo primero que necesitaremos es nuestro emulador rAthena ultima revisión y para ello debemos descargar Tortoise SvN aqui:
     https://tortoisesvn.net/downloads.html

    Dowload Tortoise

    Una vez descargamos el Tortoise Svn nos vamos al escritorio y creamos una carpeta con nombre rAthena, a dicha carpeta le damos click derecho y elegimos la opcion SVN Checkout...

    best.png.095faa13b4986890a4f03a5282a75186.png

    Se abrirá la ventana de CheckOut y en el URL of repository colocamos  https://github.com/rathena/rathena/trunk y en Revision ponemos HEAD

    best.png.7893ebfb05a6761c8abbe315e7f409d5.png

    Al darle Ok, el programa empezara a descargar el emulador a la carpeta rAthena, si todo salio bien habrás descargado con éxito tu emulador con la ultima revisión del repositorio.
    success.jpg.89223a737816fc2db35e1b9993280b18.jpg

    2- CREAR NUESTRO SERVIDOR

    Una vez descargado el emulador, necesitaremos crear nuestra base de datos SQL en nuestro ordenador, con las credenciales del servidor, para ello vamos a necesitar el programa MySql

    Download MySQL

    Nos dirigimos a este link https://dev.mysql.com/downloads/installer/  y elegimos la opción mas pesada de 420 MB.

    success.jpg.a3f77547340e42e7550e0dc1153c5b95.jpg

    Al momento de instalarlo nos irán saliendo las opciones de configuración, en la de High Availability marcamos la primera opción, Standalone MySQL Server y le damos next

    choose-the-setup-type-for-mysql-database-server.png.b6b4a448563d3587df5aa722443f587c.png

    En la Opcion Type and Networkimg elegimos Development Computer y NO TOCAMOS ABSOLUTAMENTE MAS NADA DENTRO DE ESTA CONFIGURACION!

    choose-the-setup-type-for-mysql-database-server.png.f0608cdc155d3d907b9cc9403ba9d696.png

    le damos Next y entraremos en el Methodo de Autenticacion, aqui solamente marcamos Use Legacy y le damos al Next
    choose-the-setup-type-for-mysql-database-server.png.058155803e8157264cfae1d012222351.png

    En  Account & Roles, para el password de Root pondremos como pasword  ragnarok en minúsculas,  ragnarok es la que contraseña que viene por defecto en el inter athena conf del emulador.

    choose-the-setup-type-for-mysql-database-server.png.d90711bc7e613ddb8ed199a7844b3ec0.png

    En Windows Service dejamos todo como esta y le damos next
    choose-the-setup-type-for-mysql-database-server.png.0ee340a6e87a3e70202a4be0cebd6198.png

    En la siguiente ventana, le damos a EXECUTE para que se empiezen a aplicar todas las configuraciones, Cuando todos los ganchos están en verde indica que se instalo bien tu servidor, En este punto,  tienes instalado tu servidor local en tu computadora y esta corriendo. 

    choose-the-setup-type-for-mysql-database-server.png.f570ec52f31dfaa8729d260cf174bf1a.png

    3- DESIGNAR EL NOMBRE CORRECTO DE NUESTRO SERVIDOR ROOT EN LOS COMPONENTES DEL SERVIDOR
    choose-the-setup-type-for-mysql-database-server.png.a14d61c56db22bc8b979f4f88aacde8e.png

    Ya que tenemos nuestro servidor Root en la computadora, nos vamos a nuestro folder de emulador rAthena, buscamos la carpeta conf, y dentro encontraremos el archivo inter_athena,  como este es un archivo de texto le damos a editar, y nos vamos a la parte de Global SQL Settings

    En la linea 31, en login_server_id reemplazamos ragnarok por root, pues root es el servidor SQL que instalamos en nuestro ordenador, y deberá quedar así:

    // MySQL Login server
    login_server_ip: 127.0.0.1
    login_server_port: 3306
    login_server_id: root
    login_server_pw: ragnarok
    login_server_db: ragnarok
    login_codepage:
    login_case_sensitive: no

    En la parte de ipban_db_id también cambiamos el ragnarok y ponemos root,  debera quedar asi:

    ipban_db_ip: 127.0.0.1
    ipban_db_port: 3306
    ipban_db_id: root
    ipban_db_pw: ragnarok
    ipban_db_db: ragnarok
    ipban_codepage:

    En el char_server_id reemplazamos ragnarok y ponemos root,  debera quedar asi:

    // MySQL Character server
    char_server_ip: 127.0.0.1
    char_server_port: 3306
    char_server_id: root
    char_server_pw: ragnarok
    char_server_db: ragnarok

    El map_server_id también le reeplazamos el ragnarok y le ponemos el nombre root ya que este es el nombre dado por nuestro servidor sql, deberá quedar asi:

    // MySQL Map Server
    map_server_ip: 127.0.0.1
    map_server_port: 3306
    map_server_id: root
    map_server_pw: ragnarok
    map_server_db: ragnarok

    Por ultimo pero no menos importantes los logs, en log_db_id reemplazamos ragnarok por root, debiendo quedar así:

    // MySQL Log Database
    log_db_ip: 127.0.0.1
    log_db_port: 3306
    log_db_id: root
    log_db_pw: ragnarok
    log_db_db: ragnarok
    log_codepage:
    log_login_db: loginlog

    CHAR_ATHENA

    Ya que terminamos de ajustar el inther athena conf, nos vamos al char_athena conf, esta parte es importante porque aquí seteamos el mapa de inicio de nuestros personajes creados. Eliges el mapa de inicio de tus novice para renewal o pre renewal..

    Te recomiendo usar una data renewal si vas a usar un punto de partida renewal, NO PUEDES ser renewal sin data renewal pues se te pondra la pantalla negra cuando logees tu char... mas adelante te enseñare como configurar tu emulador para renewal o pre-renewal

    Dentro de char_athena también desactivamos algo bastante molesto llamado pincode, solo basta encontrar la linea que dice pincode_enabled y ponemos no, deberá quedar así:

    //===================================
    // Pincode system
    //===================================
    // NOTE: Requires client 2011-03-09aragexeRE or newer.
    // A window is opened before you can select your character and you will have to enter a pincode by using only your mouse.
    // Default: yes
    pincode_enabled: no

     LOGIN_ATHENA

    Aquí solo necesitamos ajustar una sola cosa! y es el poder Habilitar la creación de nuestro personaje con _M o _F

    En la linea 54 de este file ponemos yes en la opcion "//Can you use _M/_F to make new accounts o the server?

    Debera quedar así:

    // Can you use _M/_F to make new accounts on the server?
    // Note: This only works if client side password encryption is not enabled.
    new_account: yes

    terminamos las configuraciones del emulador por ahora.

     

    4- GESTIONAR NUESTRA BASE DE DATOS

    Una vez configurado el inter_athena.conf char_athena.conf y login_athena.conf necesitaremos un programa para crear nuestra BASE DE DATOS, yo recomiendo altamente el programa HeidiSQL por su facilidad de uso, este es el primero que use cuando empece a crear servers, y nunca me ha fallado.

    Heidisql

    Link de descarga aqui:
    https://www.heidisql.com/download.php

    Una vez tenemos Instalado Heidi!,  procedemos a crear la base de datos de nuestro servidor, elegimos Nueva, Aquí Lo importante es mantener el usuario root ya que ese es el nombre de nuestro servidor de datos sql, en contraseña debemos poner ragnarok en minuscula, pues es la clave que elegimos al instalar mysql y son las claves de los componentes que vienen por defecto en el inter_atena.conf.  Al nombre de la sesión le puedes poner el que mas te guste, yo lo dejare en unnamed para guiarlos mejor.

    choose-the-setup-type-for-mysql-database-server.png.581c606d76bdd314aeaab024d6ffd302.png

    Cuando la tenemos creada le damos a abrir, hacemos click derecho sobre Unnamed o el nombre de sesion que le hayas dado, eliges crear nuevo, y le das click a base de datos.

    choose-the-setup-type-for-mysql-database-server.png.bbf18b51a0b48ba94bb40ddb663cf00e.png

     Es MUY MUY IMPORTANTE que el nombre de la base de datos sea ragnarok pues es el mismo nombre que tienen los componentes del server en el inter_atena.conf que previamente configuramos ok?

    Una vez creada la base de datos ragnarok la seleccionamos y nos vamos a la pestaña archivo

    choose-the-setup-type-for-mysql-database-server.png.031c72f04ed4932d309fd29f51d01b11.png
     
    Al abrir la pestaña archivo seleccionamos cargar archivo SQL, y se nos abrirá la ventana de exploración, en la cual elegimos rAthena, luego sql-files y elegimos main y logs con control, una vez seleccionados main y logs le damos a abrir.

    choose-the-setup-type-for-mysql-database-server.png.2f312028c19896c7557457f63934ce92.png

    Una vez abiertas dirígete a la pestaña main, y ejecutala dandole click al triangulo azul, veras como se van cargando las tablas en la base de datos ragnarok

    choose-the-setup-type-for-mysql-database-server.png.898eae8baf5e1c2bcba7d32d2e5674db.png

    Una vez terminada de cargar las main, selecciona la de logs y procede con lo mismo, click al triangulo para ejecutar, la tabla logs es importante ya que esta registra los movimientos de items, objetos comandos, en fin es como una bitacora que ni so se carga el emulador se la pasara enviando warnings.

    Otros sql-files que podrias cargar dentro de la db ragnarok serian el roulette_default_data por si quieres implementar la ruleta en tu servidor, pero los premios y requisitos de la ruleta se configuran en esa misma tabla y no en scripts.

    Cuando se ha cargado todo, presiona f5, esto recargara las tablas, en pocas palabras actualizara o refrescara heidi y MAGIA
    puedes ir a la tabla login, y luego a la pestaña datos, la account_id 1 es del sistema y esa no la puedes ocupar para tu char, alli van a parar los chars que creas en tu server, para ser ADMIN con todos los comandos debes ponerte 99 el el group id.

    choose-the-setup-type-for-mysql-database-server.thumb.png.fd440f26783999f5a32cb6500c9b985e.png

    Ya tenemos servidor, y base de datos.

    5- COMPATIBILIZAR EL EJECUTABLE Y COMPILAR NUESTRO EMULADOR

    Antes de Encender nuestro emulador debemos configurarlo y luego compilarlo.

    El cliente o ejecutable que recomiendo es  2018-06-20eRagexeRE.exe pues es el que considero mas estable, este ejecutable lo puedes descargar en el post de MathReaper

    Para compatibilizar el exe con el emulador debes ir a tu carpeta rAthena y elegir la carpeta SCR, (ya estamos en territorios de alto riesgo), dentro de la carpeta  scr nos vamos a la carpeta config y abrimos packets.hpp 
    choose-the-setup-type-for-mysql-database-server.png.2124c723066b232e8655674850796b1b.png

    Para tener una mejor experiencia editando estos archivos, recomiendo el programa notepad++
    lo puedes descargar aqui: https://notepad-plus-plus.org/downloads/

    al abrir packets.hpp encontraremos la linea que tiene asignada la versión del exe

    #ifndef PACKETVER
    	/// Do NOT edit this line! To set your client version, please do this instead:
    	/// In Windows: Add this line in your src\custom\defines_pre.hpp file: #define PACKETVER YYYYMMDD
    	/// In Linux: The same as above or run the following command: ./configure --enable-packetver=YYYYMMDD
    	#define PACKETVER 20200401
    #endif

    en el #define PACKETVER 20200401  debemos cambiar y asignar el exe que les recomendé en este caso el 20180620
    el texto deberá quedar así
     

    #ifndef PACKETVER
    	/// Do NOT edit this line! To set your client version, please do this instead:
    	/// In Windows: Add this line in your src\custom\defines_pre.hpp file: #define PACKETVER YYYYMMDD
    	/// In Linux: The same as above or run the following command: ./configure --enable-packetver=YYYYMMDD
    	#define PACKETVER 20180620
    #endif

     

    Para Evitar la Black Screen del Exe al seleccionar tu personaje deberás editar y agregar tu packet version en el siguiente archivo:

    SCR/CUSTOM/

    defines_post.hpp

    defines_pre.hpp

    si lo vas a hacer pre renwal editas el defines_pre.hpp

    si lo vas a hacer renewal entonces edintas el defines_post.hpp

    // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
    // For more information, see LICENCE in the main folder
    
    #ifndef CONFIG_CUSTOM_DEFINES_PRE_HPP
    #define CONFIG_CUSTOM_DEFINES_PRE_HPP
    
    /**
     * rAthena configuration file (http://rathena.org)
     * For detailed guidance on these check http://rathena.org/wiki/SRC/config/
     **/
    #define PACKETVER 20180620
    
    
    #endif /* CONFIG_CUSTOM_DEFINES_PRE_HPP */

     

    RENEWAL O PRE?

    El emulador viene RENEWAL por defecto, si queremos ser pre renewal tenemos que ir a la carpeta SCR de nuestro rAthena, luego a la carpeta config y abrimos renewal.hpp

    success.png.24649d34bda78f8ef9ec17a487ebd7f2.png

    Una vez abierto lo único que debemos hacer es comentar la parte que dice #define Renewal,  comentar no es mas que colocar dos slashes // al inicio del  define de renewal! como muestra la imagen para deshabilitar todas las características de renewal solo basta con dejar el texto asi:

    success.png.ce4042c65db6812be1fa30782435e17b.png

    //#define Renewal 

    COMPILACION

    Una vez hecho todos estos cambio debemos compilar nuestro emulador! Para compilar el emulador necesitas tener instalado el Visual Studio Community, lo podrás conseguir en este link: https://visualstudio.microsoft.com/es/downloads/ 
    fnlksklfnklsndlkf.thumb.jpg.fb83e61cf92f770662b857f3deb3c7cd.jpg

    Al momento de instalarlo deberás elegir las herramientas C+   yo recomiendo la universal windows platform development y desktop developtment with C++. el resto nisiquiera la vamos a mirar.
    Community-page-installer-1.png.3b1e29bc45879749983b3d20250631be.png

    Una vez tenemos el Visual Instalado nos vamos a la carpeta de nuestro emulador y abrimos la solución, de nombre rAthena.sln

    SLN.jpg.4bd04c44b8ec3af990fca8917dadd88a.jpg

    Una vez Abierta la solución!,  ASEGURATE DE ELEGIR RELEASE como lo muestro en la IMAGEN y no Debug, luego click derecho en Solución rAthena y click a Compilar Solución, ahora deberás esperar que se compilen todos los proyectos

    success.thumb.png.0e2cee02631d37bfdbd74d369debf0bd.png

    Si tu compilación fue exitosa tendrás  correctos todos los resultados

    success.png.3624f810e52e8f535363c95b1b695301.png

    Ya puedes abrir tu emulador, para ello ve a la carpeta rAthena y abre individualmente los proyectos
    loginserv  charserv  y  mapserv

    success.png.0e0954bc74b6842e7a63b3db0933157f.png

    Si quieres ahorrarte el trabajo de abrir siempre los 3 componentes del server cada vez que inicies tu emulador, abre solamente runserver, lamentablemente esto viene bugeado, y no se ha corregido, por lo cual tuve que editarlo para que funcionara, si lo quieres,  PUEDES DESCARGAR ESTOS CON TODA CONFIANZA Y METERLOS EN TU CARPETA RATHENA, Reemplazando los que vienen por defecto, con esto podras abrir el emulador usando solo runserver. pero necesitaras estos 2 archivos que voy a poner aqui abajo:
    runserver.bat y serv.bat

    Si seguiste bien todas las indicaciones, tendrás abierto un emulador optimo y sin ningún  error!.

    success.png.abf4fa8ed3e5cb7677e00944592a7ece.png success.png.39493f21e7de42f6f1a373285535b68a.png
    success.png.c56d894b0de35330144f04bdce827997.png
     

    6- CREAR NUESTRO CLIENTE Y DIFFEAR NUESTRO EXE PARA EMPEZAR A JUGAR NUESTRO EMULADOR

    Antes que nada necesitas el KRO COMPLETO, EL JUEGO RAGNAROK , Lo puedes descargar aquí mismo, Nuestro administrador Akkarin nos compartió el ultimo cliente en este topic:

    Una ves terminado de descargar y extraer el KRO Limpio, necesitaras crear los archivos de tu propio cliente,  Estos archivos del cliente son los GRF y la Data Traducida que tiene Archivos Luas, Descripcion de Objetos, Quests, Entre Otros,  y son los que deberás exportar a tu Ragnarok Limpio.

    Tengo a Disposición un RAR Limpio, con los archivos necesarios y básicos para un cliente, consta de 2 GRF's uno llamado Custom y Otro llamado Pal, tambien tiene un exe pre difeado que puedes usar para ir testeando tu servidor.

    Si tu servidor va a ser Pre Renewal, con los items, mapas, y descripciones de pre renewal deberas bajar este rar de mi unidad Drive:

    https://drive.google.com/file/d/1M8gvEWnumjPwNwzXLrACBYYAqE3ptoRp/view?usp=sharing

     

    Si tu servidor va a ser RENEWAL con la descripcion de items, y mapas renewal deberas bajar este rar de mi unidad Drive:

    https://drive.google.com/file/d/18Pn4Zw0q_-yBTkE9n30JN8hGLGmL6iyo/view?usp=sharing

    Al descargar y extraerse, lo único que deberás hacer copiarlo todo y pegarlo a la carpeta del ro limpio. TODO LO QUE TE PIDA REEMPLAZAR LO REEMPLAZAS!

    estos archivos podrás editarlos o preservarlos por si quieres crear un instalador para tu usuarios.

    success.thumb.png.efcca4e440fbed791cbe94c6191b45d1.png

    Si tienes el emulador encendido, puedes intentar entrar a tu servidor ejecutando el exe pre diffeado que acabas de pegar en tu ragnarok limpio, el de nombre 2018-06-20eRagexeRE_patched  que te incluí en el RAR,  Si te sale THE EXE HAS CHANGED al principio, cierra y vuelve a abrir, esto pasa una sola vez y te indica que el ejecutable que se usa es el de tu servidor y no el de Kro,
    Cuando abras podrás crear tu personaje, lo que indica que estas en el servicio correcto.

    success.thumb.png.9b6267674f656cd1a09af6d4ea0e7d41.png

    Si quieres diffear tu propio ejecutable deberás descargar nemo Patcher en este Link:

    https://gitlab.com/4144/Nemo/

    success.jpg.9aa5235ba4bf6bd662c93b49ccac603b.jpg

    En imput exe file subes el ejecutable que hayas descargado, recuerda que debe ser la misma versión que definiste en tu emulador, en output es donde se va a generar el ejecutable diffeado, pones Load Client y se cargaran todos los parches posibles para el exe.

    Algunos diff Recomendados y Otros necesarios para que el cliente arranque sin problemas son:

    @ Bug Fix (Recommended)
    Allow close cutin by pressing esc key
    Allow space in guild name
    Always Load Client Plugins [Experimental]
    Always Show Resurrection Button
    Always Use Email for Char Deletion
    Always load Korea ExternalSettings lua file
    Cancel to Login Window (Recommended)
    Change RecommendedQuestInfoList*.lub path   aqui escribes  system\OngoingQuestInfoList
    Change character display deletion time from actual date to relative date
    Change minimal screen resolution limit
    Change new char name field height          AQUI PONES 17 esto muestra el nombre correctamente al momento de crear tu personaje
    Chat Flood Remove Limit
    Custom Window Title    aqio pones el nombre que le quieres dar a tu ventana de ragnarok
    Disable 1rag1 type parameters (Recommended)
    Disable Help Message on Login (Recommended)
    Disable Swear Filter
    Disconnect to Login Window
    Enable /who command (Recommended)
    Enable DNS Support (Recommended)
    Enable Effect for all Maps [Experimental]
    Enable Emblem hover for BG
    Enable Monster Tables
    Enable Multiple GRFs (Recommended)      solo el recommended
    Enable Shortcut All Item
    Enable Title Bar Menu                botones en tu ventana de ragnarok
    Enable guild while in clan           si quieres guild mientras estas en clan, deberas modificar el script de clans en rathena para pasar este filtro
    Enforce Official Login Background
    Extend Chat Box
    Extend Chat Room Box
    Extend Npc Dialog Box
    Extend PM Box
    Fix Camera Angles (Recommended)
    Fix Homunculus attack AI
    Fix achievement counters for each type of achievement      Por si habilitaras achievements
    Fix act delay for act files with many frames
    Fix item description bug
    Hide build info in client (Recommended)
    Hide packets from peek (Recommended)
    Hide zero date (1969-01-01) in guild members window
    Ignore /account: command line argument
    
    Ignore Lua Errors          --- esto lo puedes desactivar cuando tengas tu cliente terminado
    Ignore Missing Palette Error  --- esto lo puedes desactivar cuando tengas tu cliente terminado
    Ignore Resource Errors   --- esto lo puedes desactivar cuando tengas tu cliente terminado
    
    Increase Headgear ViewID     Ponle 4000, asumiento que meteras hat custom, ragnarok ya supero las 2000 IDS
    Increase Zoom Out 75%         o max como quieras
    Increase hair style limit for human only in game (old)
    Load Custom lua file instead of iteminfo*.lub (Recommended)    aqui debes poner System/iteminfo.lua
    Only First Login Background
    Read msgstringtable.txt (Recommended)
    Remove Gravity Ads (Recommended)
    Remove Gravity Logo (Recommended)
    Remove Hourly Announce (Recommended)
    Remove Serial Display (Recommended)
    Remove wrong chars from cash shop
    Restore Cash Shop Icon
    Restore Login Window (Recommended)
    Show Register Button   boton de redireccion al enlace de registro de chars que hayas puesto en tu sclientinfo
    Show Replay Button     aqui se reproduciran las partidas que grabes en tu ragnarok
    Skip License Screen
    Skip some hidden menu icon buttons     si desactivaste botones este parche hara que se acomoden los espacios vacios entre botones ocultos
    Translate Client (Recommended)
    Use Ascii on All LangTypes (Recommended)
    Use Default Web Browser In Cashshop
    Use Default Web Browser for URL
    Use Normal Guild Brackets (Recommended)
    Use Official Cloth Palettes               Necesario para que se muestren las paletas de colores
    Use Plain Text Descriptions (Recommended)
    Use Ragnarok Icon
    Use Tilde for Matk

    Los Diff que de ningún modo debes activar:

    Always Call SelectKoreaClientInfo() (Recommended)    Aunque Diga recomended NO LO HABILITES
    Change Walk To Delay         Incomodo, acelera la resuesta de clicks hara que camines hacia un npc aun despues de abrir su dialogo
    HKLM To HKCU        NO LO HABILITES
    Skip Service Selection Screen      NO LO HABILITES si rompes el protocolo de seleccion de servicio no podras abrir el select char window
    
    


    success.thumb.jpg.d7eaee8313ec1c116b59bb5125474ebc.jpg

    EDICIÓN DE GRF Y SCLIENTINFO

    El programa para editar tu grf sera GRF EDITOR de Tokei, este programa es el equivalente a un arma forjada por el mismo Hefesto, así  recuerda darle un upvote si llegas a descargarlo 

    success.jpg.fb5644def32afa6e481093170f3e1c97.jpg

    Con este programa abres tu Custom.grf  y podrás visualizar los archivos del GRF de tu servidor, recuerda que siempre que vayas a aplicar un cambio, deberás tener el exe del ragnarok cerrado.

    success.jpg.2259f84c99c0680ce7d099ecb6516b74.jpg
    En la carpeta data de tu Custom.grf se encuentra el sclientinfo.xml,  en el campo Display editas El nombre del servidor que se mostrara cuando abras tu ejecutable, podrás asignar o remover las ropas de game master, tambien podrás cambiar el link del web de registro al que te dirige el boton register. Si vas a subir tu emulador a un host deberas editar el sclientinfo y  poner la ip en donde esta montado tu servidor.

    El orden de lectura de los GRF se asigna en un archivo llamado Data.ini y el orden debera ir asi:

    [Data]
    1=custom.grf
    2=palette.grf
    3=rdata.grf
    4=data.grf

    exitopapa.jpg.b37c023408763a183c09deff0c4dcf4a.jpg

    Como ha notado, el grf de palettes está aislado,  si bien no es muy pesado, esta lleno de miles de archivos pals, si llegaras a descargar las paletas de kamishi te recomiendo usar un grf exclusivo de paletas y no mezclarlo con tu custom pues estanos hablado de mas de 40mil archivos que tomaran bastante tiempo en empaquetarse.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Montar el Servidor a un Host

    Hasta Este Punto de la guía! ya tienes tu Servidor Local, Tu Emulador Funcional sin errores, Tu cliente con Exe y GRF custom.

    Para Montar tu emulador a un host recomiendo el programa WinSCP
    https://winscp.net/eng/download.php

    logo.png.021886e89c7271fe07bd5a3cbaa3f6b6.png

    Abres Winscp y colocas las credenciales que te entrego tu proveedor de servicios Host

    Pasas el Emulador a la carpeta raiz de tu host

    BEST.png.fa55aa19865bf20b1e0adf0ade6cbca0.png

    Cambias los datos de tu char_athena.conf
    en este file editas el // Login Server IP  y el // Character Server IP   pones la ip del host.  Edita tambien el // Server Communication username and password. 
    Porque el default S1 Y P1 todos lo conocen, este debe coinicidir con la de tu main sql.

    En login_athena.conf
    no se editan ips. pero puedes volver a habilitar o deshabilitar la creacion de chars usando _M o _F, esto por si quieres que los registros sean únicamente por Control Panel

    // Can you use _M/_F to make new accounts on the server?
    // Note: This only works if client side password encryption is not enabled.
    new_account: no

    En map_athena.conf
    Colocas el mismo server comunication username y password que tienes en tu sql y en tu char_athena.conf, el default es S1 y P1 pero tu elige uno que nadie conozca.

    // Interserver communication passwords, set in account.txt (or equiv.)
    userid: 
    passwd: 

    En inter_athena.conf
    Aqui no se editan ips ni puertos, aquí solamente se se colocan las credenciales de las _db: y _pw: correspondientes a las que tienes creadas en la base de datos de tu proveedor de servicios.
     

    // MySQL Login server
    login_server_ip: 127.0.0.1
    login_server_port: 3306
    login_server_id: root
    login_server_pw: 
    login_server_db: 
    login_codepage:
    login_case_sensitive: no
    
    ipban_db_ip: 127.0.0.1
    ipban_db_port: 3306
    ipban_db_id: root
    ipban_db_pw: 
    ipban_db_db: 
    ipban_codepage:
    
    // MySQL Character server
    char_server_ip: 127.0.0.1
    char_server_port: 3306
    char_server_id: root
    char_server_pw: 
    char_server_db: 
    
    // MySQL Map Server
    map_server_ip: 127.0.0.1
    map_server_port: 3306
    map_server_id: root
    map_server_pw: 
    map_server_db: 
    
    // MySQL Log Database
    log_db_ip: 127.0.0.1
    log_db_port: 3306
    log_db_id: root
    log_db_pw: 
    log_db_db: 
    log_codepage:
    log_login_db: loginlog

    Abrir  y Compilar tu emulador remotamente
    Para abrir tu emulador cargado al host, necesitaras un programa llamado Putty que puedes descargar aqui

    https://www.putty.org/

    68747470733a2f2f696d616765732e7765736572762e6e6c2f3f75726c3d7261772e67697468756275736572636f6e74656e-6c617465732f6d61737465722f6a6c65736167652f696d616765732f707.png.cab7f79cd1bd4532cd8bad71d3e332fc.png

    Al abrirlo en el campo Host Name or IP adress colocas la Ip de tu host y le das OPEN

    BEST.png.f6748e0ff399cf2187e0b4aac4af77a4.png

    Ya estas dentro de tu vps, y el te va a solicitar el user y el password que te proporciono el Host, debes tener cuidado al colocar el password porque no se van a mostrar los typing en la consola.

    BEST.png.63ed17b63cde986eeadaa813c1d0ed28.png

    Al entrar exitosamente tendras un display de los comandos preparados por su proveedor, generalmente son ON, OFF, PREPARAR, COMPILAR etc. Con los que puedes arrancar, detener, reiniciar o compilar el emulador que tienes cargado en el host. 
    Deberas compilar y iniciar el emulador después de haber editado los confs con los datos del host.

    Aqui vemos el trabajo de compilación mediante vps

    BEST.png.aca5b36123e48ce7e63ee4f5aa12de23.png

    Aqui vemos como ha iniciado el servidor,  debe estar lleno de status y no errores

    BEST.png.4749b0ffe88d0b1f6bb328f7844dc492.png

    Aqui un logeo exitoso

    Recuerda editar tu sclientinfo y ponerle la ip de tu provedor de host.

    BEST.thumb.png.d4d630775f2e05bdb7af818e98e2f700.png

     

     

    gracias_en_varios_idiomas.jpg.b2c0f1fb44b8d9de7b1f28ffd76ed3d0.jpg

    • Upvote 8
    • Love 3
    • MVP 2
×
×
  • Create New...