//---------------------------------------------------------------------------- void CGuildMemberModule::kickMember( uint16 index,uint8 session )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 kick himself",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 targetGrade = member->getGrade(); if ( !canAffectGrade( targetGrade ) ) { proxy.sendSystemMessage("GUILD_INSUFFICIENT_GRADE"); return; } // if the user is online reset its guild id CGuildMemberModule * module = NULL; if ( member->getReferencingModule( module ) ) { module->clearOnlineGuildProperties(); } // send system message SM_STATIC_PARAMS_2(params,STRING_MANAGER::player,STRING_MANAGER::string_id); params[0].setEIdAIAlias( proxy.getId(), CAIAliasTranslator::getInstance()->getAIAlias(proxy.getId()) ); params[1].StringId = CEntityIdTranslator::getInstance()->getEntityNameStringId(member->getIngameEId()); sendMessageToGuildMembers("GUILD_KICK_MEMBER",params); guild->deleteMember( member ); }
//---------------------------------------------------------------------------- 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); } }