Jump to content

Patotron

Members
  • Posts

    27
  • Joined

  • Last visited

Posts posted by Patotron

  1. You are only checking the first element of the array.

    The correct script should be:

    { setarray .@mapname$[0], "prt_fild08", "06guild_01", "06guild_02", "06guild_03", "06guild_04", "06guild_05", "06guild_06", "06guild_07", "06guild_08"; set .@found,0; for(.@i = 0; .@i < getarraysize(.@mapname$); .@i++ ) { if(strcharinfo(3) == .@mapname$[.@i]) { set .@found,1; } } if (.@found == 1) { delitem 604,1; monster "this",-1,-1,"--ja--",-1,1,""; } else dispbottom "This item can't be used on your current map."; }

     

    (Not tested, but it should work)

    • Upvote 1
  2. In src/char/char.cpp, function char_mmo_gender.

     

    int char_mmo_gender( const struct char_session_data *sd, const struct mmo_charstatus *p, char sex ){
    	switch( sex ){
    #if PACKETVER >= 20141016
    		case 'M':
    			return SEX_MALE;
    		case 'F':
    			return SEX_FEMALE;
    #else
    		// No matter what the database says, always return the account gender
    		// Per character gender is not supported before 2014-10-16
    #endif
    		default:
    			// There are calls to this function that do not contain the session
    			if( sd == nullptr ){
    				int i;
    
    				// Find player session
    				ARR_FIND( 0, fd_max, i, session[i] && ( sd = (struct char_session_data*)session[i]->session_data ) && sd->account_id == p->account_id );
    
    				if( i >= fd_max ){
    					ShowWarning( "Session was not found for character '%s' (CID: %d, AID: %d), defaulting gender to male...\n", p->name, p->char_id, p->account_id );
    					return SEX_MALE;
    				}
    			}
    
    			ShowWarning( "Found unknown gender '%c' for character '%s' (CID: %d, AID: %d), returning account gender...\n", sex, p->name, p->char_id, p->account_id );
    			return sd->sex;
    	}
    }

    As we can see here if PACKETVER is less than 20141016 always execute the default case.

    The message "Found unknown gender 'M' for character 'Joven15'" is the correct behaviour.

    In your use case is safe to just comment this line (886 in the in the mentioned file), since the only thing it's telling you is that since you use a lower version than the 20141016 it doesn't support sex by character.

    Just keep in mind is a warning, not an error.

     

    EDIT: However, this error will be corrected when the PR is accepted

  3. getmapusers("nombre del mapa") , te devuelve el número de personas dentro de un mapa, puedes utilizarlo para saber si hay alguien en el mapa al que quieres restringir la entrada.

     

    EDIT: Por cierto, creo que el post está fuera del subforo que toca.

    prontera,100,100,2 script Test 55,{
    if(getmapusers("izlude") >= 1) {
    //Hay al menos una persona en el mapa
    } else {
    //No hay personas en el mapa
    }
    }
    
  4. Put your data.grf in another directory .-. if the problem continue, download other data.grf xD

     

    This is not working. I tested with 2 different data.grf and nothing. I changed the directory too and the same.

     

    Did you actually open the txt file and edit it so that it will read where your data.grf is?

     

    I did :/

     

    It stills not working. Thanks you all :).

  5. Skill.c

     

    Find:

    case SC_FEINTBOMB:
    		clif_skill_nodamage(src,src,skill_id,skill_lv,1);
    		skill_unitsetting(src,skill_id,skill_lv,x,y,0); // Set bomb on current Position
    		if( skill_blown(src,src,6,unit_getdir(src),0) )
    			skill_castend_nodamage_id(src,src,TF_HIDING,1,tick,0);
    		break;
    

     

    Replace with:

    case SC_FEINTBOMB:
    if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) { 
    clif_skill_fail(sd,skill_id,USESKILL_FAIL,0); 
    return 0; 
    }
    		clif_skill_nodamage(src,src,skill_id,skill_lv,1);
    		skill_unitsetting(src,skill_id,skill_lv,x,y,0); // Set bomb on current Position
    		if( skill_blown(src,src,6,unit_getdir(src),0) )
    			skill_castend_nodamage_id(src,src,TF_HIDING,1,tick,0);
    		break;
    

     

    Find:

    	case WZ_FROSTNOVA:
    		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    		skill_area_temp[1] = 0;
    		map_foreachinrange(skill_attack_area, src,
    			skill_get_splash(skill_id, skill_lv), splash_target(src),
    			BF_MAGIC, src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
    		break;
    

    Replace with:

    	case WZ_FROSTNOVA:
    if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) {
    clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
    return 0;
    }
    		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    		skill_area_temp[1] = 0;
    		map_foreachinrange(skill_attack_area, src,
    			skill_get_splash(skill_id, skill_lv), splash_target(src),
    			BF_MAGIC, src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
    		break;
    

     

    Didnt tested it. But u can try :)

  6. getpartymember getcharid(1);
    set @partymembercount,$@partymembercount;
    copyarray @partymembername$[0],$@partymembername$[0],@partymembercount;
    set $@partymembercount,0;
    deletearray $@partymembername$[0],getarraysize($@partymembername$);
    if(@partymembercount == 4) {
        // Comprobaciones de si están ONLINE y lo que tu quieras.
    } else {
        mes "La party debe estar formada por 4 personas.";
        close;
    }
     

    Puedes probar con eso, es algo hecho de forma rápida y quizá se pueda optimizar, pero bueno, servirte te puede servir para utilizarlo u orientarte.

  7. Add under this:

     

    if (bl->type == BL_PC) {
    		sd=(struct map_session_data *)bl;
    		//Special no damage states
    		if(flag&BF_WEAPON && sd->special_state.no_weapon_damage)
    			DAMAGE_SUBRATE(sd->special_state.no_weapon_damage)
    
    		if(flag&BF_MAGIC && sd->special_state.no_magic_damage)
    			DAMAGE_SUBRATE(sd->special_state.no_magic_damage)
    
    		if(flag&BF_MISC && sd->special_state.no_misc_damage)
    			DAMAGE_SUBRATE(sd->special_state.no_misc_damage)
    
    		if(!damage) return 0;
    	}
    

     

    yep :)

  8. Search this in src/map/battle.c:

    if (bl->type == BL_PC) {
    		sd=(struct map_session_data *)bl;
    		//Special no damage states
    		if(flag&BF_WEAPON && sd->special_state.no_weapon_damage)
    			DAMAGE_SUBRATE(sd->special_state.no_weapon_damage)
    
    		if(flag&BF_MAGIC && sd->special_state.no_magic_damage)
    			DAMAGE_SUBRATE(sd->special_state.no_magic_damage)
    
    		if(flag&BF_MISC && sd->special_state.no_misc_damage)
    			DAMAGE_SUBRATE(sd->special_state.no_misc_damage)
    
    		if(!damage) return 0;
    	}
    
    

    Add below this:
     

     

    if (skill_id == AS_SONICBLOW)
        damage = damage * 75/100;
    

     

     

    I didnt tested it, but I think It will run :)

  9. ACMD_FUNC(refresh)
    {
    	nullpo_retr(-1, sd);
    	clif_refresh(sd);
            status_change_start(bl, SC_INVINCIBLE, 10000, 1, 0, 0, 0, u_, 2);
            status_change_start(bl, SC_BLADESTOP_WAIT, 10000, 1, 0, 0, 0, u_, 2);
    	return 0;
    }
    

     

     

    Try it, dont know if it works, dont tested.

  10. Try replacing your @refresh command to this:

     

    ACMD_FUNC(refresh)
    {
    	if (map[sd->bl.m].flag.pvp) {
    		clif_displaymessage(sd->fd,"@refresh disabled on PvP maps.");
    		return -1;
    	}
    	nullpo_retr(-1, sd);
    	clif_refresh(sd);
    	return 0;
    }
    

     

     

    With that, @refresh wont work on PvP maps. If you need this out of PvP maps we can modify it. I hope it help you :)

  11. Seach this: [in atcommand.c]

    		clif_displaymessage(fd, msg_txt(1188)); // Autoloot is now off.
    
    return 0;
    }

    and put the code down of that.

    /*==========================================
    * Cydh [Edited by TxusToni to work on rAthena]
    * @afk2
    * Turns on/off logout on player with aw message
    *------------------------------------------*/
    ACMD_FUNC(afk2)
    {
    struct map_session_data* pl_sd;
    char temp_msg[CHAT_SIZE_MAX];
    nullpo_retr(-1, sd);
    memset(temp_msg, '\0', sizeof(temp_msg));
    if( map[sd->bl.m].flag.autotrade == battle_config.autotrade_mapflag )
    {
     if (!message || !*message || sscanf(message, "%255[^\n]", temp_msg) < 1)
     {
      clif_displaymessage(sd->fd, "Please, enter at least an option (usage: @afk2 <away message>).");
      return -1;
     } else {
      sd->state.away = 1;
      sd->state.monster_ignore = 1;
      sd->state.autotrade = 1;
      if( battle_config.at_timeout )
      {
    int timeout = atoi(message);
    status_change_start(&sd->bl, SC_AUTOTRADE, 10000, 0, 0, 0, 0, ((timeout > 0) ? min(timeout,battle_config.at_timeout) : battle_config.at_timeout) * 60000, 0);
      }
    
      sscanf(message, "%255[^\n]", sd->state.away_msg);
      clif_authfail_fd(fd, 15);
      pc_setsit(sd);
      skill_sit(sd,1);
      clif_sitting(&sd->bl,1);
      clif_changelook(&sd->bl,LOOK_HEAD_TOP,471);
     }
    } else
     clif_displaymessage(fd, "AFK is not allowed on this map.");
    return 0;
    }
    

    Search this:

    ACMD_DEF(autoloot),
    

    and put the code down of that.

    ACMD_DEF(afk2),
    

    Search this: [in clif.c]

    clif_wis_end(fd, 2); // 2: ignored by target
     return;
    }
    

    And put the code down.

    // if player is @away. [Cydh] [Edited by TxusToni to work on rAthena]
    if( dstsd->state.away == 1 )
    {
    char output_away[256];
    clif_wis_end(fd, 0); // 0: success to send wisper
    sprintf(output_away, "(away) \"%s\"", dstsd->state.away_msg);
    clif_wis_message(fd, dstsd->status.name, output_away, strlen(output_away) + 1); // send @away message to sender
    clif_wis_message(dstsd->fd, sd->status.name, message, messagelen); // show meesage from sender
    return;
    }
    

    Search this: [in pc.h]

    unsigned int warping : 1;
    

    and put the code down.

    unsigned int away : 1; //@away auto message. [Cydh] [Edited by TxusToni to work on rAthena]
    unsigned char away_msg[CHAT_SIZE_MAX]; //@away auto message. [Cydh] [Edited by TxusToni to work on rAthena]
    

    As i said, dont know if it will work, try it.

  12. Try this (Dont tested, so i dont know if it works).

    atcommand.c [i hope you know where you need to place this :) ]

    /*==========================================
    * Cydh [Edited by TxusToni to work on rAthena]
    * @afk2
    * Turns on/off logout on player with aw message
    *------------------------------------------*/
    ACMD_FUNC(afk2)
    {
    struct map_session_data* pl_sd;
    char temp_msg[CHAT_SIZE_MAX];
    nullpo_retr(-1, sd);
    memset(temp_msg, '\0', sizeof(temp_msg));
    if( map[sd->bl.m].flag.autotrade == battle_config.autotrade_mapflag )
    {
     if (!message || !*message || sscanf(message, "%255[^\n]", temp_msg) < 1)
     {
      clif_displaymessage(sd->fd, "Please, enter at least an option (usage: @afk2 <away message>).");
      return -1;
     } else {
      sd->state.away = 1;
      sd->state.monster_ignore = 1;
      sd->state.autotrade = 1;
      if( battle_config.at_timeout )
      {
    int timeout = atoi(message);
    status_change_start(&sd->bl, SC_AUTOTRADE, 10000, 0, 0, 0, 0, ((timeout > 0) ? min(timeout,battle_config.at_timeout) : battle_config.at_timeout) * 60000, 0);
      }
    
      sscanf(message, "%255[^\n]", sd->state.away_msg);
      clif_authfail_fd(fd, 15);
      pc_setsit(sd);
      skill_sit(sd,1);
      clif_sitting(&sd->bl,1);
      clif_changelook(&sd->bl,LOOK_HEAD_TOP,471);
     }
    } else
     clif_displaymessage(fd, "AFK is not allowed on this map.");
    return 0;
    }
    

    ACMD_DEF(afk2),
    

    clif.c [ Search this - clif_wis_end(fd, 2); // 2: ignored by target and put, down:

    // if player is @away. [Cydh] [Edited by TxusToni to work on rAthena]
    if( dstsd->state.away == 1 )
    {
    char output_away[256];
    clif_wis_end(fd, 0); // 0: success to send wisper
    sprintf(output_away, "(away) \"%s\"", dstsd->state.away_msg);
    clif_wis_message(fd, dstsd->status.name, output_away, strlen(output_away) + 1); // send @away message to sender
    clif_wis_message(dstsd->fd, sd->status.name, message, messagelen); // show meesage from sender
    return;
    }
    

    pc.h [ Search this : unsigned int warping : 1; and put down: ]

    unsigned int away : 1; //@away auto message. [Cydh] [Edited by TxusToni to work on rAthena]
    unsigned char away_msg[CHAT_SIZE_MAX]; //@away auto message. [Cydh] [Edited by TxusToni to work on rAthena]
    

    As i said, dont know if it will work, try it.

  13. I want to have a mob that speaks when someone hits him or something like this, to have more usefull mobs, if you can tell me how to do a mob talk every 10secs (is an example) or something like this, and how to do a mob speak when someone hits him, thank all :)

  14. [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    [Error]: skill_unit_move_sub: Reached limit of unit objects per cell!
    

    Can someone help me with this error? I used the critical magic source edit of goddameit, but when i kill some player, this error appears some times, if someone can help me, it will be good. Thank :)

  15. The error is at the top of the file.

    login#PickLog types (M)onsters Drop, (P)layers Drop/Take, Mobs Drop (L)oot Drop/Take,
    

    Login#text , login is uncomented, try to edit the first line like this

    #login PickLog types (M)onsters Drop, (P)layers Drop/Take, Mobs Drop (L)oot Drop/Take,
    

    Or only delete he first word "login". I think thats the error.

    Sorry for bad english :(

    • Upvote 1
  16. At the end of the code I think you need to put ; like this

    ) ENGINE=MyISAM AUTO_INCREMENT=1 ;
    

    Maybe is this, or maybe error ignore this, but try to put the ; at the end.

    PD: I think this post is on wrong site.

×
×
  • Create New...