Ir para conteúdo

[Encerrado] [DUVIDA] O que precisa pra ter system cast.


TomProgammer

Posts Recomendados

FALA AE GALERA!

 

Bom, queria saber o que eu preciso pra poder instalar Cast System no meu otserv..

 

Eu tenho um TFS 0.3.6 Compilador por Damson.. o OT ta praticamente sem sistema e sem nada, queria ver como que faz pra poder instalar cast system lá.. Se alguém me dizer as etapas, como que faz, se precisa de programas e tals..

Link para o comentário
Compartilhar em outros sites

Bom, vc precisa ter a source da distro (sem cast) e precisa ter os scripts de cast para pôr na source da distro sem o cast.

 

E claro, vc precisará de um compilador para compilar os codigos (q vc modificou acrescentando os scripts do cast) e assim transformar em executável.

Link para o comentário
Compartilhar em outros sites

Olá TomProgammer Tente isso...

 

Versão testada: TFS 8.6 0.4 e TFS 0.3.6 8.6

Comandos utilizados in-game:


!cast on -- Ativa o seu Cast System, e permite os outros jogadores te assistirem;
!cast off -- Desativa o seu Cast System;
!cast exit -- Você sai do Cast no qual está assistindo;
!cast NAME -- Começa a assistir um jogador (NAME).

Instalação

Vá em data/talkactions/scripts crie um arquivo chamado castSys.lua e adicione o seguinte código dentro do mesmo:


--[[ Perfect Cast System 1.0 by Roksas ]]--



function onSay(cid, words, param)
local player = getPlayerByName(param)


if not isInArray({"list", "exit", "off", "on"}, param) and not param or param == "" then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "Enter the name of the player, which you want to cast in parameters.")
return true
end

if param == "on" then
if getPlayerStorageValue(cid, 10359) >= 1 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "Your Cast System is already running ONLINE!")
return true
end

castOn(cid)
doSendMagicEffect(getThingPos(cid), 39)
doPlayerSendTextMessage(cid, 20, "You have activated your Cast System, now others can cast you, to disable this feature, use the parameter '!cast off'.")
return true
end

if param == "off" then
if getPlayerStorageValue(cid, 10359) < 1 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "Your Cast System is already OFFLINE!")
return true
end

castOff(cid)
doSendMagicEffect(getThingPos(cid), 39)
doPlayerSendTextMessage(cid, 20, "You have disabled your Cast System, from now on no one can watch you, unless you turn on the Cast, using the parameter '!cast on'.")
return true
end

if param == "exit" then
if getPlayerStorageValue(cid, 12269) < 1 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "You no are casting players.")
return true
end

cancelCast(cid)
doSendMagicEffect(getThingPos(cid), 39)
doPlayerSendTextMessage(cid, 20, "You stopped casting, use the parameter '!cast list' to see who can be casted.")
return true
end

if param == "list" then

if #whoCasted() < 1 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "At this time, no player can be casted, try again later.")
return true
end

doPlayerSendTextMessage(cid, 20, "Players can be casteds:\n\n")
for k, v in ipairs(whoCasted()) do
doPlayerSendTextMessage(cid, 20, " - "..getCreatureName(v).."")
end

return true
end

if not isPlayer(player) then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "This player is offline or does not exist. Use the parameter '!cast list' to see who can be casted.")
return true
end

if getPlayerStorageValue(player, 10359) < 1 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "You can only cast one person with the Cast System is activated, use the parameter '!cast list' to see who can be assisted.")
return true
end

if getPlayerStorageValue(cid, 10359) >= 1 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendTextMessage(cid, 20, "To cast a player, you must first disable your Cast System using the parameter '!cast off'.")
return true
end

if not getTileInfo(getThingPos(cid)).protection then
return doPlayerSendTextMessage(cid, 20, "You need enter in Protection Zone to use the Cast System.") and true
end

setPlayerStorageValue(cid, 12269, 1)
castPlayer(cid, player)
doSendMagicEffect(getThingPos(cid), 39)
doPlayerSendTextMessage(cid, 20, "You are casting the player "..getCreatureName(player)..", to exit just use the command '!cast exit'.")
doPlayerSendTextMessage(player, 20, "You are casted by "..getCreatureName(cid).." player to disable your Cast, simply use the parameter '!cast off'.")
return true
end

function cancelCast(uid)

mayNotMove(uid, false)
doCreatureSetHideHealth(uid, false)
setPlayerStorageValue(uid, 12269, -1)
doRemoveCondition(uid, CONDITION_OUTFIT)
return doTeleportThing(uid, getTownTemplePosition(getPlayerTown(uid))) or doTeleportThing(uid, getPlayerMasterPos(uid)) and true
end

function castOn(uid)
return setPlayerStorageValue(uid, 10359, 1) and true
end

function castOff(uid)
return setPlayerStorageValue(uid, 10359, -1) and true
end

function castPlayer(uid, player)
if not isPlayer(player) then
cancelCast(uid)
return true
end

if getPlayerStorageValue(player, 10359) < 1 then
cancelCast(uid)
return true
end

if getPlayerStorageValue(uid, 12269) < 1 then
cancelCast(uid)
return true
end

mayNotMove(uid, true)
doSetItemOutfit(uid, 1934, -1)
doCreatureSetHideHealth(uid, true)
doTeleportThing(uid, getThingPos(player))
return addEvent(castPlayer, 1 * 1000, uid, player) and true
end

function whoCasted()
local casteds = {}

for _, pid in ipairs(getPlayersOnline()) do
if getPlayerStorageValue(pid, 10359) >= 1 then
table.insert(casteds, pid)
end
end

return #casteds > 0 and casteds or {}
end

Volte uma pasta (data/talkaction) abra com algum editor de texto o arquivo talkactions.xml e adicione essa tag em qualquer lugar:


<talkaction words="!cast;/cast" event="script" value="castSys.lua"/>

Muito bem, após isso siga para a pasta data/creaturescripts/scripts, faça o mesmo, crie um arquivo chamado castSys.lua e adicione isso


function onLogout(cid)

if getPlayerStorageValue(cid, 12269) > 0 then
doPlayerSendCancel(cid, "To logout, you need to exit the Cast System first. Use the parameter '!cast exit'.")
return false
end

setPlayerStorageValue(cid, 10359, -1)
return true
end

function onStatsChange(cid, attacker, type, combat, value)

if not isCreature(cid) then
return true
end

if getPlayerStorageValue(cid, 12269) >= 1 and isMonster(attacker) or isPlayer(attacker) then
return false
end

return true
end

function onAttack(cid, target)

if not isPlayer(cid) or not isPlayer(target) then
return true
end

if getPlayerStorageValue(cid, 12269) > 0 then
doRemoveCondition(cid, CONDITION_INFIGHT)
return false
end

return true
end

Já no arquivo creaturescripts.xml, você vai adicionar essa tag:

 

<event type="attack" name="castAttack" event="script" value="castSys.lua"/>
<event type="statschange" name="castHits" event="script" value="castSys.lua"/>
<event type="logout" name="castLogout" event="script" value="castSys.lua"/>

 

E no arquivo login.lua você vai adicionar essas 3 linhas:

 


registerCreatureEvent(cid, "castAttack")
registerCreatureEvent(cid, "castHits")
registerCreatureEvent(cid, "castLogout")

 

Para que o player que está assitindo ao outro não use magias enquanto está assistindo, coloque essas linhas abaixo dentro de cada script das magias, debaixo da linha:

 


function onCastSpell(cid, var)

 

Coloque:

 


if getPlayerStorageValue(cid, 12269) >= 1 then
return false
end

 

Prontinho galera, basta reiniciar o servidor e usar, é isto por hoje, espero que tenham gostado, ideias/sugestões para futuras versões, bugs ou críticas sobre o sistema, basta deixar um simples comentário aí no tópico, estarei aqui para atendê-los.

 

post-49947-0-94063200-1372824949_thumb.j

 

post-49947-0-71291600-1372824997_thumb.j

 

Creditos

KeKezitoLHP

 

 

 

Link para o comentário
Compartilhar em outros sites

Já que tu é programador, creio que entenderá facilmente.

Nas versões sem o cast system a instancia do protocolgame na classe player é uma variavel, tu precisará transformar ela em algum tipo de container, vector, list como preferir. Feito isso pegará todos os pacotes pertinentes e ao invés de enviar para a variável do protocol anterior vai enviar para os protocols da lista do player. Além disso precisará de fazer alguns ajustes no protocolo de login para entrar no cast de x player. O restante é basicamente metodos para manipulação dos dados da lista do protocol e de habilitação do cast,.

Uma dica la lista, deixa sempre uma posição fixa para o player, seja no inicio ou no final, mas que seja sempre aquela posição

Link para o comentário
Compartilhar em outros sites

 

 

Olá TomProgammer Tente isso..

 

Esse sistema eu tenho @@Caktchup, ele da muito trabalho pra instalar, e não é muito bom, amigos que usam, reportam debug, com esse cast :s


 

 

Já que tu é programador, creio que entenderá facilmente. Nas versões sem o cast system a instancia do protocolgame na classe player é uma variavel, tu precisará transformar ela em algum tipo de container, vector, list como preferir. Feito isso pegará todos os pacotes pertinentes e ao invés de enviar para a variável do protocol anterior vai enviar para os protocols da lista do player. Além disso precisará de fazer alguns ajustes no protocolo de login para entrar no cast de x player. O restante é basicamente metodos para manipulação dos dados da lista do protocol e de habilitação do cast,. Uma dica la lista, deixa sempre uma posição fixa para o player, seja no inicio ou no final, mas que seja sempre aquela posição

 

Eu ainda não tentei programar pra jogos, eu sei que so muda a sintase, to começando agora em c++.. Eu programava em Delphi, java.. Coisas mais de SHOP.


 

 

Já que tu é programador, creio que entenderá facilmente. Nas versões sem o cast system a instancia do protocolgame na classe player é uma variavel, tu precisará transformar ela em algum tipo de container, vector, list como preferir. Feito isso pegará todos os pacotes pertinentes e ao invés de enviar para a variável do protocol anterior vai enviar para os protocols da lista do player. Além disso precisará de fazer alguns ajustes no protocolo de login para entrar no cast de x player. O restante é basicamente metodos para manipulação dos dados da lista do protocol e de habilitação do cast,. Uma dica la lista, deixa sempre uma posição fixa para o player, seja no inicio ou no final, mas que seja sempre aquela posição

 

Eu ainda não tentei programar pra jogos, eu sei que so muda a sintase, to começando agora em c++.. Eu programava em Delphi, java.. Coisas mais de SHOP.

Link para o comentário
Compartilhar em outros sites

  • 2 years later...
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...