Leaderboard
Popular Content
Showing content with the highest reputation on 06/25/17 in all areas
-
1 pointHey all, I had an idea to implement the ultimate storage system with which users of Hercules would be able to create as many storages as they want without a hassle. And so I worked on Hercules Ultimate Storage System (HUSS). The basic idea of the design has been completed and at this point it is ready to be tested. I wanted to gather suggestions to further extend the system, hence this topic. To test the system, simply visit my fork of Hercules in the storages branch and clone it. Storage.conf Example Entry { Id: (int) (required|unique) Unique Identifier Name: (string) (required) Name of the storage sent to the client. Capacity: (int) (required) Maximum capacity of the storage. } All storages are handled with dynamic arrays that will save a tonne of memory if and when created. They are saved in the same storage database (SQL) as the original separating them by a storage identifier. An infinite number of storages can be created, there are no limits. The current design implementation only allows saving/loading of approximately 1600 items per storage due to packet size limits. Script Command Changes *openstorage(<storage_id>{, <storage_mode>}) Default Storage Access Mode: STORAGE_ACCESS_ALL This will open character's Kafra storage window on the client connected to the invoking character. It can be used from any kind of NPC or item script, not just limited to Kafra Staff. The storage window opens regardless of whether there are open NPC dialogs or not, but it is preferred to close the dialog before displaying the storage window, to avoid any disruption when both windows overlap. mes("I will now open your stash for you"); close2(); openstorage(1); end; Storage Modes: STORAGE_ACCESS_VIEW // View storage only STORAGE_ACCESS_GET // Allow getting items from storage. STORAGE_ACCESS_PUT // Allow putting items to storage. STORAGE_ACCESS_ALL // Allow all actions. So if you guys have any suggestions or ideas that would better the system for Hercules, feel free to comment below
-
1 pointok ... its my turn to give suggestion time .. http://rathena.org/board/topic/77088-certain-map-weapon-restriction/?p=239342 noitem mapflag meant for rathena when compare my code and hercules map_zone_db.conf hercules can already restrict items by ID but my modifications can allow to restrict an item type example pvp_y_1-1 mapflag noitem 0this pvp map cannot use healing itemsevent_gm mapflag noitem 4,5this gm hosting event will disallow players to equip any kind of equipments so how about hercules have the same thing { name: "PvP no Pot" inherit: ( "PvP" ) disabled_items: { IT_HEALING: true }}, { name: "GM event" disabled_items: { IT_WEAPON: true IT_ARMOR: true }},
-
1 point+1 This is very useful map flag
-
1 pointFixes some compile errors and broken code from the recent PRs (ones I didn't check thoroughly before) https://github.com/Smokexyz/HerculesBG/commit/b5eb2e6b04e99a462beb3d816e12351c11549759 1) Check this again using the latest revision of the hBG repo. 2) This too. 3) If someone can look into the script for this... I don't have the time or patience. 4) Someone can probably push a pr for this too. On a side note, do you guys want the eAmod faction system as a plugin?
-
1 pointFirst create a table, perhaps called orcs_memory Btw, this is just off the top of my head. I cannot confirm works. Create table with the following columns: party_id (needs to be integer) party_name (needs to be string) time (needs to be string) Then, the moment your instance completes, you can the add following script: .@PID = getcharid(CHAR_ID_PARTY); .@PN$ = getpartyname(.@PID); .@time$ = ...(I wrote in the last post how to get this) query_sql("INSERT INTO `orcs_memory` VALUES (" + .@PID + ", '" + escape_sql(.@PN$) + "', '" + .@time$ + "')"); And then for your npc, the sql query: prontera,150,150,3 script Orcs Memory Rank CLEAR_NPC,{ query_sql("SELECT `party_name`, `time` FROM `orcs_memory` ORDER BY `time` ASC LIMIT 10", .@pname$, .@rank$); mes("Orcs Memory Rank"); for (.@i = 0; .@i < getarraysize(.@rank$); ++.@i) mes("" + .@pname$[.@i] + " - " + .@rank$[.@i] + ""); close; }
-
1 pointMay Digest 2017 The following digest covers the month of May 1st - May 31st 2017 Team Changes hemagx has been moved from Core Developer to Community Contributors malufett has been moved from Core Developer to Community Contributors Pan has been moved from Core Developer to Community Contributors GreenBox has been moved from Core Developer to Community Contributors Susu has been moved from Core Developer to Community Contributors Kenpachi has been moved from Script Developers to Community Contributors Joseph has been moved from Script Developers to Community Contributors AnnieRuRu has been moved from Scripting Moderators to Community Contributors JayPee has been moved from Int'l Moderators to Community Contributors Mhalicot has been moved from Int'l Moderators to Community Contributors Mumbles has been moved from Global Moderators to Community Contributors Olrox has been moved from Graphics Moderators to Community Contributors These members had the 'Former' tag set on their group, however, due to the move towards IPB4, we scraped that Former Tag and figured it was best to just move them to CC. Development Highlights Fix a race condition when saving the storage on logout Fix saving of storage for non-stackable items Fix storage saving checks and amount update Normal Stat food can't override the effect of Cash Stat food add channel handler events Add storage_data reception, parsing and sending to/from the map-server allow to pass actual params to getparam add exponentiation operator update documentation for the exponentiation operator remove the pow buildin from existing scripts remove the pow buildin from item databases flag the pow() buildin as deprecated allow custom atcommands to have different permissions for each group add buildin add_group_command() add support for custom atcommands in can_use_command Scripting Highlights Optimize Uwe Kleine NPC, fix typos and an unintended fall through Updated npc/re/merchants/shadow_refiner.txt to version 2.0 Update npc/<re/>merchants/advanced_refiner.txt Documentation Updated *showscript documentation description Documentation update for getequippercentrefinery() and refine_db.confs document previously undocumented parameter of getparam Database Highlights Refine rate correction from kRO Update Exp Table May Statistics During the period there were 59 Commits. 10 Commits from Pull Requests with 2 Bugs* fixed from merged issues. *Please note: Bug fixes are counted as references to issues; it does not include bugs that have been fixed without issue reference. The number of commits includes those that were merged.
-
1 pointsrc/map/atcommand.c but I would recommend doing it through a plugin rather than modifying vanilla source, else it makes updating harder because you have a bunch of git conflicts to fix
-
1 pointBefore I start, I need to let you know a few things about my potential solution. I have never tried this before. I don't know how initnpctimer() interacts with instance NPCs. I don't have time to test. This might help you get started / understanding the process. // Add this NPC script to the OrcsMemory.txt instance script. 2@orcs,1,1,0 script Orcs_Memory_Timer FAKE_NPC,{ end; } /************* * Notes ************** Immediately after the instance is created, add this line below it: initnpctimer("Orcs_Memory_Timer"); I don't know how the Orc's Memory instance ends, but when it ends (maybe you need to add an event for when the mob is killed), add these lines: stopnpctimer("Orcs_Memory_Timer"); .@time = getnpctimer("Orcs_Memory_Timer") / 1000; if (.@time < $Orcs_Memory_Record) { // This next bit will display time as 00:00:00 format .@hour$ = .@time % (24*60*60) / (60*60) + ""; .@min$ = .@time % (24*60*60) % (60*60) / (60) + ""; .@sec$ = .@time % (24*60*60) % (60*60) % (60) + ""; .@time$ = "" +(getstrlen(.@hour$) == 1 ? "0" : "")+ "" + .@hour$ + ":" +(getstrlen(.@min$) == 1 ? "0" : "")+ "" + .@min$ + ":" +(getstrlen(.@sec$) == 1 ? "0" : "")+ "" + .@sec$ + ""; announce("The " + getpartyname(CHAR_ID_PARTY) + " party cleared the dungeon in " + .@time$ + ", a new record!", bc_all); $Orcs_Memory_Record = .@time; } You will need to set the $Orcs_Memory_Timer to something really high before the first party does the instance. This is so the first party to clear the dungeon will be the first record. I advise going in-game and using the following atcommand: @set $Orcs_Memory_Timer 1000000000 (that's 1 billion seconds lol) *************/
-
1 pointCustom Soul link Effect Star Gladiator - Allowing to use Lvl 8 Lord of Vermillion, Lvl 5 Parrying. Increase damage on Boss monster and Holy monster by 100%. perfect dodge + 10 Open src/map/status.c and find: Add Below Find: Add below: Find: Add Below Find: Add Below: For the parrying, u just need to change your parrying in db/(pre/re)/skill_require_db.txt Find: And replace with: Just Sharing )
-
1 pointScript Intermediário! - 5 Lista de Aulas: Aula 1: http://herc.ws/board/topic/199-script-intermedi%C3%A1rio-aula-1/ Aula 2: http://herc.ws/board/topic/200-script-intermedi%C3%A1rio-aula-2/ Aula 3: http://herc.ws/board/topic/201-script-intermedi%C3%A1rio-aula-3/ Aula 4: http://herc.ws/board/topic/203-script-intermedi%C3%A1rio-aula-4/ Aula 5: http://herc.ws/board/topic/213-script-intermedi%C3%A1rio-aula-5/ Aula 6: http://herc.ws/board/topic/228-queries-sql-aula-6/ Aula 7: http://herc.ws/board/topic/239-script-intermedi%C3%A1rio-aula-7/ Bom, nesta aula estarei ensinando sobre o comando attachrid e detachrid, são comandos mais complexos, porém entendíveis para aqueles que tem atenção na aula e uma boa noção já de script, que já manipulam suas lógicas para fazer da maneira que acha melhor e correto. Irei iniciar então o assunto da aula, e nela criar exemplos, explicações, e explicar a sintaxe do comando. Primeiro assunto da aula: - Attachrid Sintaxe do comando:attachrid(<ID Da Conta>); A função básica desta sintaxe é anexar o RID do jogador ao NPC (script), ou seja, você pode forçar o jogador a executar as funções do npc. Vejamos um exemplo: - script Olá -1,{ OnOla: attachrid(2000001); mes "Olá"; mes "Você foi forçado a ver o olá do script! ^~"; close;} Agora caso aplicarmos desta forma, teremos um problema. O jogador pode estar offline, então poderá gerar aquele erro no map-server "Player not attached (Jogador não atachado, não encontrado)". Para resolvermos esse problema, teremos que fazer uma verificação, veja: - script Olá -1,{ OnOla: if (!attachrid(getcharid(3,"Nick_do_Jogador")) { // O jogador está offline, logo já evitaremos o erro // do player not attached. end; } //Caso o jogador esteja online: mes "Olá"; mes "Você foi forçado a ver o olá do script! ^~"; close;} O comando attachrid retorna 0 se o jogador estiver offline e 1 para online. Pegamos no snippet feito, o account_id do jogador pelo nome/nick dele. Esse comando é de grande utilidade pois podemos criar sistemas com tempos, no qual podemos anexar o jogador ao tempo com seu limite. Podemos criar loops em função do attachrid para anúncios, verificar se o jogador está online não, tudo isso ligado a apenas um jogador (o jogador anexado). Pegar o nome de quem matou ou morreu, aplicar um comando neste unico jogador, etc... Alguns exemplos com attachrid: 1. Primeiro exemplo: OnPCDieEvent: set .BaseLevel, BaseLevel; attachrid(killedrid); // Verifica todos os jogadores que matou o outro [Killerdrid = variável pronta para jogadores que matam]. set .exp, (100*.BaseLevel/BaseLevel); // No caso isso dará um bônus baseado no BaseLevel do cara multiplicado 100x. getexp .exp, .exp;end; Dará experiência a um jogador que matou o outro. 2. Segundo exemplo: mes "Gostaria de participar do evento?"; if (select("Sim:Não")==2) close; next; set $@rids_salvos[.i], getcharid(3); set .i, .i +1; warp "",0,0; end; Isso salvará o rid do jogador no script, para que possa utilizar posteriormente, caso queira limpar o rid salvo, só fazer: OnPcLogouEvent: set $@rids_salvos[.i], 0;end; Bom, aí no caso quando o jogador deslogar a variável $@rids_salvos será zerada, e não terá mais valor. Mas aí vai de acordo como você quiser, eu coloquei para quando o jogador deslogar, você bota opcionalmente como você quiser, foi apenas um exemplo. Segundo assunto: - Detachrid Detachrid faz o contrário do attachrid, esse dexanexa o jogador do script. Então comandos para jogadores que necessitam de attachs, não passam mais a funcionar. Como forçar o jogador a falar com o script, ou por exemplo você atachar ele ao script, e no final desanexá-lo, você terá que anexá-lo denovo para usar funções que anexam ele ao script, caso queira criar funções dos exemplos que eu fiz. Não tenho muito oque dizer sobre este comando, é básicamente isso, e sintaxe dele é simplesmente: detachrid; Bom, é simplesmente isso, um abraço! Wolf.