Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 09/22/2020 in all areas

  1. 5 points

    Version 1.0.0

    72 downloads

    A while ago I searched for everything for a program that separated all the strings in a file so that I could translate more easily, well I didn't think so I paid a developer to help me create, unfortunately I lost the source code of this incredible editor because of a ransomware, but I managed to find the executable, I hope it helps many people as it helped me! Description: Basically if you want to translate something or just edit the strings of an npc just import your .txt file and it will separate and you can edit / translate as you prefer. Demonstration video: Importar button: you import the.txt file Button "Criar arquivo codificado" :you create a file only with the strings all in line and encoded for windows 1252. button visualizar : you can preview the result. and Finalizar button it saves! obs1: take care not to increase the number of lines and nothing else will be out of order. obs2: You need to press on preview to apply the changes obs3: And be careful also when using it, as it can confuse a string with text, it identifies everything inside a string, so it can have this pattern: "here" ok "here" here OK here I'm sure it will be easier to translate into your language. using it is just a matter of habit, if I find the source code I will post it for free. would you like to donate to this project? paypal: [email protected] thanks!!

    Free

  2. 3 points
    Updated version. ExtendedVending_rev5.diff
  3. 2 points

    Project will expire in 1 day and 10 hours

    Our monthly fees: Web Hosting ($25) VPS Backup Drive ($13) 200GB Offsite NAS Sparkpost SMTP Relay ($10) So you all get the emails you're supposed to. Currently at 98.3% delivery rate. Misc software renewals ($3) Forum apps and plugins that require license renewal every 6 months are broken down to a monthly value. There are other costs for back-end services which are specifically sponsored by individual members of the rAthena project so do not require community crowdfunding.
  4. 1 point
    --off topic-- by the way what's your username on discord ? BIG EDIT: after discuss this issue in discord, finally I understand the gympassmemory come from official script https://github.com/rathena/rathena/blob/master/npc/other/gympass.txt to remove the weight learn from ALL_INCCARRY, the answer is just to remove this skill learn from your players .... what a bummer, totally different direction that's why I prefer to support over in discord, there are a lot of times members never explain properly on the forum solved in discord
  5. 1 point
    That error said no files has been found. Maybe try to created a new one? Or copy from other clients.
  6. 1 point
  7. 1 point
    Change this: https://github.com/rathena/rathena/blob/972a14e4ed3c2ae15f5acb60652cf0c3db1d0deb/src/map/skill.cpp#L13386 To this: if( (skill_get_type(sg->skill_id) == BF_MAGIC && ((battle_config.land_protector_behavior) ? map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR) : map_getcell(unit->bl.m, unit->bl.x, unit->bl.y, CELL_CHKLANDPROTECTOR)) && sg->skill_id != SA_LANDPROTECTOR) || and this: https://github.com/rathena/rathena/blob/972a14e4ed3c2ae15f5acb60652cf0c3db1d0deb/src/map/skill.cpp#L18489 To this: if( !(skill_get_inf2(group->skill_id)&(INF2_SONG_DANCE|INF2_TRAP)) && !(skill_get_inf3(group->skill_id)&(INF3_NOLP)) && group->skill_id != NC_NEUTRALBARRIER && (battle_config.land_protector_behavior ? map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR) : map_getcell(unit->bl.m, unit->bl.x, unit->bl.y, CELL_CHKLANDPROTECTOR)) )
  8. 1 point
    int64 value = pc_readregistry(sd, reference_uid(add_str("VARIABLE"), 0)); 0 = THE Index if you are using array , if not leave it 0
  9. 1 point
    The following is a guide that my friend, Vi, created mainly for the players of my old server during her early days of spriting. She is no longer active in the RO scene and my old server is no longer active so I just thought it would be a big waste to not share this with the community. By passing on this knowledge to those who are interested in learning the basics of spriting, I hope that more talented artists will arise in this community and more professional work can be seen. Please refrain from ripping images off of this guide and do give Vi full credits if you decide to repost this elsewhere. p.s. I am only sharing this information, therefore no support can be given from me over this guide so please don't ask me any questions. ^^ -------------------------------------------- hello! In this guide, I will cover the point after which you have completed your frames and you want to transition your .bmp frames into files workable for Ragnarok Online. This is perhaps the most grueling part of creating custom work for RO. I am in no way an expert (I am simply a novice, still always learning) and simply writing this to aid anyone who wishes to sprite. This is dedicated smexy Lexy. Before starting, you will need these programs: Any image editing software, I personally use Photoshop to do the artwork. actOR to edit your .act files. SPRconview to convert your .bmp files to .spr files and vice versa. You can obtain actOR and SPRConview from ratemyserver's RO tools page here. things to know At this point, you should have the artwork for your headgear done. This is what I'll be using as an example for this guide, Lady's Sailor Hat: Depending on your hat, you can have one to fifteen frames (if this isn't an animated headgear). Generally, things such as "GF Wanted," "Notice Board," etc. hats have one frame. Hats generally have five+ frames. Hats with five frames generally only have art work done for the first five angles of the hat, while the ones with fifteen frames have artwork done for all poses/angles. The Lady's Sailor Hat has fifteen frames. What determines how many frames you have is the .act you choose to work off of for your headgear. I don't know how to create an .act from scratch, I typically pick a headgear closest/most similar to the hat I have done. The .act file holds the positioning information for your headgear, it references the .spr file for the images. What does the .spr file do? The .spr file holds all the visual information for your headgear. The .act and .spr files work hand in hand. Let's get started. creating your .spr file. Time to slice your original artwork into its individual frames. Make sure all of the frames of your headgear are the correct size. If the size you choose is too large, you will encounter problems when you create your .spr file. It will do things such as distort or repeat itself in the frame. So slice up your artwork. I've picked the size 31 x 31 for the Lady's Sailor Hat. You have to save each of your frame files as an indexed .bmp. In Photoshop, you must go to Image > Mode > Indexed Color... It will ask you to Flatten Layers, click OK. This window will pop up: Now you want to go to the drop down menu where it says "Exact" and select Custom. (Make sure that before you select Custom, the drop down menu is already set to Exact. If not, select Exact and then go to Custom.) A second window will pop-up and you will see all of the colors used in your headgear. This step is critical, or else your headgear will show up with crazy colors when you convert it in SPRConview. Now, you have to denote what color is going to be transparent. In this second window, which is called the Color Table, the first box is the color which tells the .spr file what to make transparent. I've chosen this mint green color. So click the first box and the color picker will pop up. Simply click your background color. Now you want to save out your Color Table. Click save on the right hand of the color table. This is also indeed an .act file, but don't be confused! This is different from your file to be used with RO. I've saved my palette file out as "palette_ladyssailorhat.act." Now that you have all of the color information done, save your file. Save it as an 8-bit .bmp file. naming convention in ragnarok online, each gender has their own set of spr/act files. If you dig through the sprite files in your data folder, you'll notice ¿© and ³² as a suffix for your file names. ¿© denotes female, while ³² denotes male. Generally, I save my files as suffix_headgearname00xx.bmp. So continuing saving your frames out. Remember to check if your headgear's color palette is loaded into each frame. You can load your color palette by going to the "Custom" drop down menu and clicking "Load..." on the right hand side to select your palette file. After you finish, your folder should look something like this: Now go into your sprite data folder and pick a headgear that you feel is closest to the headgear you're working on. For the Lady's Sailor Hat, I've chosen Pirate's Pride. So copy and paste the .act/.spr files of the headgear into the folder of the headgear you are working on. Now open up SPRconview. Now go to Convert > Bmp to Spr. You will get another pop up window. Add all of the frames of your headgear and make sure that they're in numerical order. Under where it says Sprite, hit Browse and browse to where you saved the .spr file of the headgear you chose. Remember, I chose the Pirate's Pride. After you've done that, click Convert. Done with your .spr file! When you do this, SPRconview will replace the images of the original headgear with the ones you have made. Open up the .spr file and check to make sure everything is a-okay. Scroll through it and make sure the colors aren't all off either, as well as the transparency. That's it for your .spr file. time to edit your .act file Now go back to your folder and open up the .act file that you had copy and pasted for your headgear with actOR. Most of the time, when you open up your .act for the first time, you may get a message saying that the width and height is not correct. Simply click Yes and carry on. Now you should see this: Now look to the right. Under reference, check the box next to "head." You'll see that the head shows up, but the hat is behind the head! So look to the left where it says "Change priority ref. spr..." A window pops up. Underneath "head" hit the bubble for back. The hat is now in front of the head. Look: You can change the reference head anytime you want by replacing the ref_head act/spr files in the location where you installed actOR. Simply replace those files. Now, we have to edit the .act file. But first, here is a quick diagram explaining the basics of actOR. 01 action This refers to each of the acts that correspond with an action in Ragnarok. In the drop down menu, there are 13 acts, going from 0-12. Act 00 is the act for standing, act 01 is for walking, act 02 is for sitting, etc. You have to check every single act and every single direction to make sure that the hat sits on the head properly. This is where most of the labor comes from. 02 direction clicking through this scrolls through all of the angles of the head and hat. 03 scroll bar for each pose/angle, there are several frames. this scroll bar scrolls through all of them. You must check through all of these to make sure that the hat sits on the head properly. 04 reference this is simply where you turn the reference head and body on and off via the boxes, x is on and a blank box is off. 05 x offs this is the x-coordinate of the headgear. You can edit this value by clicking and dragging the headgear by hand, or tap-tap double clicking the value under Xoffs with a certain timing to change it numerically. 06 y offs this is they-coordinate of the headgear. You can edit this value by clicking and dragging the headgear by hand, or tap-tap double clicking the value under Yoffs with a certain timing to change it numerically. 07 EXT this simply refers to the reference head sprite/hairstyle. 08 x offs this is the x-coordinate of the head. You can edit this value by clicking and dragging the headgear by hand, or tap-tap double clicking the value under Xoffs with a certain timing to change it numerically. 09 y offs this is the y-coordinate of the head. You can edit this value by clicking and dragging the headgear by hand, or tap-tap double clicking the value under Xoffs with a certain timing to change it numerically. That is basically all you need to know of actOR to get the job done. Personally, I don't know what everything else does! Now you must go through all the .act's angles and frames to make sure the hat sits correctly on the character's head. Once you are done, simply save your file. And you're done! You now have the .act and .spr file of your headgear. the data folder 1 sprite this main folder is where your sprites reside. under this folder is two other folders. a. ¾ÆÀÌÅÛ holds the .spr/.act of the thumbnail of your headgear. b. ¾Ç¼¼»Ç¸® where your headgears reside. Underneath this folder are two other folders. c. ¿© the female folder d. ³² the male folder 2 texture this main folder is where your .bmp images for your items reside. under this folder is two other folders. a. À¯ÀúÀÎÅÍÆäÀ̽º this folder holds two other folders under it. b. collection this is where the artwork for your headgear resides as a 75 x 100 bitmap image. c. item this is where the .bmp thumbnail of your image resides; the image is the same as the .spr thumbnail of your headgear and is 24 x 24 in size. notes I generally work with the female .act/.spr files first. Afterwards, I simply copy and paste those files over to the male folder and paste, afterwards, I rename them. A lot of the time, the female .act will not suffice for the male .act since the male hairstyles tend to be smaller than the females. You will have to go back and edit the male .act file after copying and pasting. The way you position your headgear might not work across all hairstyles as well. You want to choose a position that can be workable across most hairstyles.
  10. 1 point
    its done through tortoiseGit https://herc.ws/board/topic/16013-how-to-apply-a-diff-file/ https://herc.ws/board/topic/16521-how-to-setup-offline-server-for-personal-development-use/
  11. 1 point
    prontera,155,185,5 script fhdskdjf 1_F_MARIA,{ mes "select a stat to reduce by 10"; next; [email protected] = select("Str","Agi","Vit","Int","Dex","Luk") -1; for ([email protected] = 0; [email protected] < 10; [email protected]) { if (readparam(.stat[[email protected]]) == 1) break; statusup2 .stat[[email protected]], -1; StatusPoint += needed_status_point(.stat[[email protected]], 1); } close; OnInit: setarray .stat, bStr, bAgi, bVit, bInt, bDex, bLuk; end; }
  12. 1 point
    ... same person ... ok I answer this one, my main forum is hercules so I wont be around forever the trick is ... add return; to all the functions containing title MAIL, this will effectively block all the codes of mail to run src/map/clif.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index da270e2ff..13658d283 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -15342,6 +15342,7 @@ void clif_parse_Check(int fd, struct map_session_data *sd) /// 1 = over weight /// 2 = fatal error void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount, uint8 flag ){ + return; int fd = sd->fd; #if PACKETVER < 20150513 @@ -15397,6 +15398,7 @@ void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount /// 09f2 <mail id>.Q <mail tab>.B <result>.B (ZC_ACK_ZENY_FROM_MAIL) /// 09f4 <mail id>.Q <mail tab>.B <result>.B (ZC_ACK_ITEM_FROM_MAIL) void clif_mail_getattachment(struct map_session_data* sd, struct mail_message *msg, uint8 result, enum mail_attachment_type type) { + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15433,6 +15435,7 @@ void clif_mail_getattachment(struct map_session_data* sd, struct mail_message *m /// 1 = recipinent does not exist /// 09ed <result>.B (ZC_ACK_WRITE_MAIL) void clif_Mail_send(struct map_session_data* sd, enum mail_send_result result){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15457,6 +15460,7 @@ void clif_Mail_send(struct map_session_data* sd, enum mail_send_result result){ /// 1 = failure // 09f6 <mail tab>.B <mail id>.Q (ZC_ACK_DELETE_MAIL) void clif_mail_delete( struct map_session_data* sd, struct mail_message *msg, bool success ){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15486,6 +15490,7 @@ void clif_mail_delete( struct map_session_data* sd, struct mail_message *msg, bo /// 1 = failure void clif_Mail_return(int fd, int mail_id, short fail) { + return; WFIFOHEAD(fd,packet_len(0x274)); WFIFOW(fd,0) = 0x274; WFIFOL(fd,2) = mail_id; @@ -15497,6 +15502,7 @@ void clif_Mail_return(int fd, int mail_id, short fail) /// 024a <mail id>.L <title>.40B <sender>.24B (ZC_MAIL_RECEIVE) /// 09e7 <result>.B (ZC_NOTIFY_UNREADMAIL) void clif_Mail_new(struct map_session_data* sd, int mail_id, const char *sender, const char *title){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15522,6 +15528,7 @@ void clif_Mail_new(struct map_session_data* sd, int mail_id, const char *sender, /// 1 = close void clif_Mail_window(int fd, int flag) { + return; WFIFOHEAD(fd,packet_len(0x260)); WFIFOW(fd,0) = 0x260; WFIFOL(fd,2) = flag; @@ -15540,6 +15547,7 @@ void clif_Mail_window(int fd, int flag) /// 0ac2 <packet len>.W <unknown>.B (ZC_ACK_MAIL_LIST3) /// { <type>.B <mail id>.Q <read>.B <type>.B <sender>.24B <expires>.L <title length>.W <title>.?B }* void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type type,int64 mailID){ + return; #if PACKETVER < 20150513 int fd = sd->fd; struct mail_data *md = &sd->mail.inbox; @@ -15733,6 +15741,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type typ /// 0ac0 <mail id>.Q <unknown>.16B (CZ_OPEN_MAILBOX2) /// 0ac1 <mail id>.Q <unknown>.16B (CZ_REQ_REFRESH_MAIL_LIST2) void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 struct mail_data* md = &sd->mail.inbox; @@ -15796,6 +15805,7 @@ void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){ /// { }*n // TODO: Packet description => for repeated block void clif_Mail_read( struct map_session_data *sd, int mail_id ){ + return; int i, fd = sd->fd; ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id); @@ -15911,6 +15921,7 @@ void clif_Mail_read( struct map_session_data *sd, int mail_id ){ /// 0241 <mail id>.L (CZ_MAIL_OPEN) /// 09ea <mail tab>.B <mail id>.Q (CZ_REQ_READ_MAIL) void clif_parse_Mail_read(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else @@ -15929,6 +15940,7 @@ void clif_parse_Mail_read(int fd, struct map_session_data *sd){ /// Allow a player to begin writing a mail /// 0a12 <receiver>.24B <success>.B (ZC_ACK_OPEN_WRITE_MAIL) void clif_send_Mail_beginwrite_ack( struct map_session_data *sd, char* name, bool success ){ + return; PACKET_ZC_ACK_OPEN_WRITE_MAIL p = { 0 }; p.PacketType = rodexopenwrite; @@ -15940,6 +15952,7 @@ void clif_send_Mail_beginwrite_ack( struct map_session_data *sd, char* name, boo /// Request to start writing a mail /// 0a08 <receiver>.24B (CZ_REQ_OPEN_WRITE_MAIL) void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){ + return; char name[NAME_LENGTH]; safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH); @@ -15958,6 +15971,7 @@ void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){ /// Notification that the client cancelled writing a mail /// 0a03 (CZ_REQ_CANCEL_WRITE_MAIL) void clif_parse_Mail_cancelwrite( int fd, struct map_session_data *sd ){ + return; sd->state.mail_writing = false; } @@ -15965,6 +15979,7 @@ void clif_parse_Mail_cancelwrite( int fd, struct map_session_data *sd ){ /// 0a14 <char id>.L <class>.W <base level>.W (ZC_CHECK_RECEIVE_CHARACTER_NAME) /// 0a51 <char id>.L <class>.W <base level>.W <name>.24B (ZC_CHECK_RECEIVE_CHARACTER_NAME2) void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short class_, uint32 level, const char* name ){ + return; PACKET_ZC_CHECKNAME p = { 0 }; p.PacketType = rodexcheckplayer; @@ -15980,6 +15995,7 @@ void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short /// Request information about the recipient /// 0a13 <name>.24B (CZ_CHECK_RECEIVE_CHARACTER_NAME) void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) { + return; static char name[NAME_LENGTH]; safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH); @@ -15992,6 +16008,7 @@ void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) { /// 09f1 <mail id>.Q <mail tab>.B (CZ_REQ_ZENY_FROM_MAIL) /// 09f3 <mail id>.Q <mail tab>.B (CZ_REQ_ITEM_FROM_MAIL) void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ + return; int i; struct mail_message* msg; #if PACKETVER < 20150513 @@ -16090,6 +16107,7 @@ void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ /// 0243 <mail id>.L (CZ_MAIL_DELETE) /// 09f5 <mail tab>.B <mail id>.Q (CZ_REQ_DELETE_MAIL) void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else @@ -16134,6 +16152,7 @@ void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ /// Request to return a mail (CZ_REQ_MAIL_RETURN). /// 0273 <mail id>.L <receive name>.24B void clif_parse_Mail_return(int fd, struct map_session_data *sd){ + return; int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); //char *rec_name = RFIFOP(fd,packet_db[RFIFOW(fd,0)].pos[1]); int i; @@ -16155,6 +16174,7 @@ void clif_parse_Mail_return(int fd, struct map_session_data *sd){ /// 0247 <index>.W <amount>.L (CZ_MAIL_ADD_ITEM) /// 0a04 <index>.W <amount>.W (CZ_REQ_ADD_ITEM_TO_MAIL) void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ + return; struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; uint16 idx = RFIFOW(fd,info->pos[0]); #if PACKETVER < 20150513 @@ -16184,6 +16204,7 @@ void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ /// Remove an item from a mail /// 0a07 <result>.B <index>.W <amount>.W <weight>.W void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, int amount ){ + return; PACKET_ZC_ACK_REMOVE_ITEM_MAIL p = { 0 }; p.PacketType = rodexremoveitem; @@ -16213,6 +16234,7 @@ void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, /// 0a06 <index>.W <amount>.W (CZ_REQ_REMOVE_ITEM_MAIL) void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) { + return; #if PACKETVER < 20150513 int type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); @@ -16233,6 +16255,7 @@ void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) /// 09ec <packet len>.W <recipient>.24B <sender>.24B <zeny>.Q <title length>.W <body length>.W <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL) /// 0a6e <packet len>.W <recipient>.24B <sender>.24B <zeny>.Q <title length>.W <body length>.W <char id>.L <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL2) void clif_parse_Mail_send(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
  13. 1 point
    I love people who learns gets a thumbs up from me ok from my understanding, you want the way that GMs can choose which 2 party to fight each other https://github.com/AnnieRuru/Release/blob/master/scripts/Battlegrounds/PartyVsParty/PartyVsParty_0.1r.txt PS: ... I wish this is hercules and I can use OnPCUseSkillEvent to have a cursor to select the player instead of typing out the player name I think your next reply might want to ask about how to set the party at a fix size ... ?
  14. 1 point
    Hi! Yes, last man standing or time's up with the most members alive. actually I'm currently using this script of yours and I like it, just want to add some features to it like, party recall instead of going in to the pub. and gates. I think I can add the gates on my own, but I'm having a hard time coding the party recall part. I have a very dirty script here, maybe you could get the summary of it. please see attached, 100% script is not working, still learning and havn't had a time testing it. but basically thats the summary of it if youd like to check it out.ptvspt.txt
  15. 1 point
    well, yes, change Target All into Party in skill database after tested it, normally we can use santuary to kill zombies, and after change to party, undead can cross over now
  16. 1 point
    I don't recall I ever made a party vs party script but if battleground script I've made a tons of it what is the winning condition ? last party member standing ? something like bg_pvp in github?
  17. 1 point
    can only be done with source edits src/map/mob.cpp | 9 +++++++++ src/map/mob.hpp | 1 + src/map/unit.cpp | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 3e0b54f37..686c30ac1 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -708,6 +708,15 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const //"I understand the "Aggressive" part, but the "Can Move" and "Can Attack" is just stupid" - Poki#3 sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE|MD_CANATTACK|MD_CANMOVE|MD_ANGRY, 0, 60000); } + + if (md != NULL) { + if (mob_id < 0) { + md->special_state.deadbranch = 1; + md->deletetimer = add_timer(gettick()+5000,mob_timer_delete,md->bl.id,0); + } + else + md->special_state.deadbranch = 0; + } return (md) ? md->bl.id : 0; // id of last spawned mob } diff --git a/src/map/mob.hpp b/src/map/mob.hpp index 5b47b8c6f..37921599c 100644 --- a/src/map/mob.hpp +++ b/src/map/mob.hpp @@ -189,6 +189,7 @@ struct mob_data { unsigned int size : 2; //Small/Big monsters. enum mob_ai ai; //Special ai for summoned monsters. unsigned int clone : 1;/* is clone? 1:0 */ + unsigned int deadbranch : 1; /* summon from branch */ } special_state; //Special mob information that does not needs to be zero'ed on mob respawn. struct s_MobState { unsigned int aggressive : 1; //Signals whether the mob AI is in aggressive mode or reactive mode. [Skotlex] diff --git a/src/map/unit.cpp b/src/map/unit.cpp index 15632f201..b42668a1d 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -2420,6 +2420,17 @@ int unit_attack(struct block_list *src,int target_id,int continuous) if(ud->attacktimer != INVALID_TIMER) return 0; + if (target_id != 0) { + struct block_list *target_bl = map_id2bl(target_id); + if (target_bl->type == BL_MOB) { + struct mob_data *md = map_id2md(target_id); + if (md->special_state.deadbranch == 1 && md->deletetimer != INVALID_TIMER) { + delete_timer(md->deletetimer, mob_timer_delete); + md->deletetimer = add_timer(gettick() + 5000, mob_timer_delete, md->bl.id, 0); + } + } + } + // New action request received, delete previous action request if not executed yet if(ud->stepaction || ud->steptimer != INVALID_TIMER) unit_stop_stepaction(src); I tested with 5000 = 5 seconds, change them into 60000
  18. 1 point
    I am looking for webdev to fix something on my website. The download, meta description,donate page
  19. 1 point
    Update2: Yes, slaveclone could be revived through status_revive, as long as it's not declared dead in mob_dead
  20. 1 point
    Whenever you delete the item of a player from SQL, the character must be offline else it will not reflect properly.
  21. 1 point

    Version 1.1.0

    62 downloads

    This mod allows you to set some conditions to a player can see or interact with a NPC. Command: viewcondition( npc_name, int_variable_name, compare_method, value_1, { value_2 } ); Compara Methods Avaiable: EVC_LESS - If player variable is < value_1 EVC_EQUALS - if player variable is == value_1 EVC_MORE - if player variable is > value_1 EVC_BETWEEN - if player variable is >= value_1 and <= value_2 EVC_DIFFERENT - if player variable is != value_1 You can apply more than one condition to a npc, but if one condition fail, the npc will not be seeing by the player. Script Sample: new_1,55,111,5 Script Lupina#1 10078,{ mes "You can see and talk with me because your @teste variable is less than one!"; next; mes "Now, I will set @teste to 2 and you will no longe see me when goes outsight me or if use @refesh!"; close2; @teste = 2; end; OnInit: viewcondition( strnpcinfo(0), "@teste", EVC_LESS, 1 ); end; }

    Free

  22. 1 point
    If you want to be on the safe side, don't forget to change this to char_athena.conf. // Restrict certain class from being created. (Only functional on 20151001aRagexe or later) // 0: No character creation is allowed // 1: Only novice is allowed to be created (pre-renewal default) // 2: Only summoner is allowed to be created // 3: Both novice and summoner can be created (renewal default) // Uncomment to customize the restriction //allowed_job_flag: 1
  23. 1 point
    This seems to be a more appropriate place so continuing here from @autopilot is a server side AI implementation that can control player characters. The primary goal is to replace human players for any reason : perhaps you installed a server on your own computer and have no other players, or your server has too low population or a critical class for the party isn't available. Either way, this allows you to add characters to your party without having a human player available. Note that this isn't a bot : it might get stuck in a corner if left alone with no human to lead the party. Also note this is server side : you have to be the server owner and capable of modifying your source to add it. Obviously an AI isn't a human player, which means better reaction time, and no "I have to go 5 minutes afk sorry" during boss fights but at the price of not being able to judge more advanced situations correctly. Overall I'd say the AI will play better than a typical player but will fail at anything more complex than "use this skill when <condition>". All the current progress is available here : https://github.com/SeravySensei/rathena/commits/Autopilot https://github.com/rathena/rathena/compare/master...SeravySensei:Autopilot.patch https://github.com/rathena/rathena/compare/master...SeravySensei:Autopilot.diff Currently implemented : All 1st classes, 2nd/rebirth classes. Homunculus, 3rd classes. Awaiting implementation : -Rebel -Oboro/Kagerou -Soul Reaper/Star Emperor Many of the 3rd class AI skills are still untested. I plan to test everything after the last few classes are done. How to use : @autopilot Tank enables tanking mode, the AI will try to engage enemies in melee and use melee skills. @autopilot Skill enables the AI to use ranged attacks or ranged skills, in general this is the DPS mode @autopilot Support restricts the AI to using support skills only. @autopilothom with same parameters : same modes for the Homunculus. There are a few other commands for enabling "extras" such as telling the AI to use a song or dance or other special skill or use sp potions. You should see them in the atcommands file(s). It's old but here is a recording that shows the AI in action :
  24. 1 point

    Version 2.0.0

    556 downloads

    Version 2 Information: now support more then 2 iteminfo , you can check line 17 to add as much as you want! IInfo = {"System.import_iteminfo","System.kro_iteminfo5","System.kro_iteminfo4","System.kro_iteminfo3","System.kro_iteminfo2","System.kro_iteminfo1","System.kro_iteminfo"} now it's much much much faster for big files! remove functions.lua move url functions to the iteminfo itself 2 Big files loading test : this test is not loading in the client , but loading in the debugger! If you are new to this > Details: this an example and template on how you Customize your iteminfo read the ReadMe!! file before you ask anything this work as the import folders in rathena (if you don't know what i mean than i suggest you use rathena search or google) ALL THE FILES MUST BE .lua !!! the way it work: you add your custom and edited items in the import iteminfo file you add kro iteminfo file you add the server url in the function file the client will read the iteminfo import first than the kro iteminfo than you can update your kro iteminfo at anytime you need without any edit to it without the need to re-add your custom and edited items to a new kro iteminfo the kro_iteminfo included is from https://github.com/zackdreaver/ROenglishRE this file is added for example on how you use it i suggest you get the last iteminfo after you make sure there is no error! i would highly suggest you check out his great project every time you want to update your iteminfo! Please report any error in the forum post not in the PM , Thanks.

    Free

  25. 1 point

    Version 1.0.0

    177 downloads

    Custom Sprites for existing shields: - 2150 Upg Buckler - 28905 Unity Buckler - 2148 Rotha Shield - 2151 Upg Shield - 2147 Round Buckler More Coming Soon

    Free

  26. 1 point

    Version 1.2

    613 downloads

    In response to this post : https://rathena.org/board/topic/122667-woe-ranking-script/ https://rathena.org/board/topic/121631-woe-rankings-script/#comment-373249 https://rathena.org/board/topic/96397-woe-ranking/ https://rathena.org/board/topic/109488-ranking-woe/ By downloading this file, you agree with my Terms of Service: • You are not allowed remove my signature from any of the included files. • You are not allowed claim my work as yours. If you like it, give me a

    Free

  27. 1 point
    this file affect drop rate too. db/re/level_penalty.txt#L43-L60 item_drop_common_min: 1 item_drop_common_max: 1000 this define the minimum and maximum drop rate .... from your settings, its 0.01% (min) ~ 10.00% (max) hence your Poring are probably dropping Jellopy at 10% max.
  28. 1 point

    Version 1.1.1

    447 downloads

    Ehh since my event scripts are piling up, I decided to make an Event Manager // Basic Event Manager // By Mabuhay /*-=-=-=-=-=-=-=-=-=-=-=-=-=- Currently added are the ff : {#} NAME - "NPC_NAME" [1] Bombring - "Event_Bombring" [2] Dice - "Event_Dice" [3] Last Man Standing - "Event_LMS" [4] Novice V Zombie - "Event_NvZ" [5] Poring Catcher - "Poring_Catcher" [6] Poring Hunter - "Poring_Hunter" (Added 12-15-2019) -=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ // For easier management of Event NPCs ///////////////////////////////////// // NOTE: // ///////////////////////////////////// // I don't support any modifications unless I want to. // But if you want to change things especially the rewards, // Please refer to my F_Reward Functions // https://rathena.org/board/files/file/4068-itemvariablepoints-reward-function-for-beginners-or-lazy/ // You should be able to easily change the rewards // If you have basic scripting knowledge Header Settings: OnInit: // 1 = item reward // 2 = variable/cashpoints reward // If you want to set item and variable/cashpoints rewards, do 1|2. // If you only want 1, just choose between 1 or 2 $event_options = 1|2; // If item reward enabled // What items will be rewarded setarray $event_item_reward, 501, 10, 502, 5; // If variable reward.. set to your variable. // If cashpoints.. set to #CASHPOINTS / #KAFRAPOINTS (Free Cash Points) $event_var$ = "#EVENTVARIABLE"; // Variable name? // If cash points, set to Cash Points // If your custom var, set to the name of that thing. $event_var_name$ = "Custom Points"; // How much points gain if #VAR / #CASHPOINTS / #KAFRAPOINTS? $event_var_gain = 1; $event_item_arr = getarraysize($event_item_reward); // @eventstart for GM bindatcmd "eventstart", strnpcinfo(0)+"::OnStart",60,60; // @eventjoin bindatcmd "eventjoin", strnpcinfo(0)+"::OnJoinEvent"; end; You may now use @eventstart for GMs to select which ones to start. @eventjoin for players to enter and see which event is currently active Event timers / Clock are to be set here : // OnClock<hour><minute>: donpcevent "<npc_name>::OnStart"; OnClock0000: donpcevent "Event_Bombring::OnStart"; end; //----- 12 mn OnClock0100: donpcevent "Event_Dice::OnStart"; end; OnClock0200: donpcevent "Event_LMS::OnStart"; end; OnClock0300: donpcevent "Poring_Catcher::OnStart"; end; OnClock0400: donpcevent "Event_NvZ::OnStart"; end; OnClock0500: donpcevent "Poring_Hunter::OnStart"; end; OnClock0600: donpcevent "Event_Bombring::OnStart"; end; //----- 6 am OnClock0700: donpcevent "Event_Dice::OnStart"; end; OnClock0800: donpcevent "Event_LMS::OnStart"; end; OnClock0900: donpcevent "Poring_Catcher::OnStart"; end; OnClock1000: donpcevent "Event_NvZ::OnStart"; end; OnClock1100: donpcevent "Poring_Hunter::OnStart"; end; OnClock1200: donpcevent "Event_Bombring::OnStart"; end; //----- 12 nn OnClock1300: donpcevent "Event_Dice::OnStart"; end; OnClock1400: donpcevent "Event_LMS::OnStart"; end; OnClock1500: donpcevent "Poring_Catcher::OnStart"; end; OnClock1600: donpcevent "Event_NvZ::OnStart"; end; OnClock1700: donpcevent "::OnStart"; end; OnClock1800: donpcevent "Event_Bombring::OnStart"; end; //----- 6 pm OnClock1900: donpcevent "Event_Dice::OnStart"; end; OnClock2000: donpcevent "Event_LMS::OnStart"; end; OnClock2100: donpcevent "Poring_Catcher::OnStart"; end; OnClock2200: donpcevent "Event_NvZ::OnStart"; end; OnClock2300: donpcevent "Poring_Hunter::OnStart"; end; //----- 11 pm Currently I just alternately activate events per hour. You can change the event time as you wish. You may choose any of the ff: OnClock<hour><minute>: OnMinute<minute>: OnHour<hour>: On<weekday><hour><minute>: OnDay<month><day>: I hope this helps. If you want me to add more, just PM me on an event script that needs to be updated. Thank you. Compatibility is your responsibility. No backward Compatibility Support. Enjoy! NOTE : If you find this useful, please click the Upvote button to motivate me to do stuffs like this And you are welcome!

    Free

  29. 1 point

    Version 1.0.0

    125 downloads

    I was looking for this sprite long ago and someone helped me (thanks again!). Turns out it was only an NPC sprite, but I managed to turn in into a proper monster some time ago, and now I've decided to share it. In addition to the normal monster animations, it also has one pet performance animation. Note: the preview gifs don't exactly look great, but it's due to the transparency of the flame effects. It looks normal on the ACT editor and ingame.

    Free

  30. 1 point

    Version 1.4

    13 downloads

    Zombie tag is a pvp script that spawns a number of custom zombies mobs every minute. The goal is for players to survive for the full 10 minutes. When a player gets killed they respawn as a zombie. Once a zombie they are unkillable, but can still kill any other surviving players.

    $5.00

  31. 1 point

    Version 1.0.0

    104 downloads

    Halloween is coming... Mob from the last update of KRO.

    Free

  32. 1 point
  33. 1 point
  34. 1 point

    Version 1

    916 downloads

    Town of Beginnings from SAOI'm releasing this map that I made a while ago for a SAO-RAG project that has been put on hold, and i felt like it's too good of a map to put it on a shelf ;]Hope you guys enjoy the release. ;] Some files inside include the color changes on some texture files, so keep that in mind, and delete them if you want.

    Free

  35. 1 point
    It's something so simple. Go to: src/map/script.hpp before: HAT_EF_MAX Add your effect and add to in: src/map/script_constants.hpp After: export_constant(HAT_EF_C_SHINING_ANGEL_WING); Add your effect to. Recompile. for the client just add in the file hateffect.lub inside the data folder.
  36. 1 point

    Version 1.0.0

    424 downloads

    Hello everyone! I'm maken06. This is my second monster, enjoy it Don't steal credits, give credits to me, that I cost my effort to do them. Do Not edit my work without my permission, It includes recolors. pd: Do not forget to give me a reputation or reaction

    Free

  37. 1 point

    Version 1.0.1

    118 downloads

    bonus bXDefReturn Add resistances against return damages. ::Structure:: bonus bPhysicalDefReturn,n; +n% damage reduction against physical reflect attack bonus bMagicalDefReturn,n; +n% damage reduction against magical reflect attack ::Video::

    Free

  38. 1 point

    Version 1.1.0

    263 downloads

    I still studying & learn about custom so for the starting i learn this to change item color You can find original sprite from your kro data. for cat lover.

    Free

  39. 1 point

    Version v.1.0

    354 downloads

    VOTE for the Sprite's or Post your comment in the Support Topic ---- File Info ---- This File Includes: Flam Lord Spr and Act File ---- Rules ---- 1. Do not claim my work as yours. 2. Do not remove or alter my signatures/watermarks within the sprites and all associated files. 3. Credit me if you use my work as a base. 4. Do not edit or alter my sprites in any way without permission from me. 5. Do not distribute my sprites on any file hosting sites.

    Free

  40. 1 point
    - <tab> script <tab> VotePointConvert <tab> -1,{ OnPCLoginEvent: query_sql("SELECT `points` FROM `cp_v4p_voters` WHERE account_id="+getcharid(3)+" LIMIT 1",[email protected]); if ([email protected]) end; query_sql("UPDATE `cp_v4p_voters` SET points=(points-"[email protected]+") WHERE account_id='"+getcharid(3)+"'"); set #VOTEPOINTS, #[email protected]; dispbottom "Vote Points updated! Total: "+#VOTEPOINTS; end; } Then use my quest shop with the following configuration: setarray .Points$[0],"#VOTEPOINTS","Vote Points";
  • Newsletter

    block_newsletter_signup
    Sign Up
×
×
  • Create New...

Important Information

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