Log in

View Full Version : Some pets in Plane of Sky


Congdar
05-15-2009, 05:11 PM
The Plane of Sky has some quirkiness to it (Sirran aside) with some pets. I've got some working code but before I check it in, I wanted to see if somebody more familliar with Sky could help out. The Skeleton pets are supposed to appear as pink wisps and the Magician is only supposed to be able to summon thier Air pet and it's supposed to appear as a female genie. What I'm wondering is if there are other pets that have some quirkiness. Beastlords came into EQ long after I was done going to Sky... were thier pets different? Enchanter pets? others? Do any mages remeber if they got some kind of message if they tried to summon a non-Air type pet?

in pets.cpp Mob::MakePet() put this:

if(zone->GetZoneID() == 71) // Special pet handling for Plane of Sky. Reference: http://mysite.verizon.net/drexxell/eq/planeofsky.html
{
if((GetClass() == NECROMANCER) || (GetClass() == SHADOWKNIGHT))
{
npc_type->race = 69; // Will-o-Wisp
npc_type->texture = 1; // Pink
npc_type->size = 4.0f;
}

if(GetClass() == MAGICIAN)
{
if(strncmp(spells[spell_id].teleport_zone, "SumAir", 6) != 0)
{
// this->Message(15, "Something like You can only summon Air pets here");
// or
// this->Say_StringID(AIR_PET_ONLY_STRING);
return; // Magicians can only summon Air pets in Sky
}
else
{
npc_type->race = 126; // Female Djinn
npc_type->size = 5.5f;
}
}
}

right above these two lines:

//this takes ownership of the npc_type data
Pet *npc = new Pet(npc_type, this, type, spell_id);

ChaosSlayerZ
05-15-2009, 09:12 PM
i realy hope you NOT going to hard code this into main source - i like my pets the way they are - thank you very much- and personaly i don't remeber nothing of such nature - last visit to live Sky for me was december 2002 - all pets were normal

perhaps do this as zone script in perl file instead and put illusions on pets you like=P

So_1337
05-15-2009, 09:37 PM
All I know is it's wonderful that you're coding this. Sorry I can't contribute, but thanks! =)

And actually, I don't think it was ever changed, ChaosSlayer, but it was sure that way during the original EQ, Kunark, Luclin, and Planes of Power eras when I played. I actually enjoyed my necromancer pet being a little pink willowisp.

ChaosSlayerZ
05-15-2009, 10:10 PM
can we at least do this via Rule people can turn off?
this is so going to ruin RP content for some of us :(

Yeormom
05-15-2009, 10:21 PM
Unfournately, by far too many "personal" project changes make their way into the SVN...but oh well.

Congdar
05-15-2009, 10:32 PM
I know this is, or at least was this way on Live for skeleton and air pets and isn't 'personal', just trying to EMulate Live. I'm only asking if it has changed for any other pets that anyone knows of. If it is no longer like this on Live then I guess there's no need for this, but it certainly doesn't change anything about RP if it is still this way on Live.

This only affects pets summoned in the Plane of Sky. If you already have your pet and zone up, it will not change.

ChaosSlayerZ
05-15-2009, 10:53 PM
If it is no longer like this on Live then I guess there's no need for this, but it certainly doesn't change anything about RP if it is still this way on Live.


this is EXACTLY the problem with this kind of approach towards "LIVE"
You trying to mimic what LIVE had or has now, with no regard that LIVE is in fact dymanic. LIVE has an option to create and disable things as they please - we don't. (speicaly those of us who don't know the source that well to manipulate it at will like you do)

Think about crap laod of things which were "live-like" 2 years ago, which no longer are. Suposly you were one of the people who hard-coded all that in back them. TODAY you, been true to live, would have to go and delete all that code cuase its no longer live-like.

My final point is: its complitly POINTLESS to hard code details like that which may only exist for a fraction of a time frame in a game which timespawn has allready exeed a decade.

Dibalamin
05-15-2009, 11:01 PM
You can handle the lack of fire, water and earth pets through blocked spells table in sky so they shouldn't need a hard code in the source.

Consequently, this was true as last as 2k6 and Sky has never gone through a wide scale revamp due to it's extremely unique nature.

Congdar
05-15-2009, 11:26 PM
My final point is: its complitly POINTLESS to hard code details like that which may only exist for a fraction of a time frame in a game which timespawn has allready exeed a decade.
It has been like this on Live in the Plane of Sky for nearly a decade, no fractions. It should be in the source, hard coded. I was only askin' if anyone kows if it has been updated on Live to include other pets. It probably hasn't and you don't know. It sounds like you really care though. If you are able to find out for sure, I welcome any real data you can supply.

Thanks Dibalamin, i'll look into that blocked spells table.

ChaosSlayerZ
05-15-2009, 11:51 PM
It has been like this on Live in the Plane of Sky for nearly a decade, no fractions. It should be in the source, hard coded. I was only askin' if anyone kows if it has been updated on Live to include other pets. It probably hasn't and you don't know. It sounds like you really care though. If you are able to find out for sure, I welcome any real data you can supply.



Well I have to be honest here - the thing I care for foremost - is HIGH level of customization freedom for Emu software. Despite the fact that project started as "live-clone", a SIGNIFICANT portion of ist current admins and players using it for totaly custom content unrelated to live or significantly altered. Most of them also are not people who can code and compile - which means they complitly depedant of actions of peopel who do - such as yourself.

To me as a develovers of fully custom server which has almost no relation to live content wise, a hard coding of a feature like this essentialy means a zone which I will have to throw out, since I have absolutly no reason why in plane of sky pets would be turned into soemthign else, and it will totaly violate my RP content. I am sure there are some people who will agree with me.

If this fetaure is something I can do TURN OFF - I don't mind it, but if its hard coded I am forced to live with it.

This may sounds like my entire plea here is only to accomidate my needs, but this little thing is one of the many on a very large list of live-like things which damage the ability to do a clean customization wihout parts of "live" dangling from all over the place.

I would realy wish that people see Emu project as a global ENGINE for some great custom development which anyoen can turn into difirent direction using a single source, rather than just a clone copy of eq1.

Anyway - once again- why not use perl script file to put illusions on pets and put into quest folder for Sky? Trev on his server has created a perl script which turns anything into anything. I bet you $100 that actual live devs didn't had to hard code this thing =P

Congdar
05-16-2009, 12:47 AM
Well, i did post here for input. I didn't realize this would turn into a debate over the source being for EQemulator or CUSTOMemulator. I'm really one to talk with all the bots code, but you aren't required to use it so it must be ok with you. It takes a lot of custimization to even get it working. What I have posted in this thread, though, is definitely like EQ Live. I think the underlying vision here is that the source be for emulation of Everquest as this website designates in its name.

What about it Trevius? Maybe with the blocked_spells table and your script, this EQ feature can be less intrusive on those that use the EQemulator for Non-EQness.

BTW, I could RP up any number of reasons why a certain zone changes pets on a custom server and not thow away a whole zone, but your argument for the openness of an emulator is interesting.

ChaosSlayerZ
05-16-2009, 01:05 AM
BTW, I could RP up any number of reasons why a certain zone changes pets on a custom server and not thow away a whole zone, but your argument for the openness of an emulator is interesting.


true- so could I . But I will do it better when I will have an option to turn sceletons into batterflies on fridays and into orcs on sundays AT WILL.

Lets look realisticly into what you actualy trying to achive and realise that there is simpler way of doing it wihout ever touching the source.

With perl script in place like is run on Trevs server - ANYONE can change appearnce of ANYTHING in any zone with a NOTEPAD editor - you want all Troll SKs to look like rats - no problem. You can do this in ANY zone with any model.

But once you hard code this - we stock with it exactly this way

In otherwords- don't use the code to make ONE single detail. Use the code to make an ENGINE which can be adjusted with a couple EXTERNALY controlled variables to create ANY detail.

An thankfully for what you trying to do - the engine is allready in place :cool:

Here is Trevs code for his Illusionist script. Thsi can be used as a base

http://www.eqemulator.net/forums/showthread.php?t=25556

trevius
05-16-2009, 03:02 AM
LOL, my name is all over this thread, I guess I should have been keeping up with it!

I see good points from both sides of the debate here. Yes, ultimately, this is EQEmu, and the source should try to emulate live as closely as possible, because that gives everyone a base to work towards. But, on the other hand, many things can be done with perl and the database that don't require making special exceptions in the source. And, I think we try to cater to everyone as much as possible.

As mentioned, this could probably be handled pretty easily with some basic perl scripting and the blocked spells table. Though, you would probably have to list quite a few spells in the table to block all levels of the other pets, which could stack up to be quite a few if other classes need similar blocks made.

Really, Kayen is the Pet script master lol. That guy has some pretty amazing pet scripts coming out of him lately :) I bet he could write something up for this in about 5 seconds if he sees the thread.

You could probably even avoid the blocked spells stuff if you just create files for ever pet type from the pets table and put them in the poair quest folder like this:

SumAirR17.pl

And so on. Then, just do:

sub EVENT_SPAWN {
quest::echo(15,"You can only summon Air pets here");
quest::depop();
}

For each one you don't want to allow.

Then, for the rest, you could spawn them and just do a simple race and size change with the quest::npcsize and quest::npcrace commands.

That zone is so customized that you would probably want to handle as much as possible with perl, otherwise, you might find that you are wanting to add more and more to the source just to support this one zone.

Congdar
05-16-2009, 04:42 AM
Well, EVENT_SPAWN doesn't work for summoned pets because the script runs before the pet is actually popped so it still looks like the original pet model even though #showstats has the correct id's for race etc. I set a timer in EVENT_SPAWN for 0 and in EVENT_TIMER did the quest::npcrace() stuff and that worked but it was kind of ugly with the original model spawning and then changing.

So it would require almost 40 perl files with 8 lines of code each and 54 database entries in the blocked_spells table to accomplish what 12 lines of C++ code can do, and does better without the spawn glitch. I don't see the perl way as a win, even if it makes the EQemulator more generic.

ChaosSlayerZ
05-16-2009, 05:19 AM
Congdar, if you do ultimately decide to go with those 12 lines of C code, please do a me favor and add a 13th line which will have a Rule to turn this thing OFF :D

trevius
05-16-2009, 05:30 AM
Personally, I don't really care either way, as I have never been too interested in the zone. Code would be fine, but I certainly wouldn't want to see a rule get added for a specific zone just to have special pets there or not. We already have well over 100 rules, and I think we should try to have some restraint when adding them. I would be fine with this going into the code, but I am still sure that it could be handled in perl very close to as well as it would be in the code. The race change thing where it can't change it at spawn time kinda sucks, but I don't think it is all that bad.

One thing that could probably stop you from having to create dozens of script files or blocked spell entries would be to simply use a default.pl in there and have it check the race and texture of the NPC when it spawns. If it is one of the pet classes that shouldn't be allowed, it can just depop it and echo the message you want. I never really did PoAir much on Live, so I don't know if there are NPCs that are pet classes that might summon those same pet races that players aren't allowed to summon. If so, then that would be bad, because it would be depoping NPC's pets. But, if players can't use them, I think it is unlikely that NPCs would there.

That should be a very simple script and would probably cover most or all scenarios. Then, the only problem left is that you see a normal air pet for a second before it changes it's race.

I am sure there are probably more advanced ways to handle this through perl without having to do much more work than adding the source. I am just thinking simple.

Again, I don't really care either way, but I do think perl could handle this fairly well.

poair/default.pl
sub EVENT_SPAWN {

#75 Elemental
#209 Earth Elemental
#210 Air Elemental
#211 Water Elemental
#212 Fire Elemental

if ($race == 75 && $texture != 3 || $race == 209 || $race == 211 || $race == 212)
quest::echo(15,"You can only summon Air pets here");
quest::depop();
}

if ($race == 75 && $texture == 3 || $race == 210) {
#set your timer and do the race change stuff
}

}

So_1337
05-16-2009, 09:51 AM
I think Congdar made a pretty reasoned argument of why it makes more sense to do this with the code rather than dozens of perl files and lines of database queries. He's shown to know his stuff between both the code and perl scripting with all he's done with the bots, so I'm inclined to believe him when he says it's the best way to code it. If Kayen or anyone else can come along and show a proven, cleaner way of doing it, code or perl or otherwise, then I'm sure he'd be open to it.

I also think Trevius makes a good point that adding code to the source just to support one zone might not be worth all the effort. However, the zone was unique for many reasons, and the behavior of pets there was one of them, and I have to admit I was very excited to see someone wanting to make this the way it should be (per Live; sorry ChaosSlayer). If he's going to take the time to do all the work of coding it simply for the nostalgia factor, I'm going to applaud his effort.

As for making it a rule, I'm sorry, but I don't think one is needed. I realize that many people play on fully customized servers, but I think it's fair to say that the majority of them have played EQ Live before and wouldn't be surprised to see things happening to their pets in that zone, since it's the same thing that happened on Live. If they ask, explain to them that it's hard-coded and you can't change it. I really doubt they're going to want to put your head on a pike for it.

ChaosSlayerZ
05-16-2009, 11:52 AM
Trev you are my only hope to save the emu =)

As a final statement, I like to point out that Trev is correct that whatever specials this zone may have, it i posible that some other zone may have some other kind of special (keep in mind 100+ new zones coming soon in SoF)and its better to design a single system to handle any zone in this, rather than hard code them each individualy.

Think what would have happened if all our quests would be hard coded into source code...

Think would would have happened if all our npcs and items would be hard coded in code.

Think what it was like before people invented DBs - evrything was hard coded, and what a nightmare it was to change anything...

Secrets
05-16-2009, 01:06 PM
Well, i did post here for input. I didn't realize this would turn into a debate over the source being for EQemulator or CUSTOMemulator.

Actually, this is a really good point. I would rather it not be CUSTOMEmulator or EQEmulator. I would much rather it be a handler for the EverQuest client connecting to an EverQuest server, and what everyone does at the server & client level is up to them. Think of it this way,

We have a lot of AA stuff from PEQ already built into the database. We also have the EverQuest combat formulas hardcoded in the database. Give people a framework on which to build off of, and people will do that. I personally think that we're scaring people off and making it too user friendly by giving everyone their cake and letting them devour it. When people look at the EQEmulator codebase, we don't see a base framework, we instead see the EverQuest Live servers being emulated, instead of the EverQuest client interacting with a server.

I really think, and this might be a bit harsh, that we should rip out everything properitary to ProjectEQ and allow for more customization, while keeping the ProjectEQ codebase as a branch. It would give people who want to keep up-to-date with ProjectEQ and their development and want to contribute to their project a chance to do so, and allow those who want a fully custom server to be able to do so without having to merge all of the PEQ changes out of server code. Yes, I am suggesting we go barebones with the emulator, but keep ProjectEQ in its own branch as an example for people learning how to code and then they can learn what to do and what not to do in the server itself. Ultimately, it's to allow those who want a custom server able to do so, and those who want to make a live-like server still able to. Documentation would be key, as people would be lost if we went barebones with this. This means we would have to document the eqstr_us.txt etc (all of the client files) to be able to do this, instead of alienating (and I use this term lightly, because we don't really alienate people, but instead not give information) people who want to learn how to make their own AA lines, people who want to see how the server source works and communicates with other parts, etc.

I really see it as a learning experience with the potential to have some really great and creative projects come out as a result. I just have been feeling recently as well, that because ProjectEQ is the only thing out there database-wise, that people feel alienated to do anything other than it.

Congdar
05-16-2009, 03:43 PM
...but this little thing is one of the many on a very large list of live-like things which damage the ability to do a clean customization...
What other things would you like to have a rule to turn off?

Secrets
05-16-2009, 06:40 PM
What other things would you like to have a rule to turn off?

http://www.google.com/codesearch/p?hl=en#gBbYfVgiBxk/trunk/EQEmuServer/zone/raids.cpp&q=getAA%20package:http://projecteqemu%5C.googlecode%5C.com&l=413

Stuff like that. No reason for having that AA hardcoded like that other than to have it on PEQ working with the PEQ Database, which is why a few of the IRC folks are making fun of the project and calling it PEQEmulator, because, it is essentially becoming properitary to PEQ.

I would much rather it have some kind of space we can put these AAs in, and build up ourselves and have ProjectEQ as a branch on SVN instead of it being the main code. That's just my 2 cents.

Congdar
05-16-2009, 07:26 PM
that link doesn't work for me... blank googlecode page.

ChaosSlayerZ
05-16-2009, 08:28 PM
the link works for me- just takes a WHILE to load

Yes, Secrets is right on - the server code should only be the means to conect to the client - everything else should be in a custom DB entry adjusteable on the fly at a whim of the server admin

ChaosSlayerZ
05-16-2009, 08:32 PM
What other things would you like to have a rule to turn off?

if I actualy start makign a list- it may get sizeable :D
Few months ago we allready had a discussion about hard coded weapon bonus dmg
Overall things like unique AA handling, build-in racial/class bonuses, combat formulas- all that should be controllable from DB rather than sit inside the source code. (thankfuly as of recent times many thinngs are and it pleases me)

BUt I am always on guard versus evil atempts at hard coding :cool:

trevius
05-16-2009, 08:40 PM
While I see points on both sides of the argument, I still think PEQ and EQLive should be the priority for code in EQEmu. Custom servers should still be custom EQ servers, and the more generic the server gets, the more this project becomes like a generic MMO engine. If that is what you want, you can get some for free or for a decent price that can be as general or specific as you want them.

I think we currently give plenty of customization options, but within reason. The more and more options that get added, the harder and harder the source is going to get to manage and the more database hits you will be getting for rule checks and what-not, which could build up to be some serious performance hits. This project wasn't designed from the ground up to be a generic MMO server, so it would take almost a complete rewrite to make it into one. I think we need to pick and chose our battles for customization. Anything within reason will not be turned down. But at the same time, I don't want to see 1000+ rules ever, and if ChaosSlayer had his way evertime, we would already be exceeding that amount :P

ChaosSlayerZ
05-16-2009, 08:52 PM
Anything within reason will not be turned down. But at the same time, I don't want to see 1000+ rules ever, and if ChaosSlayer had his way evertime, we would already be exceeding that amount :P

oh Trev don't scare people off like that. I think i REALY stick out for custom rule like total of 2 times before :D

In in this specific case with Sky - I am VERY firm- the feature which about to be implemented feels like a zone script event and should realy be handled as one.
Afterall- we didn't hardcoded "no levitation" into all the dungeons - there was better way around which didn't step on anyones toes :cool:

The major diffirent betwin doing everything LIVE way and doing it the custom way is that, if its done the LIVE way - this feature is dead locked for all eternity. If its done custom way - you can stil produce same result as LIVE, but it also gives FREEDOM to everyone of doing it difirently or not doing at all.

Customization - is freedom for everyone. LIVE- only benefits LIVE

cavedude
05-16-2009, 09:05 PM
http://www.google.com/codesearch/p?hl=en#gBbYfVgiBxk/trunk/EQEmuServer/zone/raids.cpp&q=getAA%20package:http://projecteqemu%5C.googlecode%5C.com&l=413

Stuff like that. No reason for having that AA hardcoded like that other than to have it on PEQ working with the PEQ Database, which is why a few of the IRC folks are making fun of the project and calling it PEQEmulator, because, it is essentially becoming properitary to PEQ.

I would much rather it have some kind of space we can put these AAs in, and build up ourselves and have ProjectEQ as a branch on SVN instead of it being the main code. That's just my 2 cents.

Wrong, try again. The changes in the code are made first and THEN ProjectEQ changes its database to make it compatible, just like everybody else. I have no fucking clue why people claim PEQ is taking over EQEmu but please for my sanity stop it! We only handle the DB and quests, and ultimately are at the mercy of whatever code is put into SVN!

Secrets
05-16-2009, 09:14 PM
Wrong, try again. The changes in the code are made first and THEN ProjectEQ changes its database to make it compatible, just like everybody else. I have no fucking clue why people claim PEQ is taking over EQEmu but please for my sanity stop it! We only handle the DB and quests, and ultimately are at the mercy of whatever code is put into SVN!

No idea on why they think that; I never claimed it, just people on IRC are thinking that. Sorry if I offended you, but it's just the IRC crowd presently that are thinking that (and it's because of the fact that people implement the AAs hardcoded in code, amongst other things. I know you guys are innocent bystanders.)

I know we are talking about code that gets in, and most of that is related to making the server work torwards live, which ironically is what PEQ is doing database wise. I just think the *code* needs to take a different direction than it currently is, not the database and quests.

I seriously like the idea of emulating live. It's a wonderful idea. I just don't want this project to *only* do that.

Congdar
05-16-2009, 09:22 PM
Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
Timestamp: Sun, 17 May 2009 01:12:31 UTC


Message: Not implemented

Line: 277
Char: 259
Code: 0
URI: http://www.google.com/codesearch/js/com.google.codesearch.CachedFile/312B5123B5D57B37203A9F425BE4F703.cache.js

Must be ie8... it says that link sucks.

Secrets
05-16-2009, 09:26 PM
the link works for me- just takes a WHILE to load

Yes, Secrets is right on - the server code should only be the means to conect to the client - everything else should be in a custom DB entry adjusteable on the fly at a whim of the server admin

No, this is not what I suggested. If you had a thousand rules that were loaded every time, you'd have to tweak them and basically overload MySQL all the time. I am suggesting the code should be customizable in the regards that there should be 2 branches: One for emulating live, and one that is blank that you can build your own systems off of, whether that means stealing code from the emulation of live, or creating your own ground-up framework. It really saddens me that I see people in our community try and make a server and get completely lost while doing so. I have a strong feeling that's due to the server setup being too user friendly. If you have a person relying on just a server setup auto-install, they don't get to make Perl quests, they don't get to do any form of compiling in C++... and they don't learn. Granted, the option is nice for those who are playing LAN servers, but I would rather see the option available for those who wish to create their own custom ground-up servers.

Obviously it's going to be faster to process rules in C rather than loading them and then processing them from MySQL into C. And no one is going to be able to do that while we have a ton of rules stating what you can tweak, thus resulting in more CPU on MySQL, amongst other things related to the actual process waiting back and forth from MySQL for results on things. I could be misunderstanding the rules (they may be loaded in to memory first, but, still -- stuff like loading NPC spawn timers, I'm sure if I looked hard enough I could find about 10-20 cases of this, sometimes involving entire tables.)

Ultimately, I see it this way. If people want to do custom servers, they should be able to start from a base and build up their server rather than always having the skills, spells, and whatever else there may be from live. If people want to have a live-like server, there is a codebase for that. I just want a little more freedom, I don't want war with anyone, and I don't mean to insult anyone's work -- I just want easy options.

Yeormom
05-16-2009, 09:34 PM
Think what would have happened if all our quests would be hard coded into source code...

Think would would have happened if all our npcs and items would be hard coded in code.
It would run faster.

Trev you are my only hope to save the emu =)
I didn't read too much of the text wall but I like this comment.

ChaosSlayerZ
05-16-2009, 09:40 PM
It would run faster.

.


aga, and everytime you would want to have a Gm event and add just one more npc or just 1 tiny little item - you would need to recompile the server :D

trevius
05-16-2009, 10:34 PM
Honestly, Secrets, what you are talking about is forking the entire project, because if we have to maintain separate trunks all of the time, there is no way both will be equal and eventually, people will work on either one or the other. I hope that never happens.

A large amount of what we can do is limited by the client. And for stuff that is not limited by the client, most things would require giving out patch files to anyone wanting to play on that server, which is something we try to avoid if/when possible.

Keep in mind that we have limited resources for development of the code, and it is ever evolving. If you look at how customizable servers are now compared to a year or 2 ago, I think you will find that it is becoming much more customizable, not less customizable. Sure, some things have to be hard coded, but if anyone can come up with a reasonable way to do it better with minimal impact on all server types, then they are welcome to make suggestions or submit the code themselves. It is rare that changes are turned down.

Secrets
05-16-2009, 11:09 PM
Honestly, Secrets, what you are talking about is forking the entire project, because if we have to maintain separate trunks all of the time, there is no way both will be equal and eventually, people will work on either one or the other. I hope that never happens.

A large amount of what we can do is limited by the client. And for stuff that is not limited by the client, most things would require giving out patch files to anyone wanting to play on that server, which is something we try to avoid if/when possible.

Keep in mind that we have limited resources for development of the code, and it is ever evolving. If you look at how customizable servers are now compared to a year or 2 ago, I think you will find that it is becoming much more customizable, not less customizable. Sure, some things have to be hard coded, but if anyone can come up with a reasonable way to do it better with minimal impact on all server types, then they are welcome to make suggestions or submit the code themselves. It is rare that changes are turned down.

Well -- if no one wants to do it, and someone comes along and make their own server, they'll have to merge all the live-like code out, and I guess that's fair enough, you get what you put in work-wise.

I think i've been looking over too many other projects recently, and I wanted to see how this idea would be received. I guess not so well.

Granted, I don't plan on doing it anytime soon, I just wanted to see more customization available for everyone. I haven't actually touched the emulator in a while, but still, I am noticing a trend here, and apparently I was mistaken.

Sorry for bringing this up in a negative light, then.

cavedude
05-16-2009, 11:29 PM
No idea on why they think that; I never claimed it, just people on IRC are thinking that. Sorry if I offended you, but it's just the IRC crowd presently that are thinking that (and it's because of the fact that people implement the AAs hardcoded in code, amongst other things. I know you guys are innocent bystanders.)

I know we are talking about code that gets in, and most of that is related to making the server work torwards live, which ironically is what PEQ is doing database wise. I just think the *code* needs to take a different direction than it currently is, not the database and quests.

I seriously like the idea of emulating live. It's a wonderful idea. I just don't want this project to *only* do that.

Sorry if I overreacted. Not a great day here for me, and I don't like people misusing the PEQ name.

AAs and spells, you know I would love to see a database or script based system for those, so the effects can be changed on the fly. I think EQ2Emu has a system like that using LUA and it could be pretty nifty. But, the thing is somebody has to write it! That's all it takes, really.

As for the code, I agree that it should be customizable but not to the point where the main focus of this project (emulating EverQuest) is lost. I think the community is doing a great deal to allow this. We have bots in the code, TONS of rules, and just about everything is open source around here allowing anybody to change stuff as they wish. If just emulating EverQuest was what happens here, then we would have no need for rules, and things like the bots would never ever see SVN.

ChaosSlayerZ
05-17-2009, 12:17 AM
As for the code, I agree that it should be customizable but not to the point where the main focus of this project (emulating EverQuest) is lost. .

Cavedude, Emulating Everquest so it allows us to play everquest is the goal of everyone here. The diffirence is HOW we want to play everquest.
The main purpose of the server code is to allow us utilize the client resourses - such as the game engine and graphics. Everything else is secondary.

MANY people who have quit EQ and now here is because they could not stand the way SONY was handlign things INCLUDING how they handled the content given resources they have.

Why did project started in the first place? Cuase someone was not happy with the original.

Look which servers have top popularity among emu players:

Stormhaven - custom content
Scars of Amerous - custom content
Raid Addicts - very custom content
Shards of Delaya - ok given not part of this community- but LARGEST population of any eq-emulation - ultra custom content

Do people realy want to play the same old game over and over and over, the same zones and kill the same exact orc pawn in crushbone for zillionth time?

Think why games like StarCrat and warCraft 3 have outlived themselves? Cuase they came with EDITORS so powerful that allowed people to make their game and complitly diffirent from original.
If those game would not have those editors - they would die out and be forgotten in 5-6 month after release once the hype was over - which has happened with every other game in history.
Learn from this lesson.

Now think what would have happened if SONy had never made Kunark expansion - most of peopel here would never even herd of eq1 cuase it would have been long dead and forgotten.
And the only reason eq1 stil active today (despite loosing majority of its population when eq2/wow came out) - is cuase sony keeps poping out NEW content every 8 month.

Essentialy what I want to do - is to give people NEW content (and I am sure that MANY custom server devs want the same thing), but if dreadful spirit of "how things were on live" keeps hanging around, I will eventualy fail.

Now If we could please get back to the original topic- I want to once again point out that hardcoding somethign like this (pets in Sky) is like hardcoding "no leviation" for dungeons. The feature is a "zone content" - and not a part of the global gameplay, and should be handled via zone script. And I think that Trev has shown as a direction of how to do it.

Think about dozens of things a user of the Emu WON'T be able to do if this fetaure is hard coded, just becuase it was one little special on LIVE.
Yet it will ruin the options of doing what we want with the game for the rest of us.

drakelord
05-17-2009, 01:41 AM
Well now, this thread got hijacked sideways. As someone who has played through over 12 MMO's and has had plenty of experience, I'll add in my two cents for whoever cares.

The way I see it, Everquest is a program developed by Sony Online Entertainment that contains maps, models, a GUI, and a basic set of functional rules that the client is governed by. Everything else that exists in the "live" Everquest world is simply an arrangement of the content provided in the client.

I am fairly certain based on my programming classes and discussions with game devs that the server code that SoE uses is designed to be highly variable. Just as an example that is not an MMO, take the source engine and half-life 2. If you open up say, a file for the weapons, you will see about 3 pages worth of #define 's that allow for quick changing of stats such as weapon speed, damage, etc. Albeit this is not in the database, and is in the actual code, it is designed in a way that allows for a quick change if needed.

This is how I feel the server code for EqEmu should be handled. Everything should be designed in a way that makes it fast and powerful, but also fluid. Not only would this help individuals who are not masters at C++/programming, but it would allow for quick changes to emulate events that happen on places such as EQLive. I wouldn't mind 1000 "rules" as long as they are properly arranged and designed with proper documentation to make them effective, if it meant that entire functions would not have to be adjusted if something changed on live.

Secrets
05-17-2009, 10:39 AM
Well now, this thread got hijacked sideways.

I wouldn't say it got hijacked... maybe brutally mauled now and there. ;)

I think it's nice we can have civil discussion like this. I think there's a bit of existing tension over the matter of what gets into code, and it's nice that we discuss the future of the project... it just so happens that it was in this thread.

Dibalamin
05-17-2009, 12:13 PM
To kinda help get back on track:

Trev, I've never been able to run a script on a pet with sub EVENT_SPAWN. I spent DAYS trying to use it to stop enchanter pets from punching by adding the gear to them via a perl script. I eventually had to cave and start the timer in spawn and have the sub EVENT_TIMER add the gear.

Not clean but effective.

I've already blocked the spells in sky that aren't supposed to be there, that isn't a big deal for me & I tried remodeling the mobs just for Sky, big fat failure. From a development standpoint, I think source is the right fix for this issue if live emulation is the target.

Congdar
05-17-2009, 12:32 PM
Trev, I've never been able to run a script on a pet with sub EVENT_SPAWN...I eventually had to cave and start the timer in spawn and have the sub EVENT_TIMER add the gear.

Not clean but effective.
The second to the last line in Mob::MakePet() is entity_list.AddNPC(npc); and if you change it to entity_list.AddNPC(npc, true, true); and then put your code back into EVEN_SPAWN from EVENT_TIMER it will work.


I've already blocked the spells in sky that aren't supposed to be there, that isn't a big deal for me & I tried remodeling the mobs just for Sky, big fat failure. From a development standpoint, I think source is the right fix for this issue if live emulation is the target.
There had to be over 50 non-air pet spells for the magicain that you had to add to the table. could you share that sql?

nilbog
05-17-2009, 01:38 PM
Thanks a lot for posting the source fix for this issue Congdar. From everything I remember from the 1st time I went to airplane, till I quit playing live, necro and mage pets were wisps and djinni.

I took a while one day and fixed the pets using scripts.. and I have to say, it felt like a cheap workaround. Using the timer method, it still has a delay till everything looks right. My method involved creating 2 new illusion spells, wisp and djinn.

heres illusion code for skeleton pet, if it might help anyone w/ anything else.

sub EVENT_DEATH{
quest::say("Sorry to have failed you, oh Great One.");
}

sub EVENT_SPAWN {
quest::say("At your service Master.");
$mobzone = $npc->GetZoneID() ;
if ($mobzone == 71) {
quest::settimer(1,0);
}
}

sub EVENT_TIMER {
if($timer eq "1") {
$skel = $entity_list->GetMobByNpcTypeID(614);
if ($skel) {
$wisp = $skel->CastToNPC();
$npc->CastSpell(8450,$npc);
quest::stoptimer(1);
}
}
}

Thanks again Congdar!

Dibalamin
05-17-2009, 01:44 PM
I PM'd you my email Congdar, drop me a line there and I can send you the blocked_spells table...me and queries don't mix.

cavedude
05-17-2009, 05:48 PM
Would you mind making that SQL public? I was meaning to do it myself one day but if you've already got it done, then no need to reinvent the wheel.

Going way back to the original code. From a content standpoint it is correct. Before going into SVN, a simple rule can be added to disable it if anybody doesn't want their airplane changed, no big deal. (I can understand that and agree with that.) Now, I do believe you have a technical issue which KLS would know more about. I believe specifying the zoneid may not work once the instancing stuff hits trunk. But, again you'll need to clarify with KLS.

Dibalamin
05-17-2009, 06:16 PM
It isn't complete yet, few more spells need blocked, but my eyes started crossing after doing #findspell over and over and over.

Keep in mind, this SQL will block all (I think) forms of teleportation from the plane of sky including gate. Leaving the parachute the only way to leave the plane. As well as coth. Alter plane sky will still function by teleporting you to the first island.

I don't think I blocked Lev spells yet.

http://www.stormrunner.net/download/blockedspells.sql

Congdar
05-19-2009, 09:28 PM
OK, here it is. The Plane of Sky and all its quirkiness: http://mysite.verizon.net/drexxell/eq/planeofsky.html
After looking around a bit, I found that the delay with the perl changing the pet appearance could be fixed.

in \zone\pets.cpp the second to the bottom line in Mob::MakePet()

change

entity_list.AddNPC(npc);

to

entity_list.AddNPC(npc, true, true);


in \quests\airplane\ here is player.pl cuz buffs are stripped when players enter Sky

############################################
# ZONE: Plane of Sky (airplane)
# LAST EDIT DATE: May 17, 2009
# VERSION: 1.0
# DEVELOPER: Congdar
#
# NAME: player.pl
#
# *** QUESTS INVOLVED IN ***
#
# Plane of Sky Quirkiness
#
# *** QUESTS AVAILABLE TO ***
#
# All Players
#
############################################

sub EVENT_ENTERZONE
{
$client->BuffFadeAll();
}
#END of FILE Zone:airplane ID:player.pl


Necromancer and Shadowknight pets appear as normal when zoning into Plane of Sky, but if summoned when in the zone they appear as a Pink Will-o-Wisp
Now i'm only going to do this for one(sorry CD) Necromancer/Shadowknight pet, but here's the list of all Necromancer/Shadoknight pet npc id's from peq npc_types table. The id should probably be used for the perl file name since the name 'skel_pet_1_' etc. changes to 'PCName`s Pet'
I'm sure the Necromancer/Shadowknight isn't going to summon up thier lowest level pets for fighting in Sky, but if they did they need to behave the same way.

614.pl
615.pl
616.pl
617.pl
618.pl
619.pl
620.pl
621.pl
622.pl
623.pl
624.pl
625.pl
626.pl
627.pl
628.pl
629.pl
630.pl
631.pl
632.pl
633.pl
634.pl
663.pl

When the 66+ Titanium and SoF Necromancer/Shadowknight pets get added, the perl files will need to be created for thier id but they aren't in the database yet.

skel_pet_72
sk_pet_73
skel_pet_75
skel_pet_77
sk_pet_78_Rk1
sk_pet_78_Rk2
sk_pet_78_Rk3
skel_pet_80

The highlighted parts need to be changed for each .pl file.

############################################
# ZONE: Plane of Sky (airplane)
# LAST EDIT DATE: May 17, 2009
# VERSION: 1.0
# DEVELOPER: Congdar
#
# *** NPC INFORMATION ***
#
# NAME: skel_pet_1_
# ID: 614
# TYPE: Pet
# RACE: 367 (New Skeleton Model)
# LEVEL: 1
#
# *** QUESTS INVOLVED IN ***
#
# Plane of Sky Quirkiness
# Necromancer/Shadowknight Pets become a Pink Will-o-Wisp
#
# *** QUESTS AVAILABLE TO ***
#
# All Necromancer/Shadowknight Pets
#
############################################

sub EVENT_SPAWN
{
quest::npcrace(69);
quest::npctexture(1);
quest::npcsize(4);
}
#END of FILE Zone:airplane ID:614 -- skel_pet_1_


Magician pets appear as normal when zoning into Plane of Sky, but if summoned when in the zone they appear as a Female Djinn
Now i'm only going to do this for one(sorry CD) Magician pet, but here's the list of all Magician pet npc id's from peq npc_types table. The id should probably be used for the perl file name since the name 'skel_pet_1_' etc. changes to 'PCName`s Pet'
I'm sure the Magician isn't going to summon up thier lowest level pets for fighting in Sky, but if they did they need to behave the same way.

552.pl
553.pl
554.pl
555.pl
556.pl
557.pl
558.pl
559.pl
560.pl
561.pl
562.pl
563.pl
564.pl
565.pl
566.pl

When the 66+ Titanium and SoF Magician Air Elemental pets get added, the perl files will need to be created for thier id but they aren't in the database yet.

SumAirR17
SumAirR18

The highlight parts need to be changed for each .pl file.

############################################
# ZONE: Plane of Sky (airplane)
# LAST EDIT DATE: May 17, 2009
# VERSION: 1.0
# DEVELOPER: Congdar
#
# *** NPC INFORMATION ***
#
# NAME: SumAirR2
# ID: 552
# TYPE: Pet
# RACE: 75 (Elemental)
# LEVEL: 6
#
# *** QUESTS INVOLVED IN ***
#
# Plane of Sky Quirkiness
# Magician Air Elemental Pet becomes a Female Djinn
#
# *** QUESTS AVAILABLE TO ***
#
# All Magician Air Elemental Pets
#
############################################

sub EVENT_SPAWN
{
quest::npcsize(5);
quest::npcrace(126);
}
#END of FILE Zone:airplane ID:552 -- SumAirR2


There are a lot of spells that are blocked in the Plane of Sky. You can read about them in the link at the top of this post. Here's the dump from the peq blocked_spells table for zone 71 (Plane of Sky) Credit to Dibalamin for supplying some of them. These are spells through SoF level 80.
This dump does not include the one Call of the Hero that was already in the table.


-- MySQL dump 10.11
--
-- Host: localhost Database: peq
-- ------------------------------------------------------
-- Server version 5.0.67-community-nt

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Dumping data for table `blocked_spells`
--
-- WHERE: zoneid=71

LOCK TABLES `blocked_spells` WRITE;
/*!40000 ALTER TABLE `blocked_spells` DISABLE KEYS */;
INSERT INTO `blocked_spells` VALUES (26,2028,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(27,2432,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(28,2433,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(29,2734,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(30,2944,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(31,2945,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(32,530,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(33,531,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(34,532,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(35,533,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(36,534,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(37,535,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(38,536,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(39,537,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(40,538,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(41,550,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(42,551,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(43,552,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(44,553,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(45,554,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(46,555,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(47,556,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(48,557,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(49,558,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(50,1398,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(51,1434,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(52,1438,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(53,1440,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(54,1517,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(55,2020,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(56,1326,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(57,1516,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(58,2021,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(59,2029,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(60,2030,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(61,2031,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(62,561,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(63,562,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(64,563,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(65,564,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(66,565,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(67,566,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(68,567,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(69,568,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(70,1399,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(71,1418,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(72,1423,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(73,1425,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(74,2420,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(75,1334,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(76,1336,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(77,1337,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(78,1338,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(79,1339,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(80,1371,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(81,1372,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(82,1373,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(83,1374,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(84,1375,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(85,1422,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(86,2022,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(87,2023,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(88,2024,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(89,2025,1,71,0,0,0,0,0,0,'You cannot cast that here.',''),(90,58,1,71,0,0,0,0,0,0,'Unseen forces prevent you from doing that.','description'),(91,315,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(92,316,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(93,335,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(94,336,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(95,395,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(96,397,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(97,398,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(98,399,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(99,401,1,71,0,0,0,0,0,0,'Un seen forces prevent you from doing that.','description'),(100,402,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(101,403,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(102,496,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(103,497,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(104,498,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(105,569,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(106,570,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(107,571,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(108,573,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(109,574,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(110,575,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(111,620,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(112,621,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(113,622,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(114,625,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(115,626,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(116,628,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(117,629,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(118,630,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(119,632,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(120,633,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(121,634,1,71,0,0,0,0,0,0,'U nseen forces prevent you from doing that.','description'),(122,1400,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(123,1402,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(124,1404,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(125,1671,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(126,1672,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(127,1673,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(128,1675,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(129,1676,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(130,1677,1,71,0,0,0,0,0,0,' Unseen forces prevent you from doing that.','description'),(177,12582,1,71,0,0,0,0,0,0, 'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(176,12581,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(175,12580,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(174,12516,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(173,12515,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(172,12514,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(171,11552,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(170,8258,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(169,8257,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(168,8256,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(167,7867,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(166,6228,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(165,6227,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(164,6226,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(163,4554,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(162,4553,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(161,4552,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(160,4460,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(159,3870,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(158,3869,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(157,3807,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(156,3649,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(155,3640,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(154,3639,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(150,3635,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(153,3638,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(152,3637,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(151,3636,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(149,3634,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(148,3633,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(147,3288,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(145,3286,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(144,4566,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(143,4565,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(142,4564,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(141,3270,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(146,3287,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(140,3269,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(139,3268,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(138,12648,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(137,12647,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(136,12646,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(135,4827,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(134,4826,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(133,3285,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(132,3284,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(131,3283,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(178,12765,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(179,12766,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(180,12767,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(181,12829,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(182,36,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(183,541,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(184,542,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(185,543,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(186,544,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(187,545,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(188,546,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(189,547,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(190,548,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(191,1320,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(192,1325,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(193,1354,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(194,1417,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(195,2026,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(196,2027,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(197,2028,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(198,2418,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(199,2423,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(200,2428,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(201,3046,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(202,3183,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(203,3795,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(204,4963,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(205,5734,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(206,6176,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(207,6181,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(208,8238,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(209,8968,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(210,10876,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(211,10879,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(212,10882,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(213,11654,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(214,2425,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(215,2430,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(216,3134,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(217,3180,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(218,4965,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(219,5732,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(220,6178,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(221,6183,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(222,6836,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(223,8236,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(224,8966,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(225,10875,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(226,10878,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(227,10881,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(228,10991,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(229,11984,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(230,2419,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(231,2424,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(232,2429,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(233,2184,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(234,3792,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(235,4966,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(236,5731,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(237,6179,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(238,6184,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(239,8235,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(240,8965,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(241,9951,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(242,9954,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(243,9957,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(244,11981,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(245,2421,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(246,2426,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(247,2431,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(248,2943,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(249,3181,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(250,3243,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(251,3833,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(252,4964,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(253,5735,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(254,6177,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(255,6182,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(256,8239,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(257,8969,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(258,10874,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(259,10877,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(260,10880,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(261,11983,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(262,666,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(263,3849,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(264,8771,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(265,2931,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(266,1322,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(267,1264,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(268,1199,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(269,2293,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(270,2294,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(271,2295,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(272,2296,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(273,2297,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(274,2298,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(275,2299,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(276,2300,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(277,2301,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(278,2302,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(279,2303,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(280,2304,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(281,3612,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(282,3789,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(283,3790,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(284,3812,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(285,11204,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(286,11504,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(287,11505,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(288,1826,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(289,3782,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(290,1265,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(291,3615,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(292,602,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(293,603,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(294,604,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(295,605,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(296,606,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(297,607,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(298,608,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(299,609,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(300,610,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(301,611,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(302,1566,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(303,1567,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(304,1626,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(305,1627,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(306,1628,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(308,1737,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(309,1738,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(310,1739,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(311,2183,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(312,2558,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(313,2771,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(314,3244,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(315,354,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(316,375,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(317,528,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(318,739,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(319,872,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(320,35,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(321,6093,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Gate spells in Plane of Sky'),(323,2272,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(324,3292,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(325,3293,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(326,3294,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(327,5110,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(328,5111,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(329,12759,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(330,12760,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(331,12761,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky'),(332,480,1,71,0,0,0,0,0,0,'You cannot cast that here.','No Swarm Pets in Plane of Sky');
/*!40000 ALTER TABLE `blocked_spells` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2009-05-20 1:09:22

trevius
05-19-2009, 09:52 PM
Is there any reason why the default.pl couldn't be used like I mentioned to make all of the pet stuff work with 1 simple script? I posted an example. Maybe there is something I am not thinking about. Here it is again:

default.pl
sub EVENT_SPAWN {

#75 Elemental
#209 Earth Elemental
#210 Air Elemental
#211 Water Elemental
#212 Fire Elemental

if ($race == 75 && $texture != 3 || $race == 209 || $race == 211 || $race == 212)
quest::echo(15,"You can only summon Air pets here");
quest::depop();
}

if ($race == 75 && $texture == 3 || $race == 210) {
#set your timer and do the race change stuff
}

}

Can probably just do similar stuff like that for all scenarios I bet. If needed, I am sure it wouldn't be hard to check to make sure it is a client's pet before depoping or changing it. I dunno if texture is a variable yet or not, but if not, I think "my $texture = $npc->GetTexture();" should work.

Congdar
05-19-2009, 10:01 PM
because the player burns the mana for casting the pet if you do it that way.

trevius
05-19-2009, 10:21 PM
Ahh, I see. There is probably a way to correct that (at least most of the way) by using some of the following commands:

GetActSpellCost(spell_id, cost)
CastingSpellID()
GetMana()
GetMaxMana()
SetMana(amount)

But most likely it would take a sub EVENT type to allow what you would be needing to do. A sub EVENT_CASTING would do the trick I think. That and/or a new function that could actually check certain fields of the spell table and get their values would be sweet. Then, you would just check for those type of spells and do an interrupt on them if they are cast. Then, you would just use the new command to do what you were wanting to do in the first place with this line:

if(strncmp(spells[spell_id].teleport_zone, "SumAir", 6) != 0)

Accept you would be able to do it with Perl instead and save a lot of hassle.

Congdar
05-19-2009, 11:30 PM
I think adding the new sub EVENT is the hassle, so I added the spells to the blocked_spells table instead.