Ir para conteúdo
Entre para seguir isso  
M.s.D.i

criar um sistema de Rookrguard

Recommended Posts

M.s.D.i    0
M.s.D.i

Ok desta vez vou dar algumas idéias para criar o seu próprio sistema de Rooker.

Agora sei nem todos irão querer o mesmo sistema EXACT como quero por isso fique à vontade para adaptar o código que você entenda.

Desde que eu uso php scripts para alterar meu mapa's e unificá-las em conjunto (Aumentando o tamanho máximo de um mapa que eu possa usar) eu escolher para definir o meu "Rook Azulejo" como um azulejo que está definido para <pz = "2"> no Mapa arquivo .... uma posterior mapa editor ou outro método pode ser mais adequado para você.

Portanto First off você tem para detectar um azulejo que está definido para pz = "2" tão em IOMapXML.cpp

E onde se detecta o atual pz azulejos

tmp = (char*)xmlGetProp(tile, (const xmlChar *) "pz");

if (tmp && (strcmp(tmp, "1") == 0)) t->setPz();

 

Simplesmente acrescentar um segundo se afirma que a declaração se detecta a 2 nas cotações para definir o azulejo para, permite dizer, "PzR"

if (tmp && (strcmp(tmp, "2") == 0)) t->setPzR();

 

Fazendo uma pesquisa rápida do procject revela que a "setPz" função (s) estão no TILE classe.

Permite ir para tile.cpp

E, na parte inferior copiar as duas funções:

bool Tile::isPz() const

{

return pz;

}

 

void Tile::setPz()

{

pz = true;

}

 

E acrescentar um "R" ao final de modo a que seja essencialmente irá definir qualquer azulejo que chama de "setPzR" função <Any azulejo que o mapa arquivo diz é pz = "2"> a um pzR azulejo e adicionar uma nova linha para o Fim do arquivo.

Ela deve ser semelhante a este:

bool Tile::isPzR() const

{

return pzR;

}

 

void Tile::setPzR()

{

pzR = true;

}

 

Agora temos de declarar as novas funções de modo a tile.h

Adicionar nas duas linhas:

bool isPzR() const;

void setPzR();

 

Também queremos certificar-se de que nada acontece funky queremos ter certeza de que o estado de todos os azulejos pzR é fixado em 0 <false> por omissão tão acrescentar em:

pzR = false;

 

Abaixo do local onde pz = false;

 

Portanto, agora que temos toda a nossa azulejos que queremos ser "Rook" e decalared o programa sabe-los como "pzR" telhas, de modo deixa ir para game.cpp e dizer ao programa o que fazer com eles.

Localize a função void Jogo:: creatureMakeDamage e role para baixo até chegar a função:

if(attackedCreature->access > 1){

if(player)

player->sendCancelAttacking();

 

//OTSYS_THREAD_UNLOCK(gameLock)

return;

}

 

if(!inReach){

//OTSYS_THREAD_UNLOCK(gameLock)

return;

}

 

Abaixo é aqui que vamos dizer o jogo sobre o que fazer.

Adicione uma declaração que diz que se <if(>

Há um jogador atacado <attackedPlayer>

Há, de facto, um jogador <& & jogador>

Que não seja um GM (tenho acesso 2 = counceller, 3 = GM, e 4 = deus, para que qualquer coisa acima de 1 para mim) <& & attackedPlayer-> acesso <= 1>

there's a tile < && tile> Há um azulejo <& & azulejo>

and the tile is a "Rook" tile < && tile->isPzR()> E do azulejo é uma "Rook" tile <& & tile-> isPzR ()>

now close it off <){> Agora fechá-la fora <) (>

Por isso, se está tudo dessas coisas o que queremos deixar de atacar e enviar uma mensagem dizendo por que acrescentar os comandos em:

 

Player-> sendTextMessage (MSG_SMALLINFO, "Você não pode atacar uma pessoa que ta em rook.");

 

Player-> sendCancelAttacking ();

 

Então diga-oa retornar ao que estava fazendo antes <return;>

 

Se fechar a declaração <)>

E você deve ter algo semelhante a este:

 

if(attackedPlayer && player && attackedPlayer->access <= 1 && tile && tile->isPzR()) {

player->sendTextMessage(MSG_SMALLINFO, "You may not attack a person who's in Rook.");

player->sendCancelAttacking();

return;

 

Agora duplicar esta função gama para ataques (Em vez de usar azulejo "targettile"):

 

if(attackedPlayer && player && attackedPlayer->access <= 1 && targettile && targettile->isPzR()) {

player->sendTextMessage(MSG_SMALLINFO, "You may not attack a person who's in Rook.");

player->sendCancelAttacking();

return;

 

Agora, isso não tratar Magic ataques ou Runes, mas na minha Rook não terão acesso a esses itens assim não se preocupe em todas para mim.

 

~ ~ ~ ~ Dê uma Break

 

Great já que esta parte é feito queremos ser capazes de enviar as pessoas de volta à Rook, para que possamos ir para player.cpp e adicionar alguns códigos em que não há o que queremos.

 

Desça a "Player:: die ()" função e desça até onde ele exibe a mensagem sobre a desclassificação seu nível:

 

if(newLevel != level)

{

std::stringstream lvMsg;

lvMsg << "You were downgraded from level " << level << " to level " << newLevel << ".";

client->sendTextMessage(MSG_ADVANCE, lvMsg.str().c_str());

}

 

Vamos adicionar nosso código acima, se esta afirmação.

 

Primeiro temos que começar outra declaração <if(>

Queremos verificar se o newlevel tiverem após morrer está abaixo daquilo que deseja redefinir a eles (Eu quero que eles ir à Rook quando estes se matou passado lvl 4 a 3) ()

Não queremos que eles reseting se eles ainda estão na Rook e morrem .... que iria ser apenas más como ele iria ser difícil de obter passado lvl 3 se você morrer muito.

Assim, permite verificar se os seus "masterPos" ou Templo posição ainda está em Rook:

 

<& & MasterPos.x! = 237 & & masterPos.y! = 265 & & masterPos.z! = 6>

Esta é a minha Rook templo, você pode facilmente adicionar vários templos se tiver algumas cidades ou alterar para w / e quiser .... também se quiser quaisquer outras condições que você pode adicioná-las aqui em demasiado.

 

Depois que todas as condições são adicionados em fechar a declaração se <) (>

 

Agora, o que queremos fazer em primeiro lugar ao largo é informar a pessoa que eles estavam se deslocou de Rook.

 

Criar uma nova string chamado "mensagem: para armazenar o texto em <std::stringstream message;>

Adicionar uma linha de texto para ele <mensagem << "Vocês foram mortas demasia e enviado para Rook".>

E enviar a mensagem <client-> sendTextMessage (MSG_ADVANCE, message.str (). C_str ());>

 

Agora podemos colocar todas as informações que queremos:

MasterPos para o Templo De Rook:

MasterPos.x = 237; masterPos.y = 265; masterPos.z = 6;

 

Alimentação, mana, Saúde, o nível, exp, e todos os outros varriables:

level = 1;

voc = 0;

health = 100;

healthmax = 100;

cap = 300;

mana = 0;

manamax = 0;

manaspent = 0;

food = 0;

experience = 0;

maglevel = 0;

 

Você pode alterar estas para w / e você quiser, mas agora temos um problema de itens que a pessoa pode ou não ter, enquanto morrer.

Podemos fazer isso a alguns aspectos, a forma como eu fiz, foi para definir um loop para ir desde o primeiro ao último slot <SLOT_HEAD> slot <SLOT_AMMO>

 

Basicamente para <for(>

 

Initilise um varriable "i" e defini-lo para o primeiro slot <int i=SLOT_HEAD;>

Deixá-lo ir até "i" é inferior ou igual ao último slot <i <= SLOT_AMMO;>

Então terminá-la dizendo ser "i" pode ir para a próxima um (IE: i = i +1) <i ++){>

Devíamos ter:

 

For (int i = SLOT_HEAD; i <= SLOT_AMMO; i + +) (

 

Agora, enquanto o programa está a decorrer de slot para slot um por um queremos dizer que se há itens no slot, que é representada por "i" <if(items){>

 

queremos definir w / e é nesse slot para um valor NULL <items = NULL;>

Agora, se a final e por declarações <}><}>

 

Podemos agora acrescentar w / e itens que deseja que eles têm também aqui (eu incluído o código de cada slot mas somente utilizado algumas delas, simplesmente desmarque a comentar qualquer linha que deseja utilizar qualquer comentário ou linha que você deseja não use)

 

addItemInventory(Item::CreateItem(2459, 1), SLOT_HEAD, true);

//addItemInventory(Item::CreateItem(id #, count #), SLOT_NECKLACE, true);

addItemInventory(Item::CreateItem(2003, 1), SLOT_BACKPACK, true);

addItemInventory(Item::CreateItem(2467, 1), SLOT_ARMOR, true);

addItemInventory(Item::CreateItem(2512, 1), SLOT_LEFT, true);

addItemInventory(Item::CreateItem(2379, 1), SLOT_RIGHT, true);

addItemInventory(Item::CreateItem(2649, 1), SLOT_LEGS, true);

//addItemInventory(Item::CreateItem(id #, count #), SLOT_RING, true);

addItemInventory(Item::CreateItem(2050, 1), SLOT_AMMO, true);

addItemInventory(Item::CreateItem(2643, 1), SLOT_FEET, true);

 

Existem ainda as competências que temos com que se preocupar-lo novamente para outro loop.

 

E para cada valor de "i" queremos utilizá-lo como a habilidade # e redefinir as competências a 10

 

<skills[sKILL_LEVEL] = 10;>

 

Redefinir o montante de trys

 

<skills[sKILL_TRIES] = 0;>

 

Para fechar a declaração <)>

 

Isso deve ser tudo o que precisa definir isso agora podemos dizer o programa para retornar ao que estava fazendo <return;>

 

E fechar o primeiro caso declaração <)>

 

Deveríamos ter algo semelhante a este (Eu adicionei os meus comentários em que a única diferença)

 

if(newLevel <= 3 && masterPos.x != 237 && masterPos.y != 265 && masterPos.z != 6)

{

std::stringstream message;

message << "You have been killed too much and sent to Rook.";

client->sendTextMessage(MSG_ADVANCE, message.str().c_str());

masterPos.x = 237;

masterPos.y = 265;

masterPos.z = 6;

level = 1;

voc = 0;

health = 100;

healthmax = 100;

cap = 300;

mana = 0;

manamax = 0;

manaspent = 0;

food = 0;

experience = 0;

maglevel = 0;

 

//empty personal belongings

for(int i=SLOT_HEAD; i <= SLOT_AMMO; i++){

if(items){

items = NULL;

}

}

//Add "Rook" Gear

addItemInventory(Item::CreateItem(2459, 1), SLOT_HEAD, true);

//addItemInventory(Item::CreateItem(id #, count #), SLOT_NECKLACE, true);

addItemInventory(Item::CreateItem(2003, 1), SLOT_BACKPACK, true);

addItemInventory(Item::CreateItem(2467, 1), SLOT_ARMOR, true);

addItemInventory(Item::CreateItem(2512, 1), SLOT_LEFT, true);

addItemInventory(Item::CreateItem(2379, 1), SLOT_RIGHT, true);

addItemInventory(Item::CreateItem(2649, 1), SLOT_LEGS, true);

//addItemInventory(Item::CreateItem(id #, count #), SLOT_RING, true);

addItemInventory(Item::CreateItem(2050, 1), SLOT_AMMO, true);

addItemInventory(Item::CreateItem(2643, 1), SLOT_FEET, true);

 

//empty skills

for (int i = 0; i <= 6; i++){

skills[sKILL_LEVEL] = 10;

skills[sKILL_TRIES] = 0;

}

return;

}

 

Agora você está feito; reconstruir tudo e desfrute.

 

Esperemos que isso contribuiu para que você obtenha seu próprio Sistema Rook indo.

 

Para Mais Informação:

http://otfans.net/showthread.php?t=5632

Compartilhar este post


Link para o post
Marcin    1
Marcin

Aprovado e movido.

 

obrigado ;)

 

Até.

Compartilhar este post


Link para o post
Striker_Sky    0
Striker_Sky

Very Good !

Compartilhar este post


Link para o post
savity    1
savity

Bom.. ta bastante extenso,

mas pra quem quer uma rookgard simples,

basta criar pelo RME Map editor a ilha e colcoar no pvp tool

e criar um npc oracle..

Mesmo assim, aprovado =D

Compartilhar este post


Link para o post
Machine!    2
Machine!

parece ser bom quando tiver tempo irei testalo...

vlw por postar cara

flw

 

Compartilhar este post


Link para o post
Viniply    0
Viniply

interessante vamos ver se meu scrippter ponha isso no nosso ot

Compartilhar este post


Link para o post
Tibia Arena    0
Tibia Arena

Olha cara muito bom mesmo para quem quer ter ROOK em seu mapa muito bom mesmo gostei.

 

Tibia Arena Esteve Aqui.

 

Aprovado.

 

:style:

Compartilhar este post


Link para o post
Usuárioo    0
Usuárioo

aonde eu acho o

RME Map editor

????

me add msn [email protected]

Compartilhar este post


Link para o post
1780015    0
1780015

ow eu queru ter muinto esse sistema mas eu n sei onde tem q po os scripts kra explik isso ai

Compartilhar este post


Link para o post
Striker_Sky    0
Striker_Sky

Estava pensando em fazer, mas agora é fodz... sources vao da um trabalhao..

Compartilhar este post


Link para o post
Tozim    0
Tozim

otimo para qm gosta de rook

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×