TI

Trocando Posição De Teleport

Por tibiaa4e, 07 de mar. de 2007 em Linguagens de Programação

tibia
script
6
2.5k
tibiaa4eT
07 de março de 2007 às 19:58

Quero lhes apresentar um code q a certo tempo o frerety(the.sharpest.horn) fez para mim

Qdo queria fazer aquelas alavancas do tibia q qdo puxadas "concertavam" os teleports

 

Breve postarei umas actions usando ela

Lembrando q quem usa o zorzin ot ja tem ela

+ com outro nome pois o zorzin q fez ela

E pode ser diferente

Essa eu indico para quem usa evolutions,forgotten e outros

 

go code

 

em luascript.cpp nos includes add:

#include "teleport.h"

 

E no meio dos lua register:

//doChangeTeleportPos(uid,newpos)

lua_register(m_luaState, "doChangeTeleportPos", LuaScriptInterface::luaDoChangeTeleportPos);

 

e no final add:

int LuaScriptInterface::luaDoChangeTeleportPos(lua_State *L)

{

//doChangeTeleportPos(uid,newpos)

Position pos;

uint32_t stackpos;

popPosition(L, pos, stackpos);

uint32_t uid = popNumber(L);

 

ScriptEnviroment* env = getScriptEnv();

 

Thing* tmp = env->getThingByUID(uid);

Teleport* tp = NULL;

if(tmp)

tp = tmp->getItem()->getTeleport();

 

if(tp){

tp->setDestPos(pos);

lua_pushnumber(L, LUA_NO_ERROR);

}

else{

reportErrorFunc(getErrorDesc(LUA_ERROR_THING_NOT_FOUND));

lua_pushnumber(L, LUA_ERROR);

}

return 1;

}

 

em luascript.h acima de:

static int luaDoRemoveItem(lua_State *L);

 

add:

static int luaDoChangeTeleportPos(lua_State *L);

 

 

usando:

O jeito correto de se usar é

 

faça um teleport no map editor com as coordenadas um sqm perto (igual no rl qdo num da q é tp pro sqm norte)

Ai faça um script + - menos assim:

 

function onUse(cid, item, frompos, item2, topos)

gatepos = {x=79, y=36, z=7, stackpos=1}

newpos ={x=78, y=36, z=7, stackpos=1}

newpos1 ={x=57, y=31, z=7, stackpos=1}

tp = getThingfromPos(gatepos)

 

if item.uid == 8100 and item.itemid == 1945 then

doChangeTeleportPos(tp.uid,newpos)

doTransformItem(item.uid,item.itemid+1)

elseif item.uid == 8100 and item.itemid == 1946 then

doChangeTeleportPos(tp.uid,newpos1)

doTransformItem(item.uid,item.itemid-1)

else

doPlayerSendCancel(cid,"Sorry, not possible.")

end

return 1

end

 

 

Vc puxa a alavanca com uid e ele checa a pos (vc pode ate fazer pra criar tp) e muda a pos dele :D

 

facil naum ?

 

Depois farei uma estilo tibia rl

qdo se puxa umas 6 alavanca em ordem ele muda o tp :D

 

flws

Editado Julho 21 por tibiaa4e

soulblasterS
07 de março de 2007 às 20:09

Hiho!

 

aeeee ta4e ;D

vlww por trazer a action pra ca ^_^

e vivaa frerety =]

 

Cya... ^_^

suborasS
10 de março de 2007 às 03:03

Hail OPEN TIBIA =)

Hail frerety (esqueceu de min =/ ...)

 

Hail Ta4e....

 

Chega de "hail" heuheuhe ;)

Otimo code.. mt obrigado por liberar =D

 

Grato,

//Suboras

4 meses depois...
GM VolcanoG
20 de julho de 2007 às 21:35

Tem uma parte errada la...

nt LuaScriptInterface::luaDoChangeTeleportPos(lua_State *L)
{
//doChangeTeleportPos(uid,newpos)
Position pos;
uint32_t stackpos;
popPosition(L, pos, stackpos);
uint32_t uid = popNumber(L);

ScriptEnviroment* env = getScriptEnv();

Thing* tmp = env->getThingByUID(uid);
Teleport* tp = NULL;
if(tmp)
tp = tmp->getItem()->getTeleport();

if(tp){
tp->setDestPos(pos);
lua_pushnumber(L, LUA_NO_ERROR);
}
else{
reportErrorFunc(getErrorDesc(LUA_ERROR_THING_NOT_FOUND));
lua_pushnumber(L, LUA_ERROR);
}
return 1;
}

 

O correto é

int LuaScriptInterface::luaDoChangeTeleportPos(lua_State *L)
{
//doChangeTeleportPos(uid,newpos)
Position pos;
uint32_t stackpos;
popPosition(L, pos, stackpos);
uint32_t uid = popNumber(L);

ScriptEnviroment* env = getScriptEnv();

Thing* tmp = env->getThingByUID(uid);
Teleport* tp = NULL;
if(tmp)
tp = tmp->getItem()->getTeleport();

if(tp){
tp->setDestPos(pos);
lua_pushnumber(L, LUA_NO_ERROR);
}
else{
reportErrorFunc(getErrorDesc(LUA_ERROR_THING_NOT_FOUND));
lua_pushnumber(L, LUA_ERROR);
}
return 1;
}

 

Tem so nt

o certo eh int

Editado Julho 20 por GM Volcano

3 meses depois...
freretyF
22 de outubro de 2007 às 17:42

LAFnÇAFJÁJFlpAF

!$!@$!#%!#%!, nem me avisou que ia postar :B

hey, para de jogar cs e entra no msn de vez enquando o/

 

#GM Volcano

hey, anda aprendendo C++? o//

parece que existem mais programadores que no começo do ano o/

(:

falta o i mesmo, deve ter sido um erro de copiar/colar :B

 

até mais (:

NostradamusN
22 de outubro de 2007 às 19:07

Essa função hoje em dia é inútil, já que existe a doCreateTeleport