Jump to content

Seravy

Members
  • Posts

    176
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Seravy

  1. 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.
  2. 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?
  3. 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?
  4. 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.
  5. 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)
  6. 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?
  7. 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 :
  8. 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...
  9. 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.
  10. I bet it's because I don't yet have this : https://github.com/rathena/rathena/commit/fe197bfa120aef5fd31c6896122b35fdc06774b4#diff-acba7818fb777457f5cbbcea9293f9c4 Maybe I should try to find a way to update my files anyway, this seems to also fix that "monsters have too low matk" bug which seems to be a very big deal. I better make a complete backup first...
  11. 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?
  12. 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.
  13. 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?
  14. Thanks, that made it clear!
  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. I think it might be a good idea to make the AI sit down when the party leader does the same to help recover SP. I did find pc_forcestand but what do I call to make one sit down?
  19. Wouldn't that mean you have access to less variables and thus the AI has to be dumber? Either way that's beyond my ability and unnecessary for a server only a single person is playing on - maybe once the feature is complete, someone else can improve it.
  20. 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.
  21. 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.
  22. I have a new problem. I've been using this to execute skills when possible only and so far it worked fine but on the Cold Bolt spell it makes the character cast the spell on the party leader. I'm 95% sure it only happens if the enemy is far enough, either on the edge of the range or outside (spell is range 9 and I'm fetching targets from an area of 9, but when reducing that to 6 the problem didn't show up.) so there must be something wrong here that causes targeting to get misdirected in those cases. Any idea? I need the targeting range for finding the target to be higher because it'll be global for all single target skills - executing target finding for every single skill individually seemed to cause too much lag and is wasteful - we want the nearest regardless of which skill it is. Also the range of spells might be changed by users so better not assume a fixed value. void unit_skilluse_ifable(struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv) { struct map_session_data *sd = (struct map_session_data*)src; int inf = skill_get_inf(skill_id); unsigned int tick = gettick(); if (skill_get_sp(skill_id, skill_lv)>sd->battle_status.sp) return; if (battle_config.idletime_option&IDLE_USESKILLTOID) sd->idletime = last_tick; if ((pc_cant_act2(sd) || sd->chatID) && skill_id != RK_REFRESH && !(skill_id == SR_GENTLETOUCH_CURE && (sd->sc.opt1 == OPT1_STONE || sd->sc.opt1 == OPT1_FREEZE || sd->sc.opt1 == OPT1_STUN)) && sd->state.storage_flag && !(inf&INF_SELF_SKILL)) //SELF skills can be used with the storage open, issue: 8027 return; if (pc_issit(sd)) return; if (skill_isNotOk(skill_id, sd)) return; if (sd->bl.id != target_id && inf&INF_SELF_SKILL) target_id = sd->bl.id; // never trust the client if (target_id < 0 && -target_id == sd->bl.id) // for disguises [Valaris] target_id = sd->bl.id; if (sd->ud.skilltimer != INVALID_TIMER) { if (skill_id != SA_CASTCANCEL && skill_id != SO_SPELLFIST) return; } else if (DIFF_TICK(tick, sd->ud.canact_tick) < 0) { if (sd->skillitem != skill_id) { clif_skill_fail(sd, skill_id, USESKILL_FAIL_SKILLINTERVAL, 0); return; } } if (sd->sc.option&OPTION_COSTUME) return; if (sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id)) return; // On basilica only caster can use Basilica again to stop it. if (sd->menuskill_id) { if (sd->menuskill_id == SA_TAMINGMONSTER) { clif_menuskill_clear(sd); //Cancel pet capture. } else if (sd->menuskill_id != SA_AUTOSPELL) return; //Can't use skills while a menu is open. } if (sd->skillitem == skill_id) { if (skill_lv != sd->skillitemlv) skill_lv = sd->skillitemlv; if (!(inf&INF_SELF_SKILL)) pc_delinvincibletimer(sd); // Target skills thru items cancel invincibility. [Inkfish] unit_skilluse_id(&sd->bl, target_id, skill_id, skill_lv); return; } sd->skillitem = sd->skillitemlv = 0; if (SKILL_CHK_GUILD(skill_id)) { if (sd->state.gmaster_flag) skill_lv = guild_checkskill(sd->guild, skill_id); else skill_lv = 0; } else { skill_lv = min(pc_checkskill(sd, skill_id), skill_lv); //never trust client } pc_delinvincibletimer(sd); unit_skilluse_id(src, target_id, skill_id, skill_lv); return; } Edit : I added a redundant range check just in case, copied directly from within unit_skilluse_id and it didn't fix the problem. So range probably isn't the problem but then I have absolutely no idea how it could end up targeting the wrong unit. struct unit_data *ud; int combo = 0, range; ud = unit_bl2ud(src); block_list * target = map_id2bl(target_id); if (src->id != target_id) { range = skill_get_range2(src, skill_id, skill_lv, true); if (!battle_check_range(src, target, range)) return; } Edit : I added some checks for the target being a player outputting an error and they didn't trigger. So I think we can rule out the possibility of the target being wrong to begin with. I decided to try a drastic measure - I commented out everything except the 3 bolt spells. That seems to have removed the problem so something must be somewhere that's overwriting my target after the spell was already started. The character doesn't actually have other skills so the only real suspect from all of that is walking to the party leader. Which shouldn't even get executed when the character is busy, making this weird. ...yes, uncommenting the other spells is still working without problems. So the problem must be caused by the walking. ... // this is after the spell(s) were used, at the very end if (canskill(sd)) { // Skills to use when not in battle go here skillwhenidle(sd); // this one did not produce the problem // Follow the leader int party_id, type = 0, i = 0; struct party_data *p; party_id = sd->status.party_id; p = party_search(party_id); if (p) //Search leader for (i = 0; i < MAX_PARTY && !p->party.member[i].leader; i++); if (!p || i == MAX_PARTY) { //leader not found //ShowError("No party leader to follow!"); foundtargetID = -1; } else { targetthis = p->party.member[i].char_id; foundtargetID = -1; map_foreachinmap(targetthischar, sd->bl.m, BL_PC, sd); } if (foundtargetID > -1) { unit_walktobl(&sd->bl, targetbl, 2, 0); } // Party leader left map? else { foundtargetID = -1; targetdistance = 999; // target nearest NPC. Hopefully it's the warp the leader entered. map_foreachinmap(targetnearestwarp, sd->bl.m, BL_NPC, sd); if (foundtargetID > -1) { unit_walktobl(&sd->bl, targetbl, 2, 0); } } } ... bool canskill(struct map_session_data *sd) { return ((sd->ud.skilltimer == INVALID_TIMER) && (DIFF_TICK(gettick(), sd->ud.canact_tick) >= 0)); }; int targetthischar(block_list * bl, va_list ap) { struct map_session_data *sd = (struct map_session_data*)bl; struct map_session_data *sd2; sd2 = va_arg(ap, struct map_session_data *); // the player autopiloting if ((sd->status.char_id == targetthis) && (path_search(NULL, sd2->bl.m, sd2->bl.x, sd2->bl.y, bl->x, bl->y, 0, CELL_CHKWALL))) { targetbl = bl; foundtargetID = bl->id; }; return 0; } What all of that means is the canskill function has to be wrong, as well as walktobl overriding the spell target. Otherwise I have no idea how it can happen. ...confirmed, if I remove nothing but the unit_walktobl(&sd->bl, targetbl, 2, 0); function call the bug disappears. So it has to be the one overriding the spell target somehow. Is there another one I can call that's safer? Also if that isn't the correct way to make sure the character isn't already using a skill, then what else should I put into canskill()?
  23. No, I mean, other than locating and pasting the 1000 changed lines of my itemdb manually, what do I do to have it happen automatically, and would the editor tool actually edit the data in those files for me as if they were still in the original files if I do it? If not, I'm better off not using the imports...
  24. No, I meant the import folders in the conf and db and npc folders. For example I already (mostly) finished changing stats on about 1k items - cards, equips, etc. Is there an option in Server Database Editor that says "put those into the db\import\itemwhatever.txt files"? (Is it even a good idea to use those? I feel the risk of inconsistency = chance of editing the wrong file is way too high) I probably won't have too many changes in src to worry about conflicts there, and they likely won't be hard to resolve - assuming VS2013 actually has a proper conflict resolution interface which I'm not sure about. The other part of updating that worries me is the client. I added and changed a lot of files there, in various grf files, and even have some of them extracted in the data folder.
  25. I don't see an option to make patch files in VS2013. In fact as far as I remember from the last project, the whole point of using Git was to not need patch files, those were an svn thing. Instead, branches... so basically I need to make a new branch, with only the related commits somehow if I understand the logic of how this should work, then push that branch to a fork (so I guess I can't avoid setting that up somehow either). Now the problem is I don't see almost any of the usual options in VS. No checkout, no nothing. My first encounter with Git was a year ago so I don't remember all that much details either. I have more important things to do than experimenting with this anyway, for example actually completing the feature. We still only have one and a half 1st job class worth of skills implemented. I wasn't originally planning to update more often than like once every 2 years or something. Resolving conflicts sounds like a pain with the amount of changes I'm doing to the items, monsters, and everything. Meanwhile I found those import folders, that seems like a great idea to use but I don't see an option in this "Server Database Editor" tool to actually put the changes into those files. It might be able to do that but I'm unsure. If you can show me an option that does a one click "put all the changes into the import folders", updating becomes a more viable option. Even then it means I have to actually process all the new stuff and adjust them to my needs, items, drops, everything. Not the thing I'm after when I still haven't even finished doing that to the existing stuff... Not to mention I started this because I wanted to take it easy and have a place where I don't need to worry about anything except myself. So if you want that patch, you have to be patient, it's not my top priority right now, sorry about that. Now the good news, I made some good progress. Pneuma is working now, which means I can now implement ground skills without a problem. I also figured out I was calling the wrong path procedure which was causing my characters to sometimes lose sight of their target. To be fair it was kinda fun that way, felt more like a real human player, sometimes moving randomly or getting lost, but I think it's better if they don't. Also, I was able to make them follow the party leader into map warps which is a huge convenience improvement. I need to start thinking about how the AI should be dealing with mage spells. When to use faster or slower, AOE or single target, which element, etc. This will be a lot more complex than other classes. Also, this might actually result in something really scary. At this rate the AI might become a more reliable party member than real people - that's not very healthy for an online server.
×
×
  • Create New...