HiHo!
Eh... isso daki tava mt paradão intaum resouvi "soltar" um code meu... Essa é uma função para um NPC criar BP de Items... Funciona para YurOTS, não se si funciona para outros OtServers
Disbugado °ºoº° Se o player estiver com a BP cheia o NPC "taca" a BP no tile abaixo do player (antes o server caia)
Npc.Cpp
Procure por:
lua_register(luaState, "selfGetPosition", NpcScript::luaSelfGetPos);
Logo abaixo adicione:
int NpcScript::luaSelfGetPos(lua_State *L){ lua_pop(L,1); Npc* mynpc = getNpc(L); lua_pushnumber(L, mynpc->pos.x); lua_pushnumber(L, mynpc->pos.y); lua_pushnumber(L, mynpc->pos.z); return 3;}
Logo abaixo adicione:
int NpcScript::luaBuyBp(lua_State *L){ int cost = (int)lua_tonumber(L, -1); int count = (int)lua_tonumber(L, -2); int type = (int)lua_tonumber(L, -3); int cid = (int)lua_tonumber(L, -4); lua_pop(L,4); Item* newItem; switch(type) { case 2268: newItem = Item::CreateItem(2003, count); break; case 2273: newItem = Item::CreateItem(2002, count); break; case 2313: newItem = Item::CreateItem(2001, count); break; case 2304: newItem = Item::CreateItem(2000, count); break; case 2311: newItem = Item::CreateItem(1988, count); break; default: newItem = Item::CreateItem(3940, count); break; } if(!newItem) return true; Container* container = dynamic_cast<Container*>(newItem); Item* newrune; for(int i=0; i<20; i++) { newrune = Item::CreateItem(type, count); container->addItem(newrune); } if(!container) { delete newrune; return true; } Npc* mynpc = getNpc(L); Creature* creature = mynpc->game->getCreatureByID(cid); Player* player = creature? dynamic_cast<Player*>(creature) : NULL; if (player->getCoins(cost)) { if (player->removeCoins(cost)) { if (container->size() < container->capacity()) player->addItem(newItem); else mynpc->game->addThing(NULL,creature->pos,newItem); mynpc->doSay("Here you are."); } } else { mynpc->doSay("Sorry, you do not have enough money."); } return true;}
Npc.H
Procure por:
static int luaSelfGetPos(lua_State *L);
e logo abaixo adicione:
static int NpcScript::luaBuyBp(lua_State *L);
Compile e pronto! Agora é só aproveitar...
Como Usar
.: buybp(cid,itemdoitemasercriado,count,preço da BP em GPs)
.: Exemplo
.: buybp(cid,2304,5,2000) -- Vende uma BP de GFB (2304) de 5 cargas cada (5) por 2k (2000 GPs)
OBS .: A função irá retornar 0 se o player comprar a BP e retornará -1 se não comprar (falta de $$)...
FlW
CyA!