After poking around with the new patch, I found a couple small bugs that should probably be addressed. First, skillset allows you to modify any positive array index. Thus you can set the fire breath skill, which corresponds roughly to talks[0] and so on. To fix this either do_skillset needs to be changed toaccept only skill <= MAX_SKILLS or find_skill_num() needs modification. I opted to change the following in do_skillset: Changed modify.c line 135 from: for (i = 0; *spells[i] != '\n'; i++) { to: for (i = 0; i <= MAX_SKILLS; i++) { and changed modify.c line 176 from: if ((skill = find_skill_num(help)) <= 0) { to: if ((skill = find_skill_num(help)) <= 0 || skill > MAX_SKILLS) { This works quite well, I think. If I get time I'll run through the code and see if there are any other places where array boundaries are being over run. The other isn't really a big deal but it annoyed me a bit when I added code to allow builders to set mobile's skills. The culprit is do_restore and the code that sets an immortals skills to 100 and the abils to 25. Since you can't set mob skills in the standard source this may have gone unnoticed, but if abils are used on mobs (I haven't looked at that yet) this could be giving high level mobs a pretty hefty power boost, if a greater god restores them. changed line 1243 from: if ((GET_LEVEL(ch) >= LVL_GRGOD) && (GET_LEVEL(vict) >= LVL_IMMORT)) { to: if ((GET_LEVEL(ch) >= LVL_GRGOD) && !IS_NPC(vict) && (GET_LEVEL(vict) >= LVL_IMMORT)) {
This archive was generated by hypermail 2b30 : 12/07/00 PST