Jump to content

Ind

Retired Staff
  • Content Count

    1655
  • Joined

  • Last visited

  • Days Won

    131

Everything posted by Ind

  1. the script_rid2sd not being in the script.h header should be considered a bug I think, the TBL_PC * error is being caused because of script_rid2sd and will be gone once its in the header, i'll be getting this fixed in a upcoming commit, in the meantime you can put TBL_PC *script_rid2sd(struct script_state *st)in the script.h header to make your plug-in compileable,btw your plugin will still crash because your code is trying to access the clif interface without linking it, to link it on plugin_init you have to: clif = GET_SYMBOL("clif");
  2. this should've been put in the bug tracker, i'd have known earlier. Fixed in https://github.com/HerculesWS/Hercules/commit/d7e44b9b752e875bd37714309ee524f9700f7d2a
  3. oh there is something I forgot to ask, is there a minimum to join or officially min and max are the same? (and if is there a minimum, whats the criteria for it to start after minimum has been reached?) Thanks
  4. Thank you for your suggestion, we have been discussing the item db format for a while and should we move on with it this issue will be solved, this will be pending till we're done discussing it
  5. As you might have seen in the May 30 Patch, we've got most of it already coded, we just have a few questions left before we can have it be functional. [*]is there a minimum to join or officially min and max are the same? (and if is there a minimum, whats the criteria for it to start after minimum has been reached?) [*]Whats the official criteria for splitting teams? e.g. say you have 5 soloers, 3 parties (of 6, 8 and 10 members, respectively) in the queue, this totals 29 members, it'd let the match start unevenly? [*]whats the official maximum for a queue? [*](if 72 is greater than the maximum) say someone with a 72 on guild applies with his whole guild, what happens? [*]Is it possible that someone fills the queue entirely with allies (e.g. join with full guild assuming guild members match maximum members in queue)? If so what happens, queue is cancelled?
  6. Hercules casts "Memory Slasher !!" - May 30 Patch Memory Slasher !! Regardless all the fancy features in it, this patch's greatest achievement is smart, clever employment of memory, by looking at our memory usage wisely we've been able to reduce map-server's memory (RAM) usage by more than 2/3, about 183MB of RAM were dropped, while maintaining Hercules outstanding record on performance improvement. Beyond the memory usage drop there is also a significant processing speed improvement which can be noticed during boot, map cache loading which used to account for most of the map-servers boot time no longer exists, its gone, dead, fini, boom! it was replaced by a smart map cache handler that loads its data only when a map is necessary (the data is then kept until shut down), this logic also makes map-server's shut down process a hell lot faster. Instance Rework As suggested by the community, this wasnt supposed to be bundled with this commit but the memory usage improvements required me to modify how instances were stored, so I re-wrote part of it to fit the suggestion as well. Instance Functionality/Feature Server may now create instances of any maps regardless of client-side edits, e.g. one can clone prontera and call it "mymapname" (as is best described in the *instance_attachmap script command note) Instances may now be available in 4 distinct ways (as is best described in *instance_create script command note), by nobody (server type instance, to be used with special map names), by a sole character, by a party, or by a guild Script Command Changes *instance_create 2nd param is now called owner_id instead of party_id, and it got a 3rd optional param that defines what kind of owner id it is (when not provided, assumes party_id, for backwards compatibility), available options are (IOT_ stands for INSTANCE OWNER TYPE) IOT_NONE (0), IOT_CHAR (1), IOT_PARTY (2) and IOT_GUILD (3). *instance_destroy no longer autodetects instance id from party id *instance_attachmap now supports a 4th, optional, param, "<new map name>", it will allow you to specify a entirely new map name for the instance (without the need of client-side edits). This option can be best employed when used on a instance of <owner_type> IOT_NONE *instance_detachmap no longer autodetects instance id from party id *instance_id no longer supports any param *instance_set_timeout no longer autodetects instance id from party id *instance_announce no longer autodetects instance id from party id, and to tell it to autodetect from the attached script you must set instance_id param as -1 as opposed to 0 *instance_npcname no longer autodetects instance id from party id *has_instance no longer autodetects instance from party, however it now checks if attached player possesses a instance with same map as has_instance(<param>) checks for *instance_warpall no longer autodetects instance from party Other ChangesInstance IDs (valid ones) are now always >= 0 as opposed to > 0 (update your scripts!) Battlegrounds Queue As suggested by the community, most of its features were added in this patch, we were unable to finish it though because we lacked some information, we've put our questions in this topic, once our questions are answered we should be able to finish it in a matter of minutes (all the heavy lifting was done in this patch). Arenas They're easily configurable in the new conf/battlegrounds.conf file, it possible to add more arenas by editing the client's lua files/entryqueue/entryqueuelist.lua file Configuration Sample arenas: ({ name: "Tierra Gorge" //must match the name in client files event: "Tierra_BG2::OnPlayerListReady" minLevel: 80 maxLevel: 150 reward: {/* amount of badges awarded on each case */ win: 3 loss: 1 draw: 1 } minPlayers: 6 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 6 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "Tierra_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */},{ name: "KVM (Level 59 and below)" //must match the name in client files event: "KvM03_BG::OnPlayerListReady" minLevel: 1 maxLevel: 59 reward: {/* amount of badges awarded on each case */ win: 1 loss: 0 draw: 0 } minPlayers: 4 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */}) QueueWe wanted to make the queue as easy to play with as possible, so we've created a whole new set of script commands designed with this purpose. These commands make it easy to create and control queues for anything, games, events, quests, and of course in this case, the battleground's queue. Queue - Script Commands *queue()creates a new queue instance, returns created queue id set .@id,queue(); *queuesize(<queue_id>)returns the amount of entries in queue instance of <queue_id>. set .@length,queuesize(.@queue_id); *queueadd(<queue_id>,<var_id>)adds <var_id> to queue of <queue_id>, returns 1 if <var_id> is already present in the queue, 0 otherwise. queueadd(.@queue_id,.@var_id); *queueremove(<queue_id>,<var_id>)removes <var_id> from queue of <queue_id>, returns 1 if <var_id> is not present in the queue, 0 otherwise. queueremove(.@queue_id,.@var_id); *queueopt(<queue_id>,<optionType>,{Optional <option val>})modifies <queue_id>'s <optionType>, when <option val> is not present, <optionType> is removed from <queue_id>, when present it modifies <queue_id>'s <optionType> with the new <option val> value. Currently 3 options are available, HQO_OnDeath (0), HQO_OnLogout (1), HQO_OnMapChange (2) (the constant names are not final). queueopt(.@queue_id,0,"MyNPC::MyOnQueueMemberDeathEventName");It allows you to hook npc events to be triggered by specific actions that may happen to a player in the queue (when the queue in question is used for account ids) *queuedel(<queue_id>)deletes <queue_id> returns 1 when <queue_id> is not found, 0 otherwise. queuedel(.@queue_id); *queueiterator(<queue_id>)creates a new queue iterator instance, a queue iterator is not a reference to a queue's actual members, it copies the queues members when initialized, this way you can loop through them even if you remove them from the queue set .@it,queueiterator(.@queue_id); *qicheck(<queue_iterator_id>)checks whether there is a next member in the iterator's queue, 1 when it does, 0 otherwise. qicheck(.@queue_iterator_id); *qiget(<queue_iterator_id>)obtains the next member in the iterator's queue, returns the next member's id or 0 when it doesnt exist. for( set .@elem,qiget(.@queue_iterator_id); qicheck(.@queue_iterator_id); set .@elem,qiget(.@queue_iterator_id) ) *qiclear(<queue_iterator_id>)deletes a queue iterator from memory, returns 1 when it fails, 0 otherwise. qiclear(.@queue_iterator_id) Sample Usage: /* say create a queue */set .@id,queue();queueadd(.@id,getcharid(3));/* ... add as many entries ... (no limit) */if( queuesize(.@id) == 999 ) { /* whatever */}/* anywhere in the code */set .@it,queueiterator(.@id);for( set .@elem,qiget(.@it); qicheck(.@it); set .@elem,qiget(.@it) ) { //do anything e.g. /* attachrid .@elem; */ /* mes "ID:"+.@elem; */}qiclear(.@it); Special Thanks To Yommy for providing me with a hell lot of data for the BG Queue, wouldn't have been able to get it to this point without his help. Rosiel for his suggestion on the instance feature Xgear for his help with the network timeout bug mkbu95 for pinpointing the script parser bug All of Hercules Staff for their ideas/suggestions/criticism and support, and for keeping me sane during this memory slashing madness The Future~! This patch sure has taken me away from my usual bug-squashing mode, I'll be going back to my over-10-bug-fix-a-day schedule. We have quite a hell lot planned so this might not last long, make sure to keep an eye on your bug reports for I sure will be replying to them. Link~u! Commit 1 Commit 2 Commit 3
  7. Ind

    Forum bug

    interesting
  8. Absolutely, besides making battlegrounds' customisation easier, this also will make life easier for anyone wanting to make a custom team game/event/quest/etc.
  9. We do possess such information thanks to Muad_Dib, and as malufett pointed out This is our reason for not having implemented it yet.
  10. this is quite taking longer than I expected, to show some movement/give you guys another sneak peek: the upcoming universal queue script commands that the new battleground scripts will be using (can be used for anything else as well, e.g. custom events) 10 new script commands [*]queue() [*]creates a new queue instance, returns created queue id set .@id,queue(); [*]queuesize(<queue_id>) [*]returns the amount of entries in queue instance of <queue_id>. set .@length,queuesize(.@queue_id); [*]queueadd(<queue_id>,<var_id>) [*]adds <var_id> to queue of <queue_id>, returns 1 if <var_id> is already present in the queue, 0 otherwise. queueadd(.@queue_id,.@var_id); [*]queueremove(<queue_id>,<var_id>) [*]removes <var_id> from queue of <queue_id>, returns 1 if <var_id> is not present in the queue, 0 otherwise. queueremove(.@queue_id,.@var_id); [*]queueopt(<queue_id>,<optionType>,{Optional <option val>}) [*]modifies <queue_id>'s <optionType>, when <option val> is not present, <optionType> is removed from <queue_id>, when present it modifies <queue_id>'s <optionType> with the new <option val> value. Currently 3 options are available, HQO_OnDeath, HQO_OnLogout, HQO_OnMapChange (the constant names are not final). queueopt(.@queue_id,HQO_OnDeath,"MyNPC::MyOnQueueMemberDeathEventName");It allows you to hook npc events to be triggered by specific actions that may happen to a player in the queue (when the queue in question is used for account ids) [*]queuedel(<queue_id>) [*]deletes <queue_id> returns 1 when <queue_id> is not found, 0 otherwise. queuedel(.@queue_id); [*]queueiterator(<queue_id>) [*]creates a new queue iterator instance, a queue iterator is not a reference to a queue's actual members, it copies the queues members when initialized, this way you can loop through them even if you remove them from the queue set .@it,queueiterator(.@queue_id); [*]qicheck(<queue_iterator_id>) [*]checks whether there is a next member in the iterator's queue, 1 when it does, 0 otherwise. qicheck(.@queue_iterator_id); [*]qiget(<queue_iterator_id>) [*]obtains the next member in the iterator's queue, returns the next member's id or 0 when it doesnt exist. for( set .@elem,qiget(.@queue_iterator_id); qicheck(.@queue_iterator_id); set .@elem,qiget(.@queue_iterator_id) ) [*]qiclear(<queue_iterator_id>) [*]deletes a queue iterator from memory, returns 1 when it fails, 0 otherwise. qiclear(.@queue_iterator_id) Sample Usage: /* say create a queue */set .@id,queue();queueadd(.@id,getcharid(3));/* ... add as many entries ... (no limit) */if( queuesize(.@id) == 999 ) { /* whatever */}/* anywhere in the code */set .@it,queueiterator(.@id);for( set .@elem,qiget(.@it); qicheck(.@it); set .@elem,qiget(.@it) ) { //do anything e.g. /* attachrid .@elem; */ /* mes "ID:"+.@elem; */}qiclear(.@it);
  11. With the upcoming update we'll extend this phase to incoming packets as well, for example void clif_parse_bgqueue_battlebegin_ack(int fd, struct map_session_data *sd) { short result = RFIFOW(fd,2); char *bg_name = (char*)RFIFOP(fd,4); if ( result == 1 ) bg->queue_pc_ready(sd); else bg->queue_leave(sd, bg_name);}becomesvoid clif_parse_bgqueue_battlebegin_ack(int fd, struct map_session_data *sd) { struct packet_bgqueue_battlebegin_ack *p = P2PTR(fd, bgqueue_checkstateType); if ( p->result == 1 ) bg->queue_pc_ready(sd); else bg->queue_leave(sd, p->bg_name);}Thanks to pointer logic#define P2PTR(fd,cmd) (void*)(session[fd]->rdata + packet_len(cmd))
  12. drama and hate speech are not welcome here on hercules. To rAthena staff: you're more than welcome to join us or remain as a community member if you wish to, however if you're here to crap around, get lost. I'll not allow hate speech and/or drama to take place in Hercules, our staff has been advised to delete such posts on sight.
  13. oh grow up. you guys own incompetence started the rumors, by keeping everyone in the dark for so long. if backups truly exist, this 2 week delay to use them just further demonstrates rathena admins ineptness. yes it would, much more can be achieved together.
  14. I apologise for the delay, I've hooked this feature to a mega long update which is why its taking a while to release it, should be out in the coming days along some pretty cool stuff http://herc.ws/board/blog/1/entry-31-upcoming-update/
  15. oh i see o-o I added a maxDuration setting for each arena we can later modify when we find out the values. sneak peek: //====================================================//= _ _ _ //= | | | | | | //= | |_| | ___ _ __ ___ _ _| | ___ ___ //= | _ |/ _ '__/ __| | | | |/ _ / __|//= | | | | __/ | | (__| |_| | | __/__ //= _| |_/___|_| ___|__,_|_|___||___///= //= http://herc.ws/board/ //====================================================//= Link~u! <description> <link to wiki/topic>battlegrounds: ({ /* character variable for global bg delay */ global_delay_var: "BG_Delay_Tick" /* how many seconds to consider a player "afk" and kick him out? */ maximum_afk_seconds: 30 /* str used by the feature */ queue_invalid_name: "(Invalid Name)" queue_individual_name: "Individual" queue_party_name: "Party" queue_guild_name: "Guild" /* one can add as many as he wishes */ /* for custom ones, need to edit "lua files/entryqueue/entryqueuelist.lua" [Ind/Hercules] */ arenas: ({ name: "Tierra Gorge" //must match the name in client files event: "Tierra_BG2::OnPlayerListReady" minLevel: 80 maxLevel: 150 reward: {/* amount of badges awarded on each case */ win: 3 loss: 1 draw: 1 } minPlayers: 6 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 6 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "Tierra_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */ },{ name: "Flavius" //must match the name in client files event: "Flavius_BG1::OnPlayerListReady" minLevel: 80 maxLevel: 150 reward: {/* amount of badges awarded on each case */ win: 9 loss: 3 draw: 3 } minPlayers: 6 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 6 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "Flavius_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */ },{ name: "KVM (Level 80 and up)" //must match the name in client files event: "KvM03_BG::OnPlayerListReady" minLevel: 80 maxLevel: 150 reward: {/* amount of badges awarded on each case */ win: 5 loss: 1 draw: 1 } minPlayers: 4 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */ },{ name: "KVM (Level 60~79)" //must match the name in client files event: "KvM03_BG::OnPlayerListReady" minLevel: 60 maxLevel: 79 reward: {/* amount of badges awarded on each case */ win: 2 loss: 0 draw: 1 } minPlayers: 4 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */ },{ name: "KVM (Level 59 and below)" //must match the name in client files event: "KvM03_BG::OnPlayerListReady" minLevel: 1 maxLevel: 59 reward: {/* amount of badges awarded on each case */ win: 1 loss: 0 draw: 0 } minPlayers: 4 /* minimum amount of players to start */ maxPlayers: 60 /* maximum amount of players */ minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */ delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */ maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */ } )})
  16. As you may have heard I've been working on this http://herc.ws/board/topic/262-implement-new-battleground-queue-system/ and I expect to roll it out today, within a couple hours, Yommy has provided me with a hell lot of data and code on it (Thanks again <3), I'm just missing one piece of information, how are draws supposed to take place? there is a time limit on matches? (and then when it ends if score is equal, calls it a draw?) Thank you
  17. yes those are it, but again I can't tell whether I got them to work or not because my lua files appear to not suppor this feature.
  18. added in https://github.com/HerculesWS/Hercules/commit/9080a58e2184eeb36b30e6dc653ec5459b3acfb1 dropped, didn't make it deactivated because I found it'd be better active, so people unaware of this change won't think the feature as a whole was dropped.
  19. ooo thats an interesting idea. Update: https://github.com/HerculesWS/Hercules/commit/fbd043f22a4b7ffa5eb6244897f923198200056fhttp://herc.ws/board/topic/559-about-adjust-skill-damage-mapflag/ any new instructions for this? same as before, except it works the reverse. I updated the description for skill_damage_cap in the map_zone_db.conf files.
  20. hardly, would be run only when a character log in, and it'd be waaay more flexible and customisable, with all the things that a npc script can do. yes it does, we could make it not count towards that limit though
  21. its just an extension of your equipment..like having 2 armor and having benefits on both... @__@ that sounds so stupid O_O~ how one uses it? any item can be used?
  22. I apologise but we won't be doing it, ours is more flexible and integrates with the map zones. I'm sure you will get used to it should you get some time to play with it.
  23. Update: https://github.com/HerculesWS/Hercules/commit/fbd043f22a4b7ffa5eb6244897f923198200056fhttp://herc.ws/board/topic/559-about-adjust-skill-damage-mapflag/
  24. ahh ooh i already had agreed on that here http://herc.ws/board/topic/302-introducing-hercules-map-zone-database/?p=3646 but i forgot to do it xd I'll do this within the next few minutes
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.