schikell
Active User
- Dołączył
- Kwiecień 26, 2008
- Posty
- 148
- Liczba reakcji
- 8
Skrypt by Umby
Ok, zaczynajmy.
W player.cpp
Ponizej:
Dodaj:
Znajdz:
I zamien na:
Na koncu player.cpp
Dodaj:
Teraz w player.h
Ponizej:
Dodaj:
Ponizej:
Dodaj:
W creature.cpp znajdz:
I zamien to na:
W luascript.cpp
Ponizej:
Dodaj:
Na samym dole luascript.cpp
Dodaj:
Oraz w luascript.h
Ponizej:
Dodaj:
-- Jak to dziala ?
Jest to funkcja ktora mozy expRate.
-- Przykladowe zastosowanie
data/movements/scripts/exp.lua
data/movements/movements.xml
ID 2179 jest to Gold Ring
Po dodaniu wyzej wymienionego przykladowego skryptu. Jezeli masz exp na serwerze x35 skrypt pomnozy to przez 4. Czyli 35*4= 140 exp. Oczywiscie po zalozeniu Gold Ringa.
Ok, zaczynajmy.
W player.cpp
Ponizej:
Kod:
idleTime = 0;
Dodaj:
Kod:
expRate = 1;
Znajdz:
Kod:
return (result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) );
I zamien na:
Kod:
return ((result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)) * expRate);
Na koncu player.cpp
Dodaj:
Kod:
void Player::changePlayerExpRate(uint32_t rate)
{
expRate = rate;
}
Teraz w player.h
Ponizej:
Kod:
void resetIdleTime() {idleTime = 0;}
Dodaj:
Kod:
uint32_t getExpRate() const {return expRate;}
void changePlayerExpRate(uint32_t rate);
Ponizej:
Kod:
int32_t idleTime;
Dodaj:
Kod:
uint32_t expRate;
W creature.cpp znajdz:
Kod:
return attacker->getPlayer() ? ((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_game.getExperienceStage(attacker->getPlayer()->getLevel()))) : ((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) ));
I zamien to na:
Kod:
return attacker->getPlayer() ? (((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_game.getExperienceStage(attacker->getPlayer()->getLevel()))) * attacker->getPlayer()->getExpRate()) : ((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)));
W luascript.cpp
Ponizej:
Kod:
lua_register(m_luaState, "escapeString", LuaScriptInterface::luaEscapeString);
Dodaj:
Kod:
lua_register(m_luaState, "setPlayerExpRate", LuaScriptInterface::luaSetPlayerExpRate);
Na samym dole luascript.cpp
Dodaj:
Kod:
int LuaScriptInterface::luaSetPlayerExpRate(lua_State *L)
{
uint32_t rate = popNumber(L);
uint32_t cid = popNumber(L);
ScriptEnviroment* env = getScriptEnv();
Player* player = env->getPlayerByUID(cid);
if(player){
player->changePlayerExpRate(rate);
lua_pushnumber(L, LUA_ERROR);
}
else{
reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
lua_pushnumber(L, LUA_ERROR);
}
return 1;
}
Oraz w luascript.h
Ponizej:
Kod:
static int32_t luaEscapeString(lua_State* L);
Dodaj:
Kod:
static int32_t luaSetPlayerExpRate(lua_State* L);
-- Jak to dziala ?
Jest to funkcja ktora mozy expRate.
-- Przykladowe zastosowanie
data/movements/scripts/exp.lua
Kod:
function onEquip(cid, item)
setPlayerExpRate(cid, 4)
end
function onDeEquip(cid, item)
setPlayerExpRate(cid, 1)
end
data/movements/movements.xml
Kod:
<movevent event="Equip" itemid="2179" slot="ring" function="onEquipItem" script="exp.lua"/>
<movevent event="DeEquip" itemid="2179" slot="ring" function="onDeEquipItem" script="exp.lua"/>
ID 2179 jest to Gold Ring
Po dodaniu wyzej wymienionego przykladowego skryptu. Jezeli masz exp na serwerze x35 skrypt pomnozy to przez 4. Czyli 35*4= 140 exp. Oczywiscie po zalozeniu Gold Ringa.