|
|
 |
 |
 |
 |
|
 |
 |
|
 |
 |
|
 |
|
Archive::Development Archive area for Development's posts that were moved here after an inactivity period of 90 days. |
 |
|
 |

08-20-2004, 03:09 PM
|
Sarnak
|
|
Join Date: May 2004
Posts: 58
|
|
thanks for the compliments, nice to know someone considers this usefull, anyway heres the progress at the moment, i just completely fixed swarm pets working 100% correctly except the fine details of models/max hit etc, currently i have them labeled as pets, despawning correctly and everything else is done so they no longer can KS players, and work just as they do on live with the exception of gaining a second target when the original target dies, (ok so 99% correct) i'll work on this. i'll put the code on here as soon as i remove all my comments and testing stuff statments.
however it wont be complete because i cant seem to find information anywhere at all on the correct damage and models of the pets, nor information on what exactly the wards cast, so ill just put in a minor list of what i know
mage swarm pets are size 3 earth elementals with a max hit of around 50
wizards = call of xuzl pets, hit 50ish
shaman pets = spirit wolves hit 50ish
mage servant of ro = fire elemental that casts some spell? normal size
PoP pet weapon procs= invis man with the class epic with the exception of the SK weapon which the model is a skeleton, these have a max hit of 90ish
call of wu monk pet proc...whats this one wield, is the epic visable? or does it even wield the epic?
call of time...hearing its somehting that looks like the spear from solusek ro and has a max hit 415?
tricksters calling and stone animation im guessing are NPC spells however if anyone knows details on these please let me know also since their temporary pets also and it would be nice to see them working correctly
swarm of decay...im guessing rooted skeletons with bows?
wards....invis man that casts some unknown spells
should i maybe post these questions in another forum? ive got a lil usefull info from leaving the server up the last 2 days but mainly people just seem to manaburn each other in the arena 2 dozen times and log out.
im also pretty close to the timer check thing to not allow reuse untill the timer has expired but currently its not 100% and causing skills to only be used once per zone
also another problem ive found is that the spell ids change with each patch and when the server and client list dont match this causes issues and while the spell ids are in the code itself its kinda useless, i cant think of anything to correct the mismatch of client/server however the IDs need to be removed from the code so i was wanting to put in another column in alt_vars with the spell ids for each skill along side their cost and max level this way as the server is updated people could use an sql file to make AAs work with the new spells lists, however currently im not too sure how to do this. but plan to work on it, however if anyone else has done this or wants to feel free, id appreciate it
anyway thats all for now ill work on getting the swarm code cleaned up a bit and working more like normal pets and post is a lil later
|
 |
|
 |

08-20-2004, 03:50 PM
|
Sarnak
|
|
Join Date: Aug 2004
Posts: 32
|
|
If it's helpful any, my bard pet weapon (Coral Hilted Shortsword) proc'd a pet which hit for 94 maximum. It may have been 96, but I am unsure. I am completely positive that it hit for at least 94. The pet also kicks and bashes, but I cannot remember those damage numbers offhand.
If you need any info with the pet weapon, give me a shout and I can test it in game.
I would assume the other pet weapons follow this damage pattern as well.
|

08-20-2004, 06:46 PM
|
Sarnak
|
|
Join Date: May 2004
Posts: 58
|
|
thats what i was looking for, thanks!
|

08-20-2004, 11:13 PM
|
Sarnak
|
|
Join Date: Aug 2004
Posts: 32
|
|
Again, if you need anymore info, shoot me a PM and I can get it for you.
|
 |
|
 |

08-22-2004, 01:46 AM
|
Hill Giant
|
|
Join Date: May 2004
Posts: 238
|
|
Quote:
prevents spell 2821 from being cast, so does anyone know how i could make 2821 an allowable spell for HT since im pretty sure it is correct, but i may be wrong since ive never played an SK myself.
|
try this it kinda defeats teh purpose of having this line in here for those spells but it just allows the spell id u want to get through to work. And yes the HT spell does get more powerful as u get 40+ It also gets alot harder to resist and does a heck of a lot more dmg. My sk at 65 on the emulator only does 700 for an HT at 65 and thats wrong hehe.
Code:
if((spell_to_cast != castspell->spell_id) && (spell_to_cast != 2821)
{
InterruptSpell(castspell->spell_id); //CHEATER!!!
break;
}
Also i've been looking into the pets recently and they're casting warders because there is no data in the DB for it to cast the spell. When it looks in the DB for the correct pet it cant find it and casts a default pet spell. I'm not sure where thats located in the code or even if its in the db. I can look around a little and see if that helps.
|
 |
|
 |
 |
|
 |

08-22-2004, 02:58 AM
|
Sarnak
|
|
Join Date: May 2004
Posts: 58
|
|
the pet code is in zone\spells.cpp and it has defaults for anything thats not already listed in "pets" in the DB, i think you may be mistaken as to what i was speaking of, of wards, i meant the wards that are summoned for the AA skills such as ward of destructions and others, clerics and shaman get ones that casts an AE heal for a duration of time and wizards get one that does damage and maybe a few other classes ive forgoten at the moment.
ive also been told of a bug with some pets spawning level 200+ which i'll look into sometime since ive become quite familiar with the whole pet making process due to the swarm pets, also as an update to those, sorry no code yet but i found a new bug with them, currently if you have a pet and use them your real pet despawns with them, im working on correcting this atm but not making much progress. my newest plan is to try and find a way to add an extra spot or use an unknown as a swarm pet ID in the player profile to solve the problem of pets questioning whom their owner is and then despawning, although im not all too sure if thats even possible, regardless currently its not quite right and its a lot of code which ive already completely redone 3 times nows and still having problems so id rather not waste another full page on this thread for something that i may redo tommorow, if anyone wants to play with their current state you can log into my server ive had up a few days now and i guess ill keep up awhile longer as its been rather usefull for gathering information on many of the AA skills, or PM me and ill send you the current codes ive got.
also, has anyone fixed this items vanishing bug when you zone? im hearing its a common bug but i havent had much luck correcting it yet. anyway thats all for now.
|
 |
|
 |

08-22-2004, 05:11 AM
|
Demi-God
|
|
Join Date: May 2004
Posts: 1,177
|
|
rangerdown posted a fix for the pets spawning uber. for 1 pet the summoned mistwalker. perhaps the same logic could be used to fix the others. i beleive its in the bug forums somewhere
|

08-22-2004, 05:44 AM
|
Hill Giant
|
|
Join Date: May 2004
Posts: 238
|
|
Quote:
i think you may be mistaken as to what i was speaking of, of wards
|
Hehe Yes i was i dunno what i was thinking doh. =P[/code]
|
 |
|
 |

08-23-2004, 03:02 PM
|
Sarnak
|
|
Join Date: May 2004
Posts: 58
|
|
here a solution to the overpowered pets bug/problem, i havent seen rangerdown's post so sorry if its the same thing, anyway this will simply making any pet thats unknown to the code/database, a lev 10 gnome with a max hit of 10 and display a message in zone.exe stating the character id of the caster and the spell id used with the unknown pet so that you can go through and update them. im not exactly sure how the exsisting code for default pets was supposed to work however it seems it was getting the raw information from the spell being cast and trying to create a pet from that, maybe the way pet spells are made have been changed? dont know, anyway it was multiplying things it shouldnt have in an attempt to make a pet from the spell data and well wasnt working correctly, thus we had lev 200+ pets.
in zone\spells.cpp around line 6472 if youve been useing any of the other code ive been posting.
otherwise do a search for "spell property testing functions" and scroll up a few lines till you find the default case for for MakePet and replace the exsisting code between "default:" and "break;"
with
Code:
default:
CastToClient()->Message(0,"Unknown Pet Type! Tell your GM to Update! for now enjoy your gimp!");
int chid=CastToClient()->CharacterID();
int spel=casting_spell_id;
cout<<"Unknown pet type being created by Character ID "<<chid<<" in Spell ID "<<spel<<endl;
strcpy(npc_type->name, "Gimpy");
npc_type->size = 2;
npc_type->level = 10;
npc_type->race = 12;
npc_type->gender = 0;
npc_type->texture = 1;
npc_type->min_dmg = 1;
npc_type->max_dmg = 10;
npc_type->max_hp = 200;
break;
excluding the "default:" and "break" of course.
edit- I'll learn to type someday.
|
 |
|
 |

08-23-2004, 03:12 PM
|
Demi-God
|
|
Join Date: May 2004
Posts: 1,177
|
|
why gnome? make it a puppy or a rat. =D
|
 |
|
 |

08-23-2004, 07:09 PM
|
Sarnak
|
|
Join Date: May 2004
Posts: 58
|
|
puppy > gnome. just cant touch the gimpness that is gnomes, anyway uh heres a few other AAs, and im redoing manaburn and lifeburn so their pvpable will update that in a moment. swarm pets still buggy so no code yet but ive almost got enough information from people that their all the correct models now. no luck on the wards yet...
redid SK weapon proc buffs to make them work correctly.
soul abrasion.
healing adept.
advanced healing adept.
healing gift.
advanced healing gift.
casting fury.
fury mastery.
fury of magic mastery.
theft of life.
removed the FD effect of lifeburn server side which was causing issues.
added a message to heals for caster and target.
zone\spells.cpp search for " nukes, heals; also "
and replace the exsisting case: SE_CurrentHP with
Code:
case SE_CurrentHP: // nukes, heals; also regen/dot if a buff
{
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Current Hitpoints: %+i", effect_value);
#endif
// SE_CurrentHP is calculated at first tick if its a dot/buff
if (buffslot >= 0)
break;
// for offensive spells check if we have a spell rune on
sint32 dmg = effect_value;
if(dmg < 0)
{
// take partial damage into account
dmg = (int) (dmg * partial / 100);
if (caster && caster->IsClient())
{
dmg = caster->GetActSpellValue(spell_id, dmg);
//Dook- Soul Abrasion, 3 levs, increase self buff procs damage 40% each
if(caster->CastToClient()->GetAA(89))
{
if((spell_id==2718) ||
(spell_id==2712) ||
(spell_id==1471) ||
(spell_id==3228) ||
(spell_id==4910) ||
(spell_id==4908))
{
uint8 lev=0;
lev=caster->CastToClient()->GetAA(89);
if(lev==1){dmg=dmg*1.67;}
else if(lev==2){dmg=dmg*2.34;}
else if(lev==3){dmg=dmg*3.01;}
}
}
//spell crits
int chance = 0;
float ratio =1.0;
//normal spell crit for wizards
if(caster_level >= 11 && caster->GetClass() == WIZARD)
{
chance+= 7;
ratio +=.15;
}
//spell casting fury, fury mastery, and fury of magic mastery. Dook-
uint8 scf = 0;
uint8 scfm = 0;
uint8 cfom = 0;
uint8 fomm = 0;
uint8 cfomm = 0;
scf = caster->CastToClient()->GetAA(23);
scfm = caster->CastToClient()->GetAA(114);
cfom = caster->CastToClient()->GetAA(215); //cleric
fomm = caster->CastToClient()->GetAA(216);
cfomm = caster->CastToClient()->GetAA(260); //cleric only?
if(scf == 1) {chance+=2; ratio += .333;}
if(scf == 2) {chance+=5; ratio += .666;}
if(scf == 3) {chance+=7; ratio += 1.0;}
if(scfm == 1){chance+=3;}
if(scfm == 2){chance+=5;}
if(scfm == 3){chance+=7;}
if(fomm == 1){chance+=2;}
if(fomm == 2){chance+=4;}
if(fomm == 3){chance+=6;}
if(cfom == 1){chance+=2;}
if(cfom == 2){chance+=4;}
if(cfom == 3){chance+=6;}
if(cfomm == 1){chance+=2;}
if(cfomm == 2){chance+=4;}
if(cfomm == 3){chance+=6;}
int r=MakeRandomInt(0,100);
if((r <= chance)&&(spell.targettype!=6))
{
dmg = (int)(dmg * ratio);
entity_list.MessageClose(this, false, 75, 0, "%s delivers a critical blast! (%d)", caster->GetCleanName(), ((dmg)*(-1)));
caster->Message(0,"You deliver a critical blast! (%d)", ((dmg)*(-1)));
}
}
sint32 origdmg = dmg;
dmg = ReduceMagicalDamage(dmg, GetMagicRune());
if (origdmg != dmg && caster)
{
caster->Message(15,
"The Spellshield absorbed %d of %d points of damage",
abs(origdmg - dmg), abs(origdmg));
}
if (dmg == 0) // rune absorbed it all
break;
}
else if(dmg > 0)
{
if (caster && caster->IsClient())
{
dmg = caster->GetActSpellValue(spell_id, dmg);
int dur=spell.buffduration;
//Dook- Healing Adept and Advance Heal Adept
uint8 ha = 0;
ha = caster->CastToClient()->GetAA(18);
if((dur==0)&&(spell_id!=13)&&(ha>=1))
{
uint8 aha = 0;
aha = caster->CastToClient()->GetAA(146);
if(ha==1 && aha==0){dmg=dmg*1.02;}
else if(ha==2 && aha==0){dmg=dmg*1.05;}
else if(ha==3 && aha==0){dmg=dmg*1.10;}
else if(ha==3 && aha==1){dmg=dmg*1.13;}
else if(ha==3 && aha==2){dmg=dmg*1.16;}
else if(ha==3 && aha==3){dmg=dmg*1.19;}
}
//heal crits
int chance = 0;
float ratio =1.0;
//Remove next 5 lines if you dont want innate cleric crit heals
if(caster->GetLevel() >= 11 && caster->GetClass() == CLERIC)
{
chance+= 5;
ratio +=.15;
}
//healing gift, advance HG, Dook-
uint8 hg=0;
uint8 ahg=0;
hg=(caster->CastToClient()->GetAA(19));
ahg=(caster->CastToClient()->GetAA(147));
if(hg == 1){chance+=3; ratio += .333;}
if(hg == 2){chance+=6; ratio += .666;}
if(hg == 3){chance+=10; ratio += 1.0;}
if(ahg == 1){chance+=2;}
if(ahg == 2){chance+=2;}
if(ahg == 3){chance+=2;}
if(MakeRandomInt(0,100) <= chance)
{
dmg = (int)(dmg * ratio);
entity_list.MessageClose(this, false, 75, 0, "%s performs an exception heal! (%d)", caster->GetName(), dmg);
caster->Message(0,"You perform and exceptional heal! (%d)", dmg);
}
}
if(((this->GetHP())+dmg) >= (this->CalcMaxHP()))
{
dmg=((this->CalcMaxHP())-(this->GetHP()));
}
if(this->IsClient())
{
this->Message(1,"%s has healed you for %d point of damage.", caster->GetCleanName(), dmg);
}
if(caster->IsClient())
{
caster->Message(1, "You have healed %s for %d points of damage.", this->GetCleanName(), dmg);
}
}
this->ChangeHP(caster, dmg, spell_id, buffslot);
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Current Hitpoints: %+i actual: %+i", effect_value, dmg);
#endif
break;
}
do a search for "SE_WeaponProc:" and replace exsist case with this
Code:
case SE_WeaponProc:
{
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Weapon Proc: %s (id %d)", spells[effect_value].name, effect_value);
#endif
if(spell_id==2574)//scream of death
{
AddProcToWeapon(2718);
break;
}
if(spell_id==2576)//mental corruption
{
AddProcToWeapon(2712);
break;
}
if(spell_id==1459)//shroud of death
{
AddProcToWeapon(1471);
break;
}
if(spell_id==1376)//shroud of undeath
{
AddProcToWeapon(1471);
break;
}
if(spell_id==1459)//shroud of death
{
AddProcToWeapon(1471);
break;
}
if(spell_id==3227)//shroud of chaos
{
AddProcToWeapon(3228);
break;
}
if(spell_id==4903)//black shroud
{ //procs 4910
AddProcToWeapon(4910); //then 4911 to client
break;
}
if(spell_id==4902)//mental horror
{ //procs 4908
AddProcToWeapon(4908); //then 4909 to the client
break;
}
else
AddProcToWeapon(spell.base[i]);
break;
}
now on to zone\attack.cpp do a search for "if spell is lifetap" and make sure your at the second one around like 1600 something since there seems to be the exact same code in 2 spots for some reason i dont know. replace exsisting to
Code:
// if spell is lifetap add hp to the caster
if (other && IsLifetapSpell( spell_id ))
{
int32 healedhp=damage;
//Dook-Theft of Life
if((other->CastToClient()->GetAA(214)) >= 1)
{
int chance = 101;
float ratio = 0;
int tol=0;
tol=other->CastToClient()->GetAAStruct()->pop_ability.named.theft_of_life;
if(tol==1){chance=97; ratio=1.333;}
if(tol==2){chance=94; ratio=1.666;}
if(tol==3){chance=90; ratio=2.000;}
if((MakeRandomInt(0,100)) >= chance)
{
healedhp=damage*ratio;
entity_list.MessageClose(other,false,75,0,"%s performs an exceptional heal! (%d)",other->GetName(),healedhp);
other->Message(0,"You perform an exceptional heal! (%d)",healedhp);
}
else
{
healedhp=damage;
}
}
// check if healing would be greater than max hp
// use temp var to store actual healing value
if ( other && other->GetHP() + healedhp > other->GetMaxHP()) //healedhp was damage
{
healedhp = other->GetMaxHP() - other->GetHP();
other->SetHP(other->GetMaxHP());
}
else
{
// healedhp = damage; //testing
if(other != 0)
other->SetHP(other->GetHP() + healedhp); //was damage
}
// if client was casting the spell there need to be some messages
if (other->IsClient())
{
other->CastToClient()->Message(4,"You have been healed for %d points of damage.", healedhp);
}
// emote goes with every one ... even npcs
then back into zone\spells.cpp do a search for "SE_FeignDeath"
after the #endif add
Code:
if(spell_id==2488) //Dook- Lifeburn fix
break;
couple more in a few.
|
 |
|
 |

08-24-2004, 12:36 AM
|
Demi-God
|
|
Join Date: Jun 2004
Location: Heaven.
Posts: 1,260
|
|
Quote:
Originally Posted by Branks
puppy > gnome
|
Die!! Gnome > ALL!
__________________
namespace retval { template <class T> class ReturnValueGen { private: T x; public: ReturnValueGen() { x = 0; }; T& Generator() { return x; }; }; } int main() { retval::ReturnValueGen<int> retvalue; return retvalue.Generator(); }
C++ is wonderful.
|

08-24-2004, 01:04 AM
|
Demi-God
|
|
Join Date: May 2004
Posts: 1,177
|
|
is this stuff being added into the CVS ? please say that it is =p
|
 |
|
 |

08-24-2004, 06:01 AM
|
Sarnak
|
|
Join Date: May 2004
Posts: 58
|
|
would be pointless till i get the timers working correctly, for anything other than none legit servers. currently i can put in a check for them each time you zone but they dont refresh so you can only use a skill once per zone. plus all of these need a little finishing touches because i dont know the exact values of some skills and have just gone by "feel" and guesstimates from players.
also ive been looking at the way LoH and HT work and they seem to do the same thing in that they dont update untill you zone. id really like to hear from some of the devs about this since im still extremly newbish with all this and would like to know if ive made any common mistakes and also if it would be a bad thing to have 20 or so timers running for each client in order to make AAs refresh correctly, i had to add a new timers for swarm pets and noticed no performance loss however that was only one timer, would it be an issue to have several running? also is there anywhere i can find a list of the message types in order to properly do messages so that they filter correctly and crits etc dont show up when you use the options to turn them off? anyway in a bit of a rush ill be back in a few hours.
|
 |
|
 |

08-24-2004, 08:44 AM
|
Demi-God
|
|
Join Date: May 2004
Posts: 1,177
|
|
last i heard scorp got timers working correctly... ?? maybe im wrong.
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 12:18 PM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |