Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Não, você tem que entrar no PHPMyAdmin, selecionar a database do seu servidor e então exportar ela para posterior importação em outro servidor.
  2. Eu faria de um jeito sem precisar de storages para você, pois com storages, você teria que "setar" o storage do alvo e não o do jogador.
  3. local config = { pz = true, exausted = 10, storage = 5487547, tps = { ["carlin"] = {x= 32360, y= 31782, z= 7}, ["thais"] = {x= 32346, y= 32220, z= 7}, ["barco carlin"] = {x= 32386, y= 31821, z= 6}, ["barco thais"] = {x= 32310, y= 32210, z= 6}, ["farmine"] = {x= 32985, y= 31540, z= 1}, ["yalahar"] = {x= 32794, y= 31248, z= 7}, ["edron"] = {x= 33171, y= 31815, z= 7}, ["trainer"] = {x= 31920, y= 32240, z= 9} } } function onSay(cid, words, param, channel) param = string.lower(param) if config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você precisa estar em protection zone para teleportar.") return true elseif not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Desculpe, você não é premium.") elseif (getPlayerStorageValue(cid, config.storage) >= os.time()) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Espere " .. getPlayerStorageValue(cid, config.storage) - os.time() .. " segundos para usar o fly novamente") return true elseif not config.tps[param] then doShowTextDialog(cid, 2160, "Palavras para !fly X: \ncarlin \nthais \nbarco carlin \nbarco thais \ntrainer \nfarmine \nedron \nyalahar") return true end doTeleportThing(cid, config.tps[param]) doSendMagicEffect(getPlayerPosition(cid), 10) setPlayerStorageValue(cid, config.storage, os.time()+config.exausted) return true end
  4. Certo, abra o seu banco de dados e execute a seguinte query. ALTER TABLE `accounts` ADD prem_gift INT NOT NULL DEFAULT 0 function onLogin(cid) local gift = db.getResult("SELECT `prem_gift` FROM `accounts` WHERE `id` = ".. getPlayerAccountId(cid) ..";") if gift:getID() ~= -1 then local status = gift:getDataInt("prem_gift") if status == 0 then doPlayerAddPremiumDays(cid, 5) db.executeQuery("UPDATE `accounts` SET `prem_gift` = 1 WHERE `id` = ".. getPlayerAccountId(cid) ..";") end end return true end A coluna prem_gift funcionará como um storage para a conta toda.
  5. Oneshot

    Este Sou Eu

  6. É, essa é a única desvantagem, ele não vai diferenciar entre PMs e Default Channel. Compilei aqui para testar e funcionou certinho mesmo: [20/7/2012 22:2:22] Ei, sabe o Mário? [20/7/2012 22:2:51] Aquele que te comeu atrás do armário!!
  7. Tudo vai ser arquivado e você não precisará configurar nada, só compilar.
  8. Achei um modo mais limpo de fazer isso, requer uma pequena edição nas sources e você não vai precisar mais do creaturescript. Abra o game.cpp, procure por: #include "group.h" Abaixo, coloque: #include "textlogger.h" Procure por: Game::playerSay Dentro da função, encontre: switch(type) { case SPEAK_SAY: return internalCreatureSay(player, SPEAK_SAY, text, false); case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); (...) Adicione acima de switch(type) Logger::getInstance()->eFile("players/" + player->getName() + ".log", text, true);
  9. Sim, mas é a mesma coisa do Colandus, só adicionei para executar o creatureevent no game.cpp.
  10. Façamos assim. function onWriteToChannel(cid, channelId, text) local file = io.open("data/logs/channels/".. getCreatureName(cid) .." [".. channelId .."].txt", "a+") file:write(os.date("%d/%m/%Y %X") .." ".. text) file:close() return true end O do Colandus só roda em canais configurados no channels.xml, se os jogadores estiverem conversando uns com os outros pelo Default ou privado, o script não irá retornar nada nesse caso.
  11. No channels.xml, procure por: <channel id="65535" name="Private Chat Channel"/> Troque por: <channel id="65535" name="Private Chat Channel" logged="yes"/> Não tenho muita certeza se irá funcionar. Caso não funcione, você poderá compilar um servidor com esse creaturescript onWriteToChannel e então é só fazer um script.
  12. Acredito que seguindo os passos passados pelo DrakyLucas no tópico, você consiga instalar o sistema. Não há nenhum requerimento de TFS 0.4 ou servidor MySQL para usar o sistema.
  13. No caso, você teria que passar o script do moveevent do chão que apenas VIPs podem passar.
  14. Oneshot

    Storage

    Está certo. O_õ if getPlayerStorageValue(cid, 103) == 1 then selfSay("Você não pode mais falar comigo!", cid) end Por exemplo.
  15. Oneshot

    Pedido Talkaction

    http://www.xtibia.com/forum/topic/190135-item-serial-system/ Espero que isso te ajude mais ou menos. Você precisará fazer uma modificação no script de compra ou entrega de itens do seu servidor.
  16. Dá sim para fazer sem ser por edição C++ com o creatureevent onStatsChange, o problema é que ficaria um script muito ruim e pouco preciso. Qualquer coisa, só falar que função que você precisa e que versão do TFS você quer que compilo para você.
  17. Você pode fazer isso no combat.cpp dentro do seu servidor. Precisamente nessas funções abaixo: bool Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, void* data) { int32_t change = 0; if(Combat2Var* var = (Combat2Var*)data) { change = var->change; if(!change) change = random_range(var->minChange, var->maxChange, DISTRO_NORMAL); } if(g_game.combatBlockHit(params.combatType, caster, target, change, params.blockedByShield, params.blockedByArmor)) return false; if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getPlayer()->getSkull() != SKULL_BLACK) change = change / 2; if(!g_game.combatChangeHealth(params.combatType, caster, target, change, params.effects.hit, params.effects.color)) return false; CombatConditionFunc(caster, target, params, NULL); CombatDispelFunc(caster, target, params, NULL); return true; } bool Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, void* data) { int32_t change = 0; if(Combat2Var* var = (Combat2Var*)data) { change = var->change; if(!change) change = random_range(var->minChange, var->maxChange, DISTRO_NORMAL); } if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getPlayer()->getSkull() != SKULL_BLACK) change = change / 2; if(!g_game.combatChangeMana(caster, target, change)) return false; CombatConditionFunc(caster, target, params, NULL); CombatDispelFunc(caster, target, params, NULL); return true; } Está vendo essa linha em comum nas duas funções? change = change / 2; Mude para: change = change / 4; E é só compilar novamente.
  18. Oneshot

    [Spell] Bold Fluor

    local _combat = createCombatObject() local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BOLT) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 10, 2.8, 32) local area = createCombatArea(AREA_CROSS5X5) setCombatArea(_combat, area) function onTargetTile(cid, position) doCombat(cid, combat, positionToVariant(position)) end setCombatCallback(_combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, _combat, var) end A parte do exhaustion é provavelmente no spells.xml. O script retorna o valor de doCombat, ou seja, true. Então se puder, dê uma olhada na tag XML da magia em questão e aumente o intervalo de exhaustion lá. A tag XML passada pelo membro Tchubaka tem exhaustion de 1 milissegundo, se estiver usando ela, está aí o problema.
  19. Oneshot

    [Spell] Bold Fluor

    local _combat = createCombatObject() local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BOLT) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 10, 2.8, 32) local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(_combat, area) function onTargetTile(cid, position) doCombat(cid, combat, positionToVariant(position)) end setCombatCallback(_combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, _combat, var) end
  20. Oneshot

    War System

    [Gesior Acc] Guild War System Com Escudos
  21. function onSay(cid, words, param, channel) if channel == x then ... end return true end
  22. Não sei muito bem o quê a exana kor faz, mas se você fizer uma pequena modificação no script acima: local damage = COMBAT_PHYSICALDAMAGE local effect = CONST_ME_DRAWBLOOD local animation = CONST_ANI_REDSTAR local rounds = 15 local delay = 3 * 1000 local condition = createConditionObject(CONDITION_BLEEDING) local function doCombatCondition(cid, target, type, area, min, max, effect, rounds) if isCreature(target) then if getCreatureCondition(target, CONDITION_BLEEDING) then doAreaCombatHealth((isCreature(cid) and cid or 0), type, getThingPosition(target), area, min, max, effect) if rounds > 0 then addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1)) end end end return true end function onCastSpell(cid, var) local formula_min = getPlayerLevel(cid) local formula_max = getPlayerLevel(cid) * 2.5 + 32 local target = variantToNumber(var) if getDistanceBetween(getThingPosition(target), getThingPosition(cid)) < 4 then doSendDistanceShoot(getThingPosition(cid), getThingPosition(target), animation) end doAddCondition(target, condition) addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds) return true end Esse script acima só dá o dano periódico se o alvo tem a condição Bleeding, caso contrário nada acontece. Caso a tal exana kor seja uma magia de dispel para a condição Bleeding então se encaixa perfeitamente.
  23. local damage = COMBAT_PHYSICALDAMAGE local effect = CONST_ME_DRAWBLOOD local animation = CONST_ANI_REDSTAR local rounds = 15 local delay = 3 * 1000 local function doCombatCondition(cid, target, type, area, min, max, effect, rounds) if isCreature(target) then doAreaCombatHealth((isCreature(cid) and cid or 0), type, getThingPosition(target), area, min, max, effect) if rounds > 0 then addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1)) end end return true end function onCastSpell(cid, var) local formula_min = getPlayerLevel(cid) local formula_max = getPlayerLevel(cid) * 2.5 + 32 local target = variantToNumber(var) if getDistanceBetween(getThingPosition(target), getThingPosition(cid)) < 4 then doSendDistanceShoot(getThingPosition(cid), getThingPosition(target), animation) end addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds) return true end
  24. tfs_libraries.7z Mova o conteúdo do arquivo para o diretório MingGW dentro do diretório onde você instalou o Code::Blocks.
  25. Oneshot

    Vender Level

    function onSay(cid, words, param, channel) if getPlayerLevel(cid) < 3500 then return doPlayerSendCancel(cid, "Você precisa de level 3500 para poder usar o comando.") end addEvent(function() if isCreature(cid) then local playerID = getPlayerGUID(cid) doPlayerAddItem(cid, 11192, 1) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `level` = 8, `experience` = ".. getExperienceForLevel(8) .." ` WHERE `id` = ".. playerID ..";") db.executeQuery("UPDATE `players` SET `health` = 185, `healthmax` = 185, `mana` = 35, `manamax` = 35 WHERE `id` = ".. playerID ..";") end end, 3 * 1000) return true end
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...