Ir para conteúdo
  • Cadastre-se

Posts Recomendados

@andreoam, poste o que você tem em spoiler.

Quando eu chegar em casa eu edito e posto.

@luanluciano93

@edit

O sistema que eu uso

http://www.tibiaking.com/forum/topic/7507-perfect-vip-system-20/

Infelismente o sistema que eu uso, eu apaguei por dar erros.

OBS: uso tfs1.1

Editado por andreoam (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Respostas 77
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Olá pessoal, estou desenvolvendo esse sistema vip para TFS 1.x, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos.   É

@andreoam, poste o que você tem em spoiler. 

@gangul321 Para colocar em spoiler siga esses passos.

Posted Images

Topico ~

 

Adicionado a função ao script:

• player:doVipDays()

@andreoam

buyvip.lua

-- <talkaction words="!buyvip" script="buyvip.lua" />

local config = {
	valor = 5000000,
	dias = 30,
}

function onSay(player, words, param)

	if player:removeMoney(config.valor) then
		player:addVipDays(config.dias)
		player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Foram adicionados ".. config.dias .." dias de VIP no seu character.")
	end
	
	return false
end

 

addvip.lua 

-- <talkaction words="/addvip" separator=" " script="addvip.lua" />
-- exemple: /addvip, Luan, 30

function onSay(player, words, param)
	if not player:getGroup():getAccess() then
		return true
	end

	if player:getAccountType() < ACCOUNT_TYPE_GOD then
		return false
	end

	local split = param:split(",")

	local jogador = Player(split[1])
	if not jogador:isPlayer() then
		player:sendCancelMessage("Player not found.")
		return false
	end

	local dias = tonumber(split[2])
	if dias == nil then
		player:sendCancelMessage("Invalid param specified.")
		return false
	end

	jogador:addVipDays(dias)
	player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Foram adicionados ".. dias .." dias de VIP no character ".. split[1] ..".")

	return false
end

 

Depois faço as outras.

Link para o post
Compartilhar em outros sites

luanluciano93 Perfeito luan so que o buyvip fucionou apenas uma vez e agora nao e agora nao fuciona mas.

nao retorna nenhum erro no console.

Editado por andreoam (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

luanluciano93 meu gesior é modificado e não tem a opção de vender VIP. Como adiciono?? Eu já sei adicionar novas categorias como categoria de goles, addons, mounts, item, item VIP, e VIP.

Mas a minha Categoria de VIP eu coloquei pra vender um item que quando da user, já adiciona a VIP no play, mas não sei configurar ele com o seu sistema. E TB não tenho ele aqui agora, estou no trabalho. Se VC poder me mandar um, eu agradeço, e TB preciso do autoloot para este sistema

Link para o post
Compartilhar em outros sites

na action "confirm_transaction" do shopsystem, na opção de oferta do vip, você colocou o que?

A mesma coisa do que ta no itens.

Pq nessa aba eu vendo apenas as medalhas de ouro, bronze e prata. Não me recordo o que esta lá. Vou fazer uma assistência remota lá em casa e torce pro PC esta lugado. Assim eu posso postar meu shop aqui

luanluciano93

 

elseif($buy_offer['type'] == 'VipDays')

{
$sql = 'INSERT INTO '.$SQL->tableName('z_ots_comunication').' ('.$SQL->fieldName('id').','.$SQL->fieldName('name').','.$SQL->fieldName('type').','.$SQL->fieldName('action').','.$SQL->fieldName('param1').','.$SQL->fieldName('param2').','.$SQL->fieldName('param3').','.$SQL->fieldName('param4').','.$SQL->fieldName('param5').','.$SQL->fieldName('param6').','.$SQL->fieldName('param7').','.$SQL->fieldName('delete_it').') VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote('login').', '.$SQL->quote('give_item').', '.$SQL->quote($buy_offer['item_id']).', '.$SQL->quote($buy_offer['item_count']).', '.$SQL->quote('').', '.$SQL->quote('').', '.$SQL->quote('item').', '.$SQL->quote($buy_offer['name']).', '.$SQL->quote($buy_offer['id']).', '.$SQL->quote(1).');';
$SQL->query($sql);
$save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_item').' ('.$SQL->fieldName('id').','.$SQL->fieldName('to_name').','.$SQL->fieldName('to_account').','.$SQL->fieldName('from_nick').','.$SQL->fieldName('from_account').','.$SQL->fieldName('price').','.$SQL->fieldName('offer_id').','.$SQL->fieldName('trans_state').','.$SQL->fieldName('trans_start').','.$SQL->fieldName('trans_real').') VALUES ('.$SQL->lastInsertId().', '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).',  '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['name']).', '.$SQL->quote('wait').', '.$SQL->quote(time()).', '.$SQL->quote(0).');';
$SQL->query($save_transaction);
$account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']);
$user_premium_points = $user_premium_points - $buy_offer['points'];
$main_content .= '<TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4>
<TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" ALIGN=left CLASS=white><B>VipDays added!</B></TD></TR>
<TR><TD BGCOLOR="'.$config['site']['lightborder'].'" ALIGN=left><b>'.htmlspecialchars($buy_offer['name']).'</b> added to player <b>'.htmlspecialchars($buy_player->getName()).'</b> items (he will get this items after relog) for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="?subtopic=shopsystem">GO TO MAIN SHOP SITE</a></TD></TR>
</table>';
}

Link para o post
Compartilhar em outros sites

$sql = 'INSERT INTO '.$SQL->tableName('z_ots_comunication').' ('.$SQL->fieldName('id').','.$SQL->fieldName('name').','.$SQL->fieldName('type').','.$SQL->fieldName('action').','.$SQL->fieldName('param1').','.$SQL->fieldName('param2').','.$SQL->fieldName('param3').','.$SQL->fieldName('param4').','.$SQL->fieldName('param5').','.$SQL->fieldName('param6').','.$SQL->fieldName('param7').','.$SQL->fieldName('delete_it').') VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote('login').', '.$SQL->quote('give_item').', '.$SQL->quote($buy_offer['item_id']).', '.$SQL->quote($buy_offer['item_count']).', '.$SQL->quote('').', '.$SQL->quote('').', '.$SQL->quote('item').', '.$SQL->quote($buy_offer['name']).', '.$SQL->quote($buy_offer['id']).', '.$SQL->quote(1).');';
$SQL->query($sql);

Essa parte não precisa.

Depois dessa linha: $SQL->query($save_transaction);  você pode criar uma váriavel que pega o valor do vip_time na database:

$player_viptime = $account_logged->getCustomField('vip_time');

Depois você criar uma expressão, para verificar se dá existe um valor de vip_time ou não, e add de acordo: 

if($player_viptime > 0)
{      
	$account_logged->setCustomField('vip_time', $player_viptime + $buy_offer['days'] * 86400);
}
else
{
        $account_logged->setCustomField('vip_time', time() + $buy_offer['days'] * 86400);
}

O resto pode deixar.

Teste!

Link para o post
Compartilhar em outros sites

$sql = 'INSERT INTO '.$SQL->tableName('z_ots_comunication').' ('.$SQL->fieldName('id').','.$SQL->fieldName('name').','.$SQL->fieldName('type').','.$SQL->fieldName('action').','.$SQL->fieldName('param1').','.$SQL->fieldName('param2').','.$SQL->fieldName('param3').','.$SQL->fieldName('param4').','.$SQL->fieldName('param5').','.$SQL->fieldName('param6').','.$SQL->fieldName('param7').','.$SQL->fieldName('delete_it').') VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote('login').', '.$SQL->quote('give_item').', '.$SQL->quote($buy_offer['item_id']).', '.$SQL->quote($buy_offer['item_count']).', '.$SQL->quote('').', '.$SQL->quote('').', '.$SQL->quote('item').', '.$SQL->quote($buy_offer['name']).', '.$SQL->quote($buy_offer['id']).', '.$SQL->quote(1).');';
$SQL->query($sql);
Essa parte não precisa.

Depois dessa linha: $SQL->query($save_transaction);  você pode criar uma váriavel que pega o valor do vip_time na database:

$player_viptime = $account_logged->getCustomField('vip_time');
Depois você criar uma expressão, para verificar se dá existe um valor de vip_time ou não, e add de acordo: 

if($player_viptime > 0)
{      
	$account_logged->setCustomField('vip_time', $player_viptime + $buy_offer['days'] * 86400);
}
else
{
        $account_logged->setCustomField('vip_time', time() + $buy_offer['days'] * 86400);
}
O resto pode deixar.

Teste!

Nai entendi muito bem, e na hora de adiciona os dias de VIP na loja, coloco o que no item ID e quantidade??
Link para o post
Compartilhar em outros sites

Vlw luan xD
vai me ajudar bastante naquele projeto lah  :bleh:

Link para o post
Compartilhar em outros sites

Segui todo Tutorial

Criei um item que da VIP , usando a funcao que voce passou,Porem da este erro na distro

Lua Script Error: [Action Interface] 
data/actions/scripts/vipitem.lua:onUse
data/actions/scripts/vipitem.lua:2: attempt to call method 'addVipTime' (a nil value)
stack traceback:
        [C]: in function 'addVipTime'
        data/actions/scripts/vipitem.lua:2: in function <data/actions/scripts/vipitem.lua:1>

Sei que vai Pedir entao Deixo aqui o Script do item:

 

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
player:addVipTime(30)
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received 30 premium days.")
item:remove(1)
return true
end

Ja tentei usar o comando
player:addVipDays(30)

Oque pode ser?

 

Editado por gangul321 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Achei um erro ,estava o arquivo colocando no global para busca o arquivo na pasta LIBS ,porem no meu server a pasta eh LIB, mudei so que esta dando este erro agora:
 

Lua Script Error: [Action Interface] 
data/actions/scripts/vipitem.lua:onUse
data/lib/vip_system.lua:8: attempt to call field 'getDataInt' (a nil value)
stack traceback:
        [C]: in function 'getDataInt'
        data/lib/vip_system.lua:8: in function 'doVipTime'
        data/lib/vip_system.lua:13: in function 'isVip'
        data/lib/vip_system.lua:18: in function 'addVipDays'
        data/actions/scripts/vipitem.lua:4: in function <data/actions/scripts/vipitem.lua:3>

E o codigo do VipItem ficou assim:
 

local days = 30 --dias que da de vip


function onUse(player, item, fromPosition, target, toPosition, isHotkey)
player:addVipDays(days)
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received 30 premium days.")
item:remove(1)
return true
end

Oque pode ser?

Link para o post
Compartilhar em outros sites

 

@gangul321, coloque isso no seu compat.lua: 

result.getDataInt = result.getNumber
result.getDataLong = result.getNumber
result.getDataString = result.getString
result.getDataStream = result.getStream

Vou Testar! Jaja edito

 

--EDITADO

Resolveu =P , Thx!

 

So mais uma coisa ,como eu faco o Title que so quem tem Vip Days ?

Pode fazer para mim se nao for encomodo ?

Posso usar o comando player:isVip() para usar no title vip tambem ne?

 

Codigo do Item que criei para Verificar se o player eh vip ou nao, Foi assim (deu certo) =)

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if player:isVip() then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce ja e Vip!.")
else
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce nao possui Vip!.")
end
return true
end

OBS: Como bota em Spoiler os codigos ? (kkk)

Editado por gangul321 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@gangul321

Para colocar em spoiler siga esses passos.

 

Ok Brigadao..

 

Luan Me ajuda ?

Quando uso a funcao player:doVipDays()

Aparece Assim 16:13 Your have 16633 vip days.

Sendo que coloquei para adicionar 30 dias.

 

-------Outra Questao---------

E Gostaria Muito que me ajuda-se a criar o VipTitle.

Nao tem como ao inves de usar Storage , usar a funcao:

player:isVip() , ai caso for vip ele passa se nao ele volta para traz.

Link para o post
Compartilhar em outros sites

o scrip adicionar segundos e nao dias.

então tende tente fazer uma conta no scrip.

 

tipo

 

player:doVipDays((days / 86400))

 

ou essa função

function Player.doVipDays(self)local vipDays = math.floor(self:doVipTime() / 86400)
return self:doVipTime() ~= false and self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Your have '.. vipDays .. ' vip days.') or error('error.')
end

gangul321

Faça o seguinte.

 

no scrip addvip.lua adicione um storage

-- <talkaction words="/addvip" separator=" " script="addvip.lua" />
-- exemple: /addvip, Luan, 30


function onSay(player, words, param)
if not player:getGroup():getAccess() then
return true
end


if player:getAccountType() < ACCOUNT_TYPE_GOD then
return false
end


local split = param:split(",")


local jogador = Player(split[1])
if not jogador:isPlayer() then
player:sendCancelMessage("Player not found.")
return false
end


local dias = tonumber(split[2])
if dias == nil then
player:sendCancelMessage("Invalid param specified.")
return false
end


jogador:addVipDays(dias)
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Foram adicionados ".. dias .." dias de VIP no character ".. split[1] ..".")
setPlayerStorageValue(player, 13540) -- Storage a ser adicionado

return false
end

em movements/scripts crie um viptile.lua e adicione

function onStepIn(cid, item, position, fromPosition)

local config = {
msgDenied = "Você não e vip ,fale com Administrador do Server.",
msgWelcome = "Seja Bem Vindo a Area vip."
}

if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then
doTeleportThing(cid, fromPosition, true)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied)
doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
return TRUE
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome)
return TRUE
end

em moviments.xml adicione

<movevent type="StepIn" actionid="13700" event="script" value="vipetile.lua"/>

e no seu RME coloque a actions 13700 no piso desejado .

 

So que agora vc tera que criar um check para remover o strage quando o vip acabar

 

 

Em creaturescript/script
 
Crie um arquivo.lua e renomeie para endvip.lua
 
--[[ by vodkart ]]--
function onLogin(cid)


if getPlayerStorageValue(cid, 13540) - os.time() > 0 then
setPlayerStorageValue(cid, 9898, 1)
end


local pos = {x = 157, y = 50, z = 7} -- posiçao do templo.


function Vodka(cid)
if isPlayer(cid) then
db.executeQuery("UPDATE `players` SET `name` = '"..string.sub(getCreatureName(cid), 7).."' WHERE `id` = "..getPlayerGUID(cid)..";")
doRemoveCreature(cid)
end
end


if getPlayerStorageValue(cid, 9898) == 1 and getPlayerStorageValue(cid, 13540) - os.time() < 1 or getPlayerStorageValue(cid, 13540) - os.time() == 0 then
doTeleportThing(cid, pos)
doPlayerPopupFYI(cid, "Sua vip Account acabou.")
setPlayerStorageValue(cid, 9898, -1)
if string.find(tostring(getCreatureName(cid)),"[[Vip]]") then
addEvent(Vodka, 3*1000, cid)
end
end
return TRUE
end
Em creaturescript.xml adicione
 
 
<event type="login" name="CheckVip" script="endvip.lua"/>

Nao esqueça de mudar a posição do templo

Editado por andreoam (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

tileVip.lua 

function onStepIn(creature, item, position, fromPosition)	
	
	local player = creature:getPlayer()
	if player == nil then
		return false
	end
	
	return player:isVip() and true or false
end
Aparece Assim 16:13 Your have 16633 vip days.

 

Certeza que tem 30 dias só? :O

@andreoam, cara, o script que você postou de tile vip e add/check não tem a ver com meu script ele é uma forma diferente e não funciona com o meu. Se não sabe o que ta postando não fica spamando meu tópico ¬¬ 

player:doVipDays((days / 86400))

não precisa de nenhum parametro essa função, basta usar player:doVipDays que ele te retornar em dias. 
Link para o post
Compartilhar em outros sites

 

tileVip.lua 

function onStepIn(creature, item, position, fromPosition)	
	
	local player = creature:getPlayer()
	if player == nil then
		return false
	end
	
	return player:isVip() and true or false
end

Certeza que tem 30 dias só? :O

@andreoam, cara, o script que você postou de tile vip e add/check não tem a ver com meu script ele é uma forma diferente e não funciona com o meu. Se não sabe o que ta postando não fica spamando meu tópico ¬¬ 

 

 

não precisa de nenhum parametro essa função, basta usar player:doVipDays que ele te retornar em dias. 

 

 

Luan, botei  o script que me passou: e quando passo pelo SQM aparece isto:

Lua Script Error: [MoveEvents Interface]

data/movements/scripts/viptitle.lua:onStepIn

data/movements/scripts/viptitle.lua:4: attempt to index global 'player' (a nil value)

stack traceback:

[C]: in function '__index'

data/movements/scripts/viptitle.lua:4: in function

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por looktsx
      Salve Rapaziada ...

      sera q tem como cria um script de addon doll ou mont doll ? 
      ou um npc q vende addon e montaria, pra versao 13.11 do tibia ?
       
      pode me ajuda fico muito grato 
    • Por Rpzada
      Oi boa tarde.
      Sera q tu pode me ajudar como uma duvida... no meu otserver. Tenho cliente 13 e client otc... ai os npcs no 13 ele reconhece dinheiro do banco quando vou comprar... porem no otc eu tenho q estar com dinheiro na bag.... tu sabe o pq e como arrumo isso... queria q no otc ele reconhecesse o dinheiro no bank
    • Por Anderson Sacani
      Estou criando um servidor com base nos scripts de TFS 1.x e voltado ao público da america latina por causa do baixo ping na VPS... Argentina, Bolívia, Brasil, Chile, entre outros, portanto sei que falamos em português e nossos vizinhos em espanhol.
      Todos os sistemas do meu servidor são pensados para terem traduções e venho por meio deste tópico compartilhar à vocês algumas dessas funções:
       
      Antes de qualquer coisa, você precisará adicionar a seguinte variável em alguma biblioteca:
      USER_LANGUAGE = 1022118443  
      Agora que adicionou essa variável em alguma biblioteca, poderá adicionar as seguintes funções na mesma biblioteca, porém a baixo da variável USER_LANGUAGE.
       
      A primeira função serve para retornar qual idioma o player está usando:
      --[[ getLanguage, how to use: player:getLanguage() ]] function Player.getLanguage(self) if self:isPlayer() then if self:getStorageValue(USER_LANGUAGE) < 1 then return "portuguese" else return "spanish" end else print("getLanguage: Only works on players..") end end Um exemplo de como usar: player:getLanguage()
       
      A segunda função serve para alterar o idioma do player. O ideal é que seja usada na primeira vez em que o player loga no servidor:
      --[[ setLanguage, how to use: player:setLanguage("portuguese") ]] function Player.setLanguage(self, language) local value = 0 if self:isPlayer() then if language == "portuguese" then value = 0 elseif language == "spanish" then value = 1 else print("setLanguage: Only two options available. Choose one of them: 'portuguese' or 'spanish'.") end return self:setStorageValue(USER_LANGUAGE, value) else print("setLanguage: Only works on players..") end end Exemplos de como usar:
      player:setLanguage("portuguese")
      ou
      player:setLanguage("spanish")
       
      A terceira e não menos importante função, serve para mandar uma mensagem de texto ao jogador, porém ele receberá no idioma em que escolheu:
      --[[ sendLanguageTextMessage, how to use: local portugueseMessage = "Ola, tudo bom? Isto aqui é um algoritmo!" local spanishMessage = "Hola todo bien? Esto de aqui es un algoritmo!" player:sendLanguageTextMessage(MESSAGE_EVENT_ADVANCE, portugueseMessage,spanishMessage) ]] function Player.sendLanguageTextMessage(self, type, portugueseMessage, spanishMessage) if self:isPlayer() then if self:getStorageValue(USER_LANGUAGE) < 1 then return self:sendTextMessage(type, portugueseMessage) else return self:sendTextMessage(type, spanishMessage) end else print("sendLanguageTextMessage: Only works on players..") end end Um exemplo de como usar:
      player:sendLanguageTextMessage(MESSAGE_EVENT_ADVANCE, portugueseMessage, spanishMessage)
      O primeiro parâmetro é o tipo de mensagem, o segundo parâmetro será a mensagem em português e o terceiro parâmetro será em espanhol.
    • Por Rodrigo Querobim
      Salve rapaziada eu tenho o server canary open source e quando implementei os bosses atuais começou dar este erro, nem mexi nessa linha que esta dando os erros, alguem sabe me dizer oq pode ser?



       
    • Por Tofames
      Hi,
      Para devolver o que recebi aqui, colocarei para si um sistema de transformação a trabalhar na TFS 1.X.
      (Testei em 1.4.2) 
       
      MUDANÇA DE SOURCE NECESSÁRIA PARA O BOM FUNCIONAMENTO!
      Havia algo dentro do código TFS (e provavelmente outras distros) que não estava funcionando corretamente e depois que eu informei, eles se fundiram em tfs principais, então já está dentro do TFS 1.5, mas não está em versões mais antigas.
      Trata-se de refrescar a velocidade do jogador após a transformação, se você não tiver isso, então sua velocidade do vocations.xml baseSpeed não é refrescada.
      Você precisa adicionar isto às sources:
      https://github.com/otland/forgottenserver/pull/4215/files
      se você não tem acesso às sources, eu tenho um meio de contornar isso, mas não vou inundar este posto, então escreva em pv.
       
      Créditos: 
      Erexo (guião original)
      Itutorial (TFS 1.X),
      Tofame (alteração: talkaction --> spell; source mudanças; correções do scripts)
       

      transform system.mp4  
      no final do global.lua:
      --[[ voc = from vocation newVoc = to vocation looktype = new outfit revertLooktype = current outfit level = lvl needed to transform rage = soul needed to transform (you can disable it, just type 0) kiToTrans = mana to transform addHp = maxHp added when you transform addKi = maxMana added effectOn = magic effect when you use transform aura = magic effect when you have current transform (can be disabled, just type 0). type nil in this version constant = if transform is constant (when it is, player dont lose transform/outfit and maxHp/Mana, and cannot use revert) --]] exhaust_transform = {} -- [1-8] naruto, transform = { [1] = {voc = 1, newVoc = 2, from_looktype = 2, looktype = 3, level = 50, rage = 0, mana = 50, addHealth = 450, addMana = 450, effect = 76, aura = nil, constant = false}, [2] = {voc = 2, newVoc = 3, from_looktype = 3, looktype = 4, level = 100, rage = 0, mana = 50, addHealth = 500, addMana = 500, effect = 76, aura = nil, constant = false}, [3] = {voc = 3, newVoc = 4, from_looktype = 4, looktype = 5, level = 150, rage = 0, mana = 50, addHealth = 650, addMana = 650, effect = 76, aura = nil, constant = false}, [4] = {voc = 4, newVoc = 5, from_looktype = 5, looktype = 6, level = 200, rage = 0, mana = 50, addHealth = 800, addMana = 800, effect = 76, aura = nil, constant = false}, [5] = {voc = 5, newVoc = 6, from_looktype = 6, looktype = 7, level = 250, rage = 0, mana = 50, addHealth = 900, addMana = 900, effect = 76, aura = nil, constant = false}, [6] = {voc = 6, newVoc = 7, from_looktype = 7, looktype = 8, level = 300, rage = 0, mana = 50, addHealth = 1000, addMana = 1000, effect = 76, aura = nil, constant = false}, [7] = {voc = 7, newVoc = 8, from_looktype = 8, looktype = 9, level = 400, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false}, [8] = {voc = 8, newVoc = 9, from_looktype = 9, looktype = 10, level = 500, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false} -- end naruto transforms } spells/scripts/revert.lua
      local combat = Combat() combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(player, variant) local pid = player:getId() local TRANS = transform[player:getVocation():getId() - 1] -- - [player:getVocation():getId() - 4] domyslnie, should be -1. if not TRANS then player:sendCancelMessage("You cannot revert.") return false end local outfit = player:getOutfit() outfit.lookType = TRANS.from_looktype if TRANS.constant then player:setOutfit(outfit) else player:setOutfit(outfit, false) end exhaust_transform[pid] = 1 player:setMaxHealth(player:getMaxHealth() - TRANS.addHealth) player:setMaxMana(player:getMaxMana() - TRANS.addMana) player:setVocation(TRANS.voc) player:save() return combat:execute(player, variant) end spells/scripts/transform.lua
      local combat = Combat() combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(player, variant) local effectPosition = Position(player:getPosition().x, player:getPosition().y, player:getPosition().z) local pid = player:getId() local TRANS = transform[player:getVocation():getId()] if not TRANS then player:sendCancelMessage("You cannot transform.") return false end if TRANS.effect == 76 then effectPosition = Position(player:getPosition().x + 2, player:getPosition().y, player:getPosition().z) end if player:getLevel() < TRANS.level then player:sendCancelMessage("You must reach level "..TRANS.level.." to transform.") return false end if player:getSoul() < TRANS.rage then player:sendCancelMessage("You need "..TRANS.rage.." to transform.") return false end if player:getMana() < TRANS.mana then player:sendCancelMessage("You need "..TRANS.mana.." to transform.") return false end local outfit = player:getOutfit() outfit.lookType = TRANS.looktype if TRANS.constant then player:setOutfit(outfit) else player:setOutfit(outfit, false) end player:addSoul(-TRANS.rage) player:setMaxHealth(player:getMaxHealth() + TRANS.addHealth) player:setMaxMana(player:getMaxMana() + TRANS.addMana) effectPosition:sendMagicEffect(TRANS.effect) player:setVocation(TRANS.newVoc) player:save() return combat:execute(player, variant) end spells.xml:
      <instant group="support" spellid="175" name="Revert" words="revert" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="revert.lua" /> <instant group="support" spellid="175" name="Transform" words="transform" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="transform.lua" />  
       
      As coisas abaixo são opcionais, adicione-as se você quiser ter aura. Se você não estiver usando, deixe a aura = nil em global.lua
      Também observei que isso poderia causar atrasos/screen freeze, por isso não recomendo o uso de aura.
       
      globalevents.xml adicionar linha:
      <globalevent name="TransformEffects" interval="2000" script="TransformEffects.lua"/> TransformEffects.lua (data/globalevents/scripts/TransformEffects.lua):
      function onThink(interval) for _, player in pairs(Game.getPlayers()) do if player then TRANS = transform[player:getVocation():getId()] if TRANS then if TRANS.aura ~= nil then player:getPosition():sendMagicEffect(TRANS.aura) end end end end return true end  
      edit:
      só consigo falar um pouco de espanhol e muito bem em inglês, por isso uso DEEPL para falar portugês.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo