[ScryMUD] SVN Commit Info r759 - branches/people/gingon/weather/mud/grrmud/server

scrymud at wanfear.com scrymud at wanfear.com
Tue Dec 14 20:58:18 PST 2004


Author: gingon
Date: 2004-12-14 20:58:18 -0800 (Tue, 14 Dec 2004)
New Revision: 759

Modified:
   branches/people/gingon/weather/mud/grrmud/server/Makefile
   branches/people/gingon/weather/mud/grrmud/server/classes.cc
   branches/people/gingon/weather/mud/grrmud/server/classes.h
   branches/people/gingon/weather/mud/grrmud/server/command5.cc
   branches/people/gingon/weather/mud/grrmud/server/command5.h
   branches/people/gingon/weather/mud/grrmud/server/commands.cc
   branches/people/gingon/weather/mud/grrmud/server/const.cc
   branches/people/gingon/weather/mud/grrmud/server/const.h
   branches/people/gingon/weather/mud/grrmud/server/critter.cc
   branches/people/gingon/weather/mud/grrmud/server/critter.h
   branches/people/gingon/weather/mud/grrmud/server/door.h
   branches/people/gingon/weather/mud/grrmud/server/gen_cmds.spec
   branches/people/gingon/weather/mud/grrmud/server/misc.cc
   branches/people/gingon/weather/mud/grrmud/server/misc2.cc
   branches/people/gingon/weather/mud/grrmud/server/misc2.h
   branches/people/gingon/weather/mud/grrmud/server/object.cc
   branches/people/gingon/weather/mud/grrmud/server/object.h
   branches/people/gingon/weather/mud/grrmud/server/room.cc
   branches/people/gingon/weather/mud/grrmud/server/room.h
Log:
Initial weather code.

Handles weather, temperature and wind based on climate and season. Weather 
occurs per climate. Regen is affected by weather and temperature. Changed 
existing weather flag to daylight flag, since that's what we use it for.
Added new weather flag and climate flags

IMM commands added:
weatherreport - lists status of weather for all climates
changeweather - randomly changes weather for all climates
setweather [climate type] [weather type] - sets specified weather in a 
specific climate.



Modified: branches/people/gingon/weather/mud/grrmud/server/Makefile
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/Makefile	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/Makefile	2004-12-15 04:58:18 UTC (rev 759)
@@ -23,7 +23,8 @@
 ez_spll.cc dam_spll.cc trv_spll.cc rm_spll.cc dam_skll.cc wep_skll.cc \
 ez_skll.cc social2.cc cr_skll.cc ar_skll.cc pet_spll.cc vehicle.cc \
 script.cc SkillSpell.cc zone.cc rm_parse.cc rm_cmds.cc obj_parse.cc \
-obj_cmds.cc BugEntry.cc MudStats.cc clients.cc ServerConfig.cc
+obj_cmds.cc BugEntry.cc MudStats.cc clients.cc ServerConfig.cc \
+weather.cc
 
 OBJS = parse_gen.o lang_strings.o classes.o object.o critter.o \
 Filters.o room.o door.o skills.o command3.o \
@@ -33,7 +34,8 @@
 ez_spll.o dam_spll.o trv_spll.o rm_spll.o dam_skll.o wep_skll.o \
 ez_skll.o social2.o cr_skll.o ar_skll.o pet_spll.o vehicle.o const.o \
 script.o SkillSpell.o zone.o rm_parse.o rm_cmds.o obj_parse.o \
-obj_cmds.o BuildInfo.o BugEntry.o MudStats.o clients.o ServerConfig.o
+obj_cmds.o BuildInfo.o BugEntry.o MudStats.o clients.o ServerConfig.o \
+weather.o
 
 GEN_SPEC = gen_cmds.spec
 LANG_SPEC = translations.spec translations_classes.spec translation2.spec \

Modified: branches/people/gingon/weather/mud/grrmud/server/classes.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/classes.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/classes.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -276,3 +276,4 @@
       }
    }//if it's a pc
 }//stat
+

Modified: branches/people/gingon/weather/mud/grrmud/server/classes.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/classes.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/classes.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -191,7 +191,6 @@
    void Write(ofstream& da_file);
 };//PathCell
 
-
 enum SeasonType {spring = 0, summer, fall, winter};
 
 

Modified: branches/people/gingon/weather/mud/grrmud/server/command5.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/command5.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/command5.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -48,6 +48,7 @@
 #include "BuildInfo.h"
 #include "clients.h"
 #include "vehicle.h"
+#include "weather.h"
 
 int test(critter& pc) {
    String buf;
@@ -3473,9 +3474,6 @@
    pc.show("\tUse 'client <client name>' to switch to that client. To turn off client support use 'client none'. To use plain telnet, turn off client support. If there is a client that you would like support added for, please contact an IMM, or use the 'idea' command.\n\nClients currently supported: Hegemon, none\n");
 }
 
-
-
-
 int set_veh_croom(int vhcl, int rm, critter &pc)
 {
 
@@ -3501,4 +3499,60 @@
    return -1;
 }
    
+void weatherreport(critter& pc){
 
+   if(pc.pc && pc.pc->imm_data){
+
+      String buf(100);
+   
+      int i=0;
+      while(i< MAX_CLIMATES){
+         Sprintf(buf, "Climate: %s Weather: %s Wind: %s,Temperature: %s\n", 
+               climate_strings[i], weather_strings[weather.climates[i].weather],
+               wind_strings[weather.climates[i].wind],
+               temperature_strings[weather.climates[i].temperature]);
+         
+         ++i;
+         pc.show(buf);
+      }
+   }
+   else pc.show("Eh?");
+   return;
+}
+      
+void changeweather(critter& pc){
+
+   if(pc.pc && pc.pc->imm_data){
+      weather.update();
+   }
+   else pc.show("Eh?");
+}
+
+void setweather(const String* climate_str, const String* weather_str, critter& pc){
+
+   int c =0,w = 0;
+   if(climate_str->Strlen() && weather_str->Strlen()){  
+      while(c<MAX_CLIMATES){
+         if(!strcasecmp(*climate_str,climate_strings[c])){
+            break;
+         }
+         ++c;
+      }
+      if(c >=MAX_CLIMATES){
+         pc.show("error: unknown climate type.\n");
+         return;
+      }
+      while(w<MAX_WEATHER){
+         if(!strcasecmp(*weather_str,weather_strings[w])){
+            break;
+         }
+         ++w;
+      }
+      if(w >= MAX_WEATHER){
+         pc.show("error: unknown weather type.\n");
+         return;
+      }
+      weather.changeWeather((ClimateType)c,(WeatherType)w);
+   }
+   else pc.show("You must specify a climate type and weather type\n");
+}

Modified: branches/people/gingon/weather/mud/grrmud/server/command5.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/command5.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/command5.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -157,6 +157,10 @@
 void client_command(const String* vict, critter& pc);
 
 int set_veh_croom(int vhcl, int rm, critter& pc);
+
+void weatherreport(critter& pc);
+void changeweather(critter& pc);
+void setweather(const String* climate_str, const String* weather_str, critter& pc);
 #endif
 
 

Modified: branches/people/gingon/weather/mud/grrmud/server/commands.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/commands.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/commands.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -738,6 +738,7 @@
          else
             show("\n", pc);
       }//else
+      pc.showWeather(rm);
       if (pc.shouldDoAutoExits()) { //if autoexit set
          auto_exit(pc);
       }//if
@@ -2844,6 +2845,9 @@
    door* door_ptr;   
    String buf(100);
    int dest;
+   //mv mod from weather has been too inconsitant do to scale
+   //float mv_mod = weather_mv_mods[rm.getWeather()] *
+     // temperature_mv_mods[rm.getTemperature()];
 
    //   mudlog.log(DBG, "In move, direction is:\n");
    //   mudlog.log(DBG, direction);
@@ -3000,8 +3004,10 @@
 
 
          //         mudlog.log(DBG, "passed tests in move\n
-         if (!pc.isNoHassle())
+         if (!pc.isNoHassle()){
+          //  pc.PAUSE += (door_ptr->distance*mv_mod);
             pc.PAUSE += door_ptr->distance;
+         }
 
          //Sprintf(buf, "leaves %s.\n", direction);
          String dname = *(door_ptr->getDirection());
@@ -3025,6 +3031,7 @@
          }
 
          if (!pc.isMob()) {
+            //pc.MOV -= (rm.getMovCost() * mv_mod);
             pc.MOV -= rm.getMovCost();
          }//if
          

Modified: branches/people/gingon/weather/mud/grrmud/server/const.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/const.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/const.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -29,14 +29,14 @@
 #include "room.h"
 #include "object.h"
 
+const char* seasons[] = {"spring","summer","fall","winter"};
 
+Weather weather;
+
 /** All the words and phrases that one deems useless to the
  * cause of humane communication goes here.
  */
 
-
-const char* seasons[] = {"spring","summer","fall","winter"};
-
 const char* CensoredStrings[] = {
    "asshole",
    "cunt",
@@ -339,7 +339,7 @@
    "!imm",//1
    "!god",//2
    "is_perm_dark",//3
-   "weather",//4
+   "daylight",//4
    "!ranged_comm",//5
    "!mag_exit",//6
    "is_haven", //7
@@ -372,7 +372,17 @@
    "!foreign_mob_wander",//34
    "has_proc_script",//35
    "coliseum",//36
-   "is_vehicle"//37
+   "is_vehicle",//37
+   "is_climate_temperate",//38
+   "is_climate_savanah",//39
+   "is_climate_mountain",//40
+   "is_climate_snowymountain",//41
+   "is_climate_sandydesert",//42
+   "is_climate_dirtdesert",//43
+   "is_climate_swamp",//44
+   "is_climate_tropical",//45
+   "is_climate_arctic",//46
+   "has_weather" //47
 };
 const BitfieldNames ROOM_FLAGS_NAMES(sizeof(r_names)/sizeof(const char*),
                                      r_names, "Room Flags:");

Modified: branches/people/gingon/weather/mud/grrmud/server/const.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/const.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/const.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -37,6 +37,7 @@
 #include <LogStream.h>
 #include <PtrArray.h>
 #include "ServerConfig.h"
+#include "weather.h"
 
 enum proc_types {
    PROCTYPE_GIVE,
@@ -343,42 +344,54 @@
 };
 
 enum room_flags {
-   ROOMFLAG_NO_RESTRICTIONS,
-   ROOMFLAG_NO_IMM,
-   ROOMFLAG_NO_GOD,
-   ROOMFLAG_IS_PERM_DARK,
-   ROOMFLAG_WEATHER,
-   ROOMFLAG_NO_SHOUT,
-   ROOMFLAG_NO_MAGICAL_EXIT,
-   ROOMFLAG_IS_HAVEN,
-   ROOMFLAG_NO_PK,
-   ROOMFLAG_NO_MAGIC,
-   ROOMFLAG_NO_MOB,
-   ROOMFLAG_NO_POTIONS,
-   ROOMFLAG_NO_STAFFS,
-   ROOMFLAG_NO_MORTALS,
-   ROOMFLAG_NORMALLY_DARK,
-   ROOMFLAG_SHALLOW_WATER,
-   ROOMFLAG_DEEP_WATER,
-   ROOMFLAG_SWAMP,
-   ROOMFLAG_NEED_FLY,
-   ROOMFLAG_NEED_BOAT,
-   ROOMFLAG_NEED_CLIMB,
-   ROOMFLAG_IS_ZLOCKED,
-   ROOMFLAG_IS_TOTAL_LOADED,
-   ROOMFLAG_IS_USED,
-   ROOMFLAG_NO_MAGICAL_ENTRY,
-   ROOMFLAG_NO_VEHICLES,
-   ROOMFLAG_CRAMPED,
-   ROOMFLAG_NO_RANGED_ATTACK,
-   ROOMFLAG_NEED_DIVE,
-   ROOMFLAG_USED_IN_TRACK,
-   ROOMFLAG_CAN_CAMP,
-   ROOMFLAG_NOT_COMPLETE,
-   ROOMFLAG_HAS_KEYWORDS,
-   ROOMFLAG_NO_WANDERING_MOBS,
-   ROOMFLAG_NO_FOREIGN_WANDERING_MOBS,
-   ROOMFLAG_HAS_PROC_SCRIPT
+   ROOMFLAG_NO_RESTRICTIONS, //0
+   ROOMFLAG_NO_IMM, //1
+   ROOMFLAG_NO_GOD, //2
+   ROOMFLAG_IS_PERM_DARK,//3
+   ROOMFLAG_DAYLIGHT,//4
+   ROOMFLAG_NO_SHOUT,//5
+   ROOMFLAG_NO_MAGICAL_EXIT,//6
+   ROOMFLAG_IS_HAVEN,//7
+   ROOMFLAG_NO_PK,//8
+   ROOMFLAG_NO_MAGIC,//9
+   ROOMFLAG_NO_MOB,//10
+   ROOMFLAG_NO_POTIONS,//11
+   ROOMFLAG_NO_STAFFS,//12
+   ROOMFLAG_NO_MORTALS,//13
+   ROOMFLAG_NORMALLY_DARK,//14
+   ROOMFLAG_SHALLOW_WATER,//15
+   ROOMFLAG_DEEP_WATER,//16
+   ROOMFLAG_SWAMP,//17
+   ROOMFLAG_NEED_FLY,//18
+   ROOMFLAG_NEED_BOAT,//19
+   ROOMFLAG_NEED_CLIMB,//20
+   ROOMFLAG_IS_ZLOCKED,//21
+   ROOMFLAG_IS_TOTAL_LOADED,//22
+   ROOMFLAG_IS_USED,//23
+   ROOMFLAG_NO_MAGICAL_ENTRY,//24
+   ROOMFLAG_NO_VEHICLES,//25
+   ROOMFLAG_CRAMPED,//26
+   ROOMFLAG_NO_RANGED_ATTACK,//27
+   ROOMFLAG_NEED_DIVE,//28
+   ROOMFLAG_USED_IN_TRACK,//29
+   ROOMFLAG_CAN_CAMP,//30
+   ROOMFLAG_NOT_COMPLETE,//31
+   ROOMFLAG_HAS_KEYWORDS,//32
+   ROOMFLAG_NO_WANDERING_MOBS,//33
+   ROOMFLAG_NO_FOREIGN_WANDERING_MOBS,//34
+   ROOMFLAG_HAS_PROC_SCRIPT,//35
+   ROOMFLAG_COLISEUM, //36
+   ROOMFLAG_IS_VEHICLE, //37
+   ROOMFLAG_CLIMATE_TEMPERATE,//38
+   ROOMFLAG_CLIMATE_SAVANAH,//39
+   ROOMFLAG_CLIMATE_MOUNTAIN,//40
+   ROOMFLAG_CLIMATE_SNOWYMOUNTAIN,//41
+   ROOMFLAG_CLIMATE_SANDYDESERT,//42
+   ROOMFLAG_CLIMATE_DIRTDESERT,//43
+   ROOMFLAG_CLIMATE_SWAMP,//44
+   ROOMFLAG_CLIMATE_TROPICAL,//45
+   ROOMFLAG_CLIMATE_ARCTIC,//46
+   ROOMFLAG_HAS_WEATHER //47
 };
 
 enum vehicle_flags {
@@ -1711,4 +1724,7 @@
 
 extern const char* seasons[];
 
+//weather manager
+extern Weather weather;
+
 #endif

Modified: branches/people/gingon/weather/mud/grrmud/server/critter.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/critter.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/critter.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -5589,3 +5589,61 @@
    HP -= (int)(dam);
    return (int)dam;
 }
+
+void critter::showWeather(room &rm){
+   String buf(200);
+   WeatherType rmweather;
+   WindType rmwind;
+   TemperatureType rmtemp;
+   if((pc || isPossessed()) && rm.hasWeather()){
+      rmweather = rm.getWeather();
+      rmwind = rm.getWind();
+      rmtemp = rm.getTemperature();
+     // if(rmwind = wndNONE) return;
+      switch(rmweather){
+         case wNONE:
+            return;
+         case thunderstorm:
+         case sandstorm:
+         case hailstorm:
+         case blizzard:
+            Sprintf(buf,"It is %s and there is a %s with %s.\n",
+                  temperature_strings[rmtemp],
+                  weather_strings[rmweather],wind_strings[rmwind]);
+            break;
+         default:
+            Sprintf(buf,"It is %s and %s with %s.\n",
+                  temperature_strings[rmtemp],
+                  weather_strings[rmweather],wind_strings[rmwind]);
+      }
+      show(buf);
+   }
+}
+
+
+bool critter::canSee(critter& mob){
+  if(detect(getSeeBit(),mob.getVisBit())){
+     return true;
+  }
+  return false;
+}
+bool critter::canSee(int vis_bit){
+   if(detect(getSeeBit(), vis_bit)){
+      return true;
+   }
+   return false;
+}
+bool critter::canSee(object& obj){
+   if(detect(getSeeBit(), obj.getVisBit())){
+      return true;
+   }
+   return false;
+}
+
+bool critter::canSee(door& dr){
+   if(detect(getSeeBit(), dr.getVisBit())){
+      return true;
+   }
+   return false;
+}
+            

Modified: branches/people/gingon/weather/mud/grrmud/server/critter.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/critter.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/critter.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -1139,6 +1139,14 @@
    critter* makeSmob(int suppress_sub_fail_msg = 0);
    int takeDamage(int adamage, int type, critter &agg);
    int takeDamage(int damage, int type);
+
+   void showWeather(room &rm);
+
+   bool canSee(critter& mob);
+   bool canSee(int vis_bit);
+   bool canSee(object& obj);
+   bool canSee(door& dr);
+   
 };//class critter
  
 

Modified: branches/people/gingon/weather/mud/grrmud/server/door.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/door.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/door.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -108,6 +108,7 @@
    void fileRead(ifstream& da_file);
    void Write(ofstream& da_file);
    static int getInstanceCount() { return _cnt; }
+   int getVisBit(){return vis_bit;}
 }; //door_data
 
  
@@ -158,6 +159,7 @@
    void unlock() { if (dr_data) dr_data->unlock(); }
    void open() { if (dr_data) dr_data->open(); }
    void close() { if (dr_data) dr_data->close(); }
+   bool getVisBit(){return dr_data && dr_data->getVisBit();}
 
    int getKeyNum() const {
       if (dr_data) 

Modified: branches/people/gingon/weather/mud/grrmud/server/gen_cmds.spec
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/gen_cmds.spec	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/gen_cmds.spec	2004-12-15 04:58:18 UTC (rev 759)
@@ -225,6 +225,8 @@
 # IMM Commands - C
 chance ~
 return (chance( i, j, k));
+changeweather ~
+changeweather(pc);
 ch_ddesc ~
 return ch_ddesc(i, pc);
 ch_kdesc ~
@@ -832,6 +834,8 @@
 return set_veh_croom(i, j, pc);
 set_veh_stop ~ 
 return  set_veh_stop(i, j, &(cooked_strs[1]), pc);
+setweather ~
+setweather(&(cooked_strs[1]), &(cooked_strs[2]), pc);
 set_zflag ~
 return set_zflag(i, &(cooked_strs[1]), pc);
 show_zones ~
@@ -997,6 +1001,8 @@
 withdraw ~
 return withdraw(i, cooked_strs[1], j, cooked_strs[2], pc);
 # IMM Commands - W
+weatherreport ~
+weatherreport(pc);
 wc *channels ~
 NOP
 wizchat *channels ~

Modified: branches/people/gingon/weather/mud/grrmud/server/misc.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/misc.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/misc.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -46,7 +46,6 @@
 #include "Filters.h"
 #include <math.h>
 
-
 /** calculate the ratio between objects casting spell a spell and the
  * number of players online.  It will be fudged so that 1 will be
  * considered a 'fair' amount.  If > 1.0 then the spell should probably
@@ -353,7 +352,7 @@
       config.year++;
       config.day = 1;
    }//if
-
+   weather.update();
    config.writeDynamic("dynamic.cfg");
 }//do_tick
 
@@ -472,7 +471,7 @@
 //that never regen. I'll be watching the effects of this change closely and
 //will most likely adjust the algorithms based on what I discover.
 void do_regeneration_pcs() {
-   float adj = 1.0, posn_mod, align_mod = 1.0;
+   float adj = 1.0, posn_mod, align_mod = 1.0,env_mod;
    Cell<critter*> crit_cell;
    pc_list.head(crit_cell);
    critter* crit_ptr;
@@ -481,6 +480,9 @@
 
    while ((crit_ptr = crit_cell.next())) {
 
+      env_mod = weather_regen_mods[crit_ptr->getCurRoom()->getWeather()] *
+         temperature_regen_mods[crit_ptr->getCurRoom()->getTemperature()];
+      
       //no regen if we're fighting
       if ( crit_ptr->isFighting() ) {
          continue;
@@ -509,10 +511,10 @@
       
       // if we are affected by remove hope we get no hp
       if ( ! (is_affected_by(REMOVE_HOPE_SKILL_NUM, *crit_ptr)) ) {
-      crit_ptr->HP += (int)((((((float)(crit_ptr->CON) + 5.0) / 15.0) * 
+      crit_ptr->HP += (int)(((((((float)(crit_ptr->CON) + 5.0) / 15.0) * 
                             (((float)(crit_ptr->HP_MAX)) / 9.0) * 
                             posn_mod * (((float)(crit_ptr->HP_REGEN)) / 100.0)
-                            * adj + 10.0)/6.0)+1.0);
+                            * adj + 10.0)/6.0)*env_mod)+1.0);
       }
 
       // if we are affected by remove karma we get no mana
@@ -526,12 +528,12 @@
             align_mod = 1/pow(10, (breakeven+crit_ptr->ALIGN)/(1000-breakeven));
          }
       
-         crit_ptr->MANA += (int)(((((((float)(crit_ptr->INT)) + 5.0) / 16.0) *
+         crit_ptr->MANA += (int)((((((((float)(crit_ptr->INT)) + 5.0) / 16.0) *
                               posn_mod *
                               (((float)(crit_ptr->MA_MAX)) / 7.0) *
                               (((float)(crit_ptr->MA_REGEN)) / 100.0) *
                               align_mod *
-                              adj + 4.0)/6.0)+1.0);
+                              adj + 4.0)/6.0)*env_mod)+1.0);
       }
 
       /* Lose 5 mov points if you're idleing in deep water without a boat or
@@ -542,10 +544,10 @@
          // player should die if mov hits 0 
       } else {
          int tmp_mov;
-         tmp_mov = (int)(((((((float)(crit_ptr->DEX)) + 5.0) / 16.0) *
+         tmp_mov = (int)((((((((float)(crit_ptr->DEX)) + 5.0) / 16.0) *
                      posn_mod * adj *
                      (((float)(crit_ptr->MV_MAX)) / 3.0) * 
-                     (((float)(crit_ptr->MV_REGEN)) / 100.0) + 3.0)/6.0)+1.0);
+                     (((float)(crit_ptr->MV_REGEN)) / 100.0) + 3.0)/6.0)*env_mod)+1.0);
 
          crit_ptr->MOV += tmp_mov;
       }

Modified: branches/people/gingon/weather/mud/grrmud/server/misc2.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/misc2.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/misc2.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -2211,8 +2211,6 @@
     
 }
 
-
-
 void DistProbMatrix::add(int value, unsigned int weight){
 	int* tmp = NULL;
 	unsigned int tmp_size = 0;
@@ -2221,14 +2219,20 @@
 	tmp_size = weight + size;
 	tmp = new int[tmp_size];
 
-	if(size != 0){
+	/*if(size!=0){
+      memcpy(tmp,matrix,size*sizeof(int));
+      delete[] matrix;
+   }*/
+   
+   if(size != 0){
 		while(i < size){
 			tmp[i] = matrix[i];
 			++i;
 		}
-		delete matrix;
+		delete[] matrix;
 	}
 
+  // memset(&tmp[size-1],value,weight*sizeof(int));
 	while(i < tmp_size){
 		tmp[i] = value;
 		++i;
@@ -2239,6 +2243,15 @@
 }	
 
 int DistProbMatrix::get(){
-	return matrix[(rand() % size)-1];
+	return matrix[(rand()%(size-1))];
 }
-		  
+		 
+void combine_weights(int* target, const float* in, unsigned int length){
+
+   int i =0;
+   
+   while(i < length){
+         target[i] *= in[i];
+         ++i;
+   }
+}

Modified: branches/people/gingon/weather/mud/grrmud/server/misc2.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/misc2.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/misc2.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -175,7 +175,9 @@
 room* get_target_room(critter& pc);
 SeasonType get_season(int day);
 String* get_season_string(int day);
+void combine_weights(int* target, const float* in, unsigned int length);
 
+
 //distributed probability matrix code
 //only handles single dimension probability matrices
 //multidimension would be nice though...
@@ -184,11 +186,11 @@
    int* matrix; //stores pointer to probability matrix
    unsigned int size; // can only support MAX_INT entries
 public:
-   void add(int size, unsigned int weight);
+   void add(int value, unsigned int weight);
    int get();
 	
    DistProbMatrix(){size = 0;matrix = NULL;}
-   ~DistProbMatrix(){delete matrix;}
+   ~DistProbMatrix(){if(matrix) delete[] matrix;}
 };																					 
 
 #endif 

Modified: branches/people/gingon/weather/mud/grrmud/server/object.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/object.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/object.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -1887,3 +1887,12 @@
    }//while
    return retval;
 }
+
+
+int object::getVisBit(){
+   return cur_stats[0];
+}
+
+void object::setVisBit(int vis_bit){
+   cur_stats[0] = vis_bit;
+}

Modified: branches/people/gingon/weather/mud/grrmud/server/object.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/object.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/object.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -362,6 +362,8 @@
    void checkForProc(String& cmd, String& arg1, critter& actor,
                      int targ, room& cur_room, int sanity = 0);
 
+   int getVisBit();
+   void setVisBit(int vis_bit);
 }; // class object
 
 

Modified: branches/people/gingon/weather/mud/grrmud/server/room.cc
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/room.cc	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/room.cc	2004-12-15 04:58:18 UTC (rev 759)
@@ -1135,7 +1135,7 @@
       //mudlog << "Permdark, trying to make the room dark.\n";
       vb |= 1; //perm dark it is
    }//if
-   else if (isNormallyDark() || (isNightTime() && room_flags.get(4))) {
+   else if (isNormallyDark() || (isNightTime() && hasDaylight())) {
       //normally dark, or outside and night time
       //mudlog << "Normally dark, trying to make the room dark.\n";
       setVisBit(vb | 1);
@@ -2434,8 +2434,8 @@
 }
 
 int room::canSeeSky() {
-   return (room_flags.get(4) || room_flags.get(15) || room_flags.get(16)
-           || room_flags.get(17));
+   return (hasWeather() ||hasDaylight() || room_flags.get(15) 
+         || room_flags.get(16) || room_flags.get(17));
 }
 
 
@@ -2821,7 +2821,7 @@
       if (isPermDark()) {
          vb |= 1; //perm dark it is
       }//if
-      else if (isNormallyDark() || (isNightTime() && room_flags.get(4))) {
+      else if (isNormallyDark() || (isNightTime() && hasDaylight())) {
          //normally dark, or outside and night time
          vb |= 1;
          if (isAffectedBy(ILLUMINATE_SKILL_NUM)) {
@@ -2844,3 +2844,35 @@
    }
    return vb;
 }
+
+WeatherType room::getWeather(){
+
+   if(getFlag(38)){       //temperate
+      return weather.climates[0].weather;
+   }else if(getFlag(39)){ //savanah
+      return weather.climates[1].weather;
+   }else if(getFlag(40)){ //mountain
+      return weather.climates[2].weather;
+   }else if(getFlag(41)){ //snowymountain
+      return weather.climates[3].weather;
+   }else if(getFlag(42)){ //sandydesrt
+      return weather.climates[4].weather;
+   }else if(getFlag(43)){ //dirtdesert
+      return weather.climates[5].weather;
+   }else if(getFlag(44)){ //swamp
+      return weather.climates[6].weather;
+   }else if(getFlag(45)){ //tropical
+      return weather.climates[7].weather;
+   }else if(getFlag(46)){ //arctic
+      return weather.climates[8].weather;
+   } else return wNONE;
+
+}
+
+WindType room::getWind(){
+   return weather.climates[getWeather()].wind;
+}
+
+TemperatureType room::getTemperature(){
+   return weather.climates[getWeather()].temperature;
+}

Modified: branches/people/gingon/weather/mud/grrmud/server/room.h
===================================================================
--- branches/people/gingon/weather/mud/grrmud/server/room.h	2004-12-15 04:50:03 UTC (rev 758)
+++ branches/people/gingon/weather/mud/grrmud/server/room.h	2004-12-15 04:58:18 UTC (rev 759)
@@ -174,7 +174,8 @@
    int isNoMagEntry() const { return room_flags.get(24); }
    int isNoMagExit() const { return room_flags.get(6); }
    int isPermDark() const { return room_flags.get(3); }
-   int hasWeather() const { return room_flags.get(4); }
+   int hasWeather() const { return room_flags.get(47); }
+   int hasDaylight() const { return room_flags.get(4);}
    int isNoMob() const { return room_flags.get(10); }
    int isNoPotion() const { return room_flags.get(11); }
    int isNoMagic() const { return room_flags.get(9); }
@@ -343,6 +344,10 @@
    int makeReadyForAreaSpell();
    critter* findNextProcMob();
    critter* findNextSpellCritter();
+
+   WeatherType getWeather();
+   WindType getWind();
+   TemperatureType getTemperature();
 }; // class room
 
 #endif




More information about the ScryMUD mailing list