Also, can use SendWearChange I believe. I did add these commands to my server. I broke them down to 8 commands to keep things easier. Could also easily do it as one command. But, here is what we have:
Add to perlparser.cpp
Code:
XS(XS__npcrace);
XS(XS__npcrace)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: npcrace(race_id)");
int race_id = (int)SvIV(ST(0));
quest_manager.npcrace(race_id);
XSRETURN_EMPTY;
}
XS(XS__npcgender);
XS(XS__npcgender)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: npcgender(gender_id)");
int gender_id= (int)SvIV(ST(0));
quest_manager.npcgender(gender_id);
XSRETURN_EMPTY;
}
XS(XS__npcsize);
XS(XS__npcsize)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: npcsize(newsize)");
int newsize = (int)SvIV(ST(0));
quest_manager.npcsize(newsize);
XSRETURN_EMPTY;
}
XS(XS__npctexture);
XS(XS__npctexture)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: npctexture(newtexture)");
int newtexture = (int)SvIV(ST(0));
quest_manager.npctexture(newtexture);
XSRETURN_EMPTY;
}
XS(XS__playerrace);
XS(XS__playerrace)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: playerrace(race_id)");
int race_id = (int)SvIV(ST(0));
quest_manager.playerrace(race_id);
XSRETURN_EMPTY;
}
XS(XS__playergender);
XS(XS__playergender)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: playergender(gender_id)");
int gender_id= (int)SvIV(ST(0));
quest_manager.playergender(gender_id);
XSRETURN_EMPTY;
}
XS(XS__playersize);
XS(XS__playersize)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: playersize(newsize)");
int newsize = (int)SvIV(ST(0));
quest_manager.playersize(newsize);
XSRETURN_EMPTY;
}
XS(XS__playertexture);
XS(XS__playertexture)
{
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: playertexture(newtexture)");
int newtexture = (int)SvIV(ST(0));
quest_manager.playertexture(newtexture);
XSRETURN_EMPTY;
}
And also add to perlparser.cpp
Code:
newXS(strcpy(buf, "npcrace"), XS__npcrace, file);
newXS(strcpy(buf, "npcgender"), XS__npcgender, file);
newXS(strcpy(buf, "npcsize"), XS__npcsize, file);
newXS(strcpy(buf, "npctexture"), XS__npctexture, file);
newXS(strcpy(buf, "playerrace"), XS__playerrace, file);
newXS(strcpy(buf, "playergender"), XS__playergender, file);
newXS(strcpy(buf, "playersize"), XS__playersize, file);
newXS(strcpy(buf, "playertexture"), XS__playertexture, file);
Now, add to questmgr.cpp
Code:
void QuestManager::npcrace(int race_id)
{
owner->SendIllusionPacket(race_id);
}
void QuestManager::npcgender(int gender_id)
{
owner->SendIllusionPacket(owner->GetRace(), gender_id);
}
void QuestManager::npcsize(int newsize)
{
owner->ChangeSize(newsize, true);
}
void QuestManager::npctexture(int newtexture)
{
owner->SendIllusionPacket(owner->GetRace(), 0xFF, newtexture);
}
void QuestManager::playerrace(int race_id)
{
initiator->SendIllusionPacket(race_id);
}
void QuestManager::playergender(int gender_id)
{
initiator->SendIllusionPacket(initiator->GetRace(), gender_id);
}
void QuestManager::playersize(int newsize)
{
initiator->ChangeSize(newsize, true);
}
void QuestManager::playertexture(int newtexture)
{
initiator->SendIllusionPacket(initiator->GetRace(), 0xFF, newtexture);
}
And finally add to questmgr.h
Code:
void npcrace(int race_id);
void npcgender(int gender_id);
void npcsize(int newsize);
void npctexture(int newtexture);
void playerrace(int race_id);
void playergender(int gender_id);
void playersize(int newsize);
void playertexture(int newtexture);
Now, usage from our Edone.pl npc:
Code:
sub EVENT_SAY {
if($text=~/hail/i) {
quest::say("As you wish!");
}
if($text=~/race/i) {
quest::say("As you wish!");
quest::npcrace(217);
quest::playerrace(217);
}
if($text=~/gender/i) {
quest::say("As you wish!");
quest::npcgender(1);
quest::playergender(1);
}
if($text=~/size/i) {
quest::say("As you wish!");
quest::npcsize(20);
quest::playersize(20);
}
if($text=~/texture/i) {
quest::say("As you wish!");
quest::npctexture(22);
quest::playertexture(15);
}
}
If you do not know how to compile these changes, see
http://www.eqemulator.net/wiki/wikka...a=DevVSExpress.
Also, if you have any questions, feel free to PM me or look for me on irc as Striat.