Jump to content

iraciz

Members
  • Posts

    562
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by iraciz

  1. On 4/4/2014 at 7:26 AM, Cydh said:
    src/map/skill.c | 1 +
     1 file changed, 1 insertion(+)
     
    diff --git a/src/map/skill.c b/src/map/skill.c
    index ad08fb3..23db870 100755
    --- a/src/map/skill.c
    +++ b/src/map/skill.c
    @@ -15595,6 +15595,7 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
      pc_unequipitem(sd,idx,3);
      }
      clif_delitem(sd,idx,1,3);
    + clif_additem(sd,idx,1,0);
      clif_upgrademessage(sd->fd, 0, item->nameid);
      clif_inventorylist(sd);
      clif_refine(sd->fd,0,idx,item->refine);
     

    this is gold, I still use this solution nowadays

  2.  

    Hello I implemented this code to broadcast mvp respawns.

     scr/map/mob.cpp

    		md->spawn_timer = INVALID_TIMER;
    		mob_spawn(md);

    Under this line I placed:

    				// if monster boss -> do announce
    		if( md->spawn->state.boss ) {
    			char message[128];
    			sprintf(message, "[MVP Spawn]: %s has been spawned on %s map.", md->name, map_mapid2mapname(md->spawn->m));
    			clif_broadcast(&md->bl, message, strlen(message) + 1, BC_DEFAULT, ALL_CLIENT);
    		}
    	}
    	return 0;

    It's working fine, MvP Respawns are being broadcasted, but now may I now is there any way to get rid of some console warnings?

    1>mob.cpp
    1>C:\Users\mario\Desktop\rAthena \src\map\mob.cpp(1049,80): warning C4267: 'argumento': conversión de 'size_t' a 'int'; posible pérdida de datos
    1>C:\Users\mario\Desktop\rAthena \src\map\mob.cpp(2839,57): warning C4267: 'argumento': conversión de 'size_t' a 'int'; posible pérdida de datos
    1>C:\Users\mario\Desktop\rAthena \src\map\mob.cpp(3009,58): warning C4267: 'argumento': conversión de 'size_t' a 'int'; posible pérdida de datos
    1>C:\Users\mario\Desktop\rAthena \src\map\mob.cpp(6410,50): warning C4267: 'inicializando': conversión de 'size_t' a 'int'; posible pérdida de datos
    1>C:\Users\mario\Desktop\rAthena \src\map\mob.cpp(6411,65): warning C4267: 'inicializando': conversión de 'size_t' a 'int'; posible pérdida de datos

     

    Can you guys lend me a hand?

     

  3. Client and other players experience crashing everytime this script runs

      - Id: 18856
        AegisName: W_King_Tiger_Doll_Hat
        Name: W King Tiger Doll Hat
        Type: Armor
        Buy: 10
        Defense: 10
        Locations:
          Head_Top: true
        ArmorLevel: 1
        EquipLevelMin: 1
        Refineable: true
        View: 973
        Script: |
          bonus bStr,2;
          bonus bDex,2;
          bonus2 bAddRace,RC_Brute,10;
          bonus2 bAddRace,RC_Player_Doram,10;
          .@r = getrefine();
          autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*max(1,getrefine()); }",3*.@r,3000,BF_NORMAL,"{ active_transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \"Traaaansformation-!! Eddga form!!\"; }";
          autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*max(1,getrefine()); }",.@r,3000,BF_NORMAL,"{ active_transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \"Traaaansformation-!! Eddga form!!\"; }";
     

     

    or

     

      - Id: 11592
        AegisName: Trance_Candy_R
        Name: Trans Candy Red
        Type: Healing
        Buy: 20
        Weight: 30
        Script: |
          itemheal 45,0;
          transform 1507,600000,SC_MTF_MHP,20;
          specialeffect2 EF_CLOAKING;
          showscript "Trans-Form-!! Bloody Murderer Fo-rm!!";

     

    There is no console error or .exe crash log to identify the source. any idea?

  4. Sorry for the necro posting!

    both skills hit twice, but not as I would like, showing the 2 hits with yellow numbers.

    I got this in scr/map/battle.c

    Line

    	switch (skill_id) {
    		case RK_WINDCUTTER:
    			if (sd && sd->weapontype1 == W_2HSWORD)
    				wd->div_ = 2;
    			break;

    add:

    		case RG_BACKSTAP:
    			skill_lv = pc_checkskill(sd, TF_DOUBLE);
    			if (skill_lv > 0) {
    				if(rnd()%100 < (7 * skill_lv)) {
    					wd->div_++;
    				}
    			}
    		break;
    		
    		case RG_RAID:
    			skill_lv = pc_checkskill(sd, TF_DOUBLE);
    			if (skill_lv > 0) {
    				if(rnd()%100 < (7 * skill_lv)) {
    					wd->div_++;
    				}
    			}
    		break;	

     

    It work as I wish, both skills are taking tf_double chances to hit double, bad is that! It does it with any weapon or even barehanded.. I would like to make it work with daggerclass only!

     

  5. Good day,please help me!  Bindatcommands are not working in the item scripts.

    TXT Example:

    40574,Moonlight Bell,Moonbell,11,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 549; soundeffectall "moonlight_move.wav",0; atcommand "@bonus"; },{},{}

     

    @bonus is a custom npc bind atcommand that I use to apply random options to the gear.

    sbuster2.png.fabc393851cd0aba191e6fe0e7c3ff93.png

    Oncommand only works with typing or talking to the NPC, but I want activate the script by using the item above.

    sbuster2.thumb.png.f3a5b217251b801782abef83991249a0.png

     

    What can I do?

  6. Good day, This is [Euphy] rathena custom npc default warper.

    Any way to reset last warp map and coordinates OnPCLogOutEvent

     

    	if (lastwarp$ == "")
    		message strcharinfo(0),"You haven't warped anywhere yet. Last warp resets with logout.";
    	else
    		warp lastwarp$,lastwarpx,lastwarpy;
    	end;

     

     

    function Go {
        set lastwarp$, getarg(0);
        set lastwarpx, getarg(1,0);
        set lastwarpy, getarg(2,0);
        warp getarg(0),getarg(1,0),getarg(2,0);
        end;
    }

     

    Help please

  7. dear Slammer!

     

    Something went wrong, the item still restores sp without the gear equipped.

     

    515,Carrot,Carrot,0,15,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(18,20),0; if (getequipid(EQI_HEAD_LOW) == 18683) specialeffect2 332; if (getequipid(EQI_HEAD_LOW) == 18683) itemheal 0,rand(2,4); },{},{}

    But I solved it by individualizing the effects separatedly.

  8. Good morning dear community, for me it is a pleasure to return to rathena.

    This time I ask for help with the isequiped check, I am working in a low rate server  without sp consumables,  and I came up with the idea of creating an additional bonus for the lower item id: carrot in mout "https://ratemyserver.net/index.php?page=re_item_db&item_id=18683". 

    I want this item, while being equipped on lower head, to cause carrots to restore sp when consumed.

    I made the function already:

    515,Carrot,Carrot,0,15,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(18,20),0; callfunc "zanabria"; },{},{}

     

    Now I need help in this part:

    function    script    zanabria    {
    if (isequipped(18683)) specialeffect2 332;
    itemheal rand(0,0),rand(2,4);
    end;
    }

    This is the aditional sp restore effect while equiped, but I NEED help here for the else exception, because it sill restoring sp withput the equiped carrot in mouth.

     

     

     

     

     

  9. On 12/27/2021 at 10:35 PM, danteviscount71 said:

    hello everyone, im newbie in this forum also newbie about programing, can some one help me how to add translation onto my ragnarok file? its need a program or i just need to copy and paste? thanks everyone before

    download tortoise svn

    create folder: ROenglishRE

    left click to that folder, Svn checkout

    paste to the url box:
    https://github.com/llchrisll/ROenglishRE


    Ok, and download. 

    add those files "the Data folder"  into a custom grf, with your clientinfo. repack, and run the exe.

    The system folder is for your client folder, not to the grf.

  10. Almost 2 years off.. what's new regarding rAthena? 

    Any stable client? With the visual effects for the robes? 2021...

    How difficult now? Is to edit mob and items.yml? Must be a lot of pain to add new stuff.

    What about the battlegrounds? Are 100% functional?

    And the 4th jobs, skills, gears, data, pallettes, is everything implemented? 

    I'm thinking about open a new server. After several years off, I'm a little rusty.

     

     

     

     

     

  11. I need to revert some changes and make arow shower, charge arrow, bowling bash or phantasmic arrow, knock off players from Pneuma

    In battle.c  I applied the previous code

    	if( sc->data[SC_PNEUMA] && (d->flag&(BF_MAGIC|BF_LONG)) == BF_LONG ) {
    		d->dmg_lv = ATK_BLOCK;
    		skill_blown(src,target,skill_get_blewcount(skill_id,skill_lv),-1,0);
    		return false;
    	}
    	return true;
    }

    But when compiling, I'm having this error:

     1>------ Operación Compilar iniciada: proyecto: map-server, configuración: Release Win32 ------
    1>battle.cpp
    1>C:\Users\Mario Zicari\Desktop\rAthena\src\map\battle.cpp(1062,69): error C2664: 'short skill_blown(block_list *,block_list *,char,int8,e_skill_blown)': el argumento 5 no puede convertirse de 'int' a 'e_skill_blown'
    1>C:\Users\Mario Zicari\Desktop\rAthena\src\map\battle.cpp(1062,68): message : La conversión a tipo de enumeración requiere una conversión explícita (static_cast, conversión de estilo de C o conversión de estilo de función)
    1>C:\Users\Mario Zicari\Desktop\rAthena\src\map\skill.hpp(541,7): message : vea la declaración de 'skill_blown'
    1>Compilación del proyecto "map-server.vcxproj" terminada -- ERROR.
    ========== Compilar: 0 correctos, 1 incorrectos, 8 actualizados, 0 omitidos ==========

    Please, could you help me with the code to work with no errors?

  12. Please try mine instead and compile in release mode

    attcommand.c

    /*==========================================
    * @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 = 1; // 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;
    	static char atcmd_output[CHAT_SIZE_MAX];
    
    	if (!*message) {
    		clif_displaymessage(fd, "Use: @whosell <item_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)){
    		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 <item_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(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
    				continue;
    			if(s_type & 1 && pl_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) ||
    					(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
    					pl_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) || pl_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 %s[%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					,item_data->jname
    					,pl_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->message);
    			else if(item_data->type == IT_WEAPON)
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %s[%d,%d,%d,%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					,item_data->jname
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
    					,pl_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->message);
    			else
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "%s | Price %ud | Amount %d | %s[%d,%d] | %s",item_data->jname
    					,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->message);
    			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 entries. ==================", count, MinPrice, MaxPrice);
    		clif_displaymessage(fd, atcmd_output);
    	} else
    		clif_displaymessage(fd, "Nobody is selling it now.");
    
    	return 0;
    }

     

    Dont forget to add:

            ACMD_DEF(whosell),    

×
×
  • Create New...