Leaderboard
Popular Content
Showing content with the highest reputation on 01/20/20 in all areas
-
1 pointHercules Ultimate Localization Design Hello~! - What?! Servers are now able to run under any number of languages, without having any of the default files modified Designed by Haruna and Ind Translating NPCs without editing them By launching map server with the --generate-translations param a .pot (.po template) file will be created with all of the servers translate-able strings (including all npc dialogue), this file can be edited in text mode or by utilising any .po editor (there are many out there; for a high range of OSes) A .po file does not need to be fully translated to be used, map server will know when loading the file, and will fallback to the hardcoded string in the npc files as necessary Users are able to change their language with the new @lang command, @lang controls what language users see in @commands (msg_txt stuff) as well as over npc dialogues map-server.conf has a new setting called default_language where server owners may specify which language should be used as a base When you have a new .po file you want map server to use, add it to db/translations.conf Easy to Maintain Since .po is a widely used format there are many tools that can help with merging for example Poedit, which easily consolidates a translated .po file with a newly generated .pot. For example when you have a translated .po and since it was created npc dialogs were added or modified all you have to do is launch map server to generate a new .pot, open your old .po in Poedit, go "Catalog -> Update from POT file" and it will insert the new translatable strings without touching your existing translations, it will also notify you of any "obsolete" strings that are in your .po file but that are no longer in useScript Command Macro Besides messages.conf, all the dialogue utilised by 'mes' and 'select' is included in the .pot automatically, this patch also introduces a mechanism for utilising strings outside of these commands, the script macro _() which can be employed just as if it were a script function, for example set .@status$,_("Available"); tells map server to export "Available" as a translate-able string when it is run with --generate-translations (when running map server normally the macro has no overhead during runtime)Special Thanks to Raizen and Roberto from Cronus, we would not have worked on this if it weren't for themLinks~! CommitEditing Example
-
1 point
[Guia Custom Item] Adicionando custom item
antonycbueno reacted to bruno05 for a post in a topic
Olá a todos sei que existem outros guia aqui no forum para adiconar custom itens, Porém faltam algumas informações para funcionar corretamente (em cliente novos no meu caso 2018-06-20) Item Necessarios GIT > https://git-scm.com/downloads Tortoise - > https://tortoisegit.org/download/ NEMO - > https://gitlab.com/4144/Nemo EXE -> http://nemo.herc.ws/downloads/ (pode se encontrar um aqui para você estou a versão 2018-06-20) Bom vamos lá. - Compilar o cliente ( irei usar o NEMO) Imagem auto explicativa, Segue abaixo: Dependendo do Seu cliente no passo "3" da imagem, pode dar um erro "Always call SelectKoreaClientInfo" Apenas ignore. DATA.INI System/itemInfo_Sak.lub -> para algumas pessoas pode ser necessário mudar dependendo da sua pasta no meu caso não preciso. Always Load Korea ExternalSetting lua files Read Data Folder First Increase Headgear ViewID - > Coloque o numero conforme necessidade vai até 32000 O mais importante ( Não funcionara se não ativar ira dar crash não esqueça de Ativá-lo) Esses são os necessários porém sintase a vontade de editar seu EXE, conforme sua necessidade, feito isso ficara algo parecido com isso. Feito isso vamos para pasta do servidor Hercules\db\item_db2.conf Obs: Aqui estou usando um spr que peguei aqui no site então caso queira é só fazer download aqui. creditos ao ~Wolfeh. Obs²: neste SPR alterei o nome que estava Tobi_Mask.spr/act para item01 caso for usar este item altere para item01 tudo se não vai dar erro mantendo ¿©_ / ³²_ ou altere os AgeisName { Id: 40000 //ID Do seu custom Item AegisName: "item01" Name: "Tobi Mask" Type: 5 Buy: 20 Weight: 40 Atk: 20 Def: 20 Slots: 2 Job: 0xFFFFFFFE Loc: 769 EquipLv: 1 View: 4500 //ID DO SPRITE }, Agora vamos para pasta do seu RO e vamos na pasta data Pasta - >> data\sprite\¾ÆÀÌÅÛ item01.spr // mesmo nome do AegisName colocado no item_db2.conf item01.act // mesmo nome do AegisName colocado no item_db2.conf Pasta - >> data\sprite\¾Ç¼¼»ç¸® // Existem duas pasta ³² para masculino e ¿© para Feminino. Pasta - >> ³² ³²_item01.spr ³²_item01.act Pasta - >> ¿© ¿©_item01.spr ¿©_item01.act Pasta - texture\À¯ÀúÀÎÅÍÆäÀ̽º // Existem duas pasta caso contrario crie 1 - Item e a 2 - collection item - item01.bmp //icone do item mostrado no jogo collection - item01.bmp //foto do item que mostra com a descrição feito isso vamos para data\luafiles514\lua files\datainfo 1 - Abra o accessoryid.lub e adicione na ultima linha antes do } conforme esta á baixo.// Aqui estou usando o note++ ACCESSORY_C_Luna_On_Shoulder = 1881, //IMPORTANTE FECHE A VIRGULA SE NÃO DAR ERRO. -- Custom Item ACCESSORY_item01 = 4500, // aqui coloque o ID que colocou no item_db2.conf caso usou esse memso numero deixe esse // A ULTIMA LINHA NÃO PRECISA COLOCAR MAIS SE QUISER PODE POR. } 2 - Abra o accname.lub e adcione. // Lembrando que tem que ser antes do "}" conforme abaixo, [ACCESSORY_IDs.ACCESSORY_C_Luna_On_Shoulder] = "_C_Luna_On_Shoulder", -- Custom Itens [ACCESSORY_IDs.ACCESSORY_item01] = "_item01", } 3 - Agora ultima etapa vá para a pasta SEURO\System e abra itemInfo_Sak.lub (o mesmo nome, que colocou no nemo) Procure "function main()" vai estar +- assim: } function main() for ItemID, DESC in pairs(tbl) do result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum) if not msg then result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum, DESC.costume) end Antes do } adicione: [40000] = { unidentifiedDisplayName = "Tobi Mask", unidentifiedResourceName = "item01", unidentifiedDescriptionName = { "Item desconhecido, voce precisa identificar usando a ^6666CCLupa^000000." }, identifiedDisplayName = "Tobi Mask", identifiedResourceName = "item01", identifiedDescriptionName = { "Uma mascara laranja com desenho espiral e um orificio para o olho direito.", "Ataque :^777777 20^000000", "Defesa :^0000FF 20^000000", "Equipped on :^777777 Upper, Mid, Lower^000000", "Weight :^009900 40^000000", "Applicable Job :^777777 Every Job^000000", "Spriter :^777777 Wolfeh^000000", "Level Requirement:^009900 1^000000", "Jobs:^6666CC All except Novice^000000" }, slotCount = 2, ClassNum = 4500, costume = false }, ficando parecido com isso : [40000] = { unidentifiedDisplayName = "Tobi Mask", unidentifiedResourceName = "item01", unidentifiedDescriptionName = { "Item desconhecido, voce precisa identificar usando a ^6666CCLupa^000000." }, identifiedDisplayName = "Tobi Mask", identifiedResourceName = "item01", identifiedDescriptionName = { "Uma mascara laranja com desenho espiral e um orificio para o olho direito.", "Ataque :^777777 20^000000", "Defesa :^0000FF 20^000000", "Equipped on :^777777 Upper, Mid, Lower^000000", "Weight :^009900 40^000000", "Applicable Job :^777777 Every Job^000000", "Spriter :^777777 Wolfeh^000000", "Level Requirement:^009900 1^000000", "Jobs:^6666CC All except Novice^000000" }, slotCount = 2, ClassNum = 4500, costume = false }, } function main() for ItemID, DESC in pairs(tbl) do result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum) if not msg then result, msg = pcall(AddItem, ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum, DESC.costume) end if not result then return false, msg end for k, v in pairs(DESC.unidentifiedDescriptionName) do result, msg = AddItemUnidentifiedDesc(ItemID, v) if not result then return false, msg end end for k, v in pairs(DESC.identifiedDescriptionName) do result, msg = AddItemIdentifiedDesc(ItemID, v) if not result then return false, msg end end if nil ~= DESC.EffectID and nil ~= AddItemEffectInfo then result, msg = AddItemEffectInfo(ItemID, DESC.EffectID) if not result then return false, msg end end if nil ~= DESC.costume and nil ~= AddItemIsCostume then result, msg = AddItemIsCostume(ItemID, DESC.costume) if not result then return false, msg end end end return true, "good" end function main_server() for ItemID, DESC in pairs(tbl) do result, msg = AddItem(ItemID, DESC.identifiedDisplayName, DESC.slotCount) if not result then return false, msg end end return true, "good" end Abra seu servidor, e logue nele crie o item e teste. Considerações: Resolvi fazer esse guia pois não achei nenhum atualizado e faltava informações ( como a parte do nemo eu mesmo nunca tinha visto um guia sitando para ativar esse viewID) a maioria dos tutorial que via, ou pasta de exemplos sempre mandava adicionar em outros arquivos como idnum e etc e no caso do cliente novo não precisa. espero que este guia ajude. -
1 point
How to setup OFFLINE server for personal development use
fogocalvoeua reacted to anacondaq for a post in a topic
Because you screwed up my job and the people who use it, I have a duty to answer you here. All that you wrote here (very bad formatted to be clear) - I just did in the RO offline pack and saved a lot of nervous and time for a lot of people. Why someone needs to do all of these things in the topic, if they just simply download, run, and everything will work out the box just fine? I think you and many people like you don't understand why the topic exists. Because of the secret in simplicity. Key = Keep It Simple Stupid. While all existing solution = very bad. Another problem: super hard entry point for newbies for the next reasons: Almost all guides presented very hard to find (whole process) Or Not actual most of them Or Not accurate Or Not correct at all Or confusing Or do not explain things very simple Or boring to read Or authors do not give a heck to answer in their support topics at all. Or everyone run around money and want to keep the entry point as hardest as it possible for very primitive things. "pay me $$ I will set up everything". And I do not talk about 100000500000 problems what people will have due to different operating system/software bundle, antiviruses, firewalls, etc. It's what exactly done in this free package you don't need to pay anyone and will get absolutely ready emulator what you can run on your pc via single clicks without reading tons of useless weird structured documentation located anywhere (but not centralized and not structured) (or without documentation at all) with avoided pitfalls and everything else. You just run, and learn in practice while having a complete and ready product for doing mistakes, errors, and learn on them. I know already several guys which stuck on just setup process, and just right now write a lot of really great scripts, events, so on. I think you just don't understand a really important thing and don't care about newbies at all. For a lot of people super hard to learn something new without terminology or past experience. People learn on examples and real practice much faster, then if they will read tons of useless theory. And when even the theory isn't well designed, how can they learn something, even if the training/guides materials are extremely bad? Go to my topic and read it again. I wrote next there: Now, analyze what you wrote in your topic And compare with the text above. And now each mine new line = around 10-20 pitfalls/problems which will force people to stuck or even drop continuing doing what they begin to do. Is it "newbie friendly?" Do you even understand, that a lot of people have skype running, or different software which locks ports? Or antiviruses? Or simply don't know where to get the software? Or they do not even realize what patches need to select in NEMO if they completely newbies? Or they do ever hear about any great tools like SDE / GRF Editor? You saying about contribution. Where do you get the assistance from (contributors)? If the entry point is too high - you will not have a funnel of people who eventually become developers, scripters, mappers, etc. I'm sorry. Do you have a problem with that? Or what? You have not heard about portable solutions of webservers (USB-server)? Or everyone must make dirty their computers with unnecessary garbage, solve dependencies and conflicts over the installation of standard software? This is (OpenServer) super great software, one of the best in the market, which always just works and works just fine. Windows very good operation system, that why it has 90% of people on it. Because it's very easy to use, and you can just focus on work, instead of on reading how to do primitive things, what in Windows I can do by a single click. It does not work like that. The era when it was popular (torrenting/p2p networks) = over. If you need contributors = you need to grow them from newbies. Newbies -> scripters -> src devs -> contributors. You want newbies -> contributors. Cool, and how many messes you will see on issue tracker then? Or what they can share if they do not know how to setup server? imgur, keep links for years. Or you can use GitHub images properly =) Proper guide with what reason?) And for who?) And what people will get? wasted a lot of time on things, what they can always learn in real experience with 1 click solution?) How did you learn how to ride a bicycle, you first read a whole book about cycling, or you were just put on a bicycle, and then you were pushed, and then you learned how to ride after some falls?) This is exactly the reading of the book you suggest instead of just to sit down and ride, and in the process - to deal with everything, having an example when everything works, and thus (reading the manual) you cut off tens of thousands of people. I understand that Linux has imposed its thinking on you, but as you said yourself, 90% of users choose Windows over Linux =) Peace <3 -
1 point
Three suggestions to Huld
fogocalvoeua reacted to Ragno for a post in a topic
If any of them is possible, I would gladly help sending the sentences where noun gender is different when translated, or at least inform of them. -- I have another suggestion to help Huld to be knowed and experienced for more people. Would it be possible have the capability to load multiple .po files for a same language? The purpouse of this is to be able to add individual translations to individual scripts instead of modify main language.po file (wich is cool as it is). That would help players to experience huld system with events, custom scripts, or new script releases and let gms to maintain a secondary po file to custom npc from server individual from main emulator npcs. Also, since those files would be less sized, it would be more friendly to translate them, allowing scripters to introduce themselves to po editor more easily.