Ok, here's the diff for hpmax. You will need this SQL:
And here's the diff, including the previous post. All of this is done on r830.
Code:
Index: beacon.cpp
===================================================================
--- beacon.cpp (revision 830)
+++ beacon.cpp (working copy)
@@ -45,7 +45,7 @@
:Mob
(
NULL, NULL, 0, 0, 0, INVISIBLE_MAN, 0, BT_NoTarget, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
),
remove_timer(lifetime),
spell_timer(0)
Index: client.cpp
===================================================================
--- client.cpp (revision 830)
+++ client.cpp (working copy)
@@ -137,7 +137,9 @@
0,
0,
0, // qglobal
- 0 //Drakelord: slow_mitigation
+ 0, //Drakelord: slow_mitigation
+ 0, //Secrets: Maxlevel
+ 0 //Secrets: HPMax
),
//these must be listed in the order they appear in client.h
@@ -933,6 +935,7 @@
void Client::ChannelMessageSend(const char* from, const char* to, int8 chan_num, int8 language, int8 lang_skill, const char* message, ...) {
if ((chan_num==11 && !(this->GetGM())) || (chan_num==10 && this->Admin()<80)) // dont need to send /pr & /petition to everybody
return;
+
va_list argptr;
char buffer[4096];
Index: mob.cpp
===================================================================
--- mob.cpp (revision 830)
+++ mob.cpp (working copy)
@@ -96,7 +96,9 @@
sint16 in_hp_regen,
sint16 in_mana_regen,
int8 in_qglobal,
- float in_slow_mitigation //Drakelord: Allows for mobs to mitigate how much they are slowed.
+ float in_slow_mitigation, //Drakelord: Allows for mobs to mitigate how much they are slowed.
+ int8 in_maxlevel,
+ sint32 in_hpmax
) :
attack_timer(2000),
@@ -214,6 +216,8 @@
mana_regen = in_mana_regen;
oocregen = RuleI(NPC, OOCRegen); //default Out of Combat Regen
slow_mitigation = in_slow_mitigation;
+ maxlevel = in_maxlevel;
+ hpmax = in_hpmax;
invisible = false;
invisible_undead = false;
invisible_animals = false;
Index: mob.h
===================================================================
--- mob.h (revision 830)
+++ mob.h (working copy)
@@ -389,7 +389,9 @@
sint16 in_hp_regen,
sint16 in_mana_regen,
int8 in_qglobal,
- float in_slow_mitigation //Drakelord: Allows for mobs to mitigate how much they are slowed.
+ float in_slow_mitigation, //Drakelord: Allows for mobs to mitigate how much they are slowed.
+ int8 in_maxlevel,
+ sint32 in_hpmax
);
virtual ~Mob();
@@ -1082,6 +1084,8 @@
sint16 mana_regen;
sint32 oocregen; //Out of Combat Regen, % per tick
float slow_mitigation; //Allows for a slow mitigation based on a % in decimal form. IE, 1 = 100% mitigation, .5 is 50%
+ int8 maxlevel;
+ sint32 hpmax;
Buffs_Struct buffs[BUFF_COUNT];
StatBonuses itembonuses;
StatBonuses spellbonuses;
Index: npc.cpp
===================================================================
--- npc.cpp (revision 830)
+++ npc.cpp (working copy)
@@ -103,7 +103,9 @@
d->hp_regen,
d->mana_regen,
d->qglobal,
- d->slow_mitigation ),
+ d->slow_mitigation,
+ d->maxlevel,
+ d->hpmax),
attacked_timer(CombatEventTimer_expire),
swarm_timer(100),
classattack_timer(1000),
@@ -125,7 +127,30 @@
NPCTypedata_ours = NULL;
respawn2 = in_respawn;
swarm_timer.Disable();
-
+ // sanity check for lazy people
+ if(hpmax < max_hp) {
+ sint32 tmp = max_hp;
+ hpmax = tmp;
+ }
+
+ // sanity check for lazy people
+ if(maxlevel < moblevel) {
+ int8 tmp = moblevel;
+ maxlevel = tmp;
+ }
+ //maxlevel stuff
+ if(maxlevel)
+ {
+ level = (MakeRandomInt(moblevel, maxlevel));
+ }
+ if(hpmax)
+ {
+ max_hp = (MakeRandomInt(max_hp, hpmax));
+ base_hp = max_hp;
+ cur_hp = max_hp;
+ }
+
+
taunting = false;
proximity = NULL;
copper = 0;
@@ -249,6 +274,25 @@
accuracy_rating = d->accuracy_rating;
ATK = d->ATK;
+ //defaults for maxlevel
+
+ if (!ATK || ATK == 0)
+ ATK = (moblevel * 5); // attack is typically higher than stats, should make this a rule because it can and will change depending on server
+ if (!STR || STR == 0)
+ STR = 75; // these need to be reworked, till then use it on trash mobs
+ if (!STA || STA == 0)
+ STA = 75;
+ if (!DEX || DEX == 0)
+ DEX = 75;
+ if (!AGI || AGI == 0)
+ AGI = 75;
+ if (!INT || INT == 0)
+ INT = 75;
+ if (!WIS || WIS == 0)
+ WIS = 75;
+ if (!CHA || CHA == 0)
+ CHA = 75;
+
CalcMaxMana();
SetMana(GetMaxMana());
@@ -308,19 +352,20 @@
FR = d->FR;
PR = d->PR;
- if (!MR)
+ if (!MR || MR == 0)
MR = (moblevel * 11)/10;
- if (!CR)
+ if (!CR || CR == 0)
CR = (moblevel * 11)/10;
- if (!DR)
+ if (!DR || DR == 0)
DR = (moblevel * 11)/10;
- if (!FR)
+ if (!FR || FR == 0)
FR = (moblevel * 11)/10;
- if (!PR)
+ if (!PR || PR == 0)
PR = (moblevel * 11)/10;
npc_aggro = d->npc_aggro;
+
AI_Start();
d_meele_texture1 = d->d_meele_texture1;
Index: PlayerCorpse.cpp
===================================================================
--- PlayerCorpse.cpp (revision 830)
+++ PlayerCorpse.cpp (working copy)
@@ -198,7 +198,7 @@
in_npc->GetHeading(),in_npc->GetX(),in_npc->GetY(),in_npc->GetZ(),0,
in_npc->GetTexture(),in_npc->GetHelmTexture(),
0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0),
+ 0,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0),
corpse_decay_timer(in_decaytime),
corpse_delay_timer(RuleI(NPC, CorpseUnlockTimer)),
corpse_graveyard_timer(0)
@@ -294,6 +294,8 @@
0,
0,
0, // qglobal
+ 0,
+ 0,
0 //Drakelord: slow_mitigation
),
corpse_decay_timer(RuleI(Character, CorpseDecayTimeMS)),
@@ -403,7 +405,7 @@
: Mob("Unnamed_Corpse","",0,0,in_gender, in_race, in_class, BT_Humanoid, in_deity, in_level,0, in_size, 0, in_heading, in_x, in_y, in_z,0,in_texture,in_helmtexture,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0xff,
- 0,0,0,0,0,0,0,0),
+ 0,0,0,0,0,0,0,0,0,0),
corpse_decay_timer(RuleI(Character, CorpseDecayTimeMS)),
corpse_delay_timer(RuleI(NPC, CorpseUnlockTimer)),
corpse_graveyard_timer(RuleI(Zone, GraveyardTimeMS))
Index: zonedb.cpp
===================================================================
--- zonedb.cpp (revision 830)
+++ zonedb.cpp (working copy)
@@ -1065,7 +1065,9 @@
"npc_types.see_improved_hide,"
"npc_types.ATK,"
"npc_types.Accuracy,"
- "npc_types.slow_mitigation";
+ "npc_types.slow_mitigation,"
+ "npc_types.maxlevel,"
+ "npc_types.hpmax";
MakeAnyLenString(&query, "%s FROM npc_types WHERE id=%d", basic_query, id);
@@ -1229,6 +1231,8 @@
tmpNPCType->ATK = atoi(row[r++]);
tmpNPCType->accuracy_rating = atoi(row[r++]);
tmpNPCType->slow_mitigation = atoi(row[r++]);
+ tmpNPCType->maxlevel = atoi(row[r++]);
+ tmpNPCType->hpmax = atoi(row[r++]);
// If NPC with duplicate NPC id already in table,
// free item we attempted to add.
Index: zonedump.h
===================================================================
--- zonedump.h (revision 830)
+++ zonedump.h (working copy)
@@ -111,6 +111,8 @@
bool findable; //can be found with find command
bool trackable;
float slow_mitigation; //Drakelord: Slow mitigation % in decimal form.
+ int8 maxlevel;
+ sint32 hpmax;
};
struct ZSDump_Spawn2 {
This will not affect any previous mobs. The only thing it will effect is things with the hpmax field. Same goes for maxlevel.