-
Content Count
1677 -
Joined
-
Last visited
-
Days Won
245
Posts posted by AnnieRuru
-
-
https://github.com/AnnieRuru/Release/blob/master/Guides/What is dynamic_mob and how it affects scripts.md.
https://rathena.org/board/topic/102715-mvp-board/#comment-357487unfortunately, Hercules/rAthena has dynamic_mob option, which is not available on Aegis, official ragnarok emulator
we can't just simply mobcount the MVP because the boss_monster are not loaded until someone warp into the mapthe TBL_MOB in the topic you link to, using iteration, is equivalent to getunits script command, also doesn't cache the boss_monster
there is a tricky way to do this however, which, in my theory, whenever a script command boss_monster pops up, push a source variable,
and again this source variable can be read by scripts, and thus provide us to check either that MVP is available or notthis question also has been asked to me privately in discord, and currently in 1 of my todo list
banhelba2019 reacted to this -
@RagnarokOnline2015 must be using RENEWAL
in renewal, its base atk + weapon atk
simply equip any weapon will do, like I'm using priest, equip a club"@refine 0 10", the refine will increase the value along with bonus bAtk or bonus bAtk2
in renewal, equip fire-brand will increase the value there
@Orca must be using pre-renewal
yes, equip a fire-brand doesn't increase that value,
to increase bAtk2, the only way is through refine "@refine 0 10" on your fire-brand, or using bonus bAtk2
and I repeat again, THIS IS OFFICIAL <-- tested same thing happen in rathena as well(EDIT)
this atk/matk stuffs has even confuse some developersEDIT: seems like I misunderstood the question,
you want to increase the 65535, not to add to the bAtk2 bonus ...banhelba2019 and RagnarokOnline2015 reacted to this -
On 3/30/2019 at 6:53 AM, WhiteEagle said:After adding the random option system, the refine drop dont work anymore.
curious, you mean you apply this https://github.com/HerculesWS/Hercules/pull/2309 modification ?
if what you said is real ... then there's bug on that pull request ...
hopefully that PR will get merge ... well we have inactive admin... means our current development is very very ... very slow ...
-
15 hours ago, Myriad said:Found an issue. Console getting spammed with this:
[Mar/29 14:50:41][Warning]: npc_event: player's event queue is full, can't add event 'RecalcStat::OnPCStatCalcEvent' !
this isn't an issue, it just say it runs this event too many times
probably having some scripts runs jobchange + statusup +equip + .... etc stuffsI remember you said something about having a refiner script runs in loop ... probably caused by that
and even that ... it shouldn't effect anything ... just an error message -
6 hours ago, 4144 said:because client exe almost latest, better get grf and other files from official kro or from any clean data/grf without custom modifications.
yes, I having some doubts why it always display rathena website when I change screen resolution in-game
so akkarin actually insert some modification to make the client exit and always go visit rathena.org, I think
downloading the one provided by Ridley one .... now this gonna take another 3~4 days -
hercules is compatible with newer hexed client
but that doesn't mean every hexed client is stable for use in live servercurrently the recommended client date everyone using is 2018-06-21aRagexeRE
I'm just using this one to test some newer stuffs, like the barter systemyeah, this client seems to crash... probably because of gravity ... doing that ragexe/ragexere name restriction ..
also can't enable zoom out, and can't remove chat limit ...
-
why not?
prontera,155,185,5 script quest 1_F_MARIA,{ mes "quest giver"; next; for ( .@i = 0; .@i < 3; ++.@i ) .@menu$[.@i] = sprintf( _$( "%sQuest %d" ), F_MesColor((quest > .@i *2)? C_GRAY : C_BLACK), .@i +1 ); .@s = select( implode( .@menu$, ":" ) ) -1; .@state = .@s *2; if ( quest > .@state ) { mes "you have completed this quest"; close; } else if ( quest < .@state ) { mes "you can't take this quest yet."; close; } mesf "Go talk to npc %d", .@s +1; quest = .@state +1; close; } function script F_quest_state { .@npcid = getarg(0); .@state = (.@npcid -1) *2 +1; if ( quest == .@state ) { dispbottom sprintf( _$( "complete %d" ), .@npcid ); quest = .@state +1; } end; } prontera,150,180,5 script npc 1 1_F_MARIA,{ F_quest_state(1); } prontera,155,180,5 script npc 2 1_F_MARIA,{ F_quest_state(2); } prontera,160,180,5 script npc 3 1_F_MARIA,{ F_quest_state(3); } prontera,160,185,5 script reset 1_F_MARIA,{ quest = 0; }
and this is quest log with achievement system
{ Id: 49920 Name: "Quest 1" }, { Id: 49921 Name: "Quest 2" }, { Id: 49922 Name: "Quest 3" },
[49920] = { Title = "Quest 1", IconName = "ico_nq.bmp", Description = { "Talk to <NAVI>NPC 1<INFO>prontera,150,180,</INFO></NAVI>" }, Summary = "Talk to NPC 1", NpcSpr = "1_F_MARIA", NpcNavi = "prontera", NpcPosX = 150, NpcPosY = 180, }, [49921] = { Title = "Quest 2", IconName = "ico_nq.bmp", Description = { "Talk to <NAVI>NPC 2<INFO>prontera,155,180,</INFO></NAVI>" }, Summary = "Talk to NPC 2", NpcSpr = "1_F_MARIA", NpcNavi = "prontera", NpcPosX = 155, NpcPosY = 180, }, [49922] = { Title = "Quest 3", IconName = "ico_nq.bmp", Description = { "Talk to <NAVI>NPC 3<INFO>prontera,160,180,</INFO></NAVI>" }, Summary = "Talk to NPC 3", NpcSpr = "1_F_MARIA", NpcNavi = "prontera", NpcPosX = 160, NpcPosY = 180, }
{ Id: 109993 Name: "Custom Quest" Type: "ACH_QUEST" Objectives: { *1: { Description: "Complete Quest 1" } *2: { Description: "Complete Quest 2" } *3: { Description: "Complete Quest 3" } } Points: 0 },
[109993] = { UI_Type = 0, group = "CHATTING", major = 4, minor = 0, title = "Custom Quest", content = { summary = "Visit the Quest Giver", details = "Visit the Quest Giver." }, resource = { [1] = { text = "Complete Quest 1" }, [2] = { text = "Complete Quest 2" }, [3] = { text = "Complete Quest 3" } }, score = 0 },
prontera,155,185,5 script quest 1_F_MARIA,{ mes "quest giver"; next; for ( .@i = 0; .@i < 3; ++.@i ) .@menu$[.@i] = sprintf( _$( "%sQuest %d" ), F_MesColor((questprogress( 49920+ .@i ) == 2)? C_GRAY : C_BLACK), .@i +1 ); .@s = select( implode( .@menu$, ":" ) ) -1; .@qid = 49920+ .@s; if ( questprogress(.@qid) == 2 ) { mes "you have completed this quest"; close; } else if ( .@qid == 49920 ); // break; else if ( questprogress(.@qid -1) != 2 ) { mes "you can't take this quest yet."; close; } mesf "Go talk to npc %d", .@s +1; if ( questprogress(.@qid) == 0 ) setquest .@qid; close; } function script F_quest_state { .@npcid = getarg(0); .@qid = .@npcid -1 + 49920; if ( questprogress(.@qid) == 1 ) { completequest .@qid; dispbottom sprintf( _$( "complete %d" ), .@npcid ); achievement_progress 109993, .@npcid, 1, 1; } end; } prontera,150,180,5 script npc 1 1_F_MARIA,{ F_quest_state(1); } prontera,155,180,5 script npc 2 1_F_MARIA,{ F_quest_state(2); } prontera,160,180,5 script npc 3 1_F_MARIA,{ F_quest_state(3); } prontera,160,185,5 script reset 1_F_MARIA,{ for ( .@i = 49920; .@i <= 49922; ++.@i ) if ( questprogress(.@i) ) erasequest(.@i); end; }
have fun playing with it
actually this is very simple script, just wanna play around a little bit
fiction and banhelba2019 reacted to this -
the latest available KRO client download...
https://rathena.org/board/topic/106413-kro-full-client-2019-02-25-includes-bgm-rsu/so I try download the nearest hexed client ...
http://nemo.herc.ws/clients/2019-02-20aRagexeRE/Everything seems to be working fine in-game
the problem is during exit the client, it just crash ...
1. press Alt+F4
2. click -> Game Option -> Exit to Windows button
exit the program in both methods also crashI noticed that when click -> Game Option -> Exit to Windows button,
my mouse cursor stuck in-game9 Disable 1rag1 type parameters (Recommended) 13 Disable Ragexe Filename Check (Recommended) 23 Enable /who command (Recommended) 34 Enable /showname (Recommended) 35 Read Data Folder First 36 Read msgstringtable.txt (Recommended) 38 Remove Gravity Ads (Recommended) 39 Remove Gravity Logo (Recommended) 41 Disable Nagle Algorithm (Recommended) 44 Translate Client (Recommended) 46 Use Normal Guild Brackets (Recommended) 47 Use Ragnarok Icon 49 Enable Multiple GRFs (Recommended) 64 @ Bug Fix (Recommended) 65 Load Custom lua file instead of iteminfo*.lub (Recommended) 84 Remove Serial Display (Recommended) 90 Enable DNS Support (Recommended) 208 Restore Cash Shop Icon 212 Restore Roulette 213 Disable Help Message on Login (Recommended) 230 Always load Korea ExternalSettings lua file 231 Remove hardcoded address/port (Recommended) 232 Restore old login packet (Recommended)
-
3 hours ago, WhiteEagle said:The problem is, that normally you can only skill your 2nd job skills, when you have already skill your 1st job skills.
But in the screenshot you can see, I dont need to use my 40/50 skillpoints from my 1st job.
So I can spend more skillpoints for my 2nd job after my reset.it caused by a setting in conf/map/battle/player.conf
// When set to true, forces skill points gained from 1st class to be put into 1st class // skills, and forces novice skill points to be put into the basic skill. (Note 1) player_skillup_limit: true
so its either you have set that to false ... OR ...
// src/map/pc.c - LINE 1928 static int pc_calc_skilltree_normalize_job(struct map_session_data *sd) { int skill_point, novice_skills; uint16 job; nullpo_ret(sd); job = sd->job; if (!battle_config.skillup_limit || pc_has_permission(sd, PC_PERM_ALL_SKILL)) return job;
you are using GM account that has permission to bypass this
-
-
static void guild_block_skill(struct map_session_data *sd, int time) { uint16 skill_id[] = { GD_BATTLEORDER, GD_REGENERATION, GD_RESTORE, GD_EMERGENCYCALL }; int i; for (i = 0; i < 4; i++) skill->blockpc_start(sd, skill_id[i], time); }
hercules uses skill->blockpc_start and skill->blockpc_end to just set sd->blockskill[skill_id] = true:false;
so you can just hook to skill->blockpc_end to display the message for the guild master
to display the time left in min:sec, when guild master use the skill, run DIFF_TICK function
oh wait this is request section ....
-
wait wait, I was asking question back before attempting to write out this script,
and I still haven't made title system script commands plugin yet ...I don't understand why you mark that as answer while I was actually asking for more information ...
rephrase again
1. you have to list out which MVP are easy/normal/hard,
easy - MVPID 1 , MVPID 2 ...
normal - MVPID 1 , MVPID 2 ...
...2. wait until I make title system script commands plugin .... going to write now
3. rewards give out by weekly or monthly are entire different formula ... you can only pick one ...
4. MVP points will trigger on MVP maps only <-- means only trigger like .... inside MVP room only ?
-
7 hours ago, astralprojection said:I think there is no way we can trigger on mob drop.
of course it can
#include "common/hercules.h" #include "map/mob.h" #include "map/npc.h" #include "map/mapreg.h" #include "plugins/HPMHooking.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "OnMobDrop", SERVER_TYPE_MAP, "x.x", HPM_VERSION, }; const char *event_label = "itemdrop::OnMobDrop"; struct item_drop *mob_setdropitem_post( struct item_drop* retVal, int nameid, int qty, struct item_data *data ) { mapreg->setreg( reference_uid( script->add_variable("$@mobdrop_itemid"), 0), nameid ); npc->event_do(event_label); return retVal; } HPExport void server_online( void ) { struct event_data *ev = (struct event_data*)strdb_get( npc->ev_db, event_label ); if ( ev == NULL || ev->nd == NULL ) { ShowWarning( "NPC label "CL_WHITE"%s"CL_RESET" does not found. Unloading "CL_WHITE"OnMobDrop"CL_RESET" Plugin.\n", event_label ); // core->runflag = CORE_ST_STOP; } else addHookPost( mob, setdropitem, mob_setdropitem_post ); }
because it doesn't attach to any player during processing drop, so you can run this as *donpcevent
prontera,155,185,5 script itemdrop 1_F_MARIA,{ end; OnMobDrop: announce F_ITEML($@mobdrop_itemid), bc_all; end; }
7 hours ago, astralprojection said:The plugin will trigger
- someone traded you.
- use old card album if card
- get from storageI was looking for trigger only if picked from mob drop but i think its impossible.
/// obtain log type character for item/zeny logs static char log_picktype2char(e_log_pick_type type) { switch( type ) { case LOG_TYPE_TRADE: return 'T'; // (T)rade case LOG_TYPE_VENDING: return 'V'; // (V)ending case LOG_TYPE_PICKDROP_PLAYER: return 'P'; // (P)player case LOG_TYPE_PICKDROP_MONSTER: return 'M'; // (M)onster case LOG_TYPE_NPC: return 'S'; // NPC (S)hop case LOG_TYPE_SCRIPT: return 'N'; // (N)PC Script case LOG_TYPE_STEAL: return 'D'; // Steal/Snatcher case LOG_TYPE_CONSUME: return 'C'; // (C)onsumed case LOG_TYPE_PRODUCE: return 'O'; // Pr(O)duced/Ingredients case LOG_TYPE_MVP: return 'U'; // MVP Rewards case LOG_TYPE_COMMAND: return 'A'; // (A)dmin command case LOG_TYPE_STORAGE: return 'R'; // Sto(R)age case LOG_TYPE_GSTORAGE: return 'G'; // (G)uild storage case LOG_TYPE_MAIL: return 'E'; // (E)mail attachment case LOG_TYPE_AUCTION: return 'I'; // Auct(I)on case LOG_TYPE_BUYING_STORE: return 'B'; // (B)uying Store case LOG_TYPE_LOOT: return 'L'; // (L)oot (consumed monster pick/drop) case LOG_TYPE_BANK: return 'K'; // Ban(K) Transactions case LOG_TYPE_DIVORCE: return 'Y'; // Divorce case LOG_TYPE_ROULETTE: return 'Z'; // Roulette case LOG_TYPE_RENTAL: return 'W'; // Rental case LOG_TYPE_CARD: return 'Q'; // Card case LOG_TYPE_INV_INVALID: return 'J'; // Invalid in inventory case LOG_TYPE_CART_INVALID: return 'H'; // Invalid in cart case LOG_TYPE_EGG: return '@'; // Egg case LOG_TYPE_QUEST: return '0'; // Quest case LOG_TYPE_SKILL: return '1'; // Skill case LOG_TYPE_REFINE: return '2'; // Refine case LOG_TYPE_OTHER: return 'X'; // Other }
see src\map\log.c for more information
see previous post, make sure only run with @pickup_action == LOG_TYPE_PICKDROP_PLAYER flag
-
bump
https://github.com/AnnieRuru/Release/blob/master/plugins/GM_impersonate/GM_impersonate_0.5.c
- fix this and use in latest herculesjust want to get through the bottom of this ...
-
for playing yourself ->
for development purposes ->
-
Spoilerhttps://github.com/AnnieRuru/Release/blob/master/plugins/OnPCPickUpEvent/OnPCPickUpEvent_0.2.c
- fix the unique ID
- add item optionprontera,155,185,5 script dfskhfs 1_F_MARIA,{ end; OnPCPickUpEvent: announce sprintf( _$( "%s has pick up %s !!" ), strcharinfo(PC_NAME), getitemname2( @pickup_itemid, @pickup_identify, @pickup_refine, @pickup_attribute, @pickup_card1, @pickup_card2, @pickup_card3, @pickup_card4 ) ), bc_all; end; }
EDIT: I think should hook to pc->additem, not pc->takeitem
Spoilerhttps://github.com/AnnieRuru/Release/blob/master/plugins/OnPCPickUpEvent/OnPCPickUpEvent_0.3.c
- fix unique ID not display properly, by hook pc->additem this timeprontera,155,185,5 script dfskhfs 1_F_MARIA,{ end; OnPCPickUpEvent: if ( @pickup_action != LOG_TYPE_PICKDROP_PLAYER ) end; announce sprintf( _$( "%s has pick up %s !!" ), strcharinfo(PC_NAME), getitemname2( @pickup_itemid, @pickup_identify, @pickup_refine, @pickup_attribute, @pickup_card1, @pickup_card2, @pickup_card3, @pickup_card4 ) ), bc_all; dispbottom @pickup_uniqueid1 +" "+ @pickup_uniqueid2; end; }
https://github.com/AnnieRuru/Release/blob/master/plugins/OnPCPickUpEvent/OnPCPickUpEvent_0.4.c
- add pc->delitem to run when player drop itemprontera,155,185,5 script dfskhfs 1_F_MARIA,{ end; OnPCPickUpEvent: if ( @pickup_action != LOG_TYPE_PICKDROP_PLAYER && @pickup_amount > 0 ) end; announce sprintf( _$( "%s has pick up %s !!" ), strcharinfo(PC_NAME), getitemname2( @pickup_itemid, @pickup_identify, @pickup_refine, @pickup_attribute, @pickup_card1, @pickup_card2, @pickup_card3, @pickup_card4 ) ), bc_all; // dispbottom @pickup_amount +" "+ @pickup_uniqueid1 +" "+ @pickup_uniqueid2; end; }
-
the cards can be done by retrieve the card ID from `item_db` SQL table, its not that hard to do
https://github.com/AnnieRuru/Release/blob/master/plugins/addrefinedrop/addrefinedrop_0.2.c
btw, this is simple stuffs ....
PS: when testing, I turned on autoloot and using custom identifier scriptevilpuncker and WhiteEagle reacted to this -
the monster drop are not attaching to any player, because it just simply drop on the floor
the only time it attach the player is when the one of the party member has "@autoloot" enabled, and also just attach to the party member having "@autoloot"what's the idea behind this modification ?
I remember I made rare drop announcement patch during eathena time
if( sd && sd->status.mod_drop != 100 ) { drop_rate = drop_rate * sd->status.mod_drop / 100; if( drop_rate < 1 ) drop_rate = 1; }
just add announce blah blah after this line in mob_dead function
or if you mean it trigger when player pick up an item, then can try my OnPCPickUpEvent
-
6 hours ago, Eternity said:@AnnieRuru is there way yo u can make it compatible for rA version please?
Thank you!hmm ? I already post up the topic links in the spoiler isn't it ?
those are the topics that are made inside rathena forum, and its compatible with rathenabut if you insist of my work ... well we can talk price
-
5 hours ago, WhiteEagle said:I would have to switch off the normal drop completely and just let makeitem run.
exactly the point, I assumed this is use in events, so you already have mf_nomobloot enabled
disable monster drop on the map, and use makeitem2 script command to make monster drop items insteadso you mean this is use on normal monster drop as well ?
#include "common/hercules.h" #include "map/mob.h" #include "plugins/HPMHooking.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "addrefinedrop", SERVER_TYPE_MAP, "x.x", HPM_VERSION, }; struct item_drop *mob_setdropitem_post( struct item_drop* retVal, int nameid, int qty, struct item_data *data ) { if ( retVal->item_data.nameid == 1202 ) retVal->item_data.refine = 2; return retVal; } HPExport void plugin_init( void ) { addHookPost( mob, setdropitem, mob_setdropitem_post ); }
tested with killing poring repeatedly, "@monster 1002 100" and go for item Knife_ drop
-
just use OnNPCKillEvent and makeitem2 script command, shouldn't very hard to do
Spoiler..... or maybe needs *mobevent script command ...
well if you needs the monster's coordinate when monster dead ... -
-
1 hour ago, Emistry said:anyway, just curious, since its just adding a new field "event_label", why not consider alter the existing "skill_db" and add the field there?
possible, but the event label can't throw error anymore during server start-up
you see, the server has an order when loading stuffs
[Status]: Done reading '64' command aliases in 'conf/atcommand.conf'. [Status]: Done reading '4' channels in 'conf/channels.conf'. [Status]: Done reading '10600' entries in 're/item_db.conf'. ... [Status]: Done reading '1128' entries in 'db/re/skill_db.conf'. // <--- HERE !!! [Status]: Done reading '264' entries in 'db/produce_db.txt'. [Status]: Done reading '136' entries in 'db/create_arrow_db.txt'. .... [Status]: Done reading '15' zones in 'db/re/map_zone_db.conf'. [Status]: Done reading '0' entries in 'db/mob_item_ratio.txt'. [Status]: Done reading '40' entries in 'mob_chat_db.txt'. [Status]: Done reading '1724' entries in 're/mob_db.conf'. ... [Status]: Done reading '3064' entries in 'quest_db.conf'. [Status]: Done reading '344' entries in 'db/re/achievement_db.conf'. [Status]: Done reading '11' entries in 'db/achievement_rank_db.conf'. [Info]: Done loading '8' NPCs: <-------------------------------------- HERE !!! -'0' Warps -'0' Shops -'8' Scripts -'0' Spawn sets -'0' Mobs Cached -'0' Mobs Not Cached [Status]: Done reading '56' entries in 'db/stylist_db.conf'. [Status]: Event 'OnInit' executed with '4' NPCs. [Info]: Hercules, Copyright (C) 2012-2018, Hercules Dev Team and others. [Info]: Licensed under the GNU General Public License, version 3 or later. [Status]: Server is 'ready' and listening on port '5121'. [Status]: Done reading '4' entries in 'conf/import/OnPCUseSkillEvent.conf'. <------ HERE !!!
if I hook to the skill_validate_additional_fields, it will always say Event label NOT FOUND, because the npc wasn't loaded yet
my plugin doesn't read the OnPCUseSkillEvent.conf file during [HPExport void plugin_init] function, but at [HPExport void server_online] function
this is to make sure it runs AFTER the npc files are loadedyes, its possible to just hook to the skill_validate_additional_fields function, but it wont throw error on server start-up anymore
the npc label check will be done when player is casting the skill instead, <-- which is already too late
--> I want the error thrown during server start-upstruct event_data *ev = (struct event_data*)strdb_get(npc->ev_db, event); if ( ev == NULL || ev->nd == NULL ) { ShowWarning( "OnPCUseSkillEvent: NPC label "CL_WHITE"%s"CL_RESET" does not found on skill "CL_WHITE"%s(%d)"CL_RESET" entry no."CL_WHITE"%d"CL_RESET" in '"CL_WHITE"%s"CL_RESET"'.\n", event, skillname, skillid, i, confpath ); continue; }
EDIT:
hmm ... yeah, why not just try hook both ...
hook to the skill_validate_additional_fields function, then check the npc label again at [HPExport void server_online] function ...
... give it a try ...EDIT2:
there is no addToSKILLDATA in HPMi.h !!
-
1.1
update both scripts to support achievement systems
https://github.com/AnnieRuru/Release/blob/master/scripts/Quest %26 Shops/quest log/quest_log_1.1.txt.
https://github.com/AnnieRuru/Release/blob/master/scripts/Quest %26 Shops/quest log/daily_quest_log_1.1.txt
How to Remove Base EXP | Base Drop (VIP)
in General Server Support
Posted
run this script, and click on it
to reset everything back to normal
additionally, its store in SQL table `account_data`
where your account bank balance store there as well