void cTerritory::processNode( const cElement* Tag ) { QString TagName( Tag->name() ); QString Value( Tag->value() ); //<guards> // <npc mult="2">npcsection</npc> (mult inserts 2 same sections into the list so the probability rises! // <npc><random list="npcsectionlist" /></npc> // <list id="npcsectionlist" /> //</guards> if ( TagName == "guards" ) { for ( unsigned int i = 0; i < Tag->childCount(); ++i ) { const cElement* childNode = Tag->getChild( i ); if ( childNode->name() == "npc" ) { UI32 mult = childNode->getAttribute( "mult" ).toInt(); if ( mult < 1 ) mult = 1; for ( UI32 i = 0; i < mult; i++ ) this->guardSections_.push_back( childNode->value() ); } else if ( childNode->name() == "list" && childNode->hasAttribute( "id" ) ) { QStringList NpcList = Definitions::instance()->getList( childNode->getAttribute( "id" ) ); QStringList::const_iterator it( NpcList.begin() ); for ( ; it != NpcList.end(); ++it ) this->guardSections_.push_back( *it ); } } } // <guardowner>text</guardowner> else if ( TagName == "guardowner" ) if ( Value == "the town" ) this->guardowner_ = ""; else this->guardowner_ = Value; // <midilist>MIDI_COMBAT</midilist> else if ( TagName == "midilist" ) this->midilist_ = Value; else if ( TagName == "flags" ) { flags_ = 0; for ( unsigned int i = 0; i < Tag->childCount(); ++i ) { const cElement* childNode = Tag->getChild( i ); if ( childNode->name() == "guarded" ) setGuarded( true ); else if ( childNode->name() == "nomark" ) setNoMark( true ); else if ( childNode->name() == "nogate" ) setNoGate( true ); else if ( childNode->name() == "norecallout" ) setNoRecallOut( true ); else if ( childNode->name() == "norecallin" ) setNoRecallIn( true ); else if ( childNode->name() == "recallshield" ) setRecallShield( true ); else if ( childNode->name() == "noagressivemagic" ) setNoAgressiveMagic( true ); else if ( childNode->name() == "antimagic" ) setAntiMagic( true ); else if ( childNode->name() == "escortregion" ) setValidEscortRegion( true ); else if ( childNode->name() == "cave" ) setCave( true ); else if ( childNode->name() == "nomusic" ) setNoMusic( true ); else if ( childNode->name() == "noguardmessage" ) setNoGuardMessage( true ); else if ( childNode->name() == "noentermessage" ) setNoEnterMessage( true ); } } // <snowchance>50</snowchance> else if ( TagName == "snowchance" ) this->snowchance_ = Value.toUShort(); // <rainchance>50</rainchance> else if ( TagName == "rainchance" ) this->rainchance_ = Value.toUShort(); // <tradesystem> // <good num="1"> // <buyable>10</buyable> // <sellable>20</sellable> // <randomvalue min="10" max="20" /> // </good> // <good ...> // ... // </good> // </tradesystem> else if ( TagName == "tradesystem" ) { for ( unsigned int i = 0; i < Tag->childCount(); ++i ) { const cElement* childNode = Tag->getChild( i ); good_st goods; goods.buyable = 0; goods.sellable = 0; goods.rndmin = 0; goods.rndmax = 0; UI32 num = 0xFFFFFFFF; if ( childNode->name() == "good" ) { if ( childNode->hasAttribute( "num" ) ) num = childNode->getAttribute( "num" ).toInt(); for ( unsigned int j = 0; j < childNode->childCount(); ++j ) { const cElement* chchildNode = childNode->getChild( j ); QString childValue = chchildNode->value(); if ( chchildNode->name() == "buyable" ) goods.buyable = childValue.toInt(); else if ( chchildNode->name() == "sellable" ) goods.sellable = childValue.toInt(); else if ( chchildNode->name() == "randomvalue" ) { goods.rndmin = chchildNode->getAttribute( "min" ).toInt(); goods.rndmax = chchildNode->getAttribute( "max" ).toInt(); } } } if ( num != 0xFFFFFFFF ) this->tradesystem_[num] = goods; } } // <region id="Cove Market Place"> // ...region nodes... // </region> else if ( TagName == "region" ) { cTerritory* toinsert_ = new cTerritory( Tag, this ); this->subregions_.push_back( toinsert_ ); } else if ( TagName == "teleport" ) { if ( !Tag->hasAttribute( "source" ) ) { qWarning( "ERROR: processing teleport tag, missing source attribute" ); return; } if ( !Tag->hasAttribute( "destination" ) ) { qWarning( "ERROR: processing teleport tag, missing destination attribute" ); return; } Coord_cl source, destination; if ( !parseCoordinates( Tag->getAttribute( "source" ), source ) ) { qWarning( "ERROR: parsing source attribute, not a valid coordinate vector" ); return; } if ( !parseCoordinates( Tag->getAttribute( "destination" ), destination ) ) { qWarning( "ERROR: parsing destination attribute, not a valid coordinate vector" ); return; } bool bothways = Tag->hasAttribute( "bothways" ); teleporters_st teleporter; teleporter.source = source; teleporter.destination = destination; teleporters.append( teleporter ); if ( bothways ) { teleporter.source = destination; teleporter.destination = source; teleporters.append( teleporter ); } } else cBaseRegion::processNode( Tag ); }
void cTerritory::processNode( const cElement* Tag, uint hash ) { QString TagName( Tag->name() ); QString Value( Tag->value() ); //<guards> // <npc mult="2">npcsection</npc> (mult inserts 2 same sections into the list so the probability rises! // <npc><random list="npcsectionlist" /></npc> // <list id="npcsectionlist" /> //</guards> if ( TagName == "guards" ) { for ( uint i = 0; i < Tag->childCount(); ++i ) { const cElement* childNode = Tag->getChild( i ); if ( childNode->name() == "npc" ) { uint mult = childNode->getAttribute( "mult" ).toInt(); if ( mult < 1 ) mult = 1; for ( uint j = 0; j < mult; j++ ) this->guardSections_.push_back( childNode->value() ); } else if ( childNode->name() == "list" && childNode->hasAttribute( "id" ) ) { QStringList NpcList = Definitions::instance()->getList( childNode->getAttribute( "id" ) ); QStringList::const_iterator it( NpcList.begin() ); for ( ; it != NpcList.end(); ++it ) this->guardSections_.push_back( *it ); } } } // <fixedlight>number</fixedlight> else if ( TagName == "fixedlight" ) this->fixedlight_ = Value.toShort(); // <guardowner>text</guardowner> else if ( TagName == "guardowner" ) if ( Value == "the town" ) this->guardowner_ = ""; else this->guardowner_ = Value; // <resores>ORES</resores> else if ( TagName == "resores" ) this->resores_ = Value; // <firstcoin>IDofCOIN</firstcoin> else if ( TagName == "firstcoin" ) this->firstcoin_ = Value; // <secondcoin>IDofCOIN</secondcoin> else if ( TagName == "secondcoin" ) this->secondcoin_ = Value; // <thirdcoin>IDofCOIN</thirdcoin> else if ( TagName == "thirdcoin" ) this->thirdcoin_ = Value; // <midilist>MIDI_COMBAT</midilist> else if ( TagName == "midilist" ) this->midilist_ = Value; // <extraflags>ExtraFlags</extraflags> else if ( TagName == "extraflags" ) this->extraflags_ = Value.toUShort(); else if ( TagName == "flags" ) { flags_ = 0; for ( unsigned int i = 0; i < Tag->childCount(); ++i ) { const cElement* childNode = Tag->getChild( i ); if ( childNode->name() == "guarded" ) setGuarded( true ); else if ( childNode->name() == "nomark" ) setNoMark( true ); else if ( childNode->name() == "nogate" ) setNoGate( true ); else if ( childNode->name() == "norecallout" ) setNoRecallOut( true ); else if ( childNode->name() == "norecallin" ) setNoRecallIn( true ); else if ( childNode->name() == "recallshield" ) setRecallShield( true ); else if ( childNode->name() == "noagressivemagic" ) setNoAgressiveMagic( true ); else if ( childNode->name() == "antimagic" ) setAntiMagic( true ); else if ( childNode->name() == "escortregion" ) setValidEscortRegion( true ); else if ( childNode->name() == "cave" ) setCave( true ); else if ( childNode->name() == "nomusic" ) setNoMusic( true ); else if ( childNode->name() == "noguardmessage" ) setNoGuardMessage( true ); else if ( childNode->name() == "noentermessage" ) setNoEnterMessage( true ); else if ( childNode->name() == "nohousing" ) setNoHousing( true ); else if ( childNode->name() == "nodecay" ) setNoDecay( true ); else if ( childNode->name() == "instalogout" ) setInstaLogout( true ); else if ( childNode->name() == "noteleport" ) setNoTeleport( true ); else if ( childNode->name() == "safe" ) setSafe( true ); else if ( childNode->name() == "nocriminalcombat" ) setNoCriminalCombat( true ); else if ( childNode->name() == "nokillcount" ) setNoKillCount( true ); } } // <snowchance>50</snowchance> else if ( TagName == "snowchance" ) { this->snowchance_ = Value.toUShort(); } // <rainchance>50</rainchance> else if ( TagName == "rainchance" ) { this->rainchance_ = Value.toUShort(); } // <rainduration>2</rainduration> else if ( TagName == "rainduration" ) { this->rainduration_ = Value.toUShort(); } // <snowduration>2</snowduration> else if ( TagName == "snowduration" ) { this->snowduration_ = Value.toUShort(); } // <dryduration>4</dryduration> else if ( TagName == "dryduration" ) { this->dryduration_ = Value.toUShort(); } // <rainrangeduration>1</rainrangeduration> else if ( TagName == "rainrangeduration" ) { this->rainrangeduration_ = Value.toUShort(); } // <snowrangeduration>1</snowrangeduration> else if ( TagName == "snowrangeduration" ) { this->snowrangeduration_ = Value.toUShort(); } // <dryrangeduration>1</dryrangeduration> else if ( TagName == "dryrangeduration" ) { this->dryrangeduration_ = Value.toUShort(); } // <minintensity>1</minintensity> else if ( TagName == "minintensity" ) { this->minintensity_ = Value.toUShort(); } // <maxintensity>1</maxintensity> else if ( TagName == "maxintensity" ) { this->maxintensity_ = Value.toUShort(); } // <tradesystem> // <good num="1"> // <buyable>10</buyable> // <sellable>20</sellable> // <randomvalue min="10" max="20" /> // </good> // <good ...> // ... // </good> // </tradesystem> else if ( TagName == "tradesystem" ) { for ( unsigned int i = 0; i < Tag->childCount(); ++i ) { const cElement* childNode = Tag->getChild( i ); good_st goods; goods.buyable = 0; goods.sellable = 0; goods.rndmin = 0; goods.rndmax = 0; uint num = 0xFFFFFFFF; if ( childNode->name() == "good" ) { if ( childNode->hasAttribute( "num" ) ) num = childNode->getAttribute( "num" ).toInt(); for ( unsigned int j = 0; j < childNode->childCount(); ++j ) { const cElement* chchildNode = childNode->getChild( j ); QString childValue = chchildNode->value(); if ( chchildNode->name() == "buyable" ) goods.buyable = childValue.toInt(); else if ( chchildNode->name() == "sellable" ) goods.sellable = childValue.toInt(); else if ( chchildNode->name() == "randomvalue" ) { goods.rndmin = chchildNode->getAttribute( "min" ).toInt(); goods.rndmax = chchildNode->getAttribute( "max" ).toInt(); } } } if ( num != 0xFFFFFFFF ) this->tradesystem_[num] = goods; } } // <region id="Cove Market Place"> // ...region nodes... // </region> else if ( TagName == "region" ) { cTerritory* toinsert_ = new cTerritory( Tag, this ); this->subregions_.push_back( toinsert_ ); } else if ( TagName == "teleport" ) { if ( !Tag->hasAttribute( "source" ) ) { Console::instance()->log( LOG_ERROR, tr("processing teleport tag, missing source attribute") ); return; } if ( !Tag->hasAttribute( "destination" ) ) { Console::instance()->log( LOG_ERROR, tr("processing teleport tag, missing destination attribute") ); return; } Coord source, destination; if ( !parseCoordinates( Tag->getAttribute( "source" ), source ) ) { Console::instance()->log( LOG_ERROR, tr("parsing source attribute, not a valid coordinate vector") ); return; } if ( !parseCoordinates( Tag->getAttribute( "destination" ), destination ) ) { Console::instance()->log( LOG_ERROR, tr("parsing destination attribute, not a valid coordinate vector") ); return; } bool bothways = Tag->hasAttribute( "bothways" ); teleporters_st teleporter; teleporter.source = source; teleporter.destination = destination; teleporters.append( teleporter ); if ( bothways ) { teleporter.source = destination; teleporter.destination = source; teleporters.append( teleporter ); } } else cBaseRegion::processNode( Tag, hash ); }
/** * Change the guarded state of the method from Rexx code. * * @return No return value. */ RexxObject *MethodClass::setGuardedRexx( ) { setGuarded(); return OREF_NULL; }