View Single Post
  #3  
Old 08-01-2009, 11:44 PM
Secrets's Avatar
Secrets
Demi-God
 
Join Date: May 2007
Location: b
Posts: 1,449
Default

Ok, here's the diff for hpmax. You will need this SQL:

ALTER TABLE `npc_types` ADD COLUMN `hpmax` tinyint NOT NULL DEFAULT 0;

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.
Reply With Quote