- Fórum
- OTServ
- Recursos
- Linguagens de Programação
- [7.9+]algumas Funções Para Scripts
GM
[7.9+]algumas Funções Para Scripts
Por GM Volcano, 20 de mar. de 2008 em Linguagens de Programação
script
1
1.5k
Por GM Volcano, 20 de mar. de 2008 em Linguagens de Programação
info
Grupo: Artesão
Registrado: 26/06/06
Posts: 115
Reputação: +1
Char no Tibia: Kasugol
Codigo criado por Lejjo de outro fórum, portanto todos os créditos à ele..
Funções que serão adicionadas :
Explicação de cada :
doCreatureChangeMaxHealth : Muda o life de certo player.
doCreatureChangeMaxMana : Muda a mana de certo player.
getPlayerSummonCount : "checa" o número total de sumons de algum player.
getCreatureSummonCountByName : "checa" o número total dos sumons pelo nome
Exemplos de uso :
doCreatureChangeMaxHealth
doCreatureChangeMaxMana
getPlayerSummonCount
getCreatureSummonCountByName
Ao codigo :
Em luascript.cpp após :
Adicione :
Após :
int32_t LuaScriptInterface::luaEscapeString(lua_State* L) { //escapeString(str) std::string str = popString(L); lua_pushstring(L, Database::escapeString(str).c_str()); return 1; }Adicione :
int32_t LuaScriptInterface::luaDoCreatureChangeMaxHealth(l ua_State* L) { //doCreatureChangeMaxHealth(uid,newHealth) int32_t healthChange = (int32_t)popNumber(L); uint32_t cid = popNumber(L); ScriptEnviroment* env = getScriptEnv(); Creature* creature = env->getCreatureByUID(cid); if(creature) { creature->changeMaxHealth(healthChange); lua_pushnumber(L, LUA_NO_ERROR); } else { reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_ FOUND)); lua_pushnumber(L, LUA_ERROR); } return 1; } int32_t LuaScriptInterface::luaDoCreatureChangeMaxMana(lua _State* L) { //doCreatureChangeMaxMana(uid,newMana) int32_t manaChange = (int32_t)popNumber(L); uint32_t cid = popNumber(L); ScriptEnviroment* env = getScriptEnv(); Creature* creature = env->getCreatureByUID(cid); if(creature) { creature->changeMaxMana(manaChange); lua_pushnumber(L, LUA_NO_ERROR); } else { reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_ FOUND)); lua_pushnumber(L, LUA_ERROR); } return 1; } int32_t LuaScriptInterface::luaGetPlayerSummonCount(lua_St ate* L) { //getPlayerSummonCount(cid) uint32_t cid = popNumber(L); ScriptEnviroment* env = getScriptEnv(); Creature* creature = env->getCreatureByUID(cid); if(creature) { int32_t summons = creature->getSummonCount(); lua_pushnumber(L, summons); } else { reportErrorFunc(getErrorDesc(LUA_ERROR_CREATURE_NO T_FOUND)); lua_pushnumber(L, LUA_ERROR); } return 1; } int LuaScriptInterface::luaGetCreatureSummonCountByNam e(lua_State *L) { std::string name = popString(L); uint32_t uid = popNumber(L); ScriptEnviroment* env = getScriptEnv(); Creature* creature = env->getCreatureByUID(uid); if(creature){ int count = 0; std::list<Creature*>::iterator cit; for(cit = creature->summons.begin(); cit != creature->summons.end(); ++cit){ if((*cit)->getName() == name){ count = count + 1; } } if(count > 0){ lua_pushnumber(L, count); } } else{ reportErrorFunc(getErrorDesc(LUA_ERROR_CREATURE_NO T_FOUND)); lua_pushnumber(L, LUA_ERROR); } return 1; }Agora em luascript.h, após :
Adicione :
Agora em creature.cpp, após :
void Creature::changeHealth(int32_t healthChange) { if(healthChange > 0) health += std::min(healthChange, getMaxHealth() - health); else health = std::max((int32_t)0, health + healthChange); g_game.addCreatureHealth(this); }Adicione :
void Creature::changeMaxHealth(int32_t healthChange) { healthMax = (int32_t)healthChange; g_game.addCreatureHealth(this); } void Creature::changeMaxMana(int32_t manaChange) { manaMax = (int32_t)manaChange; }Agora em creature.h,após :
Adicione :
Agora Recompile tudo (ctrl+F11)..
Explicação + créditos no inicio do tópico..