Jump to content

NexusXVI

Members
  • Posts

    227
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by NexusXVI

  1. On the script , It actually check on the item every 5 seconds

    // Check Every X Seconds
    set .Seconds,5;
    

    The way that I don't understand is to reverse the process, instead of the script checking if the player has reached the limit of an item which is by addition, to go around to check if the item is subtracting.. 

    In the script it will knock you out of the map if u have ex. 101 apples, if the limit is on 100.

  2. This was I think, Emistry Script : Limited Item

    I've been tweaking it a bit, but in pure sense I can't do what I want to do.. of-course.

    The catch is this scripts check it if an item is exceeding it's value on a certain map +1, If there was actually a way to reverse it and check if an item is gone, like rental items when it disappears it will warp you out of the map.

     

  3. Got it, Requesting to close this question please!

     

    In terms of the issue. 

    When adding a new page for the page path you just need to set it to the one after "path=" 

    ex. ?module=pages&action=content&path=downloads

    So, on the table : 

    Capture_zps8jvsh0cv.jpg

    Just put in the page file path = "Downloads" just like = "path=downloads"

  4. I've been tweaking my Flux CP for a while now and changing themes in this and that.

    Then suddenly when I was trying to fix the CMS news under the Add pages I can't seem to link the download page propely.

     

    Rules are set as : ?module=pages&action=content&path=rules

    In application.php the downloads is on : ('module' => 'pages','action'=>'content&path=downloads') just the same as the rules ('module' => 'pages','action'=>'content&path=rules')

    So when trying to add a download page I just do the same with the rules : ?module=pages&action=content&path=downloads

     

    But whenever I try to load it up I always go back to module=main just the same thing as news and home.

    So I was wondering if any of you guys could atleast help me set the links properly or point me if I'm wrong on something.

  5. Just now, Xenagoras said:

    try find a RO with newprontera.grf size 62mb, it contains a Renewal Prontera that cause a normal RO crashes, if you dont want, just insert the basic prontera to your main grf

    Goodluck

    I'll try that after testing :D im currently patching the renewal now.. Althou im doing a renewal RO

  6. Update:

    Downloaded a new KRO patched it and viola crashes at pay_arche again.

     

    Details : using 2013-08-07 Client

     

    Update 2:

    Details: using 2013-08-07 Client
    Downloaded : 2016-03-24 KrO Clean Files
    pay_arche status : Working
    Prontera crashes

    Updating it to latest patches using Rag and Renewal

     

  7. Hihi!

    I'm just wondering if anybody can point out where is the proper location for overwriting an existing map.
    Been crashing on pay_arche just before the payon cave dungeon.

    Checked the data and rdata and I can't find any file with pay_arche in it so, it's best to ask before I put anything in there.

    Cheers

  8. I don't mean to revive old posts, but I can't seem to find and remember how to change a certain map on a grf. Can anyone guide me through this..

     

    I have downloaded the pay_arche up above the previous post cause it crashes my client when going there.. But I honestly can't remember how to change it again to the old one without causing too much mess and maybe more trouble for me.

    Help is much appreciated.

  9. Well looking from the error, it looks like that you are using a coordinate on your mapflag, which it shouldn't be.

    But you said that it's a fresh installation, hmm...

     

    If you are sure that it's a bug, you can post your report on the GitHub Issue instead so your report will be easier to spot :)

    Thanks for the info, and yes it is a fresh trunk.. just edited some parts on the conf to connect it

  10. Honestly just put this to the right place if it's not been long since I've posted anything so sorry :D


    Downloaded the new Rev.17717, as usual doing the drills and building it, but viola, error on map server causes it to crash.. tried to check every line by making sure it is "tab'd" not "spaced", still error persist. seems that alb_ship is non existing or something is wrong with alb_ship

    Untitled_zpsxwtzqlot.png


    PS. This is a clean Reversion I did not do or modify anything yet, fresh compiled trunk(no error on compiling also).

    Update: comment out alb_ship on maps_athena.conf, creates a new error on alb2trea now.


    Update2: tried to comment out alb2trea, then all alberta maps begin to give error.. 


    BUMP

  11. This is a quite small request :

    A script that can alter the monsters hp depending on time,

    Ex.

    Example I have a gem room where photon cannon has 7800 hp and I want that hp to go down from 7800 - 4000 at 6pm - 7pm and return back to 7800 after the said time.. :D


    BUMP


    BUMP < Just wondering if this is possible? >

  12. Hello

    This is Emistry's chained quest and I was wondering if it's possible to add item options / reward options making this script support multiple quests :D

    The First menu that pops up will be choose the desired quest and when they pick the certain quest thats the time the chain quest starts .
     

    
    // NPC Name must have a Number behind it.  ex Name#1 , Name#2,...
    
    prontera,155,181,5	script	Chained Quest#1	757,{
    function	ChainedQuest;
    mes "I am a Chained Quest NPC, you can only redo the previous Quest after you have finished all of my Quests.";
    next;
    
    // Quest Setup : 
    // ChainedQuest( Reward,Amount , Required Zeny, {Item1,Amount1,Item2,Amount2,...} );
    switch( getd( "Quest"+strnpcinfo(2) ) ){
    	Case 0: ChainedQuest( 5001,1, 10000, 607,10 );
    	Case 1: ChainedQuest( 5002,1, 15000, 607,20, 608,20 );
    	Case 2: ChainedQuest( 5003,1, 20000, 607,30, 608,30, 7539,30 );
    //	Case 3: ChainedQuest( 5004,1, 25000, 607,40, 608,30, 7539,40 ,501,10 );
    //	Case 4: ChainedQuest( 5005,1, 30000, 607,50, 608,30, 7539,50 ,501,10 ,502,10 );
    //	Case 5: ChainedQuest(....);
    //	Case 6: ChainedQuest(....);
    default:
    	mes "Congratulation ,You have finished all the Quest i gave you, you may Re-Do if you want.";
    	set getd( "Quest"+strnpcinfo(2) ),0;
    	close;
    }
    
    OnPCLoadMapEvent:
    	showevent 1,0;
    	end;
    
    function	ChainedQuest	{
    	for( set .@i,3; getarg( .@i,0 ) != 0 ; set .@i,.@i + 2 ){
    		if( countitem( getarg( .@i ) ) < ( getarg( .@i + 1 )) ){
    			mes "[ ^FF0000Part "+( getd( "Quest"+strnpcinfo(2) ) + 1 )+"^000000 ]";
    			mes "^00FF00_______________________________^000000";
    			mes "^FF0000Reward^000000 : "+getarg(1)+" x ^0000FF"+getitemname( getarg(0) )+"^000000";
    			mes "^00FF00_______________________________^000000";
    			mes "then bring me those items :";
    			mes "^00FF00_______________________________^000000";
    			mes ( Zeny < getarg(2) ? "^FF0000":"^0000FF" )+getarg(2)+" Zeny^000000";
    			for( set .@a,3; getarg( .@a,0 ) != 0 ; set .@a,.@a + 2 ){
    				mes (( countitem(getarg( .@a )) < ( getarg(.@a + 1 )) )? "^FF0000[ "+countitem(getarg(.@a))+" / "+(getarg(.@a+1)):"^0000FF[ "+getd( "Quest"+strnpcinfo(2) ) )+" ] "+getitemname(getarg(.@a))+"^000000 ";
    				}
    			close;
    			}
    		}
    	if( Zeny < getarg( 2 ) ){
    		mes "You required "+getarg( 2 )+" Zeny.";
    		close;
    		}
    	mes "[ ^FF0000Part "+( getd( "Quest"+strnpcinfo(2) ) + 1 )+"^000000 ]";
    	mes "Look's like you have collected all";
    	mes "^FF0000_______________________________^000000";
    	mes ( Zeny < getarg(2) ? "^FF0000":"^0000FF" )+getarg(2)+" Zeny^000000";
    	for( set .@i,3; getarg( .@i,0 ) != 0 ; set .@i,.@i + 2 ){
    		mes "^FF0000"+getarg( .@i+1 )+" x ^0000FF "+getitemname( getarg( .@i ) )+"^000000";
    		}
    	next;
    	if( select("^0000FFContinue^000000:Cancel") == 2 ){
    		mes "Okay..as you wish ~ come back again when you do continue it.";
    		close;
    		}
    	for( set .@i,3; getarg( .@i,0 ) != 0 ; set .@i,.@i + 2 ){
    		delitem getarg( .@i ),getarg( .@i + 1 );
    		}
    	set Zeny,Zeny - getarg( 2 );
    	set getd( "Quest"+strnpcinfo(2) ),getd( "Quest"+strnpcinfo(2) ) + 1;
    	mes "You will be rewarded with ";
    	mes "^0000FF_______________________________^000000";
    	mes "^FF0000"+getarg(1)+"^000000 x ^0000FF"+getitemname( getarg(0) )+"^000000";
    	mes "^0000FF_______________________________^000000";
    	getitem getarg(0),getarg(1);
    	close;
    	}
    }
    
    prontera	mapflag	loadevent
    
  13. Ermmm... Thx a lot guys... But if..

    Example... They slot some doppelganger card into knife and willing to bring it into pvp maps,does this script can detect those card even it was been slotting....??

     

    Edited*

     

    NexusXVI

    Thx for your idea sir...

    ​But i already tried...

    Im just restrict doppleganger card in mace player from entering pvp map... yes it happen.. player been recall back into thier save point...

    But...

    If the player was unequip those they can entering back those map pvp again.. lol.. They just bypass the script.. =="

    Any idea?..?

    Im just wondering about what 

    Alayne

    said...

     

     

    // Forbidden Items Database

    // Defines restrictions on equipment, items, and cards in map types and zones.
    //
    // Structure of Database:
    // ItemID,Flag
    //
    // Legend for 'Flag' field (bitmask):
    // 1    - restricted in normal maps
    // 2    - restricted in PVP
    // 4    - restricted in GVG
    // 8    - restricted in Battlegrounds
    // Restricted zones - configured by 'restricted <number>' mapflag
    // 32   - restricted in zone 1
    // 64   - restricted in zone 2
    // 128  - restricted in zone 3
    // 256  - restricted in zone 4
    // 512  - restricted in zone 5
    // 1024 - restricted in zone 6
    // 2048 - restricted in zone 7
    //
    // Examples:
    // 1201,1   // Knife can't be worn on normal maps
    // 608,4    // Yggdrasil Seed can't be consumed in both GvG and WoE Castles
    // 4174,6   // Deviling Card has no effect in every PVP or GVG map, and during WoE
    // 501,32   // Red Potion can't be consumed on maps marked as 'restricted zone 1'
    // 519,322  // Milk can't be consumed in PVP and maps marked as 'restricted zone 2' or 'restricted zone 4' (256+64+2)

    The red line... If some player can bypass this... how about if i make all mvp card was no effect @ all on pvp map?..?

    How's that sound?..?

    Edtied More*

    No... it cant be used since the map were restrict to all map pvp... If i want to restrict on certain pvp mpa.. it cant be done.. /sigh

    Still thinking.... @.@

    Tested it on my server , If you unequip it but still the said item (Doppelganger) Is in the inventory, he/she will be warped back,

    If they put it inside the storage then go to pvp and get the item they will be warped backed

    Edit the time check delay for instant detection :

    OnInit:
    // GM Level to Bypass
    .gm_level = 99;
    // Check Every X Seconds
    .check_delay = 5; << EDIT THIS!
    

    Other options since you are just banning an item on the pvp would be to use the item_noequip.txt , you can find it either in db\pre-re(re) :

    IF you want to add more restrictions follow this :

    <Card ID>,<Flag#>

    <Card ID>,<Flag#>

    Flag #  2 + 4 = 6 Meaning that the said item will be restricted on PVP and GVG maps

    // Legend for 'Flag' field (bitmask):
    // 1    - restricted in normal maps
    // 2    - restricted in PVP
    // 4    - restricted in GVG
    // 8    - restricted in Battlegrounds
    
    // PVP
    //----------------------------------------------------------------------------
    14529,2	//Greed_Scroll
    4142,2//Doppelganger_Card << Add this
    

    Hope this Helps

  14. Thank you so much GM Ocean a good and clean tutorial :D

    I'll update if this works


    This would require a src edit. Not too big of one, but enough really.

     

    * NOTE - ALWAYS BACK UP YOUR SRC FILES BEFORE MAKING CHANGES *

    Find this in: src/map.h

    enum MOBID {
    MOBID_PORING	= 1002,
    MOBID_RED_PLANT	= 1078,
    MOBID_BLACK_MUSHROOM	= 1084,
    MOBID_GOBLIN_1	= 1122,
    MOBID_GOBLIN_2,
    MOBID_GOBLIN_3,
    MOBID_GOBLIN_4,
    MOBID_GOBLIN_5,
    MOBID_MARINE_SPHERE	= 1142,
    MOBID_A_GUARDIAN	= 1285,
    MOBID_K_GUARDIAN,
    MOBID_S_GUARDIAN,
    MOBID_EMPERIUM,
    MOBID_TREAS01	= 1324,
    MOBID_TREAS40	= 1363,
    MOBID_G_PARASITE	= 1555,
    MOBID_G_FLORA	= 1575,
    MOBID_G_HYDRA	= 1579,
    MOBID_G_MANDRAGORA	= 1589,
    MOBID_G_GEOGRAPHER	= 1590,
    MOBID_S_GUARDIAN_	= 1899,
    MOBID_A_GUARDIAN_,
    MOBID_BARRICADE1	= 1905,
    MOBID_BARRICADE2,
    MOBID_GUARIDAN_STONE1,
    MOBID_GUARIDAN_STONE2,
    MOBID_FOOD_STOR,
    MOBID_BLUE_CRYST	= 1914,
    MOBID_PINK_CRYST,
    MOBID_TREAS41	= 1938,
    MOBID_TREAS49	= 1946,
    MOBID_TATACHO	= 1986,
    MOBID_CENTIPEDE,
    MOBID_NEPENTHES,
    MOBID_HILLSRION,
    MOBID_HARDROCK_MOMMOTH,
    MOBID_TENDRILRION,
    MOBID_CORNUS,
    MOBID_NAGA,
    MOBID_LUCIOLA_VESPA,
    MOBID_PINGUICULA,
    MOBID_G_TATACHO	= 1997,
    MOBID_G_HILLSRION,
    MOBID_CENTIPEDE_LARVA,
    MOBID_SILVERSNIPER	= 2042,
    MOBID_MAGICDECOY_FIRE,
    MOBID_MAGICDECOY_WATER,
    MOBID_MAGICDECOY_EARTH,
    MOBID_MAGICDECOY_WIND,
    MOBID_ZANZOU	= 2308,
    MOBID_S_HORNET	= 2158,
    MOBID_S_GIANT_HORNET,
    MOBID_S_LUCIOLA_VESPA,
    };
    

    Add after MOBID_S_LUCIOLA_VESPA,

    MOBID_ZANZOU    = 2308,
    MOBID_S_HORNET    = 2158,
    MOBID_S_GIANT_HORNET,
    MOBID_S_LUCIOLA_VESPA,
    MOBID_EMPERIUM_2    = XXXX, //xxxx = ID of new emperium created.
    };
    

    Should look like above when finished.

     

    Find in: src/mob.c

    	if (mob_id == MOBID_EMPERIUM)
    {
    struct guild_castle* gc = guild_mapindex2gc(map[m].index);
    struct guild* g = (gc) ? guild_search(gc->guild_id) : NULL;
    if (gc)
    {
    

    And change to:

    	if (mob_id == MOBID_EMPERIUM || mob_id == MOBID_EMPERIUM_2)
    {
    struct guild_castle* gc = guild_mapindex2gc(map[m].index);
    struct guild* g = (gc) ? guild_search(gc->guild_id) : NULL;
    if (gc)
    {
    

    Find in: src/mob.h

    #define mob_is_gvg(md) (map[(md)->bl.m].flag.gvg_castle && ( (md)->mob_id == MOBID_EMPERIUM || (md)->mob_id == MOBID_BARRICADE1 || (md)->mob_id == MOBID_GUARIDAN_STONE1 || (md)->mob_id == MOBID_GUARIDAN_STONE2) )
    

    Change to:

    #define mob_is_gvg(md) (map[(md)->bl.m].flag.gvg_castle && ( (md)->mob_id == MOBID_EMPERIUM || (md)->mob_id == MOBID_EMPERIUM_2 || (md)->mob_id == MOBID_BARRICADE1 || (md)->mob_id == MOBID_GUARIDAN_STONE1 || (md)->mob_id == MOBID_GUARIDAN_STONE2) )
    

    That takes care of the easy parts... Now the more time consuming ones.

     

    Everything else, listed will be found in src/map/battle.c until otherwise specified.

    Find in: src/battle.c

    	if(md && md->guardian_data) {
    if(class_ == MOBID_EMPERIUM && flag&BF_SKILL && !(skill_get_inf3(skill_id)&INF3_HIT_EMP)) //Skill immunity.
    return false;
    
    if(src->type != BL_MOB) {
    struct guild *g = src->type == BL_PC ? ((TBL_PC *)src)->guild : guild_search(status_get_guild_id(src));
    if (class_ == MOBID_EMPERIUM && (!g || guild_checkskill(g,GD_APPROVAL) <= 0 ))
    return false;
    

    Change To: (Should make your new emperium immune to certain skills like original emperium).

    	if(md && md->guardian_data) {
    if(class_ == MOBID_EMPERIUM && flag&BF_SKILL && !(skill_get_inf3(skill_id)&INF3_HIT_EMP) || class_ == MOBID_EMPERIUM_2 && flag&BF_SKILL && !(skill_get_inf3(skill_id)&INF3_HIT_EMP)) //Skill immunity.
    return false;
        if(md && md->guardian_data) {
    if(class_ == MOBID_EMPERIUM && flag&BF_SKILL && !(skill_get_inf3(skill_id)&INF3_HIT_EMP)) //Skill immunity.
    return false;
    
    if(src->type != BL_MOB) {
    struct guild *g = src->type == BL_PC ? ((TBL_PC *)src)->guild : guild_search(status_get_guild_id(src));
    if (class_ == MOBID_EMPERIUM && (!g || guild_checkskill(g,GD_APPROVAL) <= 0 ) || class_ == MOBID_EMPERIUM_2 && (!g || guild_checkskill(g,GD_APPROVAL) <= 0 ))
    return false;
    

    Find:

    if( attack_hits && class_ == MOBID_EMPERIUM ) {
    

    Change To:

    if( attack_hits && class_ == MOBID_EMPERIUM || attack_hits && class_ == MOBID_EMPERIUM_2 ) {
    

    Find:

    	if( bl->type == BL_MOB && ((TBL_MOB*)bl)->mob_id == MOBID_EMPERIUM )
    return 0;
    

    Change To:

    	if( bl->type == BL_MOB && ((TBL_MOB*)bl)->mob_id == MOBID_EMPERIUM || bl->type == BL_MOB && ((TBL_MOB*)bl)->mob_id == MOBID_EMPERIUM_2 )
    return 0;
    

    Find:

    	case BL_MER:
    if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM && flag&BCT_ENEMY)
    return 0; //mercenary may not attack Emperium
    

    Change To:

    	case BL_MER:
    if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM && flag&BCT_ENEMY || t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM_2 && flag&BCT_ENEMY )
    return 0; //mercenary may not attack Emperium
    

    Find:

    	if( map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM )
    return 0; //If you don't belong to a guild, can't target emperium.
    

    Change To:

    	if( map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM || map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM_2 )
    return 0; //If you don't belong to a guild, can't target emperium.
    

    That should be everything on the src side. Now you just need to create a new monster, and give it the ID you listed in the begining of this guide.

    IF everything finishes without any errors, then you should have effectively duplicated the emperium by giving it a new ID.

     

    There might be better/simpler ways to do this, but this is what I can think of.

    Followed it and got this results on the log :

     

    battle.c: In function ‘battle_can_hit_gvg_target’:
    battle.c:1317: warning: suggest parentheses around ‘&&’ within ‘||’
    battle.c:1325: warning: suggest parentheses around ‘&&’ within ‘||’
    battle.c:1374: error: invalid storage class for function ‘battle_calc_drain’
    battle.c:1577: error: invalid storage class for function ‘battle_calc_base_damage’
    battle.c:1690: error: invalid storage class for function ‘battle_range_type’
    battle.c:1710: error: invalid storage class for function ‘battle_blewcount_bonus’
    battle.c:1856: error: invalid storage class for function ‘target_has_infinite_defense’
    battle.c:1879: error: invalid storage class for function ‘is_skill_using_arrow’
    battle.c:1897: error: invalid storage class for function ‘is_attack_right_handed’
    battle.c:1917: error: invalid storage class for function ‘is_attack_left_handed’
    battle.c:1946: error: invalid storage class for function ‘is_attack_critical’
    battle.c:2013: error: invalid storage class for function ‘is_attack_piercing’
    battle.c:2052: error: invalid storage class for function ‘battle_skill_get_damage_properties’
    battle.c:2068: error: invalid storage class for function ‘is_attack_hitting’
    battle.c:2209: error: invalid storage class for function ‘attack_ignores_def’
    battle.c:2258: error: invalid storage class for function ‘battle_skill_stacks_masteries_vvs’
    battle.c:2306: error: invalid storage class for function ‘battle_get_weapon_element’
    battle.c:2390: error: invalid storage class for function ‘battle_calc_element_damage’
    battle.c:2460: error: invalid storage class for function ‘battle_calc_attack_masteries’
    battle.c:2767: error: invalid storage class for function ‘battle_calc_multi_attack’
    battle.c:2832: error: invalid storage class for function ‘battle_calc_attack_skill_ratio’
    battle.c:3733: error: invalid storage class for function ‘battle_calc_skill_constant_addition’
    battle.c: In function ‘battle_calc_attack_plant’:
    battle.c:4182: warning: suggest parentheses around ‘&&’ within ‘||’
    battle.c: In function ‘battle_can_hit_gvg_target’:
    battle.c:4411: error: invalid storage class for function ‘initialize_weapon_data’
    battle.c:4573: error: invalid storage class for function ‘battle_calc_weapon_attack’
    battle.c:4809: error: static declaration of ‘battle_calc_magic_attack’ follows non-static declaration
    battle.c:1844: note: previous declaration of ‘battle_calc_magic_attack’ was here
    battle.c:5480: error: static declaration of ‘battle_calc_misc_attack’ follows non-static declaration
    battle.c:1845: note: previous declaration of ‘battle_calc_misc_attack’ was here
    battle.c: In function ‘battle_damage_area’:
    battle.c:6099: warning: suggest parentheses around ‘&&’ within ‘||’
    battle.c: In function ‘battle_check_target’:
    battle.c:6763: warning: suggest parentheses around ‘&&’ within ‘||’
    battle.c:6788: warning: suggest parentheses around ‘&&’ within ‘||’
    battle.c: In function ‘battle_can_hit_gvg_target’:
    battle.c:7501: error: invalid storage class for function ‘rAthena_report_timer’
    battle.c:7669: error: expected declaration or statement at end of input
    
  15. Patskie :D the script works but :

    1. Timer won't show, and rounds loop back - Maybe its because of the timer, watched the players test it when they can't kill the monsters on the said time the rounds loop back ex : Round [ 1 ] then Round [ 2 ] then back to Round [ 1 ]. *PS. no map error ,

    2. After successfully killing every mobs in Round 4 within the time limit since I set it to 25 mins . It goes back to Round 1 not Going to Round 5 - MVP Round

    3. The script doesn't warp them back to their respective save points event if they stay 2 hours there D:

     

×
×
  • Create New...