• Content Count

  • Avg. Content Per Day

  • Joined

  • Last visited

  • Days Won


Everything posted by AnnieRuru

  1. AnnieRuru

    Level limitation

    apparently, just have to apply that line AFTER the guild_payexp and pc_calcexp function ... fixed src/map/pc.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 5aace7ecb..4fb097b61 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -6719,6 +6719,13 @@ void pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned in if (!(exp_flag&2)) pc_calcexp(sd, &base_exp, &job_exp, src); + if ( !(exp_flag & 1) ) { + if ( sd->status.base_level >= 5 ) + base_exp = 0; + if ( sd->status.job_level >= 5 ) + job_exp = 0; + } + nextb = pc_nextbaseexp(sd); nextj = pc_nextjobexp(sd); btw, there are 2 elysium ?
  2. AnnieRuru

    setunitdata doesn't change normal mob to boss?

    4140,Knight_Of_Abyss_Card,Abysmal Knight Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddClass,Class_Boss,25; },{},{} * Class (c) Class_Normal, Class_Boss, Class_Guardian, Class_All case SP_ADDCLASS: // bonus2 bAddClass,c,x; PC_BONUS_CHK_CLASS(type2,SP_ADDCLASS); if(!sd->state.lr_flag || sd->state.lr_flag == 3) sd->right_weapon.addclass[type2]+=val; else if(sd->state.lr_flag == 1) sd->left_weapon.addclass[type2]+=val; else if(sd->state.lr_flag == 2) sd->arrow_addclass[type2]+=val; break; answer is no ... since rathena changed the monster mode, there are no field for setunitdata to modify a monster into Class_Boss mode unless ... well ... make an issue in rathena github
  3. AnnieRuru


    1. cell blocking ... already said there .. change "official_cell_stack_limit" then "@reloadbattleconf" 2. for emotion ... not going to do this openly ... want to start concentrate more on hercules ... so hope you can get someone else to help, or buy this mod
  4. AnnieRuru


    yeah its too old, needs a complete revamp ... src/custom/ | 20 ++++++++++++++++++++ src/custom/ | 3 +++ src/map/clif.cpp | 2 +- src/map/pc.cpp | 2 +- src/map/pc.hpp | 2 ++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/custom/ b/src/custom/ index 839b990cb..0e8751707 100644 --- a/src/custom/ +++ b/src/custom/ @@ -17,3 +17,23 @@ // script_pushint(st,1); // return 0; //} + +BUILDIN_FUNC(pcblockchat) { + struct map_session_data *sd = map_id2sd( script_getnum(st,2) ); + if ( !sd ) { + ShowWarning( "buildin_pcblockchat: Couldn't find RID '%d'\n", script_getnum(st,2) ); + return SCRIPT_CMD_FAILURE; + } + sd->state.blockedchat = script_getnum(st,3) > 0; + return SCRIPT_CMD_SUCCESS; +} + +BUILDIN_FUNC(pcblockattack) { + struct map_session_data *sd = map_id2sd( script_getnum(st,2) ); + if ( !sd ) { + ShowWarning( "buildin_pcblockattack: Couldn't find RID '%d'\n", script_getnum(st,2) ); + return SCRIPT_CMD_FAILURE; + } + sd->state.blockedattack = script_getnum(st,3) > 0; + return SCRIPT_CMD_SUCCESS; +} diff --git a/src/custom/ b/src/custom/ index 886399273..63e683e82 100644 --- a/src/custom/ +++ b/src/custom/ @@ -9,3 +9,6 @@ **/ //BUILDIN_DEF(example,""), + +BUILDIN_DEF(pcblockchat,"ii"), +BUILDIN_DEF(pcblockattack,"ii"), diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 72a596a25..d8631a6fc 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -10110,7 +10110,7 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat if( is_atcommand( fd, sd, out_message, 1 ) ) return false; - if (sd-> + if (sd-> || sd->state.blockedchat) return false; //no "chatting" while muted. if( battle_config.min_chat_delay ) { //[Skotlex] diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 5aace7ecb..7a9bce86e 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -9106,7 +9106,7 @@ bool pc_candrop(struct map_session_data *sd, struct item *item) bool pc_can_attack( struct map_session_data *sd, int target_id ) { nullpo_retr(false, sd); - if( pc_is90overweight(sd) || pc_isridingwug(sd) ) + if( pc_is90overweight(sd) || pc_isridingwug(sd) || sd->state.blockedattack ) return false; if( sd->[SC_BASILICA] || diff --git a/src/map/pc.hpp b/src/map/pc.hpp index ea5465bc8..9bcc01a88 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -256,6 +256,8 @@ struct map_session_data { unsigned int night :1; //Holds whether or not the player currently has the SI_NIGHT effect on. [Skotlex] unsigned int using_fake_npc :1; unsigned int rewarp :1; //Signals that a player should warp as soon as he is done loading a map. [Skotlex] + unsigned int blockedattack : 1; + unsigned int blockedchat : 1; unsigned int killer : 1; unsigned int killable : 1; unsigned int doridori : 1; prontera,153,178,4 script GvGPvP Watcher 414,{ if ( select ( "go to pvp", "spectator" ) == 2 ) { pcblockchat getcharid(3), true; pcblockattack getcharid(3), true; pcblockskill getcharid(3), true; setoption Option_Invisible, true; } warp "pvp_y_2-1",0,0; end; OnPCLogoutEvent: setoption Option_Invisible, false; end; } pvp_y_2-1 mapflag pvp pvp_y_2-1 mapflag nowarp pvp_y_2-1 mapflag nowarpto pvp_y_2-1 mapflag nosave SavePoint btw rathena developer still didn't do anything about that pull request ...
  5. AnnieRuru

    Level limitation

    I actually made one in hercules the above post ... exactly the same as my version 1.0, that means will have 2 bugs I mentioned in version 1.1 1. cannot pay guild tax exp 2. you actually gain 1 base exp and 1 job exp because of the cap value in pc_calcexp function you have to fix these 2 ...
  6. AnnieRuru

    Draw an online player.

    OnMinute00: if ( gettime(DT_HOUR) % 2 ) end; change into OnMinute00: OnMinute30:
  7. AnnieRuru

    Pintados Festival always active

    - script jksfhksjdf FAKE_NPC,{ OnInit: $malaya_pintados_00 = 1; donpcevent "Pintados Manager#pin::OnEnable"; // donpcevent "Pintados Manager#pin::OnEnableNPC"; // initnpctimer "Pintados Manager#pin"; end; } assuming you have your server maintenance every week
  8. I think rathena *progressbar is currently broken ... I kinda remember my arathi basin script, which also uses progressbar to turn the flag to your side ... at the time making the script, tested on rathena -> I can move to simply cancel the progress tested on hercules -> I can't move, have to get hit from something so to answer your question, in hercules, once the progressbar start, there is no way to cancel it other than 1. get hit 2. warp if trying to use skill while *progressbar, its the same as rathena Any work in progress (NPC dialog, manufactoring ... ) quit and try again
  9. in Hercules, I can't move my character while the bar progress
  10. AnnieRuru

    Turning buffs to toggle

    just give my 2 cents ... change the SC_ ... into OPTION_ ... means code a new OPTION_ ... something like that ... I'm out
  11. there are 2 path-finding bug I'm currently aware of ... in rathena 1. if you ask me when rathena implement the unitwalk with event labels it was 3~4 years ago and if they have to change the path-finding to implement this ... event label, then its clearly has been broken before that commit 2. or maybe the problem you are addressing is ... prontera,147,174,5 script asdfasdf 402,{ warp "prontera",155,185; } click on this npc, and you walk to npc despite there is no unitwalk script command ... if you are talking about this, this bug also happens on Hercules, this one I have no idea how to fix and sorry, I also not having enough knowledge to fix either of these .... and... I think this is a bug, definitely not happen on official server EDIT: Provoke is mainly use to lower the DEF of monsters, because of risking making the monster ATK higher, this skill is situational ... mainly use on high DEF and low ATK low HIT monsters
  12. AnnieRuru

    [Error]: buildin_delitem2: failed to delete 1 items

    utofaery is correct, my script uses getitem2 actually shows which item I got, You got Lucky Vital Hard Dexterous Knife [3] (1) You got +3 Quadruple Lucky Knife [4] (1) and using identifyall script command only shows Item Appraisal has completed successfully Item Appraisal has completed successfully identifyall script command .... unique to rathena ... check I not really sure how players gets random option equipment officially ... though I thought this system is custom .... there is no getitem3 anywhere in rathena npc folder... although we just kinda make emulator supports it
  13. 1. if the weapon is broken, and use *repairall script command, the equipment will stay in its own index so its fine to immediately repair it, and immediately re-equip it well, no idea how you going to code the auto-equip though solution 2 is better, like I said, spear boomerang and shield boomerang are the best skill to draw hate from a distance -> always (best) keep the party in wedge formation and never use provoke to draw hate ... if the sniper/wizard already engage monster automatically, using provoke will likely put them in danger ... can throw stone even draw hate from sniper/wizard ?? I highly doubt it ... EDIT: by the way... do you play Dungeon Siege ? that game also has some kind of ... party control vs mobs
  14. AnnieRuru

    [Error]: buildin_delitem2: failed to delete 1 items

    @inventorylist_attribute[] - whether it is broken. 1 = broken, 0 = not broken well, because my healer script actually has ... many functions, including *repairall, which your script missing ... note this is hercules script ... rathena doesn't support skill name or item name as constants ... also SC_INC_AGI is SC_INCREASEAGI in rathena .. etc looking at your script, having high identify cost, I guess your players has to go to repairman to get equipment repair prontera,147,174,5 script Identifier::identifier 402,{ // getitem2 1201, 1,0,0,0, 4001,4002,4003,4004; // getitem2 1202, 1,0,3,0, 4001,4001,4001,4001; [email protected] = 100; // that's expensive ... 1 magnifier cost 40 zeny actually getinventorylist; for ( [email protected] = 0; [email protected] < @inventorylist_count; [email protected] ) { if ( @inventorylist_identify[[email protected]] ) continue; if ( Zeny < [email protected] ) { dispbottom "The price is "+ [email protected] +" zeny to identify an item."; break; } Zeny -= [email protected]; delitem2 @inventorylist_id[[email protected]], 1, 0, @inventorylist_refine[[email protected]], @inventorylist_attribute[[email protected]], @inventorylist_card1[[email protected]], @inventorylist_card2[[email protected]], @inventorylist_card3[[email protected]], @inventorylist_card4[[email protected]]; getitem2 @inventorylist_id[[email protected]], 1, 1, @inventorylist_refine[[email protected]], @inventorylist_attribute[[email protected]], @inventorylist_card1[[email protected]], @inventorylist_card2[[email protected]], @inventorylist_card3[[email protected]], @inventorylist_card4[[email protected]]; [email protected]_item' [email protected]_zeny += [email protected]; } if ( [email protected]_item ) { message strcharinfo(0),"No identified items."; end; } specialeffect2 EF_REFINEOK; message strcharinfo(0), "Identify "+ [email protected]_item +" items for "+ [email protected]_zeny +" Zeny"; end; }
  15. frenzy is use as a last ditch effort when run out of potions (or wish to save them), and want to kill the last batch of monsters at hand or just want to run away in a no-teleport map (can't use wing of fly/butterfly) if play as a team (your project) it not so useful, but when play solo, this skill is extremely useful to save potions I always on Concentration ... just a personal preference because it reduce defence and not flee, Agi build lord knight has more advantage than Vit build when using this skill increase 50 hit is useful if you always miss something head crush and joint beat is totally useless in PvM, even spam pierce has higher damage than any of these joint beat is useful in PvP, some status ailment like curse/fear/blind is useful in pvp situation ... joint beat needs 3 points from head crush Charge attack, a must learn skill for PvP, immediately close in wizard/hunter from far away PvM ? I found spear boomerang more useful to draw hate ... in a team PvM fight should always keep the formation in tact btw there are 2 common lord knight builds, 1 vit build - spear skill tree 2. agi build - two hand sword skill tree don't ask me about any of the 3rd job skill, I didn't play RO for a very long time too EDIT: stalkers are useless in PvM ... this class is highly demand in PvP situation though yeah only the double strafe is useful in PvM chasewalk vs hide ... is a very debate topic chasewalk walk faster than hide <-- perhaps is the only thing useful in PvM if want to use backstab, use hide, then walk slowly behind the target, backstab, lots of damage sniper ... up agi dex luk = killing machine or dex+int = falcon assault build whitesmith ... weapon breaking buff is no problem, can repair broken weapon on the field creator ... berserk pitcher and potion pitcher skill is highly useful in PvM
  16. AnnieRuru

    Enchant RWC

    set .slot$, "2966|2968"; //Items that can be slotted. change into set .slot$, "2966|2967|2968|2969"; //Items that can be slotted. although some in-game testing, it seems it actually only allow to enchant non-slot equipments because 2967 and 2969 are slot items
  17. AnnieRuru

    Refine item

    prontera,150,185,5 script test 1_F_MARIA,{ if ( !isequipped(2589) && !isequipped(2576) ) dispbottom "go away"; end; }
  18. AnnieRuru

    Monster spawn error

    most people still confuse about this rand(2) generate 0,1 rand(0,2) generate 0,1,2 it should be [email protected] = .mvplist[rand(getarraysize(.mvplist))];
  19. AnnieRuru

    SQL PVP Suport (please)

    hmm ... looking back at this script, I forgot to index the point(11) field although my current method has evolved to a little bit more complex .. use method 1, which most people does
  20. AnnieRuru

    [Error]: buildin_delitem2: failed to delete 1 items

    [12/Feb 00:55][Error]: buildin_delitem2: failed to delete 1 items (AID=200xxxx item_id=20717). [12/Feb 00:55][Debug]: Source (NPC): Identifier at prontera (147,174) it clearly says this happens from identifier npc script at prontera map ok most Identifier script scatter on the board gives something like this prontera,150,185,5 script test 1_F_MARIA,{ getinventorylist; for ( [email protected] = 0; [email protected] < @inventorylist_count; [email protected] ) { if ( [email protected]_identify[[email protected]] ) { delitem2 @inventorylist_id[[email protected]],1,0,0,0,0,0,0,0; getitem @inventorylist_id[[email protected]],1; } } } which is true for most of the time, because monsters drop unidentified items without refine, no cards but this instance script you showed, drops refined and enchanted equipment, makeitem2 [email protected]_item,1,'map_name$,[email protected],[email protected],0,[email protected],0,0,[email protected]_name_2,[email protected]_name_3,[email protected]_name_4; and this custom Identifier script will fail to delete the item (as error shown) perhaps should change the identifier script accordingly like this prontera,150,185,5 script test 1_F_MARIA,{ getinventorylist; for ( [email protected] = 0; [email protected] < @inventorylist_count; [email protected] ) { if ( [email protected]_identify[[email protected]] ) { delitem2 @inventorylist_id[[email protected]], 1, 0, @inventorylist_refine[[email protected]], @inventorylist_attribute[[email protected]], @inventorylist_card1[[email protected]], @inventorylist_card2[[email protected]], @inventorylist_card3[[email protected]], @inventorylist_card4[[email protected]]; getitem2 @inventorylist_id[[email protected]], 1, 1, @inventorylist_refine[[email protected]], 0, @inventorylist_card1[[email protected]], @inventorylist_card2[[email protected]], @inventorylist_card3[[email protected]], @inventorylist_card4[[email protected]]; } } }
  21. AI sux at using knockback, trust me human eyes can visualize an area, but bots can only read coordinate in numbers even if you calculate the range from the tank/leader, it still has some other problems like 1. obstacles in the area 2. walls that prevent knockback 3. position of the healer/tank cause the party out of formation 4. direction of the knockback -> a good knockback can use on monsters with high HP to delay "this monster meant to kill later" -> a bad knockback can push the monsters inside the party formation and immediately kills your healer if my memory serve me right, I would go for brandish spear, I still remember brandish spear can knockback the mobs and potentially lose less HP while tanking mobs, whereas bowling bash just after some testing yeah, bowling bash seems better choice in rathena
  22. AnnieRuru

    Consumables in favorites

    why so complicated ? src/map/pc.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 5aace7ecb..f13aa90c3 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -4595,6 +4595,9 @@ char pc_additem(struct map_session_data *sd,struct item *item,int amount,e_log_p if (!itemdb_isstackable2(id) || id->flag.guid) sd->inventory.u.items_inventory[i].unique_id = item->unique_id ? item->unique_id : pc_generate_unique_id(sd); + if ( item->nameid == 717 ) + sd->inventory.u.items_inventory[i].favorite = 1; + clif_additem(sd,i,amount,0); } any character pick up, gets a blue_gemstone(717), is automatically put into favorite tab
  23. why not ? src/map/pc.cpp | 8 ++++++++ src/map/pc.hpp | 1 + 2 files changed, 9 insertions(+) diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 5aace7ecb..e7145e110 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -1356,6 +1356,8 @@ bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_ // Request all registries (auth is considered completed whence they arrive) intif_request_registry(sd,7); + + sd->spam_help = (int)time(NULL); return true; } @@ -7637,6 +7639,12 @@ void pc_damage(struct map_session_data *sd,struct block_list *src,unsigned int h if(battle_config.prevent_logout_trigger&PLT_DAMAGE) sd->canlog_tick = gettick(); + + if ( pc_readparam( sd, SP_HP ) * 100 / pc_readparam( sd, SP_MAXHP ) < 25 && sd->spam_help + 10 <= (int)time(NULL) ) { + clif_disp_overhead( &sd->bl, "I need Healing !!" ); + clif_emotion( &sd->bl, ET_HELP ); + sd->spam_help = (int)time(NULL); + } } TIMER_FUNC(pc_close_npc_timer){ diff --git a/src/map/pc.hpp b/src/map/pc.hpp index ea5465bc8..78bf4a009 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -730,6 +730,7 @@ struct map_session_data { uint32* hatEffectIDs; uint8 hatEffectCount; #endif + int spam_help; }; extern struct eri *pc_sc_display_ers; /// Player's SC display table I tested on older client, it still works, newer client no longer working google search "homunculus AI download", you can find some custom AI for the dispel, no idea, this skill is mostly use for PvP only, rarely use on PvM don't even care about Assuptio on monster ... because we don't cast dispel on monsters hahaha what a waste of yellow gemstone ...
  24. AnnieRuru

    npctalk color in script

    /*========================================== * Added built-in functions *------------------------------------------*/ static void add_buildin_func(void) { int i; for( i = 0; buildin_func[i].func; i++ ) { // arg must follow the pattern: (v|s|i|r|l)*\?*\*? // 'v' - value (either string or int or reference) // 's' - string // 'i' - int // 'r' - reference (of a variable) // 'l' - label // '?' - one optional parameter // '*' - unknown number of optional parameters no idea what to say, its part of source modification
  25. AnnieRuru

    npctalk color in script

    BUILDIN_FUNC(messagecolor) { struct block_list *bl = map_id2bl( script_getnum(st,2) ); if (!bl) { ShowWarning("buildin_messagecolor: Error in finding object GID %d!\n", script_getnum(st,2)); return SCRIPT_CMD_FAILURE; } clif_messagecolor( bl, script_getnum(st,4), script_getstr(st,3), true, AREA); return SCRIPT_CMD_SUCCESS; } BUILDIN_DEF(messagecolor,"isi"), Remember the reason why it doesn't work on players, because "@fontcolor" uses a trick to disguise player as monster apparently rAthena "@fontcolor" is broken