jaBote
-
Content Count
2037 -
Joined
-
Last visited
-
Days Won
43
Reputation Activity
-
jaBote got a reaction from JulioCF in Algumas dúvidas
Traduzir com GTranslate ou outros é garantia de uma tradução horrível. Pode ser funcional, mas não terá utilidade práctica.
-
jaBote got a reaction from JulioCF in Servidor oficial de Ragnarök Online para España
Al fin llega un servidor oficial en español, con doce años de retraso. Aún no he podido probarlo por falta de tiempo, aunque tiene pinta de que utilizan la infraestructura y ofrecen los mismos contenidos que el servidor que está ahora mismo instalado en Europa, fRO, por lo que parece que todo hablará en español (NPCs, objetos, etcétera) menos el resto de usuarios.
Parece que tenemos lag asegurado como todos los servidores oficiales pero al fin disponemos de una interfaz en español que poder usar. No obstante, esto puede resultar un peligro para el panorama de los servidores privados de Ragnarök por motivos obvios. No lo digo por la competencia sino porque puede que los busquen para cerrarlos.
Os dejo link a la noticia:
http://www.vidaextra.com/rpg/ragnarok-online-llega-a-espana-12-anos-despues-gracias-a-idc-games
Y a un vídeo que no tiene desperdicio porque está equivocado en casi todo, a mí me resultó graciosísimo:
Gracias a IDC Games por ofrecernos un servidor oficial en español, ahora esperemos que hagan las cosas bien hechas. Creo que algunos podréis al fin rapiñar cosas del cliente para tenerlo en español como los oficiales.
Un saludo.
-
jaBote reacted to Tokeiburu in Act Editor
File Name: Act Editor
File Submitter: Tokeiburu
File Submitted: 03 Dec 2014
File Category: Client Resources
Heya,
This tool is an action file editor, it edits Act and Spr files. You will find similarities with ActOR in its design, but it should be much more enjoyable to edit animations ;].
Special thanks to Nebraskka for testing this software in its early days. All the suggestions and feedbacks made this software much better.
How to install
Download the zip archive provided from the download link at the bottom of this description or directly from there : http://www.mediafire.com/download/y3amu1o5zsmgd2o
Install the application with Act Editor Installer.exe; if you are missing a .NET Framework you will be prompted to download it.
Once you are done, you can start the program from the link on your desktop.
Key features
The software has many, many features available. It would take too long to describe each one of them, so I've only focussed on the more impotant ones.
You can undo and redo everything, scripts included.
You can edit and add sounds easily.
Powerful and easy to use palette editor.
Sprite types have been abstracted - you don't have to worry or care about that.
Animation speed can be changed easily.
Most components have a drag and drop feature.
Advanced scripting engine (C# language). The scripts can also be used to customize the software menus.
Error checking when saving the act/spr to avoid invalid files. The sprite version will be automatically downgraded if RLE compression is not available.
Frame interpolation (inbetweening/tweening) is possible via the Animation menu.
Prompts you with an image converter dialog if the added image is invalid.
Allows advanced edition for actions and frames via their respective menus.
You can load files from GRFs directly (and save in the GRFs directly as well).
Technical stuff
Requires .Net Framework 3.5 (SP1) Client Profile to run (3.5 or more will work as well).
When prompted with an error, use the "Copy exception" button to copy the debugging info. I will need this to fix the issue you're encountering.
The editor's primary window
The interface is really straightforward and similar to ActOR. I'll only focus on new elements!
Rendering mode : This option changes the behavior of how layers are rendered. If you use 'Editor', you'll clearly see all the pixels when zooming in. If you use 'Ingame', it will use a linear scaling instead, which is closer to what the client does.
References : These allow you to know where your item will be positionned (the yellow marker is the anchor, see below).
Color mask : To edit the color of a layer, simply click on the color rectangle. You can also drag and drop the colors between different layers to quickly modify many of them.
Common shortcuts : You can manipulate layers by using common shortcuts. More can be found from the Edit menu. These below are only the primary ones.
Ctrl-A : Select all layers.
Ctrl-C : Copy the selected layers.
Ctrl-V : Paste the copied layers.
Ctrl-X : Cut the selected layers.
Alt-C : Copy current action.
Alt-V : Paste current action.
Advanced action and frame editions
These expose all the available methods of the editor. You can remove a range of frames or copy a frame 10 times very quickly and easily. This dialog is found in Action/Frame > Advanced edit...
Anchors
You can edit anchors from the editor directly. Anchors are points that connect frames together, from different act files. Here's an example without and with anchors :
This is mostly useful when you're using reference sprites (on the right panel). Clicking on the anchor button will let you choose where to attach the sprite (this is set semi-automatically for you though). You can edit those from the Anchors menu, but it is recommended to start from a pre-existing act to avoid doing this tedious process.
Palette editor
The palette editor allows you to quickly recolor sprites with an intuitive interface. Only indexed images can be edited (it's a palette editor after all) and three modes are available. The gradient mode changes an existing gradient to another color while keeping the original saturation and brightness of the colors - this makes the gradients blend in better. If there are no gradient (usually because it's a custom sprite), there's always the Adjust color mode. This one changes all color from a specified range to another one (Photoshop has a similar feature, which does work better).
You can click on the image (on the left) to automatically select the palette indexes. These will be highlighted for a few seconds to show you what you're about to edit.
Interpolation (tweening)
This script can be accessed via Animation > Interpolate frames. This process fills the images between two frames by detecting the changes applied to the layers. Here's a simple example of how it can be used :
Script engine
The script engine can be accessed via Scripts > Script Runner. This is a big feature of Act Editor, it allows you to automate all your work with the act and much more. Click on the Help button for guides and available methods (don't hesitate to try out a script; if an error occurs the act will be reversed to its previous state). The documentation doesn't cover all of the available options and methods for obvious reasons (the .net framework is huge). Doc example :
The language used by the script engine is C#. If you're not familiar with it, simply check out the script samples (Scripts > Open scripts folder)! I won't go into details here, questions can be asked in the support thread regarding addiotional features and methods. If you believe your script should be added in the program, send it to me and I'll probably add it.
Customizable
The settings dialog allows you to modify all colors in the editor easily.
You'll also find the sound resources (GRFs and folders) that can be set up in the Sound tab. The Shell integration tab can associate the .act files with the software to edit them more easily.
Don't hesitate to give me a feedbacks or suggestions!
Click here to download this file
-
jaBote got a reaction from Gionelles in Client can't connect to my server
Simply insert a new row at the login table on your database, or use the _M/_F method if enabled on your login server.
-
jaBote got a reaction from astralprojection in Introducing rAthena to Hercules database converters.
It's a converter issue. Currently all `sc_data` gets pruned because of a safety measure, since rAthena SC IDs aren't the same as ours. Since carts are SCs, all merchants will have their carts released, much like Knights Peco Pecos or Hunters Falcons. Even people in Jail (SC_JAILED) get free, but there's currently no way to help with that. Think that, if we kept the current SC IDs, maybe you could permanently give SC_CASH_RECEIVEITEM (double exp rate for the user who has it) to someone that was jailed, for example (didn't check the numbers, this is just an exaggeration).
Will discuss with the rest of the staff for a way to get the most SCs as possible saved.
-
jaBote got a reaction from fourxhackd in Dastgir's Services
Topic approved. Best of luck!
P.S.: I can assure you he's one of the best guaranteed paid services to date: you just have to check his previous career, and the reputation, dedication and past contributions he's had here at Hercules.
-
jaBote got a reaction from karazu in Dastgir's Services
Topic approved. Best of luck!
P.S.: I can assure you he's one of the best guaranteed paid services to date: you just have to check his previous career, and the reputation, dedication and past contributions he's had here at Hercules.
-
jaBote got a reaction from ShankS in @hatredreset?
Go look in src/map/atcommand.c
Basically, add it after another atcommand code has finished (for example, after the ACMD(skdebug) code) and you've got to also add a definition.
For adding an atcommand definition, just search this on the file:
ACMD_DEF(skdebug), and add an the corresponding definition for the atcommand after it:
ACMD_DEF(hatereset),
That's it.
-
jaBote got a reaction from Zirius in Reducing guild capacity and removing alliance => how to fix/ready DB
I guess not, but don't forget to recompile and try that last SQL query I sentido you.
-
jaBote got a reaction from Zirius in Reducing guild capacity and removing alliance => how to fix/ready DB
You can do it manually, but I think Guild Extension would need an edit to avoid other guilds get over the limit.
UPDATE `guild` SET `max_member` = yourmaxvalue WHERE `max_member` > yourmaxvalue
-
jaBote got a reaction from Zirius in Reducing guild capacity and removing alliance => how to fix/ready DB
Oh, sorry, I understood you just wanted to remove alliances.
I couldn't understand you what you mean with makint the max guild capacity apply, so please elaborate a bit on that. In any case, please remember that if you edit the max guild capacity (I think that's a source edit) you should recompile to make it effective.
To kick every guild member from the guilds except the guild master, you could issue the following SQL query (remember to try on a backup first, I haven't tested it):
DELETE FROM `guild_member` WHERE `char_id` NOT IN (SELECT `char_id` FROM `guild`) -
jaBote got a reaction from Zirius in Reducing guild capacity and removing alliance => how to fix/ready DB
If you want to remove any existing guild alliances, please check out the guild_alliance table on your SQL side. Maybe you'll want to truncate the table (remove all data on it).
Please do test on a server backup and while the server is shut down if you don't want to find out unexpected behavior, since I haven't tested but that should do.
-
jaBote got a reaction from sever in How to do SQL updates?
I'm unaware that command exists on current Hercules. I do personally prefer to do that via console with the awrver shut down:
mysql -u user -p rodatabase < file.sql
Then you'll be prompted for the user's password
-
jaBote got a reaction from Edgar in ¿Como crear un item que llame al servicio de warper evolution?
Añade una etiqueta al NPC Warper Evolution que ejecute para cuando hablas normalmente (generalmente en la línea 2 del NPC, antes de que empiece el código que se ejecuta cuando le hablas). Añade por ejemplo la etiqueta OnNokiaCall: (los dos puntos incluidos).
Luego utiliza el script command doevent.
doevent "<NPC object name>::<event label>"; -
jaBote got a reaction from ShankS in PvP points script..
Not spoonfeeding for today because of no time.
Just add a temporary char variable which is set to killedrid (which is account id of the killed user), check if this killedrid is the same as the old one and make it act accordingly.
You could also use the char id based on who's online on that account id, but it can be a waste of time.
-
jaBote got a reaction from cJei in Dastgir's Services
Topic approved. Best of luck!
P.S.: I can assure you he's one of the best guaranteed paid services to date: you just have to check his previous career, and the reputation, dedication and past contributions he's had here at Hercules.
-
jaBote reacted to LordRegent in Guide: Client creation for the clueless
Download:
Full installer (http://www.nickyzai.com/?p=kro) 2014 Themon client, I used 2014-03-05b (https://github.com/ThemonChan/2014-Ragexe-Client) Nemo Patcher (https://github.com/MStr3am/NEMO.git) Basic Complete Renewal Data English Folder (http://herc.ws/board/topic/901-basic-complete-renewal-data-english-folder) Ragnarok Online ClientSide Translation (https://github.com/ROClientSide/Translation) GRF Builder (http://www.grfbuilder.com) Open Setup (http://nn.nachtwolke.com/dev/opensetup)
PATCH
After you download the full installer run the rsu-* patchers as admin.
rsu-kro-rag-lite.exe rsu-kro-renewal-lite.exe
DIFF
Take 2014-03-05bRagexe.exe and open it in Nemo.
Click "Select Recommended" at the bottom Custom Window Title Read Data Folder First Skip License Screen Use Ragnarok Icon
Take a look at all the options and enable at your own risk.
MERGE
Take the Ragnarok Online ClientSide Translation's data folder, and merge + overwrite the v4 Basic Complete Renewal Data English's data folder. After you combine the two data folders copy the System and AI folders over.
Why do I have to merge two different data folders?
clientinfo.xml
Create a clientinfo.xml file:
<?xml version="1.0"encoding="euc-kr" ?><clientinfo><servicetype>korea</servicetype><servertype>primary</servertype><connection><display>RO</display> <balloon>RO</balloon> <desc>RO</desc> <address>127.0.0.1</address> <port>6900</port> <version>45</version> <langtype>0</langtype> <registrationweb></registrationweb> <aid> <admin></admin> <yellow></yellow></aid> </connection></clientinfo>
Place the clientinfo.xml file in your data folder.
GRF
Open GRF Builder. Click New. Enter a .grf filename. Click Merge dir. Select your data folder. After your .grf is created add the filename to your DATA.INI.
DATA.INI
Create a DATA.INI file:
[Data]1={translations + clientinfo.xml}.grf2=rdata.grf3=data.grf
SETUP
Don't forget to add opensetup to your RO folder. Also make sure you copied over the System and AI folders from the v4 Basic Complete Renewal Data download.
DONE
Run your patched exe and enjoy! Try re-opening the file if it gives you an error the first time you execute it.
I'm sorry there are no images.
Having trouble?
Try downloading the ready made 2013-08-07aRagexe Full Client.rar from (https://www.mediafire.com/folder/hg3wqu9a1cc7w/ready%20made)
Completely lost?
Download a completely setup RO folder designed to work with localhost (https://docs.google.com/uc?id=0B9iUnTTFhVamRTNONGd3UHNpSUE&export=download)
TLDR;
Some newcomer figured out how to get a client working and wrote a guide.
-
jaBote got a reaction from Nebraskka in "goto" alternative?
In that case, you can insert the piece of code where the goto is; In other more complicated cases you could callsub that, which is basically a goto with the possibility of adding parameters and (to my understanding the reason of avoiding using goto) the ability of returning the control to where it was called when the subprogram execution has been finished.
-
jaBote got a reaction from MrSky in How to check all items?
I don't know if this is what you mean, but you can find similar commands by reading the fine manual for this (which is doc/script_commands.txt):
*countitem(<item id>)*countitem("<item name>")This function will return the number of items for the specified item IDthat the invoking character has in the inventory.mes "[Item Checker]";mes "Hmmm, it seems you have "+countitem(502)+" apples";close;Like 'getitem', this function will also accept an 'english name' from thedatabase as an argument.If you want to state the number at the end of a sentence, you can do it byadding up strings:mes "[Item Checker]";mes "Hmmm, the total number of apples you are holding is "+countitem("APPLE");close;
Edit: Dang, if you're allowed to have apples only you should check this other function:
*getinventorylist;This command sets a bunch of arrays with a complete list of whatever the invoking character has in its inventory, including all the data needed to recreate these items perfectly if they are destroyed. Here's what you get:@inventorylist_id[] - array of item ids.@inventorylist_amount[] - their corresponding item amounts.@inventorylist_equip[] - whether the item is equipped or not.@inventorylist_refine[] - for how much it is refined.@inventorylist_identify[] - whether it is identified.@inventorylist_attribute[] - whether it is broken.@inventorylist_card1[] - These four arrays contain card data for the@inventorylist_card2[] items. These data slots are also used to store@inventorylist_card3[] names inscribed on the items, so you can@inventorylist_card4[] explicitly check if the character owns an item made by a specific craftsman.@inventorylist_expire[] - expire time (Unix time stamp). 0 means never expires.@inventorylist_count - the number of items in these lists.@inventorylist_bound - whether it is an account bounded item or not.This could be handy to save/restore a character's inventory, since no other command returns such a complete set of data, and could also be theonly way to correctly handle an NPC trader for carded and named items who could resell them - since NPC objects cannot own items, so they have to store item data in variables and recreate the items.Notice that the variables this command generates are all temporary, attached to the character, and integer.Be sure to use @inventorylist_count to go through these arrays, and not 'getarraysize', because the arrays are not automatically cleared between runs of 'getinventorylist'.
Just check that @inventorylist_count is 1 and that @inventorylist_id[0] is the Apple item ID.
-
jaBote got a reaction from Blip in [Ayuda] El cliente no tiene acceso al map server (Aparentemente)
Parece que puedes desactivarlo de dos formas:
Una: abriendo tu editor hexadecimal de ficheros de preferencia (el mío por ejemplo es xvi32) y cambiando la cadena de texto NC_CASHSHOP por una cadena vacía:
Busca la cadena hexadecimal: 4E 43 5F 43 61 73 68 53 68 6F 70 (o NC_CASHSHOP)
Cámbialo por: 00 00 00 00 00 00 00 00 00 00 00 (muy IMPORTANTE, no le des a la tecla delete)
Tema de origen: http://herc.ws/board/topic/6758-disabling-cash-shop-button-in-upper-right-corner/?hl=%2Bcash+%2Bshop+%2Bbutton
O bien puedes cambiar el fichero del botón en tu GRF, que se encuentra en Data/texture/유저인터페이스/basic_interface/nc_cashshop.bmp por una imagen transparente (color 0xFF00FF) de 1x1px, así si alguno de tus usuarios hace click en ella será de pura mala suerte.
¡Un saludo!
-
jaBote got a reaction from Blip in [Ayuda] El cliente no tiene acceso al map server (Aparentemente)
¡Buenas!
Sí, entiendo lo que comentas y, por desgracia, lo que hay para cliente hace que todo sea así de poco intuitivo. Yo mismo me encuentro muy limitado en esa parte porque nunca me interesó y se me hace todo muy complicado incluso para las cosas más básicas e incluso mi capacidad de soporte al respecto es también igual de limitada. Me encantaría ver algún tutorial en español sobre el cliente o instruirme yo mismo, aunque por desgracia de momento me es imposible hacerlo por mi cuenta por restricciones temporales.
Aún así, vamos a ello:
Lo primero que te recomendaría es que encuentres y diffees otra versión de cliente (que desde que murieron los temas de ossi0110 ya ni sé donde se consigue un cliente completo, siquiera). El motivo es que no hay paquetes para la versión de tu cliente en src/map/packets.h y es posible que sea eso lo que causa los errores.
Por otro lado, en caso de querer seguir con tu versión actual del cliente, ¿recibes algún error en la consola del mapserver cuando te echa del servidor? ¿Ves que el login ha sido correcto en el loginserver y como el control pasa al char server antes de que tu sesión desaparezca entre el char y el map server?
Mis compañeros de la sección hispana (especialmente M45T3R) tiene bastante más conocimiento de clientes que yo, a ver si cuando se pase puede echarte una mano un pelín más útil
P.D.: Respondo rápidamente a lo que sé sobre tus curiosidades para que estés algo más informado:
¿Por qué esa estructura de carpeta del RO? No lo sé, creo que así es como la ha dispuesto Gravity y así es como tenemos que organizarnos nosotros para que las cosas nos funcionen, y los nombres de casi todos los archivos de clientes deben permanecer inalterados para que así sea; ¿Qué define usar lua o lub? Los clientes oficiales solo cargan archivos lua encriptados que sepa, pero si al diffear el cliente escoges una opción llamada "Load LUB before LUA" (cargar lubs antes que los lua) simplemente el cliente buscará antes un archivo con ese mismo nobre pero extensión lub, antes que su correspondiente lua. En la mayoría de casos y que tenga conocimiento, puedes usar un lub o un lua indistintamente; ¿Por qué tienes que usar clientinfo.xml? Fundamentalmente, para darle a tu cliente una dirección IP y un puerto que buscar en internet para hacer que el cliente se conecte, junto a información miscelánea como hacerle saber el nombre del servidor, los archivos a cargar para la pantalla de carga, a quién asignarle trajes de GM (que siempre me pareció una mala idea hacerlo desde ahí, aunque no hay otra) y todo lo que ahí se especifica. ¿Qué ocurre con la carpeta Data y los archivos grf? Como has podido averiguar, un archivo grf es básicamente una carpeta data comprimida, con la estructura que se le haya ocurrido a Gravity, aunque por ejemplo algunos clientes requieren que haya archivos dentro de Data fuera de todo grf. Los GRF se leen por orden, de una lista en el archivo DATA.INI (u otro si se modifica en el exe) de tu instalación del RO, en que menor número significa mayor precedencia. En muchas versiones de cliente, si quieres que las cosas se lean desde la carpeta Data, tienes que diffear el exe con la opción "Read data folder first", que hace exactamente eso mismo.
-
jaBote reacted to Dastgir in [Guide] Adding New Status Icons
Hello Hercules Community,
Here's a Guide to Add a New Custom Status Icons(the one displayed on the right)
What you Need?
Knowledge of Editing and Compiling Server(and ofcourse custom icons)
1) Server Side Edits:
open
src/map/status.h
Find
SC_MAX Add Before
SC_MYCUSTOMBUTTON,
Find
SI_MAX, Add Before
SI_MYCUSTOMBUTTON = ID_OF_BUTTON, (ID of Button can be any, but I suggest to have them > 2000, so not to avoid any updates with kRO(which is at 900) now)
P.S: Remember that ID_OF_BUTTON, we gonna need them later.
src/map/status.c
Find
status->IconChangeTable[SC_DECORATION_OF_MUSIC] = SI_DECORATION_OF_MUSIC; Add Below
status->IconChangeTable[SC_MYCUSTOMBUTTON] = SI_MYCUSTOMBUTTON;
Recompile
2) ClientSide Edits
Get a CleanCopy of statusicon folder (https://github.com/ROClientSide/Translation/tree/master/Data/luafiles514/lua%20files/stateicon)
Open efstids.lub
Find:
__newindex = function()error("unknown state") Before it add,
EFST_MYCUSTOMBUTTON = ID_OF_BUTTON, P.S: ID_OF_BUTTON should match the one on source(status.h)
Open stateiconinfo.lub
Find
StateIconList[EFST_IDs.EFST_JUMPINGCLAN] = { Add Before
StateIconList[EFST_IDs.EFST_MYCUSTOMBUTTON] = { haveTimeLimit = 1, posTimeLimitStr = 2, descript = { { "My Custom Button Heading", COLOR_TITLE_BUFF }, {"%s", COLOR_TIME}, --do not edit this, this shows time remaining { "Description 1" }, { "Description 2" }, { "Description 3" } }} Open
stateiconimginfo.lua
Find
[PRIORITY_GOLD] = { OR
[PRIORITY_RED] = { OR
[PRIORITY_BLUE] = { OR
[PRIORITY_GREEN] = { OR
[PRIORITY_WHITE] = { (Depending on what background your Custom Button is)
Add below
[EFST_IDs.EFST_MYCUSTOMBUTTON] = "MYCUSTOMBUTTONFILE.TGA", P.S: Your Button File must be in .TGA form only.
.tga file must go to data/texture/effect/ Folder
And Its DONE!!!
NOTE: Replace MYCUSTOMBUTTON with your own Icon/Effect Name
-
jaBote got a reaction from milk in Web hosting
One of the main things you'd have to know is that unlimited web hosting is a scam. 90% of hostings that are saying unlimited are lying because that isn't true (just imagine millions of clients buying cheap, unlimited web hostings and uploading all of their files just to have a backup, which would be rather silly). You should rather go for unmetered when looking for these. And trust me, you'd rather prefer to know your limits than having a hard limit (usually under a Fair Use clause in the Terms of Service) and not knowing where it is.
Just think, buying hard drives for your data is expensive and you may not know, but carriers charge data centers based on the amount of data traffic they consume. It's rather common to have unmetered data transfer on shared hostings (web hostings) since your host wants you to be able to serve your web to any legit who requests it (that's why it's common to find some terms of service in hosts that bans directly or indirectly making download sites on shared web hostings).
Now, if you want a paid web hosting, think what hard disk space you need. You won't usually need more than 10 GB unless you're running a massive site or using your space inefficiently. As I said, you usually won't have to mind about transfer, but if your transfer isn't on the unmetered side try to have it around the 100 GB mark to make it on a very safe mark (unless you're running sites with tons of visits).
Hope this helped you.
-
jaBote reacted to GmOcean in explode to push arraysize
I just wanna suggest that the *explode script command, should push the array size of the one it creates. So that things like this are possible:
.@a = 10;while( .@b != .@a ) { .@menu$ = .@menu$ +""+ .@b +":"; .@b++;}.@menu$ = .@menu$ +"Last Option";if( select( .@menu$ ) == ( .@size = explode( .@temp$, .@menu$, ":" ) ) ) { close; } // Clicked Last Option in list. vs what we have to do now:
.@a = 10;while( .@b != .@a ) { .@menu$ = .@menu$ +""+ .@b +":"; .@b++;}.@menu$ = .@menu$ +"last Option";explode( .@temp$, .@menu$, ":" );if( select( .@menu$ ) == getarraysize( .@temp$ ) ){ close; } // Clicked Last Option in list.
It's not really " needed " more of just a feature I think it should have since commands like query_sql have it. I figure why not give it the extra feature since it's not a downgrade nor does it break backwards compatibility.
-
jaBote got a reaction from diieg0 in Entregar item 1 vez por cuenta
Hola.
El script que pides es algo muy básico que (en mi humilde opinión) realmente deberías conocer antes siquiera de plantearte abrir un servidor. No obstante, soy consciente de que todos hemos empezado servidores sin ningún tipo de conocimiento específico, por lo que en vez de convertir este mensaje en una regañina, te voy a ofrecer la ayuda.
Existe desde hace tiempo una serie de guías básicas de scripting que pueden ayudarte como estos vídeos de M45T3R o las guías de scripting básico de Rokimoki (muy viejas y en la que se han perdido los caracteres especiales del español pero aún 99% válidas), aunque también deberías considerar el uso de la guía "oficial" (en inglés), incluida en cada descarga completa del emulador y situada en doc/script_commands.txt. De hecho, la petición de NPC que has hecho se cubre totalmente con el capítulo 1 de la guía de Rokimoki.
El siguiente NPC se trata de un NPC genérico que resuelve tu problema de forma básica. Recuerda sustituir los parámetros entre los signos <> por lo que tú quieras o necesites y las indicaciones de tabulaciones (marcadas con <%TAB%>) por un espacio de tabulación (es obligatorio para su funcionamiento).
<mapa>,<x>,<y>,<dir><%TAB%>script<%TAB%><nombreNPC><%TAB%><sprite>,{ if (#objetodado == 0) { // El valor de una variable que no ha sido previamente asignado es 0 mes "Hola, bienvenido."; mes "Te he dado un objeto como regalo de bienvenida."; getitem <ID_ITEM>,<CANTIDAD>; #objetodado = 1; // #objetodado tiene prefijo #, que es variable de cuenta, al ser 1 el NPC ya usará el else en vez de esta rama y no dará un objeto. close; // Cierre del diálogo } // Fin if else { // Si la cuenta ya tiene el objeto del NPC, #objetodado será distinto de 0 mes "Hola."; mes "Ya te dí un objeto, no te puedo dar más objetos."; close; }}
Consejos:
[*]Puedes obtener el mapa y las coordenadas x,y del NPC cuando quieras usando /where desde el cliente. [*]Una dirección de 4 o 5 suele orientar el NPC para que mire hacia abajo, mira la documentación para saber el resto de direcciones si quieres que el NPC mire hacia otro lado. [*]¡Evita que el nombre del NPC supere los 23 caracteres! [*]Generalmente te conviene usar la ID de sprite de un NPC para que haya compatibilidad con versiones anteriores de los emuladores, aunque en las últimas versiones de Hercules también puedes usar las constantes de sus nombres. Puedes usar gran parte de los sprites de NPC que aparecen catalogados en la página de @Ai4rei aquí: http://nn.nachtwolke.com/dev/npclist/ [*]¡Que no se te olvide sustituir la item ID y la cantidad que quieres entregar! Si quieres entregar más de un objeto diferente, añade más comandos getitem con su ID y cantidad. [*]La variable utilizada en este NPC debe ser única. Es decir, ningún otro NPC debe estar utilizándola. Comprúebalo. En ocasiones te interesa que una misma variable sea manejada por más de un NPC, pero no es así en este caso.
Espero haberte ayudado al menos un poco. Para próximas peticiones tuyas de NPC si son muy básicas no te daré el código completo sino que trataré de ayudarte a que seas tu mismo quien lo construya y así aprendas.
Un saludo.