Jump to content

matheus1000

Artesão
  • Posts

    114
  • Joined

  • Last visited

Reputation Activity

  1. Upvote
    matheus1000 got a reaction from Shyrriro in [Arquivado]Lista De Efeitos   
    Olá XTibianos,
     
    estou aqui para mostrar uma lista de efeitos 8.54:
     
     
    Para usar o efeito na spell você precisa botar isso:
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ -- Com o efeito no final
     
    Exemplo:
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STUN)
     
    Espero ter ajudado. ;D
  2. Upvote
    matheus1000 got a reaction from supraaxx in [ Talkaction ]Aol's System   
    Olá Xtibianos,
     
    estou aqui para mostrar uma Talkaction minha, muito fácil de fazer.
     
    Vá em 'talkactions.xml' e bote:
     

    <talkaction words="!buyaol;!sellaol" script="aol.lua"/>
     
    Em 'talkactions/scripts' crie uma pasta chamada aol.lua e bote isso dentro dela:
     

    function onSay(cid, words, param) if(words == "!buyaol") then if(doPlayerRemoveMoney(cid, 10000) == TRUE) then doPlayerAddItem(cid,2173,1) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o dinheiro suficiente.") return TRUE end elseif(words == "!sellaol") then if doPlayerRemoveItem(cid,2173,1) == TRUE then doPlayerAddMoney(cid, 10000) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o Amulet of Loss(AoL)") end end return TRUE end
     
     
    Pronto =D está feito seu comando !buyaol e !sellaol.
     
    Créditos: MasterMathw
     
     
    ByeBye ;D.
  3. Upvote
    matheus1000 got a reaction from flyware in [ Talkaction ]Teleport Por Talk. Para Vip   
    Ótimo,
     
    já vi esse script em vários Ot's, e ajuda muito.
     
    REP+
     
    EDIT --
    Amanha eu dou, acabou o limite.
  4. Upvote
    matheus1000 got a reaction from daruich in [Arquivado]Lista De Efeitos   
    Olá XTibianos,
     
    estou aqui para mostrar uma lista de efeitos 8.54:
     
     
    Para usar o efeito na spell você precisa botar isso:
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ -- Com o efeito no final
     
    Exemplo:
    setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STUN)
     
    Espero ter ajudado. ;D
  5. Upvote
    matheus1000 got a reaction from demolidor296 in [Action] Mount System 1.4 - 100% Inovador!   
    Não tem mais nada para inventar...
     
    Muito bom mesmo.
    +REP
  6. Upvote
    matheus1000 got a reaction from vitimdumau in (Pedido) Level Maximo   
    Da mais rep ae
     
    Pedido Sanado, tópico reportado
  7. Upvote
    matheus1000 reacted to Vodkart in [ Action ]Regeneração Potion   
    creditos: jestemPolakiem
     

     
    Explicação:
     
    está Potion contem 5 cargas,que quando usada ela durante 30 segundos regenera do player Mana e Hp.
    em NPC poderá vir mais carga.
     
    actions\script crie um arquivo.lua e renomeie para
    regenera.lua

    function onUse(cid, item, fromPos, itemEx, toPos) local function doRegeneration(cid, formula, count) doCreatureAddHealth(cid, formula.health) doCreatureAddMana(cid, formula.mana) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) if (count ~= 1) then addEvent(doRegeneration, 1000, cid, formula, count - 1) end return TRUE end local tempo = 30 -- tempo que a potion ira ficar healando (tempo em segundos) local storage = 11148 -- não mexa aqui local exhaust = 30 -- Tempo para player poder usar o item novamente! (tempo em segundos) local form = {health = getCreatureMaxHealth(cid) * 0.2 + 50, mana = getCreatureMaxMana(cid) * 0.15 + 40} if (getPlayerStorageValue(cid, storage) <= os.time()) then doRegeneration(cid, form, tempo) doChangeTypeItem(item.uid, item.type - 1) setPlayerStorageValue(cid, storage, os.time()+exhaust) else doPlayerSendCancel(cid, "Sorry, you only can again use this item after "..exhaust.." seconds.") end return TRUE end
     
    actions.xml adicione a tag:

    <action itemid="7443" event="script" value="regenera.lua" override="yes"/>
     
     
     
    em items.xml Substitua:
     

    <item id="7443" article="a" name="bullseye potion"> <attribute key="weight" value="200" /> <attribute key="description" value="Drinking this potion increases temporarily your distance skill while decreasing your defense." /> </item>
     
    por:
     

    <item id="7443" article="a" name="Regeneração Potion" override="yes"> <attribute key="description" value="Poção de regenerar sua vida e mana em um determinado tempo."/> <attribute key="decayTo" value="7636"/> <attribute key="charges" value="5"/> <attribute key="showcharges" value="1"/> <attribute key="weight" value="300"/> </item>
  8. Upvote
    matheus1000 reacted to Kydrai in Vip System By Account V1.0   
    Vip System by Account 1.0


    By Kydrai

     
    Este é um vip system por account, ou seja, um sistema de vip válido para todos os characters de uma determinada conta.
     
    O script foi testado no TFS 0.3.6 - 8.54.
    E no site Gesior 0.3.4 beta4.
    Em caso de erros ou dúvidas é só postar.
     

    Funções do Script


    Função necessária para começar a usar o script:
    installVip() -> Cria a coluna no banco de dados para usar o sistema de vip (testei somente em sqlite, mas acredito que funcione em mysql)
     
    Funções que utilizam o account id:
    doTeleportPlayersByAccount(acc, topos) -> Teleporta todos os players da account
    getVipTimeByAccount(acc) -> Pega o tempo de vip
    setVipTimeByAccount(acc, time) -> Edita o tempo de vip
    getVipDaysByAccount(acc) -> Pega o tempo de vip em dias
    isVipAccount(acc) -> Verifica se é vip
    addVipDaysByAccount(acc, days) -> Adiciona dias de vip
    doRemoveVipDaysByAccount(acc, days) -> Remove dias de vip
    getVipDateByAccount(acc) -> Pega a data e hora que irá terminar a vip
     
    Funções que utilizam o creature id (cid):
    doTeleportPlayers(cid, topos) -> Teleporta todos os players da account
    getVipTime(cid) -> Pega o tempo de vip
    setVipTime(cid, time) -> Edita o tempo de vip
    getVipDays(cid) -> Pega o tempo de vip em dias
    isVip(cid) -> Verifica se é vip
    addVipDays(cid, days) -> Adiciona dias de vip
    doRemoveVipDays(cid, days) -> Remove dias de vip
    getVipDate(cid) -> Pega a data e hora que irá terminar a vip
     

    Inserindo as funções


    Abra a pasta data/lib, crie um arquivo lua e coloque:
    vipAccount.lua

    --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSE end -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSE end function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSE end function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or days end function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSE end function addVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSE end function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSE end function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSE end -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end

    Exemplos de uso


    Talkaction
     
    GOD:
    /installvip
    /addvip name, days
    /removevip name, days
    /checkvip name
     
    Player:
    /buyvip
    /vipdays
     
    talkactions.xml:

    <talkaction log="yes" access="5" words="/installvip;/addvip;/removevip;/checkvip" event="script" value="vipaccgod.lua"/> <talkaction words="/buyvip;/vipdays" event="script" value="vipaccplayer.lua"/>
    vipaccgod.lua:

    function onSay(cid, words, param, channel) local t = param:explode(",") local name, days = t[1], tonumber(t[2]) if words == "/installvip" then if installVip() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!") end elseif words == "/addvip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then addVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.") end elseif words == "/removevip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then doRemoveVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.") end elseif words == "/checkvip" then if name then local acc = getAccountIdByName(name) if acc ~= 0 then local duration = getVipDateByAccount(acc) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.") end end return TRUE end
    vipaccplayer.lua:

    function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 30 if doPlayerRemoveMoney(cid, price) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end
    Movement (Tile)
     
    Coloque actionid 15000 em um tile onde somente os vips poderão passar.
     
    movements.xml:

    <movevent type="StepIn" actionid="15000" event="script" value="viptile.lua"/>
     
    viptile.lua:

    function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.") end return TRUE end
    Creaturescript (Login)
     
    Quando player logar irá verificar se a vip do player acabou, se sim então irá teleportar todos os players da account para o templo, se não irá mostrar o tempo da vip.
     
    creaturescripts.xml:

    <event type="login" name="viplogin" script="viplogin.lua"/>
     
    viplogin.lua:

    function onLogin(cid) local vip = isVip(cid) if getVipTime(cid) > 0 and vip == FALSE then local townid = 1 doPlayerSetTown(cid, townid) local templePos = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, templePos, false) setVipTime(cid, 0) doTeleportPlayers(cid, templePos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!") elseif vip == TRUE then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end
    Action (Door)
     
    Coloque actionid 15001 na door onde somente os vips poderão passar. Use a porta gate of expertise (id: 1227)
     
    actions.xml:

    <action actionid="15001" script="vipdoor.lua"/>
     
    vipdoor.lua:

    function onUse(cid, item, fromPosition, itemEx, toPosition) if isVip(cid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente players vip podem passar.") elseif item.itemid == 1227 then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition) end return TRUE end
    NPC (Vendedor de VIP)
     
    vipnpc.xml:

    <?xml version="1.0" encoding="UTF-8"?> <npc name="Vendedor de VIP" script="vipnpc.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I sell {vip} days."/> </parameters> </npc>
     
    vipnpc.lua:

    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 buyVip(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, parameters.price) then addVipDays(cid, parameters.days) npcHandler:say('Thanks, you buy '..parameters.days..' vip days. You have '..getVipDays(cid)..' vip days.', cid) else npcHandler:say('Sorry, you don\'t have enough money.', cid) end npcHandler:resetNpc() return true end local node1 = keywordHandler:addKeyword({'vip'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want buy 30 vip days for 1000000 gp\'s?'}) node1:addChildKeyword({'yes'}, buyVip, {price = 1000000, days = 30}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then.', reset = true}) npcHandler:addModule(FocusModule:new())
     

    Erros e Soluções


     

    Configurando o Gesior


    Com essa configuração irá aparecer o vip status do player no site e será possível vender vip pelo site.
    Se eu esqueci de alguma coisa é só avisar.
     
    accountmanagement.php
    Depois de:

    if(!$account_logged->isPremium()) $account_status = '<b><font color="red">Free Account</font></b>'; else $account_status = '<b><font color="green">Premium Account, '.$account_logged->getPremDays().' days left</font></b>';
    Adicione:

    if(!$account_logged->isVip()) $account_vip_status = '<b><font color="red">Not Vip Account</font></b>'; else $account_vip_status = '<b><font color="green">Vip Account, '.$account_logged->getVipDays().' days left</font></b>';
    Depois de:

    <td class="LabelV" >Account Status:</td><td>'.$account_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" >
    Adicione:

    <td class="LabelV" >Account Vip Status:</td><td>'.$account_vip_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" >
     
    pot/OTS_Account.php
    Substitua:

    private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0);
    Por:

    private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0, 'viptime' => 0);
    Substitua:

    $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();
    Por:

    $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('viptime') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();
    Substitua:

    $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
    Por:

    $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('viptime') . ' = ' . (int) $this->data['viptime'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
    Depois de:

    public function getPremDays() { if( !isset($this->data['premdays']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])); }
    Adicione:

    public function getVipDays() { if( !isset($this->data['viptime']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return ceil(($this->data['viptime'] - time()) / (24*60*60)); }
    Depois de:

    public function isPremium() { return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0); }
    Adicione:

    public function isVip() { return ceil(($this->data['viptime'] - time()) / (24*60*60)) > 0; }
     
    characters.php
    Substitua:

    if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>'; $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch(); if($vip == false) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } }
    Por:

    if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Account Vip Status:</TD>'; if(!$account->isVip()) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } }
     
    shopsystem.php (+Créditos ao GM Bekman)
    Substitua:

    if($buy_offer['type'] == 'pacc') { $player_premdays = $buy_player_account->getCustomField('premdays'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$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['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $buy_player_account->setCustomField('premdays', $player_premdays+$buy_offer['days']); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_premdays == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>PACC added!</h2><b>'.$buy_offer['days'].' days</b> of Premium Account added to account of player <b>'.$buy_player->getName().'</b> 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="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; }
    Por:

    if($buy_offer['type'] == 'pacc') { $player_viptime = $buy_player_account->getCustomField('viptime'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$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['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); if($player_viptime > 0) $buy_player_account->setCustomField('viptime', $player_viptime + ($buy_offer['days'] * 24 * 60 * 60)); else $buy_player_account->setCustomField('viptime', time() + ($buy_offer['days'] * 24 * 60 * 60)); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_viptime == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>VIP Days added!</h2><b>'.$buy_offer['days'].' days</b> of Vip Account added to account of player <b>'.$buy_player->getName().'</b> 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="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; }
     

    Links Úteis


    01- [Gesior Acc] Vendedo Vip Pelo Pacc
    Créditos: GM Bekman
     
    02- Double Exp Para Vip
    Créditos: Vodkart
     
    03- Outfits Só Para Jogadores Vips
    Créditos: Vodkart
  9. Upvote
    matheus1000 got a reaction from Jvchequer in [Sugestão] Editar Posts   
    Olá Equipe XTibia,
     
    eu tenho uma idéia para a edição de posts...
     
    Tipo: O (Fulano) cria um tópico de um sistema, mas o (Sicrano) também ajudou. Então eu queria que o (Fulano) poderia botar o (Sicrano) para editar o tópico.
     
    Obs: Não precisa ser tópico, pode ser post também.
     
    Espero que aceitem...
  10. Upvote
    matheus1000 got a reaction from Antiemoxml in [Action] Mount System 1.4 - 100% Inovador!   
    Não tem mais nada para inventar...
     
    Muito bom mesmo.
    +REP
  11. Upvote
    matheus1000 reacted to Vodkart in Multi Linguagem   
    Sistema de Multi Linguaguem


     
    1- O que é e como funciona?
     
    Uma palavra exemplo "uma coisa", que permite aos jogadores um jogo mais fácil do idioma do servidor exterior.
    Dizer "uma coisa" eu quero dizer o conjunto de funções (não só uma) para ajudar a escrever scripts em que as informações transmitidas para os jogadores serão exibidos em diferentes idiomas. Bem, bem, vamos continuar...
     
     
    2- Instalação.
     
    vá até Data\lib abre o 050-function.lua
    e adicione:
     

    ---------------Linguaguem--------------- local config = { default = 1, storage = 11548, languages = { [1] = "english", [2] = "portugues" } } function getPlayerLanguage(cid) local status = getPlayerStorageValue(cid, config.storage) if(status == -1 or status == 0) then setPlayerStorageValue(cid, config.storage, config.default) end return getPlayerStorageValue(cid, config.storage) end function getPlayerLanguageName(cid) local status = getPlayerStorageValue(cid, config.storage) if(status == -1 or status == 0) then setPlayerStorageValue(cid, config.storage, config.default) end return config.languages[getPlayerStorageValue(cid, config.storage)] end function setPlayerLanguage(cid, languageId) return setPlayerStorageValue(cid, config.storage, languageId) end function getLanguagesList() return config.languages end
     
    Para adicionar uma nova língua deve ser colocada na tabela:
     

    [id] = "Nova Lingua"
     
    obs: só não se esqueça da virgula.
     
     
    Bem, o sistema foi instalado. Somente o jogador pode mudar isso, o script é simples ele que irá fornecer informações básicas sobre o sistema e permitir a alteração do idioma.
     
    Agora vá até
     
    Data\Talkactions\script crie um arquivo.lua e renomeie para
    language.lua
     

    function onSay(cid, words, param, channel) local msgs = { info = {"Multi language system\n\n commands:\n /lang language_number - if you want to set language\n\nLanguage list:\n", "Multi language system\n\n Comando:\n /lingua numero da linguaguem - Se você quiser mudar o idioma seleciona na lista\n\nLista linguagens:\n"}, succes_set = {"You change your language to ", "Você mudou o Idioma para "}, fail_set = {"Wrong param format.", "Param formato invalido."} } local t = string.explode(param, ",") if(not t[1]) then local languages = getLanguagesList() local msg = msgs.info[getPlayerLanguage(cid)] for id, name in pairs(languages) do msg = msg .."".. id ..". ".. name .."\n" end doPlayerPopupFYI(cid, msg) elseif(t[1]) then setPlayerLanguage(cid, tonumber(t[1])) local msg = msgs.succes_set[getPlayerLanguage(cid)] .."".. getPlayerLanguageName(cid) doPlayerSendTextMessage(cid, 22, msg) elseif(t[2]) then local msg = msgs.fail_set[getPlayerLanguage(cid)] doPlayerSendCancel(cid, msg) end return TRUE end
     
     
    Em talkactions.xml adicione a tag:
     

    <talkaction words="/lang" event="script" value="language.lua"/>
     
    No início alguns podem ter problemas com a edição das informações apresentadas pelo roteiro, mas todos os problemas desapareceram depois de ler o próximo passo.
     
     
    3- Utilizando o novo sistema.
     
    Para exibir as mensagens em uma linguagem específica seria necessária a informação em uma linguagem que o jogador atua. Isto é possível graças ao "getPlayerLanguage(cid)", que retorna o id da linguagem escolhida pelo jogador. Então, no início de cada script é bom para fazer uma variável que irá armazenar esta informação:
     
     

    local lingua = getPlayerLanguage(cid)
     
    Ok, mas onde obter o conteúdo das informações? A melhor maneira é armazená-lo (eles) na tabela...
    Para visualizar esta mensagem em um jogador apenas deve se referir ao id correspondente, para esse fim, usamos uma variável que armazena o id do idioma do jogador:
     

    local lingua = getPlayerLanguage(cid) local info = {"message in english", "mensagem em portugues"} local exibe_informa = info[lingua]
     
    Para visualizar a mensagem simplesmente usar o código da funções, tais como:
     

    doPlayerSendTextMessage(cid, 22, exibe_informa)
     
     
    4. Screen's
     




  12. Upvote
    matheus1000 reacted to moskitinho in Ezio Tokumoto   
    Olá pessoal,
     
    Pra fechar a semana com chave de ouro trago a vocês um tutorial do membro 'tokumoto' um dos melhores designers que conheci este ano, espero que gostem a possam aprender algo com ele.
     



     



     
    Bom galera é isso, na proxima semana vocês vão conferir alguns tutoriais exclusivos para o XTibia, fiquem atentos no Temporada de Caça e no meu canal do YouTube.
     
    Obs.: Não deixem de conferir o novo video no tópico de postagens do Screencast, tem lá Indicações e um Video Tutorial muito banaca!
  13. Upvote
    matheus1000 reacted to Doidin in [Action] Mount System 1.4 - 100% Inovador!   
    Mount System - 100% inovador!



    Fala galerinha, é mais uma vez eu trazendo Scripts para o pessoal do XTibia, dessa vez eu dei uma "inovadinha" no script e fiz um vídeo explicando sobre ele, confira!


    Vídeo sobre o sistema:

    http://www.youtube.com/watch?v=xpyI4FtY7dM

    Bom vamos logo ao script:

    Primeiramente vamos fazer uma pequena alteração no arquivo items.xml, abra-o e procure por "giant eye", mude esse nome para "mysterious pet", assim:

    <item id="11191" name="mysterious pet"><attribute key="weight" value="120" /></item>
    Agora vamos adicionar as actions, vá até a pasta "Actions" e abra o arquivo "Actions.xml" e adicione esta tag:

    <action itemid="11191" event="script" value="mount.lua"/>
    Ok, agora volte a pasta "Actions" e abra a pasta "Scripts", faça uma arquivo chamado "mount.lua" e adicione isto:

    -- [( Mount System 1.4 created by Doidin for XTibia.com )] --function onUse(cid, item)local outfit = {lookType = 342} -- Outfit da montaria!local exhaust = 60 -- Tempo para player poder usar o item novamente! (tempo em segundos)local time = 60 -- Tempo para ficar na montaria! (tempo em segundos)local speed = 300 -- Velocidade adicionada ao player após usar o item! (300 = velocidade, quanto maior mais rapido...)local mana = 1300 -- Quantidade de mana que o player necessita para usar o sistema!local premium = "yes" -- Apenas players premium accounts "yes" or "no"!?local storage = 9393 -- Não mexa aqui!if premium == "yes" and not isPremium(cid) thenreturn doPlayerSendTextMessage(cid, 23, "Sorry, only premium players.")endif(getCreatureMana(cid) < mana) thenreturn doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)endif (getPlayerStorageValue(cid, storage) <= os.time()) thendoCreatureSay(cid, "Yeeeah!!!\nYou went up on his ride.", 19)doSetCreatureOutfit(cid, outfit, time*1000)doChangeSpeed(cid, speed)doSendMagicEffect(getCreaturePosition(cid), 34)setPlayerStorageValue(cid, storage, os.time()+exhaust)doPlayerAddMana(cid, -mana)addEvent(doChangeSpeed, time*1000+40, cid, -speed)addEvent(doPlayerSendTextMessage, time*1000+45, cid, 23, "Mount System is time out!")addEvent(doSendMagicEffect, time*1000+50, getCreaturePosition(cid), 2)doRemoveItem(item.uid, 1)elsedoPlayerSendCancel(cid, "Sorry, you only can again use this item after "..exhaust.." seconds.")endreturn TRUEend
    Pronto agora configure o script da maneira que você quiser!

    Caso queira mudar a outfit da sua montaria clique aqui e saiba mais.

    OBS: A inteção do script é algum NPC te vender um item que no caso é o "mysterious pet" e esse item é super raríssimo, ele tem a função de te dar um "PET" misterioso por um certo tempo para você usar ele como montaria!

    Aaah só pra constatar eu tive uma pequena ajuda dos meus amigos MatheusMkalo e do Vodkart.. ;]

    Espero que tenham gostado do script e do vídeo! ;]


    <* Não poste em outros fórums, exclusivo ao XTibia.com *>
     
  14. Upvote
    matheus1000 reacted to joaohd in Tabelas   
    Olha eu de novo por aqui. Dessa vez, o tutorial é sobre tabelas.
     
    Muitas pessoas, por não conhecerem o poder das tabelas, acabam criando scripts enormes e de difícil configuração.
     
    Após a leitura deste tutorial, você estará apto a criar scripts com tabelas simples ou intermediárias, possibilitando o encurtamento de scripts e até mesmo uma melhor compreensão de scripts feitos com o uso das mesmas.
     
    Para ter uma noção da imensidade e importância das tabelas em LUA, este é o único modo de armazenamento de dados, sejam eles numéricos ou textos (strings).
     
    Observe como a tabela é representada em LUA:
     
     
    Quando verificar a existência das chaves “{}” em um script, estamos tratando de uma tabela.
     
    Vamos criar agora uma tabelinha simples, somente para explicação:
     
     
    Como pode ver, criei uma tabela de conteúdo misto, contendo strings e números. Cada valor separado por vírgulas pode ser chamado de célula, contendo um endereço único que veremos mais à frente.
     
    Caso eu queira o valor da primeira célula, devo conhecer seu endereço, que nada mais é que o nome da tabela seguido de seu índice:
     
     
    Os índices existem mesmo que ocultos. Sempre que você cria uma tabela e não os especifica, subentende-se que cada célula receberá um índice de numero crescente partindo do 1.
     
    Caso sejam especificados, estes podem ser escritos assim (existe outra maneira, mais avançada):
     
     
    Logo, para acessarmos qualquer valor da tabela, digitamos o endereço da célula, sendo que agora, o endereço é composto pelo nome da tabela, precedido de um ponto (.) e o índice.
     
    Logo,
     
     
    Após entender o básico, podemos passar para as tabelas múltiplas, que apesar de parecerem difíceis, seguem a mesma base das simples.
     
    Exemplo de tabela múltipla:
     
     
    Não, não desista ao se deparar com tabelas assim. A interpretação pode ser feita por meio de um organograma:
     

     
     
    Já a parte dos índices são iguais. Por exemplo, quero pegar o valor 1 dos assuntos do xtibia:
     
     
    Fácil, não?
     
    Agora, iremos aprender a obter o “tamanho” de uma tabela. Podemos fazê-lo de duas formas. Criarei uma tabela simples para a explicação:
     
     
    Maneira 1:
     
    Usamos a função table.getn(tabela) ou a função table.maxn(tabela). O uso é da seguinte maneira:
     
     
    Maneira 2 (fácil) :
     
    Inserimos o caracter “#” seguido do nome da tabela. Assim:
     
     
     
    Informações adicionais:
     
    ► O nome de uma tabela deve ser escrito sem espaços.
    ► O nome de uma tabela não deve conter caracteres coringas (!@%¨*)
    ► Tabelas não interpretam um valor vazio (nil)
     
    Creio que seja isto por hoje. Vou deixar alguns exercícios simples, para fixação:
     

    1)Crie uma tabela simples com 6 valores, onde cada valor é uma string com o nome de um usuário do xtibia. 2)Crie uma tabela múltipla com 3 valores principais, cada um com o nome de uma área do xtibia, e dentro das áreas, o nome de 2 frequentadores da área correspondente.
     
    Respostas (tentem fazer primeiro, postando seus resultados):
     
     
     
     
    Materiais de apoio:
    Funções LUA
    Introdução à programação LUA + estruturas
    Começando a "scriptear"
     

    Tutorial sugerido por Vodkart.


    Você também pode pedir o seu aqui

     
     
    flw
  15. Upvote
    matheus1000 got a reaction from Doidin in [ Talkaction ]Aol's System   
    Olá Xtibianos,
     
    estou aqui para mostrar uma Talkaction minha, muito fácil de fazer.
     
    Vá em 'talkactions.xml' e bote:
     

    <talkaction words="!buyaol;!sellaol" script="aol.lua"/>
     
    Em 'talkactions/scripts' crie uma pasta chamada aol.lua e bote isso dentro dela:
     

    function onSay(cid, words, param) if(words == "!buyaol") then if(doPlayerRemoveMoney(cid, 10000) == TRUE) then doPlayerAddItem(cid,2173,1) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o dinheiro suficiente.") return TRUE end elseif(words == "!sellaol") then if doPlayerRemoveItem(cid,2173,1) == TRUE then doPlayerAddMoney(cid, 10000) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o Amulet of Loss(AoL)") end end return TRUE end
     
     
    Pronto =D está feito seu comando !buyaol e !sellaol.
     
    Créditos: MasterMathw
     
     
    ByeBye ;D.
  16. Upvote
    matheus1000 reacted to Vodkart in Ant-Exit   
    Creditos: Maestrial(60%),MatheusMkalo(20%) & Vodkart(20%) pelas correção de Bugs.

    Explicaçao: Quando o player pisa no tile do treiner é mandando uma mensagem dizendo que se ele nao se movimentar em alguns minutos ele será mandado para o templo e será kikado automaticamente.


    MoveEvent/Scripts

    autokick.lua
    events1,events2= {},{}local config = {tempo = 15,storage = 20000 }function onStepIn(cid, item, frompos, topos)if isPlayer(cid) and getPlayerStorageValue(cid, config.storage) <= 0 thendoPlayerSendTextMessage(cid, 22, "[Trainer]: Movimente-se a cada " .. config.tempo .. " minutos, caso contrário, seu char será levado ao templo.")setPlayerStorageValue(cid, config.storage, 1)events1[getPlayerGUID(cid)] = addEvent(setPlayerStorageValue, config.tempo*60*1000-1000, cid, config.storage, -1)events2[getPlayerGUID(cid)] = addEvent(doTeleportThing, config.tempo*60*1000-500, cid, getTownTemplePosition(getPlayerTown(cid)))endreturn trueendfunction onStepOut(cid, item, frompos, topos)if isPlayer(cid) and getPlayerStorageValue(cid, config.storage) >= 1 thensetPlayerStorageValue(cid, config.storage, -1)doPlayerSendTextMessage(cid, 23, "System kick off!")stopEvent(events1[getPlayerGUID(cid)])stopEvent(events2[getPlayerGUID(cid)])endreturn trueend

    movements.xml
    <movevent type="StepIn" actionid="25000" event="script" value="autokick.lua"/><movevent type="StepOut" actionid="25000" event="script" value="autokick.lua"/>

    Agora abra o MAP EDITOR e coloque no TILE dos trainers o action id 25000

    Seu sistema anti Exit está pronto.[/i]
  17. Upvote
    matheus1000 reacted to Vodkart in [ Talkaction ]Teleport Por Talk. Para Vip   
    script é simples,jogadores vip poderão ser teleportado para os lugar por talkactions basta usar o comando
     
     
     
    teleportvip.lua

    --[[script By Vodkart]]-- function onSay(cid, words, param) local config = { pz = true, -- players precisam estar em protection zone para usar? (true or false) battle = true, -- players deve estar sem battle (true or false) custo = true, -- se os teleport irão custa (true or false) need_level = true, -- se os teleport irão precisar de level (true or false) premium = true -- se precisa ser premium account (true or false) } --[[ Config lugares]]-- local lugar = { ["depot"] = { -- nome do lugar pos = {x=129, y=54, z=6},level = 5,price = 1000}, ["templo"] = { -- nome do lugar pos = {x=160, y=54, z=7},level = 10, price = 2000}, ["arena"] = { -- nome do lugar pos = {x=125, y=351, z=9},level = 15,price = 3000}, ["area vip"] ={ -- nome do lugar pos = {x=280, y=87, z=4},level = 20,price = 4000} } --[[ Lista de Viagem (Não mexa) ]]-- if (param == "lista") then local str = "" str = str .. "lista de viagem :\n\n" for name, pos in pairs(lugar) do str = str..name.."\n" end str = str .. "" doShowTextDialog(cid, 6579, str) return TRUE end local a = lugar[param] if not(a) then doPlayerSendTextMessage(cid, 22, "desculpe,este lugar não existe") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"você precisa estar em protection zone pra poder teleportar.") return TRUE elseif config.premium == true and not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas players com premium account podem teleportar.") return TRUE elseif config.battle == true and getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar sem battler pra poder teleportar.") return TRUE elseif config.need_level == true and getPlayerLevel(cid) < a.level then doPlayerSendTextMessage(cid, 22, "Desculpe,Voce não tem level. voce precisa "..a.level.." level ou mais para ser teleportado.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE elseif config.custo == true and doPlayerRemoveMoney(cid, a.price) == FALSE then doPlayerSendTextMessage(cid, 22, "Desculpe,voce nao tem dinheiro suficiente. Voce precisa "..a.price.." gp para ser teleportado.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE end doTeleportThing(cid, a.pos) doSendMagicEffect(a.pos, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, 22, "" .. getPlayerName(cid) .. " foi teleportado para: \n " .. param .. ".") return TRUE end
     
    em talkactions.xml adicione

    <talkaction words="!tp" script="teleportvip.lua"/>
  18. Upvote
    matheus1000 reacted to MatheusGlad in Broadcast Para Players Vips Ou Nao.   
    Bem gente como o script é auto explicativo entao nao vou explicar muito não...
    Oque o script faz?
    Ele faz com que saia um broadcast para todos os players com a mensagem que ele quizer. Voce pode botar para vips ou para players comuns ou para cobrar dinheiro.

    Script:
    Va em talkactions/scripts crie um arquivo.lua com o nome de talkbroad e bote este script dentro:

    ------ Script By MatheusMkalo for Xtibia.com Users ------- local configs = { cobrar = "sim", ------ Use sim ou nao para cobrar. sovip = "nao", ------ Se somente vip players poderam usar o comando price = 1000, ------ Preço a pagar se o cobrar estiver ativado. storage = 80123 ------ Storage Id da sua vip account caso for usar somente vips } function onSay(cid, words, param) local nada = {" "} if table.isStrIn(param, nada) or param == "" then doPlayerSendCancel(cid,"Voce precisa falar alguma coisa.") return TRUE end if configs.sovip == "sim" and getPlayerStorageValue(cid, tonumber(configs.storage)) - os.time() <= 0 then doPlayerSendCancel(cid,"Você não é vip.") return TRUE end if configs.cobrar == "sim" and not doPlayerRemoveMoney(cid,tonumber(configs.price)) then doPlayerSendCancel(cid,"Você não tem dinheiro suficiente.") return TRUE end doBroadcastMessage(""..getCreatureName(cid).." ["..getPlayerLevel(cid).."]: " .. param .. "", MESSAGE_INFO_DESCR) return TRUE end
     
    Agora va em talkactions.xml e bote esta tag:

    <talkaction words="!broadcast" event="script" value="talkbroad.lua"/>
     

    Exclusividade Xtibia. A postagem em qualquer outro local é considerada RIP.


  19. Upvote
    matheus1000 got a reaction from helinholima in [ Spells ] Runas Com Efeitos Textuais   
    Tente pôr isto:
     

    doCreatureSay(cid, "IRRHAAA", TALKTYPE_ORANGE_1)
     
    Espero ter ajudado.
  20. Upvote
    matheus1000 reacted to MatheusGlad in [ Talkaction ]Talkaction De Compra De Itens.   
    Creditos: Apocarai e MatheusMkalo
     
    Bom o script funciona assim, des de que tenha um tal item no script voce pode compra-lo por um tal preço e se for agrupavel voce pode escolher a quantidade.
     
    Como usar:

    /buyitem gold nugget,50
     
    Onde esta 50 é a quantidade de gold nugget que voce ira comprar.
     
    Bom, vá na pasta data/talkactions/scripts e crie um arquivo.lua chamado buyitens e bote este script dentro:

    ------Script by MatheusMkalo and apocarai------- ------Exclusivo para o Xtibia-------- function onSay(cid, words, param) local a = { [2472] = {price = 160000, countmax = 1}, [2157] = {price = 13000, countmax = 100}, [2466] = {price = 60000, countmax = 1}, [2494] = {price = 150000, countmax = 1} } local b = string.explode(param, ",") if a[getItemIdByName(b[1])] then if isNumber(b[2]) then if tonumber(b[2]) > 0 then if tonumber(b[2]) <= a[getItemIdByName(b[1])].countmax then if getPlayerMoney(cid) >= (a[getItemIdByName(b[1])].price*tonumber(b[2])) then doPlayerRemoveMoney(cid,(a[getItemIdByName(b[1])].price*tonumber(b[2]))) doPlayerAddItem(cid, getItemIdByName(b[1]),b[2]) doPlayerSendTextMessage(cid,25,"You have bought " .. tonumber(b[2]) .. " " .. getItemNameById(getItemIdByName(b[1])) .. " for " .. (a[getItemIdByName(b[1])].price*tonumber(b[2])) .. " gold pieces.") else doPlayerSendCancel(cid,"You have not enough money.") end else doPlayerSendCancel(cid,"You have informed a quantity higher than count max.") end else doPlayerSendCancel(cid,"You have informed a quantity lower than 0") end else doPlayerSendCancel(cid,"Quantity must be a number.") end end return TRUE end
     
    Depois salve-o e va em talkactions.xml e bote a seguinte tag:

    <talkaction words="/buyitens" event="script" value="buyitens.lua"/>
     
    Adicionando mais itens:
    Para isso voce tera que botar mais uma linha nas tables. assim olha
    Normal:

    local a = { [2472] = {price = 160000, countmax = 1}, [2157] = {price = 13000, countmax = 100}, [2466] = {price = 60000, countmax = 1}, [2494] = {price = 150000, countmax = 1} }
     
    Item adicionado:
     
    Legendas:
    Vermelho: O id do item que ira poder comprar entre colchetes "[]"
    Rosa: O preço por cada unidade de item que ira comprar
    Azul: A quantidade maxima que voce podera comprar (nao pode ultrapassar de 100)
     
    AVISO IMPORTANTE!
    Se voce botar quantidade maior que 1 em um item nao agrupavel, ou seja, nao da para juntar em 100, a pessoa ira tentar comprar 2 itens, ira pagar por 2 itens mais so recebera 1 item.
     
    BETA VERSION!
    Sujeito a mudanças...
    Achou bugs? Duvidas? Sugestoes? Aceitamos aqui ou por PM.
    NAO POSTE EM OUTRO FORUM, POIS SERA CONSIDERADO RIPPING
  21. Upvote
    matheus1000 reacted to DevilMoon in [ Action ]Pokeball System   
    PokeBall System!
     
    Ola Xtibianos, Vim hoje postar um Famoso Script de Pokeball System feito pelo Genioso Nahruto, claro pedi a autorização dele para postar.
    A Todos que forem pegar Scripts de outras Pessoas, lembre-se de sempre pedir autorização e claro colocar os creditos.
     
    Para Tfs: 0.34 , 0.35 e 0.36 Essas Forao Testadas E Funfo.
    Versoes: 8.42 - 8.50 - 8.52 - 8.54 - 8.6.
    Ots Testados: Snowz Yurots - Alissow Server - Styller Yurots
     
     
    Primeiramente Vamos Fuçar em Function.lua, se voce nao Sabe onde fica vá em:
    Data>Lib>Function.lua
     
    Abra e Coloque Isto:
     

    _warpzone = 2147483648 -- start storing strings here (THIS IS THE ABSOLUTE MAXIMUM VALUE FOR THIS) _maxlength = 1024 -- multiply by 3 to get the true length. setPlayerStorageInteger = setPlayerStorageValue getPlayerStorageInteger = getPlayerStorageValue function setPlayerStorageString(cid, key, value) if #value > (_maxlength-1) * 3 - 1 then -- Last word is reserved for 0 termination of the string. error("Storage string is too long") end if key > _warpzone / _maxlength then error("Storage string key is too large (" .. key .. ")") end key = _warpzone + key * _maxlength local word = 0 local wordwrap = 0 local wordcount = 0 local i = 1 while i <= #value do local byte = string.byte(string.sub(value, i, i)) word = bit.bor(word, bit.lshift(byte, wordwrap)) wordwrap = wordwrap + 8 if wordwrap == 24 then --[[ In the ideal world we would be able to store 4 characters per word, however, as the default return value for getPlayerStorageValue is -1, we cant use the last bit. ]]-- setPlayerStorageInteger(cid, key + wordcount, word) word = 0 wordwrap = 0 wordcount = wordcount + 1 end i = i + 1 end -- store the last word setPlayerStorageInteger(cid, key + wordcount, word) end function getPlayerStorageString(cid, key) if key > _warpzone / _maxlength then error("Storage string key is too large (" .. key .. ")") end key = _warpzone + key * _maxlength local wordcount = 0 local str = "" while true do if wordcount >= _maxlength then break end local word = getPlayerStorageInteger(cid, key + wordcount) if word == -1 then -- end of string break else -- Extract the 3 characters from the value byte = bit.band(word, 255) if byte == 0 then break else str = str .. string.char(byte) end byte = bit.rshift(bit.band(word, 65280), 8) if byte == 0 then break else str = str .. string.char(byte) end byte = bit.rshift(bit.band(word, 16711680), 16) if byte == 0 then break else str = str .. string.char(byte) end end wordcount = wordcount + 1 end return str end
     
    E Isso!

    function doConvinceSummon(cid, creature, amount, pos) summonplayerpos = {x=pos.x, y=pos.y, z=pos.z, stackpos=253} summonplayer = getThingfromPos(summonplayerpos) if(summonplayer ~= nil and summonplayer.itemid > 0) then doPlayerSendCancel(cid,"There is not enough room to summon here.") ret = 0 else convince = doSummonCreature(creature, pos) doConvinceCreature(cid, convince) ret = 1 end return ret end
     
    Agora Vamos Fazer o Script Vá em Pasta do Seu Ot > Data > Actions > Scripts Crie uma Pasta chamada pokeball.lua
    e bote isso dentro
     

    local notAllowed = {"Ferumbras", "Demon"} local storage = { status = 25650, pokeName = 25651 } local actionid_used = 7510 function onUse(cid, item, fromPos, item2, toPos) local pokeballStatus = getPlayerStorageValue(cid, storage.status) local pokeName = getPlayerStorageString(cid, storage.pokeName) pos = getPlayerPosition(cid) pos.stackpos = 0 if pokeballStatus == -1 then toPos.stackpos = 253 local pokeThing = getThingfromPos(toPos) if isCreature(pokeThing.uid) == TRUE then if isPlayer(pokeThing.uid) == FALSE then local pokename_ = getCreatureName(pokeThing.uid) if item.actionid ~= actionid_used then -- local maxHealth = 400 -- local creatureHealth = getCreatureHealth(pokeThing.uid) -- local divNum = (string.len(maxHealth)-1)^2 -- local result = math.floor((creatureHealth/divNum)/10) -- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7)))) -- if chance == result then if isInTable(notAllowed, pokename_) == TRUE then doPlayerSendCancel(cid, "You cannot catch this creature") else setPlayerStorageString(cid, storage.pokeName, pokename_) doRemoveCreature(pokeThing.uid) doSendDistanceShoot(fromPos, toPos, 37) setPlayerStorageValue(cid, storage.status, 1) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") doSetItemActionId(item.uid, actionid_used) end -- else -- doSendMagicEffect(fromPos, 2) -- doPlayerSendCancel(cid, "The Pokemom Escaped") -- end elseif item.actionid == actionid_used and pokename_ == pokeName then doPlayerSay(cid, pokeName .. " Back!!", TALKTYPE_SAY) doRemoveCreature(pokeThing.uid) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") setPlayerStorageValue(cid, storage.status, 1) doSendDistanceShoot(fromPos, toPos, 37) else doSendMagicEffect(fromPos, 2) doPlayerSendCancel(cid, "This pokeball is already used") end else doPlayerSendCancel(cid, "You cannot catch this creature") end else doPlayerSendCancel(cid, "Creature not found") end elseif pokeballStatus == 1 then summons = getCreatureSummons(cid) -- if #summons >= 2 then -- doPlayerSendCancel(cid, "You cannot call more pokemons") -- else doConvinceSummon(cid, pokeName, 0, toPos) doSendDistanceShoot(fromPos, toPos, 37) doPlayerSay(cid, pokeName .. " Go!!", TALKTYPE_SAY) setPlayerStorageValue(cid, storage.status, -1) doSetItemSpecialDescription(item.uid, "it is empty.") -- end end else return 1 end function isInTable(t, val) for _, v in pairs(t) do if v == val then return TRUE end end return LUA_ERROR end
     
    para TFS
     

    local notAllowed = {"Ferumbras", "Demon"} local storage = { status = 15244, pokeName = 15212 } local actionid_used = 7510 function onUse(cid, item, fromPos, item2, toPos) local pokeballStatus = getPlayerStorageValue(cid, storage.status) local pokeName = getPlayerStorageString(cid, storage.pokeName) pos = getPlayerPosition(cid) pos.stackpos = 0 if pokeballStatus <= 0 then toPos.stackpos = 253 local pokeThing = getThingfromPos(toPos) if isCreature(pokeThing.uid) == TRUE then if isPlayer(pokeThing.uid) == FALSE then local pokename_ = getCreatureName(pokeThing.uid) if item.actionid ~= actionid_used then -- local maxHealth = 400 -- local creatureHealth = getCreatureHealth(pokeThing.uid) -- local divNum = (string.len(maxHealth)-1)^2 -- local result = math.floor((creatureHealth/divNum)/10) -- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7)))) -- if chance == result then if isInTable(notAllowed, pokename_) == TRUE then doPlayerSendCancel(cid, "You cannot catch this creature") else setPlayerStorageString(cid, storage.pokeName, pokename_) doRemoveCreature(pokeThing.uid) doSendDistanceShoot(fromPos, toPos, 37) setPlayerStorageValue(cid, storage.status, 1) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") doSetItemActionId(item.uid, actionid_used) end -- else -- doSendMagicEffect(fromPos, 2) -- doPlayerSendCancel(cid, "The Pokemom Escaped") -- end elseif item.actionid == actionid_used and pokename_ == pokeName then doCreatureSay(cid, pokeName .. " Back!!", TALKTYPE_SAY) doRemoveCreature(pokeThing.uid) doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".") setPlayerStorageValue(cid, storage.status, 1) doSendDistanceShoot(fromPos, toPos, 37) else doSendMagicEffect(fromPos, 2) doPlayerSendCancel(cid, "This pokeball is already used") end else doPlayerSendCancel(cid, "You cannot catch this creature") end else doPlayerSendCancel(cid, "Creature not found") end elseif pokeballStatus == 1 then -- summons = doCreatureSummons(cid) -- if #summons >= 2 then -- doPlayerSendCancel(cid, "You cannot call more pokemons") -- else doConvinceSummon(cid, pokeName, 0, toPos) doSendDistanceShoot(fromPos, toPos, 37) doCreatureSay(cid, pokeName .. " Go!!", TALKTYPE_SAY) setPlayerStorageValue(cid, storage.status, 0) doSetItemSpecialDescription(item.uid, "it is empty.") -- end end return 1 end function isInTable(t, val) for _, v in pairs(t) do if v == val then return TRUE end end return LUA_ERROR end
     
    Agora Vamos Adicionar as Tags, vá em Data>Actions.xml e Adicione as Tags Corretas´
     

    <action itemid="xxxx" script="pokeball.lua" allowfaruse="1" blockwalls="1" />
     
    [font-"Georgia"]em <action itemid="xxxx" nos 4 X voce coloca o Number Id Do seu Item que Será como uma "Pokeball"[/font]
     
     
    Oque o Script Faz Realmente:
     
    - Guarda monstros dentro de objetos e salva seu status, você pode colocar pra salvar em qlqr objeto.. seria ótimo para projetos pokemons..
     
     
    Creditos:
    Nahruto
     
     
    Print Screen's:
     
    Snorlax Saindo da Pokeball:
     

     
    Snorlax Voltando para a Pokeball
     

     
    Look da Pokeball ( o Player so Ve assim You See a Pokeball , Have Snorlax )]
     

     
     
    Lembrando que eu nao Adicionei o Efeito da Pokeball Abrindo e Jogando o Monstro.
    Para fazer este Tipo de efeito voce vai ter que saber direitinho o LookType da Pokeball Fechando e Saindo, e transformar para um efeito e depois modificar no Script, aqui no xtibia Existe varios Tutoriais explicando isto, é so procurar!
     
     
     

    Gostou? Clica no
    Ali em Baicho para me Ajudar!
     
     
     
    Abraços..
  22. Upvote
    matheus1000 got a reaction from Mallandrovisky in [Encerrado] [Dúvida]God   
    Se o seu server for SQLite você precisa ter o programa SQLite e você aperta em players escolhe o que você quer que seja o GOD, mude o nome dele e coloque "group id" 5.
    Se for XML vai na pasta player do seu OT e clique em editar, depois procure group id e mude para 5.
     
    Group's ID's:
    0 - player
    1 - tutor
    2 - senior tutor
    3 - gamemaster
    4 - community manager
    5 - god
     
    Espero ter ajudado. ;D
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...