sexta-feira, 13 de junho de 2008

Meu primeiro Script (Precisa de melhoria. Muita melhoria)

Como prometido. Aqui esta meu primeiro script. Esta funcionando perfeitamente como eu era meu objetivo inicial, mas agora quero adicionar a capacidade de diminuir a chance de drop de item a medida que a diferença de level entre o jogador e a criatura for maior.

Em todo caso aí está:

//:: sh_calculardrop
/*
Calcule the loot of creature. You can change the drop rate creating and modifing a
variable called sh_iDropRate in the item variable of type float that can be between
0.00 to 100.00 that represent the chance drop of the item (More is better) and create
a variable named sh_mDropRate in the in the module set of type float tha can be any
positive number. If sh_iDropRate don't exists, I use 0 instead (No chance to drop), if
sh_mDropRate don't exists, I use 1 instead (No modification).
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2008 SubHeaven World
//:: Created By: SubHeaven
//:: Created On: 06/12/2008
//:://////////////////////////////////////////////////

void CalcularDrop(object oCriatura)
{
//Vejo se a criatura é válida e se não é um jogador
if (oCriatura != OBJECT_INVALID && !GetIsPC(oCriatura))
{

//Recupero o modificador de chance de drop do modulo
float lfGlobalRate = GetLocalFloat(GetModule(), "sh_mDropRate");

//Pego o primeiro item do inventário da criatura
object oItem = GetFirstItemInInventory(oCriatura);

//Faço um loop no inventário da criatura
while (oItem != OBJECT_INVALID)
{
//Pego a chance de drop do item
float lfItemRate = GetLocalFloat(oItem, "sh_iDropRate");

//Calculo um numero aleatorio de 0 a 10000
float lfChance = IntToFloat(Random(10000)) / 100;


//Verifico se a chance de drop do item está dentro dos
//valores permitidos (entre 0 e 100%)
//Se não eu ajusto para um valor padrão
if (lfItemRate > 100.0)
{
lfItemRate = 100.0;
}
else if (lfItemRate < 0.0)
{
lfItemRate = 0.0;
}

//Aqui eu verifico se o valor aleatorio que consegui
//anteriormente é maior que a chance de drop do item
//contando com o ajuste do modulo
if ((lfItemRate * lfGlobalRate) < lfChance)
DestroyObject(oItem);

//Esse aqui são apenas algumas linhas de debug
//Ele mostram os valores aletorios conseguidos
//e as chances de drop de cada item
string sMensagem = "(" + FloatToString(lfChance) + ") DC = " + FloatToString(lfItemRate * lfGlobalRate);
SendMessageToPC(GetFirstPC(), sMensagem);
SendMessageToAllDMs(sMensagem);
PrintString(sMensagem);

//Terminado com um item eu parto pro próximo item
//do inventário
oItem = GetNextItemInInventory(oCriatura);
}
}
}

Nenhum comentário:

BlogBlogs.Com.Br