• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [CreatureEvents] Cast Gain Exp - Ganas experiencia activando cast (Script Navideño)

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    Buenas tardes Amigos


    Aquí le vengo a dejar un scripts que estando activo su cast ustedes pueden ganar mas experiencia de lo habitual.

    nos vamos a:

    Data/CreatureScript/Scripts

    copiamos cualquier archivo y renombramos por castGainExp.lua y pegamos esto dentro

    Código:

    local extraExperience = 20
    function onGainExp(cid, experience)
       local cast = getPlayerCast(cid)
       if (cast.status) then
          local expToAdd = math.ceil((extraExperience / 100) * experience)
          doPlayerAddExperience(cid, expToAdd)
          doSendAnimatedText(getThingPosition(cid), expToAdd, COLOR_RED)
       end
       return true
    end

    ahora nos vamos a:

    Data/creaturescripts/creaturescripts.xml

    y agregamos esta tag

    Código:

    <event type="gainexp" name="CastGainExp" event="script" value="castGainExp.lua"/>

    luego en login.lua necesita registrar el evento

    cambios necesarios a los sources y recompilar la distribucion:



    creatureevent.h

    despues
    Código:

    CREATURE_EVENT_OUTFIT,
    añadir
    Código:

    CREATURE_EVENT_GAINEXP,

    ahora despues
    Código:

    uint32_t executeOutfit(Creature* creature, const Outfit_t& old, const Outfit_t& current);
    añadir
    Código:

    uint32_t executeGainExp(Player* player, int32_t value);

    creatureevent.cpp


    Código:

    else if(tmpStr == "outfit")
    m_type = CREATURE_EVENT_OUTFIT;
    despues de este codigo poner esto
    Código:

    else if(tmpStr == "gainexp")
    m_type = CREATURE_EVENT_GAINEXP;

    ahora busca
    Código:

    case CREATURE_EVENT_OUTFIT:
    return "onOutfit";
    agregar
    Código:

    case CREATURE_EVENT_GAINEXP:
    return "onGainExp";

    busca esta linea
    Código:

    case CREATURE_EVENT_OUTFIT:
    return "cid, old, current";
    agregar esto debajo
    Código:

    case CREATURE_EVENT_GAINEXP:
    return "cid, value";

    después de eso, encuentra
    Código:

    uint32_t CreatureEvent::executeStatsChange
    agregar
    Código:

    uint32_t CreatureEvent::executeGainExp(Player* player, int32_t value)
    {
    //onGainExp(cid, value)
    if(m_interface->reserveEnv())
    {
    ScriptEnviroment* env = m_interface->getEnv();
    if(m_scripted == EVENT_SCRIPT_BUFFER)
    {
    env->setRealPos(player->getPosition());
    std::stringstream scriptstream;

    scriptstream << "local cid = " << env->addThing(player) << std::endl;
    scriptstream << "local value = " << value << std::endl;

    scriptstream << m_scriptData;
    bool result = true;
    if(m_interface->loadBuffer(scriptstream.str()))
    {
    lua_State* L = m_interface->getState();
    result = m_interface->getGlobalBool(L, "_result", true);
    }

    m_interface->releaseEnv();
    return result;
    }
    else
    {
    #ifdef __DEBUG_LUASCRIPTS__
    char desc[35];
    sprintf(desc, "%s", player->getName().c_str());
    env->setEvent(desc);
    #endif

    env->setScriptId(m_scriptId, m_interface);
    env->setRealPos(player->getPosition());

    lua_State* L = m_interface->getState();
    m_interface->pushFunction(m_scriptId);

    lua_pushnumber(L, env->addThing(player));
    lua_pushnumber(L, value);

    bool result = m_interface->callFunction(2);
    m_interface->releaseEnv();
    return result;
    }
    }
    else
    {
    std::clog << "[Error - CreatureEvent::executeGainExp] Call stack overflow." << std::endl;
    return 0;
    }
    }

    players.cpp
    busca esta linea
    Código:

    bool Player::gainExperience(double& gainExp, Creature* target)

    cambia por esto
    Código:

    bool Player::gainExperience(double& gainExp, Creature* target)
    {
    if(!rateExperience(gainExp, target))
    return false;

    if(gainExp >= 1)
    {
    bool deny = false;
    CreatureEventList gainExpEvents = this->getCreatureEvents(CREATURE_EVENT_GAINEXP);
    for(CreatureEventList::iterator it = gainExpEvents.begin(); it != gainExpEvents.end(); ++it)
    {
    if(!(*it)->executeGainExp(this, gainExp))
    deny = true;
    }
    if(deny)
    return false;
    if(gainExp >= level)
    {
    if(Condition* condition = Condition::createCondition(
    CONDITIONID_DEFAULT, CONDITION_SOUL, 4 * 60 * 1000))
    {
    condition->setParam(CONDITIONPARAM_SOULGAIN,
    vocation->getGainAmount(GAIN_SOUL));
    condition->setParam(CONDITIONPARAM_SOULTICKS,
    (vocation->getGainTicks(GAIN_SOUL) * 1000));
    addCondition(condition);
    }
    }

    addExperience((uint64_t)gainExp);
    }
    }



    [CreatureEvents] Cast Gain Exp - Ganas experiencia activando cast (Script Navideño) YNU5B25
    http://www.tibiaface.com

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).