03-10-2014, 11:08 PM
Вопрос в следующем:
Заметил уже в 3х разных сборках (l2phoenix, l2j, l2j lisvus) в механизме назначения новых владельцев печати сделано так, что какую то из печатей может получить проигравшая сторона. Достаточным условием для этого в алгоритме выбора является то что:
1. в выигравшей стороне за эту печать зарегистрировалось менее 35% участников
2. проигравшая сторона была предыдущим владельцем этой печати
3. в проигравшей стороне за эту печать зарегистрировалось больше 10% участников.
Эта логика идет в разрез со всеми описаниями в разных гфш базах знаний.
Прошу подсказать, такая логика является ошибочной или действительно так должно быть?
Для наглядности прилагаю код функции определяющей новых владельцев печати.
Спасибо.
Заметил уже в 3х разных сборках (l2phoenix, l2j, l2j lisvus) в механизме назначения новых владельцев печати сделано так, что какую то из печатей может получить проигравшая сторона. Достаточным условием для этого в алгоритме выбора является то что:
1. в выигравшей стороне за эту печать зарегистрировалось менее 35% участников
2. проигравшая сторона была предыдущим владельцем этой печати
3. в проигравшей стороне за эту печать зарегистрировалось больше 10% участников.
Эта логика идет в разрез со всеми описаниями в разных гфш базах знаний.
Прошу подсказать, такая логика является ошибочной или действительно так должно быть?
Для наглядности прилагаю код функции определяющей новых владельцев печати.
Спасибо.
code
PHP код:
<?php
/**
* Calculates the ownership of the three Seals of the Seven Signs,
* based on various criterion.
* <BR><BR>
* Should only ever called at the beginning of a new cycle.
*/
protected void calcNewSealOwners()
{
for(Integer currSeal : _signsDawnSealTotals.keySet())
{
int prevSealOwner = _signsSealOwners.get(currSeal);
int newSealOwner = CABAL_NULL;
int dawnProportion = getSealProportion(currSeal, CABAL_DAWN);
int totalDawnMembers = getTotalMembers(CABAL_DAWN) == 0 ? 1 : getTotalMembers(CABAL_DAWN);
int duskProportion = getSealProportion(currSeal, CABAL_DUSK);
int totalDuskMembers = getTotalMembers(CABAL_DUSK) == 0 ? 1 : getTotalMembers(CABAL_DUSK);
/*
* - If a Seal was already closed or owned by the opponent and the new winner wants
* to assume ownership of the Seal, 35% or more of the members of the Cabal must
* have chosen the Seal. If they chose less than 35%, they cannot own the Seal.
*
* - If the Seal was owned by the winner in the previous Seven Signs, they can retain
* that seal if 10% or more members have chosen it. If they want to possess a new Seal,
* at least 35% of the members of the Cabal must have chosen the new Seal.
*/
switch(prevSealOwner)
{
case CABAL_NULL:
switch(getCabalHighestScore())
{
case CABAL_NULL:
if(dawnProportion >= Math.round(0.35 * totalDawnMembers) && dawnProportion > duskProportion)
newSealOwner = CABAL_DAWN;
else if(duskProportion >= Math.round(0.35 * totalDuskMembers) && duskProportion > dawnProportion)
newSealOwner = CABAL_DUSK;
else
newSealOwner = prevSealOwner;
break;
case CABAL_DAWN:
if(dawnProportion >= Math.round(0.35 * totalDawnMembers))
newSealOwner = CABAL_DAWN;
else if(duskProportion >= Math.round(0.35 * totalDuskMembers))
newSealOwner = CABAL_DUSK;
else
newSealOwner = prevSealOwner;
break;
case CABAL_DUSK:
if(duskProportion >= Math.round(0.35 * totalDuskMembers))
newSealOwner = CABAL_DUSK;
else if(dawnProportion >= Math.round(0.35 * totalDawnMembers))
newSealOwner = CABAL_DAWN;
else
newSealOwner = prevSealOwner;
break;
}
break;
case CABAL_DAWN:
switch(getCabalHighestScore())
{
case CABAL_NULL:
if(dawnProportion >= Math.round(0.10 * totalDawnMembers))
newSealOwner = prevSealOwner;
else if(duskProportion >= Math.round(0.35 * totalDuskMembers))
newSealOwner = CABAL_DUSK;
else
newSealOwner = CABAL_NULL;
break;
case CABAL_DAWN:
if(dawnProportion >= Math.round(0.10 * totalDawnMembers))
newSealOwner = prevSealOwner;
else if(duskProportion >= Math.round(0.35 * totalDuskMembers))
newSealOwner = CABAL_DUSK;
else
newSealOwner = CABAL_NULL;
break;
case CABAL_DUSK:
if(duskProportion >= Math.round(0.10 * totalDuskMembers))
newSealOwner = CABAL_DUSK;
else if(dawnProportion >= Math.round(0.35 * totalDawnMembers))
newSealOwner = prevSealOwner;
else
newSealOwner = CABAL_NULL;
break;
}
break;
case CABAL_DUSK:
switch(getCabalHighestScore())
{
case CABAL_NULL:
if(duskProportion >= Math.round(0.10 * totalDuskMembers))
newSealOwner = prevSealOwner;
else if(dawnProportion >= Math.round(0.35 * totalDawnMembers))
newSealOwner = CABAL_DAWN;
else
newSealOwner = CABAL_NULL;
break;
case CABAL_DAWN:
if(dawnProportion >= Math.round(0.35 * totalDawnMembers))
newSealOwner = CABAL_DAWN;
else if(duskProportion >= Math.round(0.10 * totalDuskMembers))
newSealOwner = prevSealOwner;
else
newSealOwner = CABAL_NULL;
break;
case CABAL_DUSK:
if(duskProportion >= Math.round(0.10 * totalDuskMembers))
newSealOwner = prevSealOwner;
else if(dawnProportion >= Math.round(0.35 * totalDawnMembers))
newSealOwner = CABAL_DAWN;
else
newSealOwner = CABAL_NULL;
break;
}
break;
}
_signsSealOwners.put(currSeal, newSealOwner);
// Alert all online players to new seal status.
switch(currSeal)
{
case SEAL_AVARICE:
if(newSealOwner == CABAL_DAWN)
sendMessageToAll(SystemMessage.SEVEN_SIGNS_THE_LORDS_OF_DAWN_HAVE_OBTAINED_THE_SEAL_OF_AVARICE);
else if(newSealOwner == CABAL_DUSK)
sendMessageToAll(SystemMessage.SEVEN_SIGNS_THE_REVOLUTIONARIES_OF_DUSK_HAVE_OBTAINED_THE_SEAL_OF_AVARICE);
break;
case SEAL_GNOSIS:
if(newSealOwner == CABAL_DAWN)
sendMessageToAll(SystemMessage.SEVEN_SIGNS_THE_LORDS_OF_DAWN_HAVE_OBTAINED_THE_SEAL_OF_GNOSIS);
else if(newSealOwner == CABAL_DUSK)
sendMessageToAll(SystemMessage.SEVEN_SIGNS_THE_REVOLUTIONARIES_OF_DUSK_HAVE_OBTAINED_THE_SEAL_OF_GNOSIS);
break;
case SEAL_STRIFE:
if(newSealOwner == CABAL_DAWN)
sendMessageToAll(SystemMessage.SEVEN_SIGNS_THE_LORDS_OF_DAWN_HAVE_OBTAINED_THE_SEAL_OF_STRIFE);
else if(newSealOwner == CABAL_DUSK)
sendMessageToAll(SystemMessage.SEVEN_SIGNS_THE_REVOLUTIONARIES_OF_DUSK_HAVE_OBTAINED_THE_SEAL_OF_STRIFE);
break;
}
}
}