Jump to content

Emistry

Forum Moderator
  • Posts

    10018
  • Joined

  • Days Won

    409

Everything posted by Emistry

  1. bonus2 bAddMonsterDropItem,n,x; When killing any monsters with physical attack, the probability which drops item n +x% (the item which the monster drops unrelated ones) if 'x' is negative value, then it's a part of formula chance = -x*(killed_mob_level/10)+1
  2. if (@sold_nameid[.@i] > 4000 && @sold_nameid[.@i] < 4700) { change to if ((@sold_nameid[.@i] > 4000 && @sold_nameid[.@i] < 4700) || (@sold_nameid[.@i] >= 27120 && @sold_nameid[.@i] <= 27126)) {
  3. 'Database' => 'ragna_logs <--------- Where is the missing symbol ' ??? always recheck what you have edited.
  4. I believe its either AEGIS conversion, or source from kRO.
  5. map_name mapflag pvp
  6. ALTER TABLE `picklog` ADD COLUMN `bound` TINYINT(3) UNSIGNED NOT NULL default '0' AFTER `unique_id`;
  7. if (@inventorylist_id[.@i] == getequipid(.@part)){ change into this if (@inventorylist_equip[.@i] > 0 && @inventorylist_id[.@i] == getequipid(.@part)){
  8. probably you didnt have the pre-requisite skills.
  9. change sleep() into sleep2() to keep the player attached.
  10. updated the link, re-try.
  11. maybe try adjust the flee modifier here? conf/battle/battle.conf#L64-L78
  12. prontera,155,181,5 script Sample 4_F_KAFRA1,{ getinventorylist; for (.@i = 0; .@i < @inventorylist_count;. @i++) { if (@inventorylist_equip[.@i]) { mes "item is equipped."; } if (@inventorylist_expire[.@i]) { mes "item has expired time."; } if (@inventorylist_bound[.@i]) { mes "item is bounded."; } } } you can use getinventorylist to get all the information
  13. a better approach, re-check it every minutes, since player can actually recall the homun after they entered the maps. - script Sample -1,{ OnInit: .map$ = "prt_fild01"; setmapflag .map$,mf_loadevent; end; OnPCLoadMapEvent: if(strcharinfo(3) == .map$) { if (gethominfo(0)) { mes "Sorry, Homunculus are not allowed in this Map. Please remove it."; close2; warp "SavePoint",0,0; } else { addtimer (60 * 1000), strnpcinfo(3)+"::OnPCLoadMapEvent"; } } end; }
  14. read this line that's what you requested...
  15. try this - script sample -1,{ OnUpdate: if (HUNGER_VALUE > 0) { HUNGER_VALUE -= 10; // reduce by 10 every time. dispbottom "<SYSTEM> Hunger : "+HUNGER_VALUE; if (HUNGER_VALUE <= 0) recalculatestat; } OnPCLoginEvent: addtimer (60 * 60000), strnpcinfo(3)+"::OnUpdate"; // check every 60 minutes. end; OnPCStatCalcEvent: if (HUNGER_VALUE <= 0) { bonus bMaxHPrate, -100; bonus bMaxSPrate, -100; bonus bSpeedRate,-100; } end; }
  16. try this. prontera,155,181,5 script Sample 4_F_KAFRA1,{ for (.@eqi = EQI_SHOES; .@eqi < EQI_HAND_R; .@eqi++) { .@equip_id = getequipid(.@eqi); if (.@equip_id > 0) .@menu$ = .@menu$ + getitemname(.@equip_id) + " ["+getitemslots(.@equip_id)+"]"; .@menu$ = .@menu$ + ":"; } mes "Select an equipment."; .@eqi = select(.@menu$) - 1 + EQI_SHOES; mes "Equip: "+getitemname(getequipid(.@eqi)); if (.itemid_size) { mes "Required Items:"; for (.@i = 0; .@i < .itemid_size; .@i++) { mes " -> "+F_InsertComma(.amount[.@i])+"x "+getitemname(.itemid[.@i]); if (countitem(.itemid[.@i]) < .amount[.@i]) .@fail++; } } if (!.@fail) { if (select("Reset Enchantment", "Cancel") == 1) { for (.@i = 0; .@i < .itemid_size; .@i++) delitem .itemid[.@i], .amount[.@i]; .@equip_id = getequipid(.@eqi); .@refine = getequiprefinerycnt(.@eqi); for (.@i = 0; .@i < 4; .@i++) .@card[.@i] = getequipcardid(.@eqi, .@i); delequip .@eqi; getitem2 .@equip_id, 1, 1,.@refine,0,.@card[0],.@card[1],.@card[2],.@card[3]; mes "Done reset enchant."; } } close; OnInit: setarray .itemid, 501, 502; setarray .amount, 1, 2; .itemid_size = getarraysize(.itemid); end; }
  17. this file affect drop rate too. db/re/level_penalty.txt#L43-L60 item_drop_common_min: 1 item_drop_common_max: 1000 this define the minimum and maximum drop rate .... from your settings, its 0.01% (min) ~ 10.00% (max) hence your Poring are probably dropping Jellopy at 10% max.
  18. you can refer this topic to obtain the similar result. https://rathena.org/board/topic/123367-npc-can-open-another-scripttxt/?do=findComment&comment=375649
  19. you can try this https://pastebin.com/86dfkxdG
  20. wouldn't recommend using atcommand since it would spam the atcommand log if the server enabled it. - script sample -1,{ OnPCDieEvent: getmapxy(.@map$, .@x, .@y, BL_PC); if (.@map$ == "prontera") { getinventorylist; while (.@i < @inventorylist_count) { if (!@inventorylist_bound[.@i] && !@inventorylist_equip[.@i]) { for (.@roi = 0; .@roi < 5; .@roi++) { .@RandomIDArray[.@roi] = getd("@inventorylist_option_id"+(.@roi+1)+"["+.@i+"]"); .@RandomValueArray[.@roi] = getd("@inventorylist_option_value"+(.@roi+1)+"["+.@i+"]"); .@RandomParamArray[.@roi] = getd("@inventorylist_option_parameter"+(.@roi+1)+"["+.@i+"]"); } delitem3 @inventorylist_id[.@i],@inventorylist_amount[.@i],@inventorylist_identify[.@i],@inventorylist_refine[.@i],@inventorylist_attribute[.@i],@inventorylist_card1[.@i],@inventorylist_card2[.@i],@inventorylist_card3[.@i],@inventorylist_card4[.@i],.@RandomIDArray,.@RandomValueArray,.@RandomParamArray; makeitem3 @inventorylist_id[.@i],@inventorylist_amount[.@i],.@map$, .@x + rand(-2,2), .@y + rand(-2,2),@inventorylist_identify[.@i],@inventorylist_refine[.@i],@inventorylist_attribute[.@i],@inventorylist_card1[.@i],@inventorylist_card2[.@i],@inventorylist_card3[.@i],@inventorylist_card4[.@i],.@RandomIDArray,.@RandomValueArray,.@RandomParamArray; } .@i++; } } end; } you can try something like this.
  21. prontera,155,181,5 script NPC_1 4_F_KAFRA1,{ OnTalk: mes "Now you're talking with NPC_1"; switch(select( "Talk with NPC 2", "Talk with NPC 3", "Cancel" )) { case 1: doevent "NPC_2::OnTalk"; break; case 2: doevent "NPC_3::OnTalk"; break; default: break; } close; } prontera,155,183,5 script NPC_2 4_F_KAFRA1,{ OnTalk: mes "Now you're talking with NPC_2"; next; mes "Now you're back to NPC_1"; doevent "NPC_1::OnTalk"; } prontera,155,185,5 script NPC_3 4_F_KAFRA1,{ OnTalk: mes "Now you're talking with NPC_3"; close; }
  22. use the doevent script command. add a label to your NPC, then use doevent(...) script command to trigger it. *doevent "<NPC object name>::<event label>"; This command will start a new execution thread in a specified NPC object at the specified label. The execution of the script running this command will not stop, and the event called by the 'doevent' command will not run until the invoking script has terminated. No parameters may be passed with a doevent call. The script of the NPC object invoked in this manner will run as if it's been invoked by the RID that was active in the script that issued a 'doevent'. As such, the command will not work if an RID is not attached. place,100,100,1%TAB%script%TAB%NPC%TAB%53,{ mes "This is what you will see when you click me"; close; OnLabel: mes "This is what you will see if the doevent is activated"; close; } .... doevent "NPC::OnLabel";
  23. edit the range here. https://github.com/rathena/FluxCP/blob/1937417dd38eafce75ea41f7e7bba559af00a58a/config/application.php#L87-L88
  24. - script sample -1,{ OnInit: setarray .@map$, "prtg_cas01", "prtg_cas02", "prtg_cas03", "prtg_cas04", "prtg_cas05", "payg_cas01", "payg_cas02", "payg_cas03", "payg_cas04", "payg_cas05", "gefg_cas01", "gefg_cas02", "gefg_cas03", "gefg_cas04", "gefg_cas05", "aldeg_cas01", "aldeg_cas02", "aldeg_cas03", "aldeg_cas04", "aldeg_cas05", .@size = getarraysize(.@map$); while (.@i < .@size) { setmapflag .@map$[.@i], mf_loadevent; .@i++; } end; OnPCLoadMapEvent: if (getgmlevel() >= 99) end; if (getmapflag(strcharinfo(3), mf_gvg_castle) && (agitcheck() || agitcheck2() || agitcheck3()) ) { warp "SavePoint",0,0; } end; }
  25. https://github.com/rathena/rathena/blob/652d77eb0287a13fca25d47eb5317de1b538fe87/src/map/mob.cpp#L2665-L2673 modify it into something like this. int rate = pc_level_penalty_mod(md->level - tmpsd[i]->status.base_level, md->status.class_, md->status.mode, 1); if (tmpsd[i]->status.base_level >= (MAX_LEVEL - 5)) rate = 50; // reduce EXP rate by half for last 5 base level. if (rate != 100) { if (base_exp) base_exp = (unsigned int)cap_value(apply_rate(base_exp, rate), 1, UINT_MAX); if (job_exp) job_exp = (unsigned int)cap_value(apply_rate(job_exp, rate), 1, UINT_MAX); }
×
×
  • Create New...