Jump to content

AnnieRuru

Members
  • Posts

    2044
  • Joined

  • Last visited

  • Days Won

    51

Posts posted by AnnieRuru

  1. damn ... if everyone can make explanation like this in script request section ... I'm sure script request section will become very interesting

    I think I can handle the script part, no problem

    however currently Olrox is currently making this

    WoE EX Castles by Olrox [Free Release Project] - Morroc theme

    I'm not sure if he is interested to adjust his current project to substitute yours

    still, we missing map designer for this

    I think I try out with Olrox 1st, then ...

    since I've work together with Olrox and DevilEvil before, next one I always want to try is Syouji

    EDIT:

    no, I don't think this woe and that battleground script can merge together ...

    this script (gvg) and that script (battleground) is totally different ones ...

    but still, I think I'll try contact a few map designers that like to take part in this one

    EDIT2:

    seems like there's 7 emperium rooms, its a prime number

    so its hardly can get same ... unless its 3-3-1, oh well

  2. hmm ... isn't barricade is a plant type monster that only receive 1 damage per hit ?

    then anyone with highest aspd can break it off easily

    I suggest we do something like OnPCAttackEvent,

    just search OnPCAttackEvent in eathena board you'll find this suggestion bring up many times

    however nobody at the time can do it

    and developers deny this modification to be added into eathena at the time,

    because they claim this modification can lag a live server

    especially in a high rate server, where a lot players dealing high aspd speed

    the OnPCAttackEvent will trigger like crazy, might cause lag

    and it return a variable @damage, and use it in scripts to keep track the damage done to mobs

    when I have some free time, maybe I'll make this modification to prove this rumor right or wrong

  3. if you mean u want to make a OR condition like this

    if ( countitem(unlimited poison bottle) ) {

    useskill enchant deadly poison

    }else if ( countitem(poison bottle) ) {

    delitem poison bottle

    useskill enchant deadly poison

    }

    you have to do something like this in the skill.c

    afterall, skill_require_db.txt only applicable with AND condition

  4. seriously,

        parse_simpleexpr: unmatch ')'
       15 :                     if (checkweight(607,500) == 0 ) goto overWeight;
       16 :                     if (countitem(7073) < 1) goto noCoupon;
       17 :      mes @name$;
       18 :      mes "How many coupon to berries?";
       19 :      input .@num;
    *   20 :      if (countitem(7073 < .@num)'{'
       21 :       mes @name$;
       22 :       mes "Insufficient coupon!";
       23 :       close;
       24 :      }else
       25 :      {

        parse_line: need ';'
       31 :      }
       32 :                 case 2:
       33 :                     if (checkweight(7073,1) == 0 ) goto overWeight;
       34 :                     if (countitem(500) < 1) goto noBerry;
       35 :                     mes @name$
    *   36 :                     'm'es "How many berries to coupon?";
       37 :                     input .@num2;
       38 :                     if (countitem(607) < .@num2){
       39 :                     mes @name$;
       40 :                     mes "Insufficient berries!";
       41 :                     close;

    do you need other people to post out the error for you ?

  5. actually I also think that's the problem

    I noticed most of the maps in graphic release section are either custom towns or marketplace ...

    its very rare to see them makes an event map

    ... only a few pvp map, not even 1 gvg map or battleground maps

    because they don't know how to write event script themselves !

    ... with the exception of Aerie ....

    and yes ... without a map, this topic discussion will not go anywhere

    maybe can try find an official RO map to substitute in

    I also think we from scripting section side should work together with members from graphic section more often

    like this and this

    heh ... kinda fun make something extraordinary once in a while

    EDIT:

    hmm ... this also counts

    just browse through that section and can't seem to find a good one for this

  6. I believe bindatcmd is works for ALL players

    what you are doing now is like,

    you only want to make change to that particular player, but you set a global variable <.<

    I believe this is how this command should works

    we shouldn't overwrite the original atcommands

    and you should try multi-client to check 1 side can use, another side can't use because it set globally

    if I understand correctly that u need that command limited to prontera only

    I believe you need to edit atcmd(refresh) in atcommand.c directly

    which ... isn't very hard to do if you can read source

  7. I finished this script in less than 10 minutes, but took me over 3 hours to write out battle.c, so noob me

    sql-files

    REPLACE INTO `mob_db2` VALUES (2901,'EMPERIUM_1','Emperium','Emperium',90,5,1,0,0,1,60,73,64,50,1,17,80,50,26,20,10,12,0,8,26,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    REPLACE INTO `mob_db2` VALUES (2902,'EMPERIUM_2','Emperium','Emperium',90,5,1,0,0,1,60,73,64,50,1,17,80,50,26,20,10,12,0,8,26,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    REPLACE INTO `mob_db2` VALUES (2903,'EMPERIUM_3','Emperium','Emperium',90,5,1,0,0,1,60,73,64,50,1,17,80,50,26,20,10,12,0,8,26,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    REPLACE INTO `mob_db2` VALUES (2904,'EMPERIUM_4','Emperium','Emperium',90,5,1,0,0,1,60,73,64,50,1,17,80,50,26,20,10,12,0,8,26,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
    REPLACE INTO `mob_db2` VALUES (2905,'EMPERIUM_5','Emperium','Emperium',90,5,1,0,0,1,60,73,64,50,1,17,80,50,26,20,10,12,0,8,26,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

    db\mob_avail.txt

    2901, 1288
    2902, 1288
    2903, 1288
    2904, 1288
    2905, 1288

    diff

    Index: battle.c
    ===================================================================
    --- battle.c	(revision 16821)
    +++ battle.c	(working copy)
    @@ -5021,6 +5021,24 @@
     if( (s_bl = battle_get_master(src)) == NULL )
    	 s_bl = src;
    
    +	if ( s_bl->type == BL_PC && t_bl->type == BL_MOB ) {
    +		struct map_session_data *sd = BL_CAST( BL_PC, s_bl );
    +		struct mob_data *md = BL_CAST( BL_MOB, t_bl );
    +		if ( !strcmp( mapindex_id2name(sd->mapindex), "prontera" ) ) {
    +			if ( md->class_ >= 2901 && md->class_ <= 2905 && battle_getcurrentskill(src) > 0 )
    +				return 0;
    +			if (
    +			md->class_ == 2901 && sd->status.guild_id == mapreg_readreg( add_str( "$@woe_5emp_1" ) ) ||
    +			md->class_ == 2902 && sd->status.guild_id == mapreg_readreg( add_str( "$@woe_5emp_2" ) ) ||
    +			md->class_ == 2903 && sd->status.guild_id == mapreg_readreg( add_str( "$@woe_5emp_3" ) ) ||
    +			md->class_ == 2904 && sd->status.guild_id == mapreg_readreg( add_str( "$@woe_5emp_4" ) ) ||
    +			md->class_ == 2905 && sd->status.guild_id == mapreg_readreg( add_str( "$@woe_5emp_5" ) )
    +			) {
    +				return 0;
    +			}
    +		}
    +	}
    +
     if ( s_bl->type == BL_PC ) {
    	 switch( t_bl->type ) {
    		 case BL_MOB: // Source => PC, Target => MOB
    Index: battle.h
    ===================================================================
    --- battle.h	(revision 16821)
    +++ battle.h	(working copy)
    @@ -3,6 +3,7 @@
    
    #ifndef _BATTLE_H_
    #define _BATTLE_H_
    +#include "mapreg.h"
    
    // state of a single attack attempt; used in flee/def penalty calculations when mobbed
    typedef enum damage_lv {
    

    script

    -	script	woe	-1,{
    OnWhisperGlobal:
    announce "woe started", 0;
    for ( .@i = 1; .@i <= 5; .@i++ )
    	monster "prontera", 149 + .@i *3, 185, "Emperium No."+ .@i, 2900 + .@i, 1, strnpcinfo(0)+"::On"+ .@i;
    end;
    On1: callsub L_down, 1;
    On2: callsub L_down, 2;
    On3: callsub L_down, 3;
    On4: callsub L_down, 4;
    On5: callsub L_down, 5;
    L_down:
    announce strcharinfo(2) +" has broken Emperium No. "+ getarg(0), 0;
    setd "$@woe_5emp_"+ getarg(0), getcharid(2);
    monster "prontera", 149 + getarg(0) *3, 185, "Emperium No."+ getarg(0), 2900 + getarg(0), 1, strnpcinfo(0)+"::On"+ getarg(0);
    end;
    }

    ok, this is still a sketch script,

    but since the idea has been become real,

    now its better to get the topic roll faster

    still, you still missing

    - tell how the victory condition properly

    - *EDIT* confirm this is a pvp/gvg/ or battleground script

    - and the MAP !!

    btw, did anyone experience having client crash when multi-client ?

    especially login in this prontera map, having shown this emperium stuff

    EDIT:

    seems to be cause by emperium id 1288 inside mob_avail

    when change 1288 into 1915 doesn't give gravity error ... hmm ...

  8. 10% burn on enemy when physically attacked

    I'm interested on this one

    reminds me of ... some other rpg games Incineration

    -> burn down enemy hp by 0.5% every second, for 4 seconds (total 2% hp reduce if success, damage lower on boss)

    I believe rathena doesn't have this one

    well ... kinda similar to bleed status though

  9.                 switch(select(.@md_name$ + "Enter the dungeon:Return to Alberta:Cancel")) {
                   case 1:
                       if (has_instance("1@tower") == "") {
                           mes "The memorial dungeon " + .@md_name$ + " does not exist.";
                           mes "The party leader did not generate the dungeon yet.";
                       }
                       else if ((has_instance("1@tower") != "") && (.@partymembercount < 2))
                           mes "You can enter the dungeon after making a party.";
                       else {
                           mapannounce "e_tower", .@p_name2$ + " of the party, " + .@p_name$ + ", is entering the dungeon, " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL,12;
                           set etower_timer,gettimetick(2);
                           setquest 60200;
                           setquest 60201;
                           warp "1@tower",52,354;
                           end;
                       }
                       break;

    the elseif and else part is the one to modify if you want to limit it into only 1 player

  10. http://www.eathena.ws/board/index.php?showtopic=275732

    lol ... my script is really everywhere

    rand(<some number>) will always return a fixed table order, unlike rand() return randomize order

    @madtoyz

    better use the script on post#13

    the solution provide by Kenpachi doesn't work

    well ... kenpachi always gave wrong info ...

    I'm more surprised that topic has 3 pages and yet nobody said anything about it being bug x.x


    - script AutoFunEvent -1,{
    OnStartLuck:
    do
    {
    query_sql "select account_id from `char` where online = 1 order by rand() limit 1", .@aid;
    attachrid .@aid;
    if (CheckVending()) detachrid;
    }
    while (CheckVending())
    announce strcharinfo(0) +" won in Lucky Pick Event.", 0;
    getitem 671,1;
    end;
    }
    

    hmm ... reloop the query_sql is a big no-no ...
  11. I bet 95% of the scripters alive now wouldn't have thought of using sql that way.
    want to show you another trick ?

    query_sql("SELECT `name`,CAST(`value` AS SIGNED) FROM `global_reg_value` LEFT JOIN `char` ON `global_reg_value`.char_id = `char`.char_id WHERE `global_reg_value`.str = 'Mission_Total' ORDER BY CAST(`value` AS SIGNED) DESC LIMIT 5",.@name$,.@val);

    this line, I don't like table join either

    select char_id as abc, ( select name from `char` where char_id = abc ), value from global_reg_value where str = 'PC_DIE_COUNTER' order by cast(value as signed) desc limit 5;

    topic

    http://www.eathena.ws/board/index.php?showtopic=268999

    SQL optimization

    - try to avoid using JOIN table if possible

    the sql will always join both tables together before it start its calculation

    - cast( value as signed ) used twice in that script

    you might not notice it, but to optimized sql performance, try to avoid having too many commands

    well ... I think that's all about his script

    replace into runs slower than insert into / update, so its fine

    • Upvote 1
×
×
  • Create New...