|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
04-14-2008, 06:49 PM
|
AX Classic Developer
|
|
Join Date: May 2006
Location: filler
Posts: 2,049
|
|
I'm praying this one gets into the source, haven't seen anything else on it anymore.
|
04-14-2008, 10:09 PM
|
Administrator
|
|
Join Date: Sep 2006
Posts: 1,348
|
|
I had lost it for a while but since I see it again it'll get in.
|
04-20-2008, 03:16 AM
|
Discordant
|
|
Join Date: Aug 2006
Posts: 394
|
|
Yes, that's right.
In indoor zones, if you were already sow'd from outside, you could keep it until it faded indoors. You just could not CAST sow while indoors.
IF this code is combined and stuff, please don't tie it all to one switch... it would be nice to say "no lev but yes to run speed effects" or "yes lev but no run speed effects can be cast" -- not both on or both off only, please.
__________________
--
Keelyeh
Owner, ServerOp and Developer
Jest 4 Server
Linux (Jest3 runs on Fedora, our Dev servers usually run on Ubuntu and/or Gentoo), OC-12 Connection = Hella Fast
Last edited by gernblan; 04-20-2008 at 11:19 AM..
|
04-29-2008, 08:10 PM
|
AX Classic Developer
|
|
Join Date: May 2006
Location: filler
Posts: 2,049
|
|
KLS;
I tried PM to you on this;
Quote:
KLS: (Magoth7, (Angelox)Added zone checks for levitating and being outdoors.
|
should read
Quote:
KLS: (Magoth7, (Qadar)Added zone checks for levitating and being outdoors.
|
Qadar was the one with the fix for the spells that work outdoors; outdoors only and Indoor spells; Indoors only.
I just posted the fix.
Thanks
|
07-06-2008, 07:12 PM
|
Banned
|
|
Join Date: Sep 2006
Posts: 841
|
|
Could you also make code for COH type spells not working in zones or designated areas of zones ?
|
|
|
|
07-06-2008, 08:45 PM
|
|
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
I too think that limiting Call of the Hero on a per zone basis would be nice. I am not a coder, but I can use examples of code and alter them fairly well normally. Using the using examples of the code that Magoth and Qadar used for the canlevitate and cancastoutdoor settings, here is what I think would be needed to setup a similar system for Call of the Hero:
zone.h
Code:
After - bool CanCastOutdoor() const {return(can_castoutdoor);} //qadar
+bool CanCotH() const {return(can_coth); } //trevius
After - bool can_levitate;
+bool can_coth;
zonedb.h
Code:
-bool GetZoneCFG(int32 zoneid, NewZone_Struct *data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city);
+bool GetZoneCFG(int32 zoneid, NewZone_Struct *data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city, bool &can_coth);
zone.cpp
Code:
- if(!database.GetZoneCFG(database.GetZoneID(filename), &newzone_data, can_bind, can_combat, can_levitate, can_castoutdoor, is_city)) {
+ if(!database.GetZoneCFG(database.GetZoneID(filename), &newzone_data, can_bind, can_combat, can_levitate, can_castoutdoor, is_city, can_coth)) {
In zonedb.cpp Remove:
Code:
bool ZoneDatabase::GetZoneCFG(int32 zoneid, NewZone_Struct *zone_data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city) {
char errbuf[MYSQL_ERRMSG_SIZE];
char *query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
int i=0;
int b=0;
bool good = false;
if (RunQuery(query, MakeAnyLenString(&query, "SELECT ztype,"
"fog_red,fog_green,fog_blue,fog_minclip,fog_maxclip,"
"fog_red2,fog_green2,fog_blue2,fog_minclip2,fog_maxclip2,"
"fog_red3,fog_green3,fog_blue3,fog_minclip3,fog_maxclip3,"
"fog_red4,fog_green4,fog_blue4,fog_minclip4,fog_maxclip4,"
"sky,zone_exp_multiplier,safe_x,safe_y,safe_z,underworld,"
"minclip,maxclip,time_type,canbind,cancombat,canlevitate,castoutdoor"
" from zone where zoneidnumber=%i",zoneid), errbuf, &result)) {
safe_delete_array(query);
while((row = mysql_fetch_row(result))) {
int r = 0;
memset(zone_data,0,sizeof(NewZone_Struct));
zone_data->ztype=atoi(row[r++]);
for(i=0;i<4;i++){
zone_data->fog_red[i]=atoi(row[r++]);
zone_data->fog_green[i]=atoi(row[r++]);
zone_data->fog_blue[i]=atoi(row[r++]);
zone_data->fog_minclip[i]=atof(row[r++]);
zone_data->fog_maxclip[i]=atof(row[r++]);
}
zone_data->sky=atoi(row[r++]);
zone_data->zone_exp_multiplier=atof(row[r++]);
zone_data->safe_x=atof(row[r++]);
zone_data->safe_y=atof(row[r++]);
zone_data->safe_z=atof(row[r++]);
zone_data->underworld=atof(row[r++]);
zone_data->minclip=atof(row[r++]);
zone_data->maxclip=atof(row[r++]);
zone_data->time_type=atoi(row[r++]);
//not in the DB yet:
zone_data->gravity = 0.4;
b = atoi(row[r++]);
can_bind = b==0?false:true;
is_city = b==2?true:false;
can_combat = atoi(row[r++])==0?false:true;
can_levitate = atoi(row[r++])==0?false:true;
can_castoutdoor = atoi(row[r++])==0?false:true;
good = true;
}
mysql_free_result(result);
}
else
LogFile->write(EQEMuLog::Error, "Error in GetZoneCFG query %s: %s", query, errbuf);
safe_delete_array(query);
zone_data->zone_id = zoneid;
return(good);
}
And in zonedb.cpp, replace what was just removed with:
Code:
bool ZoneDatabase::GetZoneCFG(int32 zoneid, NewZone_Struct *zone_data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city, bool &can_coth) {
char errbuf[MYSQL_ERRMSG_SIZE];
char *query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
int i=0;
int b=0;
bool good = false;
if (RunQuery(query, MakeAnyLenString(&query, "SELECT ztype,"
"fog_red,fog_green,fog_blue,fog_minclip,fog_maxclip,"
"fog_red2,fog_green2,fog_blue2,fog_minclip2,fog_maxclip2,"
"fog_red3,fog_green3,fog_blue3,fog_minclip3,fog_maxclip3,"
"fog_red4,fog_green4,fog_blue4,fog_minclip4,fog_maxclip4,"
"sky,zone_exp_multiplier,safe_x,safe_y,safe_z,underworld,"
"minclip,maxclip,time_type,canbind,cancombat,canlevitate,castoutdoor,cancoth"
" from zone where zoneidnumber=%i",zoneid), errbuf, &result)) {
safe_delete_array(query);
while((row = mysql_fetch_row(result))) {
int r = 0;
memset(zone_data,0,sizeof(NewZone_Struct));
zone_data->ztype=atoi(row[r++]);
for(i=0;i<4;i++){
zone_data->fog_red[i]=atoi(row[r++]);
zone_data->fog_green[i]=atoi(row[r++]);
zone_data->fog_blue[i]=atoi(row[r++]);
zone_data->fog_minclip[i]=atof(row[r++]);
zone_data->fog_maxclip[i]=atof(row[r++]);
}
zone_data->sky=atoi(row[r++]);
zone_data->zone_exp_multiplier=atof(row[r++]);
zone_data->safe_x=atof(row[r++]);
zone_data->safe_y=atof(row[r++]);
zone_data->safe_z=atof(row[r++]);
zone_data->underworld=atof(row[r++]);
zone_data->minclip=atof(row[r++]);
zone_data->maxclip=atof(row[r++]);
zone_data->time_type=atoi(row[r++]);
//not in the DB yet:
zone_data->gravity = 0.4;
b = atoi(row[r++]);
can_bind = b==0?false:true;
is_city = b==2?true:false;
can_combat = atoi(row[r++])==0?false:true;
can_levitate = atoi(row[r++])==0?false:true;
can_castoutdoor = atoi(row[r++])==0?false:true;
can_coth = atoi(row[r++])==0?false:true;
good = true;
}
mysql_free_result(result);
}
else
LogFile->write(EQEMuLog::Error, "Error in GetZoneCFG query %s: %s", query, errbuf);
safe_delete_array(query);
zone_data->zone_id = zoneid;
return(good);
}
In spells.cpp After:
Code:
spells.cpp - function Mob::SpellFinished(int16 spell_id, Mob *spell_target, int16 slot, int16 mana_used),
After:
if(IsEffectInSpell(spell_id, SE_Levitate) && !zone->CanLevitate()){
if(IsClient()){
if(!CastToClient()->GetGM()){
Message(13, "You can't levitate in this zone.");
return false;
}
}
}
Add: (Note that this is the only part I am unsure about. I highlighted the questionable part in RED and will check more into it later unless someone else can get that part fixed)
Code:
if(spells[spell_id].spell_id == 1771 && !zone->CanCotH()){
if(IsClient()){
if(!CastToClient()->GetGM()){
Message(13, "You cannot summon players in this zone.");
return false;
}
}
}
Required SQL:
Code:
alter table `zone` add column `cancoth` tinyint (4) DEFAULT '1' NOT NULL after `canlevitate`
I haven't tested this code yet, but I will try to get it added tonight on my server maybe. I will post back here if it works.
|
|
|
|
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:47 AM.
|
|
|
|
|
|
|
|
|
|
|
|
|