
Gabriel Master
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
Gabriel Master deu reputação a p e o p l e em Vip Door System by MockOlá galerinha, tudo bom ?
Então eu tava sofrendo para conseguir fazer uma porta que fosse compatível com o sistema Vip-System-By-Mock-100, pois não queria que fosse por piso (movements) e sim por porta (action) portanto eu procurei mais a fundos e achei a solução.
OBS¹: Esse sistema de VIP não utiliza STORAGE e sim VIP_TIME no MYSQL.
OBS²: Testado apenas em TFS 0.4 não sei se funciona nas demais.
OBS³: Não testei em todas as portas, mas creio que funcionará normal (apenas as normal que não)
1º Em data/action/action.xml adicione está tag:
<action actionid="2117" event="script" value="vip/vipdoor.lua"/> 2º Abra a pasta data/action/scripts/vip e crie um arquivo chamado vipdoor.lua, dentro dele adicione:
function onUse(cid, item, frompos, item2, topos) if vip.hasVip(cid) >= 1 then pos = getPlayerPosition(cid) if pos.x == topos.x then if pos.y < topos.y then pos.y = topos.y + 1 else pos.y = topos.y - 1 end elseif pos.y == topos.y then if pos.x < topos.x then pos.x = topos.x + 1 else pos.x = topos.x - 1 end else doPlayerSendTextMessage(cid,22,"Fique de frente com a porta.") return true end doTeleportThing(cid,pos) doSendMagicEffect(topos,12) else doPlayerSendTextMessage(cid,22,'Precisar ser VIP Account para passar por aqui.') end return true end Para fazer funcionar é fácil basta abrir seu map, clica com o botão direito em cima da porta ir em Properties. Logo em seguida, aonde está escrito Action ID adicione o número 2117 e de OK. Só salvar e reiniciar o OTSERV, pois não tem como da /reload em world (mapa) OBS¹: Caso der esse erro, só mudar a linha if vip.hasVip(cid) >= 1 then para if vip.hasVip(cid) == TRUE then - Resolução feita pelo @Drafenous Aproveitando vou deixar o script do piso (Movements) utilizando o script do mesmo. 1º Em data/movements/movements.xml adicione está tag: <movevent type="StepIn" actionid="13500" event="script" value="vip/viptile.lua"/> 2º Abra a pasta data/movements/scripts/vip e crie um arquivo chamado viptile.lua, dentro dele adicione: function onStepIn(cid, item, position, fromPosition) local tileConfig = { kickPos = fromPosition, kickEffect = CONST_ME_POFF, kickMsg = "You need to be a vip player to access this area.", enterMsg = "Welcome to vip area!", enterEffect = CONST_ME_MAGIC_RED, } if isPlayer(cid) == true then if vip.hasVip(cid) == FALSE then doTeleportThing(cid, tileConfig.kickPos) doSendMagicEffect(tileConfig.kickPos, tileConfig.kickEffect) doPlayerSendCancel(cid, tileConfig.kickMsg) return end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, tileConfig.enterMsg) doSendMagicEffect(position, tileConfig.enterEffect) return true end end Para fazer funcionar é o mesmo procedimento, clica com o botão direito do mouse e vai em Proprieties. (No caso eu usei o item de ID: 6299 Some Cracks, mais no piso é a mesma coisa)
Logo em seguida, aonde está escrito Action ID adicione o número 13500 e de OK.
Só salvar e reiniciar o OTSERV, pois não tem como da /reload em world (mapa)
Legenda
1º Aonde está em azul é as fala que vai aparecer no seu Local Chat e Server Log.
2º Aonde está em violet e contornado de vermelho é aonde os Action ID deve conhecidir.
Créditos: Totalmente meu (tirando o script que é do mock rs) Te ajudei ? REP +
Até mais Tkianos
-
Gabriel Master deu reputação a xWhiteWolf em Anel de SauronFala galera do TK, criei esse anelzinho pra servers que procuram inovar..
bom, oque ele faz??
Simples, ele torna o usuário invisível.
aff, mas já existe o stealth ring que faz isso!
Sim mas dessa vez eu digo invisível mesmo, nenhum monstro ou players conseguirá te ver.
que lixo, assim qualquer player vai poder ficar invisível e passar no meio dos monstros e players.. vai estragar o server
Aí é que vc se engana porque o anel vem uma maldição, quem usar ele vai perdendo 3% de vida por segundo (ajustável) e só vai estragar o server se vc sair distribuindo o anel pra todos os players haha
O anel em si possui duas versões, na primeira ele retira 3% de vida por segundo, na segunda ele adiciona uma condição que te deixa perdendo uma quantidade fixa de vida, CONTUDO, na segunda versão aparece uma poça de sangue cada vez que toma o dano então dá pros players te pegarem caso vc coloque o anel e resolva fugir kkkkk
Vou chamar aqui de versão 1 e 2 respectivamente.
OBS: ISSO É EM MOVEMENTS!
1ª versão (sem sangue mas que tira 3% de vida por segundo):
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") function lifesteal(cid) steal = addEvent(lifesteal, 1000*tempo, cid) if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid) doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100))) end end lifesteal(cid) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") stopEvent(steal) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end 2ª versão (a cada 1,5 segundos ele te tira um dano configurado e deixa uma poça de sangue embaixo de vc facilitando que te identifiquem mesmo estando invisivel):
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") doAddCondition(cid, condition) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_PHYSICAL) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end Agora edite no items.xml o stealth ring pra que ele seja infinito:
<item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformDeEquipTo" value="2165" /> </item> e em movements.xml adicione essas linhas:
<movevent type="Equip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> <movevent type="DeEquip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> Editando:
Na primeira versão vc pode alterar as seguintes coisas que estão em colorido:
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE)
local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false)
local percent = 3
local tempo = 1 -- em segundos
em vermelho é o tempo que dura a invisibilidade... -1 é infinito
em azul é a porcentagem de vida que perde por tempo
em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo perde 3%
Na segunda versão vc pode editar as mesmas coisas do primeiro só que o tempo e o dano pelo tempo estão na condition:
local condition = createConditionObject(CONDITION_PHYSICAL)
setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE)
addDamageCondition(condition, -1, 1500, -500)
em vermelho é o numero de vezes que vai tirar vida. Mais uma vez -1 significa infinito (infinito até remover o anel)
em azul é o dano que vc toma a cada tempo (lembre-se de deixar sempre um - na frente se não ele vai adicionar vida)
em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo e meio retira 500 de vida
Bom, é isso.. um script simples mas que vai ajudar muita gente pelo fato de usar conditions não tão comuns e de uma forma diferente haha