Comparte
Ver el tema anteriorIr abajoVer el tema siguiente
Miembro
Mensajes Mensajes : 11
Ver perfil de usuario

[Tutorial] Best Vip System! Full!

el Mar Oct 04, 2011 1:32 pm
Reputación del mensaje :100% (1 voto)
Hola A Todos Les Traigo El Mejor Sistema Vip=Premium

Hecho 100%Por Elexonic

Empezemos:

Antes de empezar con la Guia!:

A lo largo de toda la guia/tutorial como quieran llamarlo les hablare de como hacer para su servidor tal ves la forma mas segura facil y funcional de hacer un sistema de Vip , para jugadores donadores en su ot.

Para que luego nadie se lie ni nada con mis palabras [ si no le da palo leerlo todo y hacerlo BIEN] les explicare cada cosa paso a paso no creo que tengan problemas si siguen los pasos..

Bien antes de nada , cuando me refiera a vip [player donator de su ot] es lo mismo que si digo solo para players premium [player donator].
Es decir seria algo asi->

*Vip = Premium
*No premium: No vip
*Premium=Vip
*Free=No vip/premium

Cuando les hable de vip me refiero a este sistema a nuestra vip que en este caso usamos premium pero es una vip como cualquier otra =D

Este sistema tiene muchas ventajas sobre los demas como bien pueden ser ...

Spoiler:
Código:
ºUna total modificación e implantacion del sistema es decir sirven para Todas las versiones de ot sin ningun problema.
ºUna gran facilidad de modificacion y agregacion de script fácilmente
ºNO hay necesidad de crear ninguna nueva función [ Muy importante ]
ºTe avisa de cuantos días de premium te quedan
ºTe remueve los días automáticamente de premium
ºEs una vip por account sirve para todas las cuentas que tengas
ºGran cantidad de usos como pueden ser,puertas,nuevas magias,npcs,promotions,runas,pisos,outfits etc etc..
ºNo tienes que crear 40 archivos para hacer todo lo de arriba..
Y muchos mas ..

----Como Agregarlo------

Spoiler:
Spoiler:
Código:
Bien mas bien de como agregalo , lo primero que tenemos que hacer es quitarlo o.O ...
Devemos de quitar los comandos que nos dan la premium en nuestro ot ya que esta sera nuestro nuevo sistema de vip.
Normalmente en el 95% de los ots hay un comando para comprar premium por comando [!buypremium ]
Lo que aremos es quitar ese script de nuestro ot ya que si no todo el mundo sera vip en nuestro server =/ , para quitarlo vamos a nuestro ot donde tenemos el exel y el confic.lua tendremos una carpeta llamada Mods y dentro de esta una serie de script entre ellos el de comprar premium [buypremium_command.xml]
Lo que aremos es borrarlo diectamente y ya no lo tendremos..
En algunos ots mas antiguos ese comando se encuentra en data/talckactions hay tendremos que borrar el arhivo que hay en script y luego borrar la linea que se encuentra en talckaction.xml que es [!buypremium]
normalmente.

Hecho esto ya tenemos nuestro ot preparado para poder usar nuestro sistema vip =)


Bien empecemos a hacer funcionar esto...



----------COMO HACER VIP-----------
Bien ahora ya podemos hacer a la gente de nuestro ot vip... para esto podemos usar infinidad de script.
Os pondre los mas usados y buenos

Item que te da y te remueve Premium: Bien lo que hace esto es que dandole clic a un item cualquiera [ elegido por nosotros] nos dara los dias vip que nosotros queramos y los dias que elijamos .

>Agrega dias de vip<

Yo para este ejemplo e usado el item id 2155, el item verde
Código:
You see a green gem.
It weighs 1.50 oz.
ItemID: [2155].


ºPara hacer que este item nos de nuestra vip lo que devemos de hacer es ir a data/actions/script.. crearemos un archivo y lo llamaremos premium.lua bien ahora guardamos y dentro ponemos lo siguiente..

Spoiler:
function onUse(cid, item, fromPosition, itemEx, toPosition)
if getPlayerPremiumDays(cid) >= 90 then
doPlayerSendCancel(cid, 'You can only have 90 days of premium account.')
return false
end
doPlayerAddPremiumDays(cid, 30)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "We have added 30 vip days to your account!.")
doSendMagicEffect(getThingPosition(cid), 14)
doRemoveItem(item.uid)
return true
end

ºLuego iremos a data/action/action.xml y agregaremos lo siguiente:

Código:
<action itemid="2155" event="script" value="premium.lua"/>


Lo que hace este script es:
-Te da 30 dias [ se puede cambiar] de vip
-Te envia mensaje de que as recibido tus dias vip
-Crea un efecto cuando le das al item
-Si tienes mas de 90 dias de vip no te deja usarlo
-Podemos cambiar el item por el que queramos en action.xml
-Obtendras gran cantidad de bonificadores como son: puertas vip,outfit,magias etc..

>Removedor de Vip<

ºYo para remover los premiun day por clic, e usado este item: ItemID: [2156]. Pueden usar el que quieran solo lo cambian el id por el que sea y listo




Ahora vamos a hacer el removedor de nuestra vip, para ello vamos a data/action/script y crearemos un archivo y lo llamaremos removervip.lua y dentro ponemos:

Spoiler:
function onUse(cid, item, fromPosition, itemEx, toPosition)
if getPlayerPremiumDays(cid) < 30 then
doPlayerSendCancel(cid,'You do not have enough premium days.')
return false
end

doPlayerRemovePremiumDays(cid, 30)
doRemoveItem(item.uid, 1)
doSendMagicEffect(getThingPosition(cid), 13)
return true
end

ºDespués vamos a data/action/action.xml y agregamos esta linea:

Código:
<action itemid="2156" event="script" value="removervip.lua"/>

ºLo que hace este script es quitarte dias de vip
ºSi tienes menos de 30 dias , no te quitara mas dias
ºCrea un efecto cuando le das al item
ºPuedes modificar tanto los dias que te quita como los dias minimos para que no te quite
ºPuedes cambiar el item que remueve los dias por el que quieras en action.xml



~Aqui les dejo como funcionarian estos script uno que agrega dias de vip y otro que te los remueve este seria el resultado final.~






Comandos para tu base de datos
Tambien podremos dar dias premium a los jugadores mediantes comandos en tu base de datos.

Para ello necesitamos ingresar en nuestra base de datos o Aki!

Despues seleccionaremos nuestra base de datos y buscaremos por la parte superior una pestaña que dira Sql y pegamos las lineas que deseamos ejecutar en nuestra base de datos.

Solo con ir a tu base de datos y ejecutar la siguiente linea agregaremos automaticamente a todos los jugadores de nuestra base de datos 5 dias de vip [ premium account]

Código:
UPDATE accounts SET premdays = premdays + 5

Asi todos los jugadores que asta ese momento tengan una cuenta creada reciviran automáticamente 5 dias de premium y podran disfrutar de esta ventaja por esos dias.
Esto es muy util si quieres hacer algun evento o algo para que vean lo que es ser vip y asi podras ganar algun que otro donador a tu ot

Si lo que queremos es digamos agradecer a los usuarios que ya son vip y an pagado por su vip [premium] lo que podremos hacer para que solo las personas que son premium en ese momento reciban esos dias es el siguiente comando.

Código:
UPDATE accounts SET premdays = premdays + 5 WHERE premdays > 0

Con esto lo que hacemos es darle 5 dias mas de premium account a todos los jugadores que son ahora mismo premium las otras personas no reciviran nada, solo los players vip actuales.



ºPremium Por Npc

Tambien otra manera de hacernos vip [ premium] es mediante un npc.. os pondre el ejemplo de un npc que te quita dinero y te da premium tambien pueden hacerlo por items y otras cosas..

Van a data/npc/script y añaden premium.lua y dentro pondremos..

Spoiler:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local Topic = {}

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

function creatureSayCallback(cid, type, msg)
if not npcHandler:isFocused(cid) then
return false
elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then
npcHandler:say('Would you like to buy 30 premium days for 60 crystal coins?', cid)
Topic[cid] = 1
elseif Topic[cid] == 1 then
if msgcontains(msg, 'yes') then
if doPlayerRemoveMoney(cid, 600000) then
npcHandler:say('Here you are.', cid)
doPlayerAddPremiumDays(cid, 30)
else
npcHandler:say('You don\'t have enough money.', cid)
end
else
npcHandler:say('Then not.')
end
Topic[cid] = 0
end
return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new()

Facil.. lo que tienes que hacer es ir al npc y decirle. Hi,premium y si tienen en este caso 60cc te ara premium por 30 dias si no los tienes pues no te hara.


ºPor comando ingame

Lo que hace este script es basicamente lo que tienen todos o conocen como !buypremium, aqui les dejo un script pueden usar el que quieran,talaction,mod ,mas modificable pero el resueltado sera el mismo.

Script->

Spoiler:
function onSay(cid, words, param)
if doPlayerRemoveMoney(cid,500000) then
doPlayerAddPremiumDays(cid, 10)
doSendMagicEffect(getPlayerPosition(cid),12)
doPlayerSendTextMessage(cid,22,"You Are New Premium Player For 10 Days!")
else
doPlayerSendCancel(cid,"You don\'t have enough money.")
doSendMagicEffect(getPlayerPosition(cid),2)
end
return TRUE
end


ºAqui les dejo otro mas configurable,con maximos dias de premium vip, etc..

Spoiler:
function onSay(cid, words, param)
if getPlayerPremiumDays(cid) <= 50 then
if doPlayerRemoveMoney(cid, 5000) == TRUE then
doPlayerAddPremiumDays(cid, 10)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have bought 10 days of premium account.")
else
doPlayerSendCancel(cid, "You don't have enough money, 10 days premium account costs 5000 gold coins.")
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
end
else
doPlayerSendCancel(cid, "You can not buy more than 50 Day of Premium Account.")
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
end
end

Pueden usar tambien el script en version mod que seria este, mucho mas facil y simple de configurar , pero con algunos de los problemas que presentan los script en mod->

Spoiler:


config = {
days = 5,
cost = 10000,
maxDays = 50
}
]]>

domodlib('buypremium_config')
if(getPlayerPremiumDays(cid) > config.maxDays) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You can not buy more than " .. config.days + config.maxDays .. " days of Premium Account.")
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
return
end

if(not doPlayerRemoveMoney(cid, config.cost)) then
doPlayerSendCancel(cid, "You don't have enough money, " .. config.days .. " days premium account costs " .. config.cost .. " gold coins.")
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
return
end

doPlayerAddPremiumDays(cid, config.days)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have bought " .. config.days .. " days of premium account.")
]]>


------Magias------


Empezaremos por las magias , bien aqui hay que pensar un poco en los jugadores.. por que no vas a hacerle por ejemplo como en tibiarl.. que no puedan usar ue,utanis hur,exoris.. y esas magias.. en un ot son imprescindibles... por lo tanto que aremos.. pondremos esas magias para personas que no necesitan premium y para los vip agregaremos nuevas magias o editaremos alguna para que les sea mas facil jugar.
Para ello vamos a nuestro ot data/spells/spells.xml y buscaremos las siguientes magias..

Ejemplo: Exevo gran mas vis
Bien ahora vemos lo siguiente..

Código:
<instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="650" selftarget="1" prem="1" exhaustion="2000" needlearn="0" event="script" value="attack/rage of the skies.lua">
      <vocation id="1"/>
      <vocation id="5"/>
   </instant>

Nosotros lo que hacemos es cambiar la parte donde dice

Código:
prem="1"

y pondremos

Código:
prem="0"


que es para que los jugadores free puedan usar esa magia.
Realizaremos esto con todas las magias que que queramos cambiar para que la usen todo el mundo [ es aconsejable que se hagan todas o la gran mayoria].

Bien ya tenemos las magias creadas para los free account, pero y si ahora yo quiero que los vip account en mi ot sepan hacer otras magias ..bien aremos lo siguiente;crearemos la magia y la pondremos en spells como de costumbre y al añadirla al xml tendremos una cosa asi..

Código:
<instant name="Rage of Vip" words="exevo Vip" lvl="55" mana="600" selftarget="1" prem="1" exhaustion="2000" needlearn="0" event="script" value="attack/rage of vip.lua">
      <vocation id="1"/>
      <vocation id="5"/>

Bien como ya sabran lo que hacemos ahora es ponerle donde dice
prem="0" un 1 quedando de la siguiente manera;

Código:
prem="1"

Y esta magia ahora solo la podrán usar la gente que es premiun account en tu ot y por lo tanto han comprado su vip.

-----Outfits-----

Para agregar outfits a los jugadores que son premiun account lo que devemos de hacer es ir a data/xml/outfits.xml habrimos ese archivo y veremos algo como esto..

Veremos primeramente los 4 outfit que son para gente free que son de la siguiente manera

Código:
<outfit id="1">
      <list gender="0" lookType="136" name="Citizen"/>
      <list gender="1" lookType="128" name="Citizen"/>
   </outfit>

   <outfit id="2">
      <list gender="0" lookType="137" name="Hunter"/>
      <list gender="1" lookType="129" name="Hunter"/>
   </outfit>

   <outfit id="3">
      <list gender="0" lookType="138" name="Mage"/>
      <list gender="1" lookType="130" name="Mage"/>
   </outfit>

   <outfit id="4">
      <list gender="0" lookType="139" name="Knight"/>
      <list gender="1" lookType="131" name="Knight"/>
   </outfit>

Ahora lo que nosotros debemos de hacer si queremos que los jugadores que no son vip en nuestro servidor puedan usar outfit es lo siguiente..


Modificaremos por ejemplo el outfit del summoner, este es el script original que trae.

Código:
<outfit id="6" premium="yes">
      <list gender="0" lookType="141" name="Summoner"/>
      <list gender="1" lookType="133" name="Summoner"/>
   </outfit>

Y lo debemos de dejar de esta manera.

Código:
<outfit id="6">
      <list gender="0" lookType="141" name="Summoner"/>
      <list gender="1" lookType="133" name="Summoner"/>
   </outfit>

Lo que emos hecho a sido borrar la linea donde dice

Código:
premium="yes

y cerrado esa linea con un simbolo >

Ingame seria una cosa como esta, siendo el player free account podra usar otros outfit que supuestamente son solo para premium account.



Ahora si queremos añadir algun outfit que solo pueda ser usado por jugadores que son vip en nuestro servidor lo que hacemos es ponerlo de la siguiente manera..

Código:
<outfit id="13" premium="yes" default="0">
      <list gender="0" lookType="156" name="Assassin"/>
      <list gender="1" lookType="152" name="Assassin"/>
   </outfit>

   <outfit id="14" premium="yes" default="0">
      <list gender="0" lookType="157" name="Beggar"/>
      <list gender="1" lookType="153" name="Beggar"/>
   </outfit>

Emos añadido

Código:
premium="yes"

a la primera linea de cada outfit que queremos que sea solo y esclusivo para los jugadores vip en nuestro ot

Tambien podremos ir a nuestro confic.lua y buscar la siguiente linea.

Código:
addonsOnlyPremium = true

y con eso solo nuestros jugadores vips podran hacer uso de los addons, si no tienen vip no podrna usar ningun addon de ningun outfit =)



-Puertas-

Para las puertas hay varios scrtip como para todo unos mas simples que funcionan y otros mas complejos que funcionan y tienen mas opciones.. aqui les pondre algunos de ellos..

1ºCreamos un archivo en actions/scritp llamado door.lua y dentro pondremos->

Código:
function onUse(cid, item, fromPosition, itemEx, toPosition)

    if not isPremium(cid) then
   doPlayerSendCancel(cid,'You need premium to enter')
   return false
    end
   
    doPlayerSendCancel(cid,'You are premium.')
    doTeleportThing(cid, toPosition)
return true
end

Luego vamos a xml y agregamos->

Código:
<action actionid="2224" event="script" value="other/door.lua"/>

Luego por ultimo iremos a nuestro rme y daremos clic derecho sobre la puerto,propiedades y pondremos en action id 2224.

Esta scrtip es simple por lo tanto te funcionara pero tienes sus fallos como que te quedas encima de la puerta para pasar.. pero es corto Razz

Bien les dejo otro scrtip que es mas largo y completo, el cual me lo hizo cibermaster hace un tiempo.
En este la puertas se abren y se cierran sea la posicion cual sea donde este.. ya que es el scrtip modificado del original de una puerta normal =)

Código:
local function checkStackpos(item, position)
   position.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
   local thing = getThingFromPos(position)

   position.stackpos = STACKPOS_TOP_FIELD
   local field = getThingFromPos(position)

   return (item.uid == thing.uid or thing.itemid < 100 or field.itemid == 0)
end

local function doorEnter(cid, item, toPosition)
   doTransformItem(item.uid, item.itemid + 1)
   doTeleportThing(cid, toPosition)
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
   if(fromPosition.x ~= CONTAINER_POSITION and isPlayerPzLocked(cid) and getTileInfo(fromPosition).protection) then
      doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
      return true
   end

   if(getItemLevelDoor(item.itemid) > 0) then
   if not isPremium(cid) then
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Only the premium players may pass.')
       return true
      end

      doorEnter(cid, item, toPosition)
      return true
   end
     
    if(isInArray(horizontalOpenDoors, item.itemid) and checkStackpos(item, fromPosition)) then
      local newPosition = toPosition
      newPosition.y = newPosition.y + 1
      local doorPosition = fromPosition
      doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
      local doorCreature = getThingfromPos(doorPosition)
      if(doorCreature.itemid ~= 0) then
         local pzDoorPosition = getTileInfo(doorPosition).protection
         local pzNewPosition = getTileInfo(newPosition).protection
         if((pzDoorPosition and not pzNewPosition and doorCreature.uid ~= cid) or
            (not pzDoorPosition and pzNewPosition and doorCreature.uid == cid and isPlayerPzLocked(cid))) then
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
         else
            doTeleportThing(doorCreature.uid, newPosition)
            if(not isInArray(closingDoors, item.itemid)) then
               doTransformItem(item.uid, item.itemid - 1)
            end
         end

         return true
      end

      doTransformItem(item.uid, item.itemid - 1)
      return true
   end

   if(isInArray(verticalOpenDoors, item.itemid) and checkStackpos(item, fromPosition)) then
      local newPosition = toPosition
      newPosition.x = newPosition.x + 1
      local doorPosition = fromPosition
      doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
      local doorCreature = getThingfromPos(doorPosition)
      if(doorCreature.itemid ~= 0) then
         if(getTileInfo(doorPosition).protection and not getTileInfo(newPosition).protection and doorCreature.uid ~= cid) then
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
         else
            doTeleportThing(doorCreature.uid, newPosition)
            if(not isInArray(closingDoors, item.itemid)) then
               doTransformItem(item.uid, item.itemid - 1)
            end
         end

         return true
      end

      doTransformItem(item.uid, item.itemid - 1)
      return true
   end
     
   return false
end

Otro scrtip simple tambien seria algo asi..

Código:
if(getItemLevelDoor(item.itemid) > 0) then
if(item.actionid == 189) then
if(not isPremium(cid)) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
return true
end

El cual si la puerta le pones el action id 189[ lo puedes cambiar por el que quieras] te dejara entrar si eres premium , de lo contrario te saldra el mensaje de cancelacion y no podras entrar >.<

Estos son los scritp de las puertas,cada uno puede usar el que quiera o hacerlo por el mismo si quiere que tengas mas funciones o cosas =D .


-Suelo-
Bien ahora les pondre un scrtip que al pisar el suelo, si eres premium player [ o vip que es lo mismo] te dejara pasar.. si por lo contrario no eres premium te mandara atras y te dira que necesitas premium para poder pasar por ese tile..

Para agregarlo vamos a ir a movement/scrtip crearemso un scrtip llamado vip.lua y dentro pondremos lo siguiente->

Código:
function  onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
if(not isPremium(cid)) then
doPlayerSendCancel(cid,"You need premium to enter")
doTeleportThing(cid,(fromPosition.x ==0) and getPlayerMasterPos(cid) or fromPosition)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You May Pass");
end
return true
end

Luego iremos a movement.xml y agregaremos lo siguiente->

Código:
<movevent type="StepIn" uniqueid="2225" event="script" value="vip.lua"/>

Luego iremos a nuestro mapa editor y en propiedades sobre el suelo que querramos que solo pasen player vip pondremos el uniqueid 2225, y cuando un jugador intente pasar lo dejara pasar si es premium y lo expulsara si no lo es =D

Aqui le dejo otro que hace mas o menos igual para que tengan varios y puedan usar el que quieran..

Código:
function onStepIn(cid, item, position, fromPosition)
      if not isPremium(cid) then
         doTeleportThing(cid, fromPosition)
         doPlayerSendCancel(cid,"You need premium to enter")
      end
   return true
end

Este es otro que lo que hace es teletransportar al jugador si no es vip a una posicion que nosotros elijamos.

Código:
local pos = {x = 1000, y = 1000, z = 7}
function onStepIn(cid, item, position, fromPosition)
   if(not(isPremium(cid))) then
      doTeleportThing(cid, pos)
      doSendMagicEffect(pos, CONST_ME_TELEPORT)
      doPlayerSendTextMessage(cid,22,"Sorry, but you need to have vip account to pass.")
   end
   return true
end

Como ven son muy simples estos scrtip,pero les digo que los pueden hacer mas complejos con mas requirimientos pero estos son los basicos y funcionan 100% =D

-Guilds-
Tambien podemos crear o dejar esta apartado solo para que nuestros player vip puedan usar esta funcion , la de crear guilds..
Para ello vamos a ir a nuestro xamp/htdox/config/config.php y buscaremos una linea que nos dice..

Código:
$config['site']['guild_need_pacc'] = 1; //

Si le ponemos un 1 , solo los jugadores que sean vip podran crear guild =) , si ponemos un 0 todos los jugadores podran crear las guild a su antojo.

-Casas-
Bien esto es muy simple.. si queremos que las casas solo puedan ser usadas por jugadores que son vip[premium] y puedna dormir en las camas etc.. solo devemos ir a nuestro ot y buscar en nuestro confic.lua esta linea.

Código:
houseNeedPremium = true

Si ponemos true, sera que SI que queremos que se necesite premium para poder comprar las casas y por lo tanto solo nuestros jugadores vips podran acceder a la compra de una de neustras casas

Dentro de las casas podemos encontrarnos con las camas.. si queremos que nuestros jugadores puedan usarlas [jugadores vips] devemos buscar esta linea en nuestro confic.lua

Código:
bedsRequirePremium = true

Si ponemos true solo los jugadores premium de nuestro ot podrán usar las camas y los demas usuarios NO.


-Waiting List-
Otra de las cosas geniales que podemos hacer con este sistema es por ejemplo como en tibia rl o en los ots que tiene bastante gente que incluso tenemos que esperar un poco para poder entrar.. por que¿ por que les estan dando paso a los jugadores que tienen vip [ premium account en tibia], como puedo hacer esto yo en mi ot?..
Bien por ejemplo nosotros supongamos que tenemos 300 player en nuestro ot.. da igual lo que tengamos.. podemos hacer que con 10 player aiga que epserar waiting list [ La verda no lo recomiendo a menos de 200 player] Ya que pueden perder a muchos jugadores por esto , ya que no les gusta esperar y menos si hay poca gente =/

Bien para activar esto vamos a nuestro ot y buscamos el confic.lua y dentro buscaremos lo siguiente:
Primero seleccionaremos los maximos player que puedan entrar.. si no no abra lista de espera ...

Código:
maxPlayers = 200

Bien ahora una ves que tengamos esto cuando nuestro ot supere los 200 player NO entraran mas player que no sean premium... es decir pasaran a lista de espera asta que alguien se salga muera o cualquier motivo para que quede un puesto libre, mientras que los jugadores vip en nuestro ot entraran y saldran cuando les plazca

Luego buscamos esto:

Código:
remiumPlayerSkipWaitList = true

En esto pondremos true, y asi todos los jugadores que sean premium se saltaran la lista de espera y entraran directos al juego y no tendran que esperar la dichosa cola para jugar



Deport Items!
Con esto lograremos que nuestros player vip tengan una mayor capacidad en sus deport, asi como tibia cipsoft, para agregarlo solo iremos a nuestra confic.lua y buscaremos la siguiente linea:

Código:
defaultDepotSizePremium = 2000
   defaultDepotSize = 1000

En la primera cambiaremos la capacidad para los player vips, es decir tendra que ser mayor que la default de abajo.
Y en la de abajo ,pondremos el maximo numero de items que en el deport puede meter un player que no es vip.

Vip list!

Si queremos que nuestros player premium, puedan tener una mayor capacidad de agregar a personas en su vips list, lo que aremos sera lo siguiente, confic.lua buscamos estas lineas:

Código:
Code:
vipListDefaultLimit = 20
   vipListDefaultPremiumLimit = 100

En la primera es el maximo numero de vips que puede tener un usuario en sus listas sin este ser premium.
En la seguna linea pondremos un numero superior y esta sera la cantidad de players vip que peude agregar este usuario a su lista de vips




Barcos Vips!
Tambien les puede ser MUY util este npc que solo funciona si el jugador o los jugadores son players vips [ premium].
Si el jugador intenta pasar y no es miembro vip NO lo dejara pasar S=, sin embargo si el jugador ya es premium[ vip] podra pasar a ciudades que solo este puede entrar y nadie mas amenos que sea vip!
Para agregar este npc solo vamos a data/npc y creamos un archivo y lo llamamos Boat Vip y dentro ponemos lo siguiente.

Código:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Boat Vip" script="data/npc/scripts/Boat Vip.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="129" head="96" body="113" legs="95" feet="115" addons="0"/>
<voices>
<voice text="Passages to xxxxx xxxx." interval2="100" margin="1" yell="no"/>
</voices>
<parameters>
<parameter key="message_farewell" value="Good bye. Recommend us if you were satisfied with our service." />
<parameter key="message_walkaway" value="Good bye. Recommend us if you were satisfied with our service." />
 <parameter key="module_keywords" value="1" />
 <parameter key="keywords" value="name;carlin;" />
 <parameter key="keyword_reply1" value="My name is Boat Vip." />
 <parameter key="keyword_reply2" value="This is Carlin. Where do you want to go?" />
 <parameter key="message_greet" value="Welcome on board, |PLAYERNAME|. Where may I sail you today?"/>
</parameters>
</npc>

Luego vamos a crear el archivo de lectura de este npc para ello vamos a npc/scrtip y creamos un documento llamado Boat Vip y dentro pondremos lo siguiente:

Código:
local keywordHandler = KeywordHandler:new()
   local npcHandler = NpcHandler:new(keywordHandler)
   NpcSystem.parseParameters(npcHandler)
   
   
   
   -- OTServ event handling functions start
   function onCreatureAppear(cid)            npcHandler:onCreatureAppear(cid) end
   function onCreatureDisappear(cid)          npcHandler:onCreatureDisappear(cid) end
   function onCreatureSay(cid, type, msg)    npcHandler:onCreatureSay(cid, type, msg) end
   function onThink()                   npcHandler:onThink() end
   -- OTServ event handling functions end
   
   
   -- Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions!
   local travelNode = keywordHandler:addKeyword({'thais'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you seek a passage to Thais for free?'})
      travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = true, level = 0, cost = 0, destination = {x=32310, y=32210, z=6} })
      travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'We would like to serve you some time.'})

    
   keywordHandler:addKeyword({'sail'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Where do you want to go?'})
   keywordHandler:addKeyword({'job'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I\'m the captain of this sailing ship.'})
      keywordHandler:addKeyword({'captain'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I\'m the captain of this sailing ship.'})
     

   npcHandler:addModule(FocusModule:new())


-Otros Script-

Aqui les pondre una seria de scrtip aleatorios que les pueden servir para su sistema vip en sus servidor =D
Aqui solo pondre los scrtip si algun scrtip no saben donde va y lo quieren usar diganmelo y se los dire.

ºEjemplo de dar vip por clic!

Código:
local days = {
   add = 30,
   max = 90
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
   if(getPlayerPremiumDays(cid) >= days.max) then
      return doPlayerSendCancel(cid, "You cannot have more than " .. days.max .. " premium days.")
   end
   
   return doPlayerAddPremiumDays(cid, days.add) and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have received " .. days.add .. " premium days.") and doRemoveItem(item.uid)
en

ºEjemplo de comprar bleesing por talckactions!

Código:
local cost = 500000
local premium = true
function onSay(cid, words, param)
   for i = 1, 5 do
      if getPlayerBlessing(cid, i) then
         doPlayerSendCancel(cid, "You already have one of the blessings.")
         return TRUE
      end
   end

   if not premium or premium and isPremium(cid) == TRUE then
      if not cost or cost and doPlayerRemoveMoney(cid, cost) == TRUE then
         for i = 1, 5 do
            doPlayerAddBlessing(cid, i)
         end
         doCreatureSay(cid, "You are now blessed!", TALKTYPE_ORANGE_1)
         doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA)
      else
         doPlayerSendCancel(cid, "You don't have enough money.")
      end
   else
      doPlayerSendCancel(cid, "You need a premium account.")
   end
   return TRUE
end

ºDar y remover dias de premium [No testeado]

*Dar dias

Código:
function onSay(cid, words, param, channel)
   if(param == '') then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
      return true
   end

   local t = string.explode(param, ",")
   t[1] = tonumber(t[1])
   if(not t[1]) then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires numeric param.")
      return true
   end

   local pid = cid
   if(t[2]) then
      pid = getPlayerByNameWildcard(t[2])
      if(not pid) then
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[2] .. " not found.")
         return true
      end
   end

   if(t[1] > 350) then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can only add max 350 premium days.")
      return true
   end

   sender = getPlayerByNameWildcard(cid)

    doPlayerAddPremiumDays(pid, t[1])
    doPlayerSendTextMessage(cid, "You have added ".. t[1] .." vip days to ".. t[2])
    doPlayerSendTextMessage(pid, sender .." just added you ".. t[1] .." premium days.")   
   return true
end

*Remove Day

Código:
function onSay(cid, words, param, channel)
   if(param == '') then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")
      return true
   end

   local t = string.explode(param, ",")
   t[1] = tonumber(t[1])
   if(not t[1]) then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires numeric param.")
      return true
   end

   local pid = cid
   if(t[2]) then
      pid = getPlayerByNameWildcard(t[2])
      if(not pid) then
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[2] .. " not found.")
         return true
      end
   end

   if(t[1] > 365) then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can only add max 365 premium days.")
      return true
   end

   sender = getPlayerByNameWildcard(cid)

    doPlayerRemovePremiumDays(pid, t[1])
    doPlayerSendTextMessage(cid, "You have removed ".. t[1] .." premium days to ".. t[2])
    doPlayerSendTextMessage(pid, sender .." just removed you ".. t[1] .." premium days.")   
   return true
end

º Recargar soft y fire Boots!

Código:
local config = {
fireCost = 10000,
softCost = 10000
}

function onSay(cid, words, param, channel)
   
   if not isPremium(cid) then
      doPlayerSendCancel(cid,"You need premium account")
   return true
   end

   
    if param == "!recharge" then
   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param! (soft or fire).")
   return TRUE
    end
   
    if param == "soft" then
   if getPlayerItemCount(cid, 6530) >= 1 then
       if doPlayerRemoveMoney(cid, config.softCost) then
      doPlayerRemoveItem(cid, 10021, 1)
      doPlayerAddItem(cid, 6132, 1, FALSE)
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You recharged your soft boots for "..config.softCost.." coins.")
       else
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need "..config.fireCost.." coins to recharge your soft boots.")
       end
else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need a worn soft boots to recharge it.")
   end
    elseif param == "fire" then   
   if getPlayerItemCount(cid, 9934) >= 1 then
       if doPlayerRemoveMoney(cid, config.fireCost) then
      doPlayerRemoveItem(cid, 10022, 1)
      doPlayerAddItem(cid, 9933, 1, FALSE)
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You recharged your firewalker boots for "..config.fireCost.." coins.")
       else
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need "..config.fireCost.." coins to recharge your firewalker boots.")
       end
   else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need a worn firewalker boots to recharge it.")
   end
    end      
return TRUE   
end

º Teleport Scroll Only For Vips

Código:
function onUse(cid, item, frompos, item2, topos)
local pos = {x = 453, y = 126, z = 7}
   if getPlayerPremiumDays(cid) > 0 then
      if getCreatureCondition(cid, CONDITION_INFIGHT) == false then
         doTeleportThing(cid,pos)
      else
         doPlayerSendCancel(cid, "You are in a fight or with battle.")
      end
      return true
   else
      doPlayerSendCancel(cid, 'You are not premium.')
   end
end

º Premium con dias y nombre

Código:
function onSay(cid, words, param) Created By Bolero I think
local param = string.explode(param, ",")
local player = getPlayerByNameWildcard(param[1])
local days = tonumber(param[2])
   if isPlayer(player) and days then
      doPlayerAddPremiumDays(player, param[2])
      doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "You have just received ".. days .." premium days. Please re-login for the premium account to take effect.")
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player ".. param[1] .." received ".. days .." premium days.")
   else
      doPlayerSendCancel(cid, "Either the first param isn't an online player or the second param isn't a number.")
   end
return true
end

º Cuando la vip acaba te manda al temple free!

Código:
function onLogin(cid)
local pos = {x=1000,y=1000,z=7}
   if not isPremium(cid) then
   doTeleportThing(cid,pos)
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You vip are finished!")
   end
   return true
end

Otro igual que te manda al templo que seas residente.

Código:
function onLogin(cid)
   if not isPremium(cid) then
      doTeleportThing(cid, getTownTemplePosition(1))
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your vip has ended.")
   end
   return true
end

º Otro scrtip mas completo y funcional!

Código:
function onLogin(cid)
   if isPremium(cid) == TRUE then
      if getPlayerStorageValue(cid, 30002) == -1 then
        setPlayerStorageValue(cid, 30002, 1)
      end
   elseif isPremium(cid) == FALSE then
      if getPlayerStorageValue(cid, 30002) == 1 then
        setPlayerStorageValue(cid, 30002, -1)
        doPlayerSetTown(cid, 1)
        doTeleportThing(cid, {x = 381, y = 602, z = 7, stackpos = 1}, TRUE)
      end
   end
   return TRUE
end

º Mas experiencia a los premium!

Código:
function onLogin(cid)
    if isPremium(cid) == TRUE and getPlayerStorageValue(cid, 12345) == 0 then
    setPlayerExtraExpRate(cid, getPlayerExtraExpRate(cid)+15)
    setPlayerStorageValue(cid, 12345, 1)
   
    elseif isPremium(cid) == FALSE and getPlayerStorageValue(cid, 12345) == 1 then
    setPlayerExtraExpRate(cid, getPlayerExtraExpRate(cid)-15)
    setPlayerStorageValue(cid, 12345, 0)
    end
   
    return TRUE
end

Y el xml->

Código:
<event type="login" name="exprate" script="Nombredelarchivo.lua"/>

º Broadscrat Para Vips !

Código:
local config = {
premium = true, --  (true or false)
cobrar = true, ------ (true or false).
price = 100000 ------Precio .
}
function onSay(cid, words, param, channel)
if(param == '') then
return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Necesitas decir algo.")
elseif config.premium == true and not isPremium(cid) then
return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Solo jugadores vip pueden hablar por broadscrat.")
elseif config.cobrar == true and not doPlayerRemoveMoney(cid,tonumber(config.price)) then
return doPlayerSendCancel(cid,"No tienes dinero suficiente.")
end
return doPlayerBroadcastMessage(cid, param)
end

º Vip en el nombre [Vip] !

Código:
function onLogin(cid)
if isPremium(cid) == TRUE then
 db.executeQuery("UPDATE `players` SET `name` = '[VIP]" .. getCreatureName(cid) .. "' WHERE `id` = " .. getPlayerGUID(cid))
elseif isPremium(cid) == FALSE then
 db.executeQuery("UPDATE `players` SET `name` = " .. getCreatureName(cid) .. " WHERE `id` = " .. getPlayerGUID(cid))
 end

 return true
end


º Npc Que vende vip por dinero con limite de dias!

Código:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)      npcHandler:onCreatureAppear(cid)       end
function onCreatureDisappear(cid)       npcHandler:onCreatureDisappear(cid)       end
function onCreatureSay(cid, type, msg)       npcHandler:onCreatureSay(cid, type, msg)   end
function onThink()          npcHandler:onThink()          end

function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
   return false
    end

    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
   
    if(msgcontains(msg, 'premium')) then
   if getPlayerPremiumDays(cid) <= 360 then
       if getPlayerMoney(cid) >= 20000 then
      selfSay('You want to buy 30 days of premium?', cid)
      talkState[talkUser] = 1
       else
      selfSay('You don\'t have enough money, 30 days premium account costs 20000 gold coin', cid)
       end
   else
       selfSay('You can not buy more than 1 year of premium!', cid)
   end
    elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
   if doPlayerRemoveMoney(cid, 20000) == TRUE then
       doPlayerAddPremiumDays(cid, 30)
       selfSay('Added 30 days of premium, you now have '..getPlayerPremiumDays(cid)..'.', cid)
   end
    end
return TRUE
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Y por ultimo->



<<<>>
Si encuentran algun bugs posteenlo y se reparara lo mas rpaido posible.
Si tienen alguna idea que pueda ser util posteela y la agregare si es buena idea!

Bien con esto por ahora esta mas que suficiente [yo creo o.O] para ser la MEJOR guia de un sistema vip funcional al 100% con todos los distintos distribuciones que hay por el momento.

Nada mas que decirles , espero que les sirva de algo esta guia, algunos de los scrtip, aprendan algo seguramente!

Ya era hora de ver una guía asi de completa y funcional, espero que os guste de veras ya que le inverti bastante tiempo en hacerla y acomodarla!

Gracias por el tiempo and Bye bye!
Like This!


Saludos!

Created: By Elexonic

Creditos:

99%<- Elexonic <-Lo Hiso El
1% <- Elder Bebe <-Por Traelo A OtSupoerter


Última edición por ElderBebe el Mar Oct 04, 2011 6:42 pm, editado 1 vez
avatar
Moderador
Mensajes Mensajes : 312
Ver perfil de usuariohttp://www.otsuporter.com/

Re: [Tutorial] Best Vip System! Full!

el Mar Oct 04, 2011 3:21 pm
wooooooooooo que marabilla del señor Very Happy

__________________________________________________
Ver el tema anteriorVolver arribaVer el tema siguiente
Permisos de este foro:
No puedes responder a temas en este foro.