Jump to content

Seravy

Members
  • Posts

    176
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by Seravy

  1. The unrelated commits are the update, remember I started with a 6 months outdated rathena. So I have autopilot commits before, and after that 6 month worth of commits. As there were conflicts resolved at the time of updating, not including them seemed like a bad idea. Someone changed the syntax of timers, so it did affect the autopilot feature.

    ... I have no idea why those update commits show up on compare, the contents should be the same - but I can see that being inconvenient.

    ...going to the .patch page crashed my browser ?

    (PS : it's outdated anyway, since then I implemented like 5 more classes.)

  2. No, I understand what fixed casting time is.

    What I don't understand is, WHEN does the option override the value specified in the database, and what does it do when set to "0".  As far as I see all skills in the database do have their fixed cast time properly set up to be 20% of the full amount (unless the official amount is different). I don't know how the option is supposed to interact with that. Based on the description that would mean it doesn't override the amount then because it wasn't zero which would imply this is an obsolete option that was meant for older databases with no fixed cast time data.

    However, Charge Arrow, has 1500ms fixed cast time and no variable casting time in the database (official amounts). When this option was set to 0, I was able to cast it instantly, meaning it changed the amount but if the option was set to 20, the casting time remained 1500 ms. So 0 reduced it to 0% but 20 didn't reduce it to 20%.

    So either the description is wrong, or I misunderstand it, or the option has a bug.

     

  3. Okay, that's the long and risky one I was avoiding so far. At least this Tortoisegit seems to have some of the familiar functions I didn't see in VC like checkout... so might as well give it a try. Full backup so no actual risk involved I guess...

    ...fork done. So I assume I'm typing git pull fork's address to cmd. It says merge conflicts. Ehh and I just updated yesterday. Okay this wasn't so bad, like 5 lines changed in one db file. So does this mean I'm now connected to my fork and can push there? Note the files I originally downloaded from elsewhere.

    So branches. I already have 2 weeks worth of work done in these files so even if I make branches from here, those will be included in all 3. But I think it's possible to revert them on the branches that don't need them. But based on previous experience, doing that will actually make revert commits which get pushed so in the end it won't be the same as the main branch anyway, is that right?

    Wait, if I do a checkout on the state before my commits and make the branches there that should work. How do I do that... oh the "..." is clickable. So I create a new branch here. I don't see the point in making a branch that's the same as the main, is there one? I'm making the autopilot branch first instead. So now I do checkout on that and then...I need to merge my autopilot changes into it, as well as everything that wasn't mine but came from the 6 months of updates, but leave out the rest. Wait, merge is for entire branches, right? This would be...what was it, cherry pick? Ok I don't see that option on the git menu so I'm stuck....think I found it.

  4. I still have

    // Display some mob info next to their name? (add as needed)
    // (does not works on guardian or Emperium)
    // 1: Display mob HP (Hp/MaxHp format)
    // 2: Display mob HP (Percent of full life format)
    // 4: Display mob's level
    show_mob_info: 4

    but ever since I updated to the 2018/06/20 client monster levels aren't shown. I don't see anything like that in nemo either. How do I fix it? Is it even a clientside problem?

  5.  I have a huge pack of palettes but sometimes I still don't find one I like for my character so I thought "hey, it's really trivial to edit a palette, might as well make it.". Or so I was thinking...

    I opened up my palettes grf in grfeditor, and realized each class have their own. That's fine I guess, makes sense, but is there a guide which "name" is which class? I can't read "Korean" that doesn't even use Korean characters to display to make it worse, otherwise at least google translate could be of some use.

    Then, I have a pal file selected, the editor shows me the contents, I can click "select sprite" and select the spr file for the class I want to edit and it actually shows me how it looks with that palette. So now all I would need to do is click on a color and pick another but...that doesn't seem to be a thing. So how else do I tell Grfeditor "I want this color to be that color instead in that pal file"? Or if that's not an option what else am I supposed to do to edit the palette (preferably while applied to the image so I see what I'm doing...)

    Editor is 1.8.2.4, not sure if that's new or old, maybe I need newer?

  6. Oh, I am using SDE. Let's try... 1.1.8.8.? That's newer than mine, which is 1.1.8.5. So..rightclick and "autocomplete", is that it? Ok, this added the attack, level, job etc information which is great but the most important part the actual effects of the item (the script) it did not.

    Ok so it does seem like manual is the only way? So...every single entry now has "costume=false" added and there are some changes to the main() at the end of the file. Can I ignore this? If yes that means I "only" need to find the new items that have new descriptions and copy those into the file that already has my own items. There can't be that many relevant new items added in 6 months, right? I need to actually check and adjust them anyway eventually so it's good to know what's new.  Let's see, so if I compare the old and new itemdb files by content, I can spot which lines are new, and those are the items whose descriptions I need to add, is that right?

    Edit : up to item 13332 I haven't yet found a single new item that doesn't already have the description in the iteminfo file although over half of them are Korean. I guess this update didn't contain any new item descriptions somehow...or maybe SDE just found them in a file and added them without me ever noticing... ok 13345 is missing but it's Koren so there is no point adding it anyway. No I guess it's best to just ignore the descriptions until I actually find a new item that can drop in the game that doesn't have one.

  7. 11 hours ago, AnnieRuru said:

    already looking forward to see the patch from your project ~

     

    Actually, if you're fine with patches and don't want a branch pushed to some remote like the guys on that last project did then I can do that anytime if you tell me how.  Currently I have all the stuff related to that autopilot feature in separate commits from other changes. So all I need is, how to tell git "I want a patch that is these 15 commits and not those 50 others"? I see "create patch serial" but no idea how to use it, doesn't even seem to list my commits. (btw so far all 1st classes are working and also priest and wizard. Other 2nd jobs I haven't done yet. It'll take a long while, I need to actually relearn how to play those classes)

  8. Nevermind, I found the problem. Arrgggh!!!

    Someone added this to the map server storage.cpp :

    		|| (gstor->max_amount != guild_checkskill(sd->guild, GD_GUILD_STORAGE) * 100)

    I already modded it to be 300 per skill level so the inconsistency with this new line made it fail ?

    ...but I already have this post so I might as well ask instead, is that amount (300*skill level) for a max of 1500 safe? Or is there some hardcoded limit to how much can be stored? I think I saw discussions about that but they were ancient, so I wonder how much is safe on this client/server?

  9. Posting here because I have no idea if this is a database, client or source problem.

    When I try to open my guild storage (have the skill and the permission) I see this message on the map server and it fails to open :

    [ERROR] intif_parse_LoadGuildStorage : User Not Found (AID:user's account id)

    I located that function in src but it's unchanged. The update didn't seem to change the kafra npc scripts that I use to open it either. I executed the SQL files in the update folder that were new. There was one file that added a table "guild storage log" but I don't that's related. Any ideas? I can't play like this at all.

    So then I suspected it's the packed version and changed it

    
    /**
     * rAthena configuration file (http://rathena.org)
     * For detailed guidance on these check http://rathena.org/wiki/SRC/config/
     **/
    
    #define PACKETVER 20180620

     Even if I use the new guild storage NPC that came with the update it also doesn't open my storage. Meanwhile char server seems to be spamming that it loaded storage now but it doesn't actually work anyway. (map server sometimes outputs that error message, sometimes not). I can't even open it using a GM command.

    Help please, I can't play like this.

     

    PS : I updated the server to the latest version, the client to 2018-06-20 from here, no idea which is the problem :

  10. It seems that my updated client is actually working as intended (until it crashes again for another reason but let's hope there is no more of that) but I still have one major problem.

    How do I merge my custom item descriptions (I changed the effects of about 500 standard items so far, mostly outdated, weak cards and weapons) into the new file automatically? Manual is obviously not an option for this quantity of text... how to people do this normally? I assume I do need the updated file and can't just use the old one because there are likely new items added? It also seems to have some other changes, like each entry now has costume=false on it which my old file doesn't have.

    Also, this new client seems to show "there was an error when loading data account settings (please restart to retry)", does that mean anything? I logged in fine so there can't be a problem with loading accounts...

  11. Updating through TortoiseGit seems to have worked EXCEPT I can't find out how to resolve the conflicts in the mobdb file. For the time being I discarded my existing item drop  changes to test the update but eventually I need to find a tool that can show me the differences between the two files by column, not only rows. It doesn't help if I get told "every line is different" well, sure it will be : every monster's atk and matk was updated. I'd like to know which of those lines have differences in the item drop column or in general, which column... is there such a tool somewhere that I'm unaware of? Just showing me the two files side by side and only the different fields within each line is marked red instead of the whole  line? Then I could copy those missing values separately, there aren't all that many...yet. Later though... let's hope there will be no more updates where every monster changes at the same time ? (and yes, git did mark what's different but it did so in the "here these 50 lines are different..well 2 of them somewhere in the middle, have fun with that and there are another 20 blocks like that" way which is completely useless)

    btw, the "pull" option in visual studio 2013 didn't work, had to use the external TortoiseGit.  Haven't dared to try updating the client yet. Probably should...

    So, removed the recalculations for rwh.watk and watk2 I added as it shouldn't be necessary with this update installed. I left the effect in both the batk and watk recalculations just to be safe - mobs aside there might be other unit types where watk is still relevant. I can confirm that it works as intended now.

    Conclusion, that linked update fixed this bug but it certainly existed before (and it was way worse in fact, monsters had incorrect base atk and matk as well).

    Now, I need to find a way to fix my mobdb and hope the update didn't break anything else. And update the client...

    Edit : client update seems to be working so far. I have the same question though, how do I merge my item description and skill description changes with it? I don't suppose I have to copy-paste the hundreds of entries manually, what tool do people use for this? (at least, comparing files shows the actual differences here...but there are many of them. Changed like 500+ items already...) ...or not, pressing alt-s instantly crashed my client. Maybe the update isn't successful at all...

    whatever, I'll use the old client. Is it safe to do that with the new server?

    Nevermind, that belongs to client support, asked it there instead.

     

  12. This is in the conf.

    // For RENEWAL_CAST (Note 2)
    // By default skill that has '0' value for Fixed Casting Time will use 20% of cast time
    // as Fixed Casting Time, and the rest (80%) as Variable Casting Time.
    // Put it 0 to disable default Fixed Casting Time (just like -1 is the skill_cast_db.txt).
    default_fixed_castrate: 20

    I assumed this does the following :

    fixed cast time in db=0 and this option = 0 then fixed cast time = 0

    fixed cast time in db=x and this option = 0 then fixed cast time = x

    fixed cast time in db=x and this option = y then fixed cast time = x anyway

    fixed cast time in db=0 and this option = y then fixed cast time = variable casting time * y%

    However I had this set to 0 probably by accident, and it made Arrow Repel (1500 ms in skill database) instant cast. Bug, or does this do something completely different than what I think?

     

  13. No, I am using renewal. It's the 6 months old version as you are already aware. So maybe this bug was fixed during these 6 months?

    Let's see, https://github.com/rathena/rathena/blob/master/src/map/status.cpp

    no it's the same as my file at least that part. Okay so here is what I see, this is for a ghoul  - as you can see, batk, watk and watk2 are unused. If it is working on your side then your monsters are storing their attack in a different variable which sounds... unusual at the very least. Can you put a breakpoint at the same position and check? (make sure it's not the player character's stats being calculated).

    If the script command fetches the stats from rhw, that seems to indicate it is stored there, so if it worked for you despite that, you might have the recalculation procedure already called for those variables elsewhere. I don't see one in the latest status.cpp but you might have one anyway in yours, or it might be in other files.

    btw when saying " I needed to read their attack for the AI to decide when to use safety wall " I meant I already had to access md->status.rhw.atk from the AI (which is in c++, not script) so I already knew the attack was in those variables, it wasn't a question. I haven't dared to try learning how to script yet, I have my hands full already, but thanks anyway, might be useful in the future ?

    While at the moment it works for both of us, probably for different reasons, we really should try to figure out if there is a bug in master or not.

    bugreport.png

  14. Oh so it is a bug, I see. It seems to be divest weapon only - curse and other -atk effects I found are  properly present in both the watk and matk  function. I guess people don't divest monsters much so it wasn't noticed.

    I tried moving it to batk and it works even less - batk isn't even called for the monsters.

    Wait, I don't think monsters have batk. I'm pretty sure their attack was stored in md->status.rhw.atk and atk2 while stats.batk and status.watk were zeroes. I needed to read their attack for the AI to decide when to use safety wall. I see this :

    	if(flag&SCB_BATK && b_status->batk) {
    		status->batk = status_base_atk(bl,status);
    		temp = b_status->batk - status_base_atk(bl,b_status);
    		if (temp) {
    			temp += status->batk;
    			status->batk = cap_value(temp, 0, USHRT_MAX);
    		}
    		status->batk = status_calc_batk(bl, sc, status->batk);
    	}
    
    	if(flag&SCB_WATK) {
    #ifndef RENEWAL
    		status->rhw.atk = status_calc_watk(bl, sc, b_status->rhw.atk);
    		if (!sd) // Should not affect weapon refine bonus
    			status->rhw.atk2 = status_calc_watk(bl, sc, b_status->rhw.atk2);
    
    		if (sd && sd->bonus.weapon_atk_rate)
    			status->rhw.atk += status->rhw.atk * sd->bonus.weapon_atk_rate / 100;
    		if(b_status->lhw.atk) {
    			if (sd) {
    				sd->state.lr_flag = 1;
    				status->lhw.atk = status_calc_watk(bl, sc, b_status->lhw.atk);
    				sd->state.lr_flag = 0;
    			} else {
    				status->lhw.atk = status_calc_watk(bl, sc, b_status->lhw.atk);
    				status->lhw.atk2= status_calc_watk(bl, sc, b_status->lhw.atk2);
    			}
    		}
    #else
    		if(!b_status->watk) { // We only have left-hand weapon
    			status->watk = 0;
    			status->watk2 = status_calc_watk(bl, sc, b_status->watk2);
    		}
    		else status->watk = status_calc_watk(bl, sc, b_status->watk);
    #endif

     

    So there are 3 different attack stats I see in the status structure.

    batk I think this is what I know under the name Status Attack, basically what comes from the players stat points.

    watk, watk2 are the min and max weapon attack for renewal players.

    lhw and rhw are the the min and max weapon attack for nonrenewal players and rhw is for both renewal and nonrenewal monsters, is that right?

    If yes then the calc watk should be called for rhw even when Renewal is defined otherwise all non-player units will never get their atk updated from any effect. That's a pretty serious bug there if I'm right. How did no one notice that, are players really never buffing or debuffing monsters? Or is this actually the official behavior and monsters aren't affected by those effects since renewal? That would be strange too.

    If my theory is right, then adding

            status->rhw.atk = status_calc_watk(bl, sc, b_status->rhw.atk);
            status->rhw.atk2 = status_calc_watk(bl, sc, b_status->rhw.atk2);

    should fix the problem. Please let me know if that's correct,and won't have unintended side effects on players who I believe aren't supposed to use rhw and lhw under renewal defined?

    ...meanwhile I can confirm that adding those two lines fixes the reduction effect on monsters. I really hope I'm wrong here but if this is what I think it is then no atk buffs and reductions worked on monsters, including their own effects. Aren't there a bunch of MVPs that can buff their ATK? How come no one ever noticed that, this can't be true?

  15. I'm trying to change Signum Cruxis to reduce both atk and def of the targets.

    I added to status_calc_watk :

    	if(sc->data[SC_STRIPWEAPON] && bl->type != BL_PC)
    		watk -= watk * sc->data[SC_STRIPWEAPON]->val2/100;
    	if (sc->data[SC_SIGNUMCRUCIS])
    		watk -= watk * sc->data[SC_SIGNUMCRUCIS]->val2/200;

    and also added the SCB_WATK flag :

    	set_sc( AL_CRUCIS		, SC_SIGNUMCRUCIS	, EFST_CRUCIS, SCB_DEF|SCB_WATK );

    It doesn't reduce the damage dealt by the affected monster as far as I can tell. I've placed a breakpoint and it actually executes the code, however, watk seems to be zero for every single call which doesn't make much sense to me. Am I doing something wrong? I did exactly the same thing STRIPWEAPON does...so if this isn't working wouldn't that mean that status is broken too?... I tested just in case and yes, divest doesn't seem to reduce the damage I take from spawned ghouls either.

  16. So, if I understand this right, what I'm looking for is not implemented? I guess I just have to be careful not to shut down the server while I'm trying to kill things then.

    What's the behavior of boss spawns on server start? Do they spawn immediately, or later? I want to avoid the situation where I start playing and there is nothing to kill, so if they spawn later, I need to somehow change that. If it's always immediate, I'm ok with that.

    (also, what is spawning mobs on playerless maps good for? Is there something I'm missing, I don't see the point? )

  17. I tried looking for information but didn't really  find much. I play alone on an offline server which is turned off whenever I'm not playing (and also restarted a lot while playing at least while I manage to set everything up perfectly) so this matters. I think dynamic_mobs is the setting I'm looking for but I have no idea what the yes and no options mean.

    So, if I want my map to start in the same state (same monsters on the same location with same hp remaining) it was when I shut the server down, do I set this to yes, no or do I need to change a different option? In particular for boss monsters, I guess normal mobs don't matter. I better make this clear before I try hunting for MVPs...

    (assuming I properly shut down using @mapexit ofc)

    ...and while on this topic, does the time the server is off count towards respawn times or other time limits (like memorial dungeons) or not?

  18. New problem, even though the AI should and does correctly pick spells of the correct element, in about the same cases that had the walking bug, they use the wrong (default) one. However I think I found what causes that and likely the same thing was responsible for the previous problem - useskillid2 has this in it :

    	// Remember the skill request from the client while walking to the next cell
    	if(src->type == BL_PC && ud->walktimer != INVALID_TIMER && !battle_check_range(src, target, range-1)) {
    		ud->stepaction = true;
    		ud->target_to = target_id;
    		ud->stepskill_id = skill_id;
    		ud->stepskill_lv = skill_lv;
    		return 0; // Attacking will be handled by unit_walktoxy_timer in this case
    	}

    It seems if the character was failing due to range, the skill was queued for later use which is definitely not intended. Which also means skills could pop out of that feature randomly causing the character to use them when not intended by the AI - meaning likely neither canskill() nor walktobl() had any problems.

    Adding unit_stop_walking(src, 1); before calling skilluseid eliminated the problem. I had the feeling somehow the skill uses don't follow the order in the code but I thought that's impossible - guess not. It really did trigger the buggy skill uses externally from that walk timer.

    So that means I have no question right now, will post again if I run into any other trouble. I'm proud to report my mages can now fight reasonably well on their own using the 3 bolt spells and frost diver, and now that the basics work, adding more single target spells should be trivial. AOE might be a bit more complex but I think it won't be that hard, I'm going to use the basic rule of "always target the party leader who, if one exists, is always the tank, and use if affected monster count>=x, probably 2 or 3?". Trying to cast AOE spells on untanked enemies is bad anyway, they will leave the area by the time casting completes.

  19. Yes, exactly those 2 tools.

    Oh, so the possibility of the procedure being broken exists? I think the best workaround might be to walk to that position then, not the actual player. This is executed often so it's not a problem, it should be able to follow properly anyway.

    I looked at hercules but the source for walktobl seems to be identical (aside from minor syntax differences).

    I replaced the line with

                unit_walktoxy(&sd->bl, targetbl->x, targetbl->y, 8);

    and that seems to be working correctly. I do have a different problem though, despite specifying 8 and having

    official_cell_stack_limit: 1
    custom_cell_stack_limit: 1

    the two characters following the party leader seems to be on the same cell most of the time. They correctly avoid the leader's tile but not each other - I guess they enter the tile simultaneously. Is there a way to fix that? This makes it next to impossible to target them with buffs.

    edit : nevermind the above. I fixed it by picking the tile to go to at random so they don't all try to go to the same place.

    			if ((abs(sd->bl.x - targetbl->x)>2) || abs(sd->bl.y - targetbl->y)>2)
    			unit_walktoxy(&sd->bl, targetbl->x + rand() % 5 - 2, targetbl->y + rand() % 5 - 2, 8);

    So the only remaining question is, is ((sd->ud.skilltimer == INVALID_TIMER) && (DIFF_TICK(gettick(), sd->ud.canact_tick) >= 0)) to check if the character is not being busy casting a spell already wrong? If it's not wrong, walking couldn't have happened after the spell target was set so it must be. I guess it isn't important now that it doesn't break targeting but I'd like to know. Not going through with all the additional spells and walking checks when not able to do them should save server CPU time. I will run many clients and the server on the same computer so I actually care about that.

×
×
  • Create New...