//---------------------------------------------------------------------------- void CGuildMemberModule::quitGuild() { MODULE_AST( _GuildMemberCore ); CGuild * guild = EGS_PD_CAST<CGuild*>( _GuildMemberCore->getGuild() ); EGS_PD_AST( guild ); SM_STATIC_PARAMS_1( params,STRING_MANAGER::player ); params[0].setEIdAIAlias( _GuildMemberCore->getIngameEId(), CAIAliasTranslator::getInstance()->getAIAlias(_GuildMemberCore->getIngameEId()) ); CFameManager::getInstance().clearPlayerGuild( _GuildMemberCore->getIngameEId() ); CGuildCharProxy proxy; getProxy(proxy); proxy.cancelAFK(); clearOnlineGuildProperties(); guild->deleteMember( _GuildMemberCore ); if ( guild->getMembersBegin() == guild->getMembersEnd() ) { CGuildManager::getInstance()->deleteGuild(guild->getId()); proxy.sendSystemMessage("GUILD_DESTROYED"); } else { guild->sendMessageToGuildMembers("GUILD_QUIT", params); SM_STATIC_PARAMS_1(params, STRING_MANAGER::string_id); params[0].StringId = guild->getNameId(); proxy.sendSystemMessage("GUILD_YOU_QUIT", params); } }
//---------------------------------------------------------------------------- void CGuildMemberModule::setGrade( uint16 index,uint8 session, EGSPD::CGuildGrade::TGuildGrade grade)const { MODULE_AST( _GuildMemberCore ); CGuild * guild = EGS_PD_CAST<CGuild*>(_GuildMemberCore->getGuild()); EGS_PD_AST( guild ); CGuildCharProxy proxy; getProxy(proxy); proxy.cancelAFK(); if ( guild->getMembersSession() != session ) { proxy.sendSystemMessage( "GUILD_BAD_SESSION" ); return; } if ( _GuildMemberCore->getMemberIndex() == index ) { nlwarning("<GUILD>%s tries to change its grade",proxy.getId().toString().c_str()); return; } CGuildMember * member = guild->getMemberByIndex( index ); if ( member == NULL ) { nlwarning("<GUILD>%s set invalid member idx %u as leader",proxy.getId().toString().c_str(),index ); return; } EGSPD::CGuildGrade::TGuildGrade oldGrade = member->getGrade(); if ( !canAffectGrade( oldGrade ) ) { proxy.sendSystemMessage("GUILD_INSUFFICIENT_GRADE"); return; } if ( !CGuildManager::getInstance()->isGMGuild( guild->getId() ) && guild->getGradeCount(grade) >= guild->getMaxGradeCount(grade) ) { SM_STATIC_PARAMS_1( paramFull, STRING_MANAGER::string_id ); paramFull[0].StringId = CEntityIdTranslator::getInstance()->getEntityNameStringId(member->getIngameEId()); proxy.sendSystemMessage("GUILD_GRADE_FULL",paramFull); return; } member->setMemberGrade(grade); guild->incGradeCount( grade ); guild->decGradeCount( oldGrade ); // send system message SM_STATIC_PARAMS_3(params,STRING_MANAGER::player,STRING_MANAGER::player,STRING_MANAGER::string_id); params[0].setEIdAIAlias( proxy.getId(), CAIAliasTranslator::getInstance()->getAIAlias(proxy.getId()) ); params[1].setEIdAIAlias( member->getIngameEId(), CAIAliasTranslator::getInstance()->getAIAlias(member->getIngameEId()) ); params[2].StringId = guild->getNameId(); // If the player is online, the module must be recreated. Do as the reference was destroyed CGuildMemberModule * module = NULL; if ( member->getReferencingModule(module) ) { CGuildCharProxy targetProxy; module->getProxy(targetProxy); member->removeReferencingModule(module); module->onReferencedDestruction(); IModule * moduleTarget = createModule(targetProxy,member); guild->setMemberClientDB( member ); MODULE_AST(moduleTarget); } }