Jump to content


  • Posts

  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Humble_Bee's Achievements


Drops (2/15)

  • Conversation Starter
  • First Post
  • Collaborator
  • Week One Done
  • One Month Later

Recent Badges



  1. I know that pc_checkskill works on players to find out what level of a skill they have learned (if at all), and I'm looking for a similar function for mobs. If one doesn't exist, does anyone know the path the src would check? Is it something like "mob_skill[skill_id].skill_lv"? I tried coding: int skill_checklevel(struct block_list *src, uint16 skill_id) { if (src->type == BL_MOB){ struct mob_data *md = (struct mob_data*)src; struct mob_skill *ms; int i; int level = 0; nullpo_ret(ms = md->db->skill); for (i = 0; i < MAX_MOBSKILL; i++){ if(ms[i].skill_id == skill_id){ level = ms[i].skill_lv; break; } else{ level = 0; } } return level; } } And it didn't work. I've also tried a few other variations, and they didn't work either. If I knew the path the src followed, I could probably figure it out, but I haven't yet. I want to be able to make passive boosts for mobs based on skill level known, but have been stumped.
  2. Does anyone have the bug where pets won't attack the same mob type they are? Like if I have a poring pet, it won't attack porings. Same goes for all pets not attacking monsters of their breed. Does anyone know where this is in the source code? I'm not sure if it's based in the mob code, the pet code, or elsewhere, but it's annoying.
  3. Trying to figure out how to make it so that all pets would get a skill. I know I could add it one by one, but that would be a pain.
  4. Right now, in the game, it looks like there aren't any non-ground moves that have a target cap. Anyone have any ideas on where to start to make a setting for target caps for skills?
  5. I'm trying to make all my stats balanced, and this is pretty easy with ideas like accuracy, damage, and damage resist, but I'm having a hell of a time with regen. While accuracy, damage, and damage resistance all interact with each other, regen does not nicely interact with them. If 1 SP allows you to do 10 damage, and you start with 120 SP, then you could do 1200 damage before you run out. If each attack takes 1 sec to cast, it would take you 120 secs to run out of SP, and then you would have to wait to until you regenerated your SP. If you regen 3% Base SP per 6 seconds (not adding bonus Max SP values in), it would take you 240 seconds to get to full. Now, if I put this into total damage output over time, this base would look like this: At 2 minutes (No Stat Boosts): 60 SP Leftover 1200 damage done At 16 minutes (No Stat Boosts): 0 SP leftover 6000 damage done And then if you compare a double regen boost vs a double Max SP boost, it would look like this: At 2 minutes (Regen Doubled): 120 SP leftover 1200 damage done At 16 minutes (Regen Doubled): 120 SP leftover 9600 damage done -- At 2 minutes (Max SP Doubled): 120 SP leftover 1200 damage done At 16 minutes (Max SP Doubled): 0 SP leftover 7200 damage done As you can see, in the long run, depending on how you set base regen, when you double it, it doesn't tend to balance out. This is even more problematic for HP regen, because if you double 3% HP per 6 seconds, it becomes 1% HP per second, which usually is more than most people think is balanced. On top of this, we come into the problem of potions. If a game is using potions or Inns, a person then has to calculate the value of regen vs how cheap potions are or how time consuming it is to get to an inn. If potions are cheap, regen loses value. If it's easy to travel and get back to an inn, regen also loses value. It can be a really tough concept to balance with stat boosts. Any ideas on how you all would balance it?
  6. So I've gotten monsters to attack players on missed attacks by coding: // check if we're landing a hit if(!is_attack_hitting(&wd, src, target, skill_id, skill_lv, true)){ wd.dmg_lv = ATK_FLEE; if (target->type == BL_MOB){ struct mob_data *md = (struct mob_data *)target; if (md->attacked_id != src->id){ sc_start4(target,target, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, wd.amotion); }; } } But my problem is- there is no amotion delay. A player might not even finish firing an arrow and a monster is already on top of him. Is there any easy way to make the mode change happen after the weapon animation has happened?
  7. You repacked jpegs or whatever format the pics were in back into sprites one by one? If so, ouch. That's like licking 17,000 stamps for envelopes.
  8. So the neural network was able to apply a formula, so to speak, to all the sprites quickly? They are definitely sharper. I will say, Gibbit looks like it is hanging Luchadores when in high-def. heh.
  9. When doing double attack while dual-wielding, the game always reverts to using the main weapon (R Hand) for the final hit. Does anyone know where this logic is in the code? I've set my dual-wield double attacks to hit 4 times, but the game does three hits of the main weapon and one hit of the L-Hand weapon. I'd like the game to do two hits of each. Ideas?
  10. I see the original coders initialize bl and src all the time and their code works fine, but I can't figure out how to initialize them myself. How do I add bl or src info into the middle of a function without the game spazzing? I have this much accomplished: struct block_list *bl; ??? status_get_level(bl) I just don't know what bl equals so that it will retrieve the data appropriately. Thanks for any help!
  11. Can you get sued? Yes. Will you? That's a roll of the dice. Imagine being one of the graphic designers who spent hours carefully filling in all those pixels. You busted your rear end just to build one character, not even including weapons and armor, and then someone just rips it and tosses it in their video game and doesn't give you a dime or even a thank you. Would you be upset? Something to keep in mind. That's why I hope the video game community pushes for a public domain library of assets (maps, monsters, icons, etc), because in the long run, it could help a lot of enjoyable games to come out.
  12. Note: I know this question is old, but I don't see the answer on the boards, and my version of rAthena doesn't have a quick solution, so I made one, and I imagine it will help people. You can go into mob.cpp and find the section that talks about mob drops and add in slave mobs as a section there. Mine looked like this: if( !(type&1) && !map_getmapflag(m, MF_NOMOBLOOT) && !md->state.rebirth && ( !md->special_state.ai || //Non special mob battle_config.alchemist_summon_reward == 2 || //All summoned give drops (md->special_state.ai==AI_SPHERE && battle_config.alchemist_summon_reward == 1) //Marine Sphere Drops items. ) ) And I changed the top line to look like this: if( !(type&1) && !map_getmapflag(m, MF_NOMOBLOOT) && !md->state.rebirth && !md->master_id && ( My slave mobs are no longer giving drops.
  13. This is my code for a race changing AT Command (the very basic start of one- I'll add more later). It is not currently updating the player's race though. Can someone more familiar with C++ show me what I would need to change? I know that stat updates show up in like 5+ places in rAthena code, so I'm not sure how much more work I'll need to do it. You would think it would be as easy as querying the server for the data and using some sort of set command, but I only "talk" the vocabulary, I don't actually know how to use it. Ha. ACMD_FUNC(changerace) { char xrace[20]; struct status_data *base_status; base_status = &sd->base_status; nullpo_retr(-1, sd); memset(atcmd_output, '\0', sizeof(atcmd_output)); if (sscanf(message, "%20s",&xrace) > 0) { if (xrace == "Formless" ) sd->base_status.race = RC_FORMLESS; } return 0; }
  14. Is there code in the source that checks what max hp is supposed to be at lv. 1, so that it can set actual hp to match max hp? I turned off the job_basehpsp_db.txt file option so I could use a formula (pc_calc_basehp, but I modified it), and my characters were starting not with max_hp, but a much lower hp amount. I found out how to temporarily fix it by going into char.cpp, as far as making the actual hp match my max hp for a starting novice, but it seems like it would be a lot easier just to have a formula decide all this -> i.e.- have pc_calc_basehp (in pc.cpp) get read, and then have actual hp be set to match that. This way char.cpp wouldn't need to be adjusted all the time. My current fix doesn't take care of dorams if I wanted them to have a different hp amount, and the same goes for other races when I add them to the game in the future. Maybe I'm missing something? Note: I'm not asking for support. I'm assuming my problem is actually a current design feature when not using job_basehpsp_db.txt, and so I'm discussing the suggestion of inserting a formula/function that reads max_hp and matches actual hp to it on character creation. (Though my version of rAthena is quite a bit older, so perhaps this has been fixed already *blush*)
  15. Any general ideas why a character's HP wouldn't equal it's Max HP on character creation? This might be related to the fact that I went with a formula in base_hp instead of using the job_basehpsp_db.txt file (there is an option to disable it and use a base formula), but I can't figure out why the hp still wouldn't updated to match the max_hp on character creation. Is there a way to fix the issue with a status update force if people can't guess what is wrong? EDIT: A bit of a headache, but apparently rAthena doesn't connect base_hp (max) with actual hp on character creation by default. I had to go into a completely different file and change numbers for it to work (Associated DB Tables Upon Character Creation - Third Party Support - rAthena).
  • Create New...