Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 02/25/11 em todas áreas

  1. Natanael Beckman

    Gesior Acc Modificado

    Esse site é recomendado para TFS. Tentem usar esse config.lua e ver se resolve seu problema: accountManager = treu namelockManager = true newPlayerChooseVoc = true newPlayerSpawnPosX = 32360 newPlayerSpawnPosY = 31782 newPlayerSpawnPosZ = 7 newPlayerTownId = 2 newPlayerLevel = 8 newPlayerMagicLevel = 2 generateAccountNumber = false redSkullLength = 1 * 24 * 60 * 60 blackSkullLength = 2 * 24 * 60 * 60 dailyFragsToRedSkull = 7 weeklyFragsToRedSkull = 15 monthlyFragsToRedSkull = 30 dailyFragsToBlackSkull = dailyFragsToRedSkull weeklyFragsToBlackSkull = weeklyFragsToRedSkull monthlyFragsToBlackSkull = monthlyFragsToRedSkull dailyFragsToBanishment = dailyFragsToRedSkull weeklyFragsToBanishment = weeklyFragsToRedSkull monthlyFragsToBanishment = monthlyFragsToRedSkull blackSkulledDeathHealth = 40 blackSkulledDeathMana = 0 useBlackSkull = true useFragHandler = true advancedFragList = true notationsToBan = 3 warningsToFinalBan = 4 warningsToDeletion = 5 banLength = 2 * 24 * 60 * 60 killsBanLength = 2 * 24 * 60 * 60 finalBanLength = 2 * 24 * 60 * 60 ipBanishmentLength = 2 * 24 * 60 * 60 broadcastBanishments = false maxViolationCommentSize = 200 violationNameReportActionType = 2 autoBanishUnknownBytes = false worldType = "open" protectionLevel = 1 pvpTileIgnoreLevelAndVocationProtection = true pzLocked = 60 * 1000 huntingDuration = 60 * 1000 criticalHitChance = 0 criticalHitMultiplier = 0 displayCriticalHitNotify = false removeWeaponAmmunition = true removeWeaponCharges = true removeRuneCharges = true whiteSkullTime = 10 * 60 * 1000 noDamageToSameLookfeet = false showHealingDamage = false showHealingDamageForMonsters = false fieldOwnershipDuration = 5 * 1000 stopAttackingAtExit = false oldConditionAccuracy = false loginProtectionPeriod = 10 * 1000 deathLostPercent = 10 stairhopDelay = 2 * 1000 pushCreatureDelay = 2 * 1000 deathContainerId = 1987 gainExperienceColor = 215 addManaSpentInPvPZone = true squareColor = 0 allowFightback = true worldId = 0 ip = "127.0.0.1" bindOnlyConfiguredIpAddress = false loginPort = 7171 gamePort = 7172 adminPort = 7171 statusPort = 7171 loginTries = 10 retryTimeout = 5 * 1000 loginTimeout = 60 * 1000 maxPlayers = 3000 motd = "Faça sua conta no site: http://server.net" displayOnOrOffAtCharlist = false onePlayerOnlinePerAccount = false allowClones = false serverName = "Server" loginMessage = "Seja bem vindo ao Server" statusTimeout = 5 * 60 * 1000 replaceKickOnLogin = true forceSlowConnectionsToDisconnect = false loginOnlyWithLoginServer = false premiumPlayerSkipWaitList = false sqlType = "mysql" sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "natan" sqlDatabase = "natan" sqlFile = "forgottenserver.s3db" sqlKeepAlive = 0 mysqlReadTimeout = 5000 mysqlWriteTimeout = 5000 encryptionType = "sha1" deathListEnabled = true deathListRequiredTime = 2 * 60 * 1000 deathAssistCount = 19 maxDeathRecords = 5 ingameGuildManagement = true levelToFormGuild = 25 premiumDaysToFormGuild = 0 guildNameMinLength = 4 guildNameMaxLength = 20 highscoreDisplayPlayers = 10 updateHighscoresAfterMinutes = 15 buyableAndSellableHouses = true houseNeedPremium = true bedsRequirePremium = true levelToBuyHouse = 50 housesPerAccount = 0 houseRentAsPrice = false housePriceAsRent = false housePriceEachSquare = 5000 houseRentPeriod = "never" houseCleanOld = 0 guildHalls = true timeBetweenActions = 200 timeBetweenExActions = 1000 checkCorpseOwner = true hotkeyAimbotEnabled = true maximumDoorLevel = 500 mapName = "world.otbm" mapAuthor = "Natan" randomizeTiles = true useHouseDataStorage = false storeTrash = true cleanProtectedZones = true mailboxDisabledTowns = "-1" defaultPriority = "high" niceLevel = 5 coresUsed = "-1" optimizeDatabaseAtStartup = true removePremiumOnInit = true confirmOutdatedVersion = false maxMessageBuffer = 20 bufferMutedOnSpellFailure = false dataDirectory = "data/" allowChangeOutfit = true allowChangeColors = true allowChangeAddons = true disableOutfitsForPrivilegedPlayers = false bankSystem = true saveGlobalStorage = true displaySkillLevelOnAdvance = true spellNameInsteadOfWords = false emoteSpells = false promptExceptionTracerErrorBox = true storePlayerDirection = false monsterLootMessage = 3 monsterLootMessageType = 25 separateViplistPerCharacter = false ghostModeInvisibleEffect = true ghostModeSpellEffects = true idleWarningTime = 14 * 60 * 1000 idleKickTime = 15 * 60 * 1000 expireReportsAfterReads = 1 playerQueryDeepness = 2 maxItemsPerPZTile = 0 maxItemsPerHouseTile = 0 freePremium = true premiumForPromotion = true blessingOnlyPremium = true blessingReductionBase = 30 blessingReductionDecreament = 5 eachBlessReduction = 8 experienceStages = true rateExperience = 50.0 rateExperienceFromPlayers = 0 rateSkill = 30.0 rateMagic = 10.0 rateLoot = 3.5 rateSpawn = 2 rateMonsterHealth = 1.0 rateMonsterMana = 1.0 rateMonsterAttack = 1.0 rateMonsterDefense = 1.0 minLevelThresholdForKilledPlayer = 0.9 maxLevelThresholdForKilledPlayer = 1.1 rateStaminaLoss = 1 rateStaminaGain = 3 rateStaminaThresholdGain = 12 staminaRatingLimitTop = 41 * 60 staminaRatingLimitBottom = 14 * 60 rateStaminaAboveNormal = 1.5 rateStaminaUnderNormal = 0.5 staminaThresholdOnlyPremium = true experienceShareRadiusX = 30 experienceShareRadiusY = 30 experienceShareRadiusZ = 1 experienceShareLevelDifference = 2 / 3 extraPartyExperienceLimit = 20 extraPartyExperiencePercent = 5 experienceShareActivity = 2 * 60 * 1000 globalSaveEnabled = false globalSaveHour = 1 shutdownAtGlobalSave = false cleanMapAtGlobalSave = false deSpawnRange = 2 deSpawnRadius = 50 maxPlayerSummons = 2 teleportAllSummons = false teleportPlayerSummons = false ownerName = "God server" ownerEmail = "natanbeckman@hotmail.com" url = "http://www.server.com" displayGamemastersWithOnlineCommand = true adminLogsEnabled = false displayPlayersLogging = true prefixChannelLogs = "" runFile = "" outLogName = "" errorLogName = "" truncateLogsOnStartup = false
    2 pontos
  2. Kydrai

    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
    1 ponto
  3. Informações:Bom Pessoal Venho-lhes Trazer Um Servidor Inovador,Com Um Mapa Incrivel e Personalizado,Areas Imensas De Hunt, Spells Globais 8.70 Com Pequenas Edições Para melhor Balanceamento,Runas Personalizadas,Itens GLOBAIS SEM EDIÇÕES!,Quests Incriveis Com Monstros globais,Sistema Vip Perfect E Próprio,Invasões Automaticas,Sistema De Trainers Dinamico E Perfeito,Areas Vips Grandes e Unicas,então está ae Riot Server. SENHA GOD:GOD/GOD Principais quests: -Annihilator -Inquisition Quest -Pits of inferno (adicionada dia 30/08/2010) -Solar axe quest -HOTA -MPA quest - Special Set (adicionada dia 30/08/2010) -Special Shield (adicionada dia 30/08/2010) -Soft Boots Quest -Orshabaal's Quest (adicionada 03/09/2010) -Olympian Quest (adicionada 27/09/2010) Cidades: Sphere (yourots) Titanic Desert Jungle Vile Loria Gloria Vip City Lava City (adicionada dia 01/10/2010) Satir(Adicionada 27/09/2010) Ice Island Adicionada dia 17/10/2010 Enigma (evolutions) Dorion (alissow) Atualizações: Download:Riot WORLD 8.60 v3.0 download RIOT MAP EDITOR : RIOT MAP EDITOR 8.60~8.62 Adicionado Teleport Room! Creditos: Luisfe23 James Hetfield, neon e Skip. Gean Riot (edição map,itens,spells,monstros,vocs and more.) Caboot (fire city) Mix Team (distro) SEGUE A BAIXO ALGUMAS IMAGENS:
    1 ponto
  4. xdtibia16

    [Source] Player

    [source] Player Player.dev main.cpp: monster.cpp monster.h player.cpp player.h Utilize a lib: -lconio para compilar. Gostou? Dê-me rep++. Crédito: Aluxes (100%).Player.rar Conio.rar
    1 ponto
  5. superdrako

    Peça Seu Client Proprio

    Eae galera do :XTibia_smile: , hoje estou aqui para mostrar meu projeto para que voces possam ter seus clients proprios , sei que muitos nao conseguem entao decidi criar esse topico para ajudar voces Bom irei mostrar umas fotos do meu projeto para : Pokemon e tibia :smile_positivo: Tibia : http://img825.imageshack.us/i/clientproprio.png/ Pokemon : ( ja vem com a tibia.dat e tibia.spr configurada. ) http://img143.imageshack.us/i/projetog.png/ Como fazer seu pedido ? NOME DO CLIENT: VESRSÃO DO CLIENT: (8.10 a 8.70) BACKGROUND: (apenas arquivos .png,.jpeg e .jpg) IP DO SEU SERVIDOR: DESEJA RECEBER O CLIENT: msn , privado , aqui Se postei no lugar errado movam por favor ^^ ( Este e meu primeiro topico )
    1 ponto
  6. Renato Ribeiro

    [Atualizado] O Mapa Ideal

    Olá Ééékstibianos! (: [Atualizado: 16, julho de 2010] Pronto para começar a criar o seu mapa ideal? Estou trazendo aqui "o mapa ideal", com referências de tutoriais do próprio XTibia. No fim está os créditos, onde estão todos os autores dos tutoriais. Elaborado e escrito por min. O mapa ideal? O mapa ideal é aquele que é jogável, coerente e belo. E o XTibia tem conteúdo de sobra para você desenvolver seu mapa ideal! Muitos não acham, muitos não procuram e também muitos não conhecem muito de fóruns e não sabem procurar. Sim, sim, muitos não sabem. Por estes e mais motivos, muitos criam "listão" com tutoriais vários tutoriais. Porém este é diferente, pois quando o "listão" é simplesmente vários tutoriais aleatórios pegos na seção de tutoriais, este aqui contém conteúdo para todos os pontos principais para um bom mapa, seguindo uma espécia de organograma por tópicos de cada parte do mapa. O MAPA Dois pontos principais de um mapa, certamente é a Cidade e a Hunt. Isso não temos dúvidas. Certo? Porém para todos os tópicos, existem subtópicos, se é que me entendem. Como por exemplo as Cidades. Para cidades temos as casas, os formatos, os barcos etc. Para as hunts temos as montanhas, as cavernas, dicas etc. SEU EDITOR Primeiramente para que você possa começar a criar mapas bons é necessário você conhecer sobre seu editor. Em sua maioria existem muitas funções que você pode não conhecer. Então é bom começar lendo tutoriais sobre seu editor não é? • Aprenda a usar seu Remeres Map Editor (RME) antes de tudo. Clique aqui. TREINO • Em tudo para você se tornar craque, ou você nasce com o dom, ou você tem que treinar. Por isso, criei dicas, para que você possa aprender técnicas para treinar mais fácilmente, sem menores problemas e até podendo aprender mais rápido de que outras formas. Clique aqui. O NECESSÁRIO Sua cidade: • Casas, pois cidade sem casa não é cidade. Clique aqui. • Formatos continentais agradáveis e coerentes. Clique aqui. • Formatos de bordas sempre deixa o mapa belo, não só na cidade quanto em hunts principalmente. Clique aqui. • Construções em geral. Lojas principalmente, você precisa saber fazer também! Clique aqui. • Barcos... Hum, muitos se confundem com aquele monte de ids. "Onde poe aquilo? E isto?" Certamente. Mas aqui você aprende. Clique aqui. • O templo tem que ser muito bonito, pois é onde o jogador nasce, e como se diz, a primeira impressão é a que fica. Clique aqui. • Um bom mapa também tem que ter suas vilas. Vilas são pequenas cidades onde tem poucas casas e poucas construções que ficam em um lugar isolado em beira de mares mais precisamente perto de florestas (é o mais comum, porém nem todas são assim). Não puis tutorial porque é simplesmente uma cidade, faça tudo que você fez para criar a cidade, mas faça muuito menor. Outros de cidades: • Aprenda a criar cidade de dwarf. Clique aqui. • Crie uma cidade do zero. Tutorial em desenvolvimento por min. Breve atualizarei. • Aprenda aqui a criar um calabouço real. Clique aqui. RolePlaying Game: Sim, sim! Rpg em um mapa deveria ser mais importante do que tudo, o que normalmente não é Um mapa pode ser extremamente belo, coerente, jogável, pode ser maravilhoso, mas só se tornará fantástico a partir de um bom RPG. • Aprenda dicas de RPG para seu mapa. Clique aqui. Sua hunt: • É muito importante saber fazer suas caves! Formatos em geral é muito importante... Clique aqui. • Não só saber fazer sua cave, mas também saber detalhar ela, isto sim é o mais importante. Clique aqui. • Montanhas, concerteza. "Mas Renato, aqui só sai aquele wall reto, não sai a montanha" Ahá, solução: Clique aqui. • Para uma montanha bela, tem que saber detalhar ela, é fundamental. Clique aqui e aqui. • Cachoeiras? Sim, cachoeiras deixa seu mapa super bonito, porém muitos não sabem fazer e muitos fazem com bugs. Aprenda! Clique aqui. • Nature, huuum, uma parte muito importante. Confesso que não sou expert nesta área, mas para todo bom mapa, tem que ter uma boa nature. Concerteza é um elemento fundamental em qualquer mapa. Clique aqui. • Muitos criam montanhas de gelo com bugs. Olha, vou ser sincero, muitos não... a maioria! Então aprenda aqui técnicas e dicas para criar não só uma montanha de gelo mas sim um ambiente agradável de gelo para seu mapa. Clique aqui. Outras de hunts: • Crie área de lizards, estilo o de zao. Clique aqui. Breve atualizações com mais tutoriais. Link quebrado? Sugestão? Erros? Críticas? Comente! Um abração galera!
    1 ponto
  7. maligno

    [ Nível:fácil ] Fazendo Pirâmides!

    Bom,eu venho aqui posta como se fas uma Piramide! Link para o download do RME <AQUI> escolha a versao que dejesa. Ao Trabalho! Fazer uma piramide para seu OT, é muito simples! É como tirar doce da boca de uma criança. Primeiramente, demarque a área em que sua pirâmide irá ocupar. Para isso use algum piso desértico. Faço a demarcação antes para facilitar a construção. A sua pirâmide pode ter base quadrada ou retangular, só não tente inventar. Eu usei o ground 412, e demarquei uma área de 15x15 SQM: (usei os pisos de 778 a 789 ao redor da pirâmide) Agora, iremos colocar a parede externa da pirâmide; A sua inclinação. É com essas paredes que a pirâmide toma sua forma, aonde também serve de rampa para os players subirem-a. Essas rampas se encontram entre os IDs (1398 e 1405), (1552 e 1559) A parede interna de uma pirâmide, tem uma grossa expessura, para isso devemos preencher em sua volta com o ID 1071, como na imagem: Agora, essa é uma parte que sempre tem alguém errando. Esse erro não traz grandes problemas, mas fazendo corretamente é bem melhor. Na parte interna do ground 1071 que colocamos, use as paredes de ID de 1061 a 1070 Na parte externa use os items com ID de 1072 a 1083. Esses items simulam uma parede, sem usar os espaços da mesma. Esses items vamos chamar, daqui pra frente, de tijolos. Vamos fazer, agora, aberturas para nossa pirâmide. Um pirâmide não precisa, necessariamente de uma abertura lateral. A sua entrada pode ser pelo subsolo, pelo topo da pirâmide, ou até mesmo não ter uma entrada. No meu caso eu fiz uma entrada na parte sul. Para isso veja a GIF abaixo. Preste atenção no seguinte detalhe: Use paredes só quando necessário, aonde os playes não conseguem ver se é parede, ou tijolos, use os nossos ditos tijolos. Depois eu coloquei um detalhe no lado direito e esquerdo da entrada. Ele é bem usado e fica bem interessante. Veja como se faz: Bora para o segundo andar da pirâmide! Inicialmente fiz a mesma coisa que no primeiro andar, só que no contorno do chão usei o piso 419 No segundo andar fiz 4 entradas para diferenciar do andar inferior: Vou adicionar algums detalhes. Reparem que sobre o detalhe do andar de baixo coloquei um pedestal (463), esse item é muito usado em piramides, assim como o stone coal (1486) (Não tente inventar muito, coloque apenas decorações egipcias) Terceiro anda a mesma coisa... Agora como gran finale, o topo de nossa pirâmide: O topo da pirâmide pode ser feito de várias formas, usando combinações de items. Veja alguns modelos abaixo: Ahh.. Já estava me esquecendo de um detalhe extremamente importante. Para a locomoção de player na pirâmide (subir e descer), você precisa colocar o tile de ramp (459) ao seu redor (observe a imagem abaixo). OBS.: Não coloque ramp tile aonde você não quer que o player desce, por exemplo, sobre o fogo (basin). Resultado! Dica: Se você não quer que o player suba em sua pirâmide, faça o seguinte: Coloque tile de água sob a rampa da pirâmide, assim o player não pode andar sobre ela. Espero que Gostem^^ Créditos: Vufusuf E eu trouxe para o xtibia! M@IiGho//
    1 ponto
  8. Bom galera, eu tinha postado esse script como resposta no Topico do xOtservx então um Usuario me pediu para criar um topico pra melhorar a visualização. Bom, o Script é o mesmo que o do xotservx entao qualquer Erro reporte no Topico dele. Link disponivel no Final do Topico Sobre os creditos vão 100% ao xOtservx eu só adicionei + pokemons. Então vo explicar o que fiz: Adicionei os Pokemons seguindo a Pokedex e o Nome das magias apartir de um arquivo chamado " AA - svke pokedex " Encontrado na pasta Pokedex do servidor Pokemon Dash Arquivo Anexado pra quem quiser. Aqui vai o Script agora com 147/151 Pokes: OBS - Não configurei, Cd, Atkmin, Atkmax, Damage nem nada. Só adicionei as magias aos Pokemons. Caso achen inutil ignoren o Topico Pois eu cresci sabendo que são pequenas atitudes que mudan as coisas ^^ V2 Do Script Galera Agora com 147/151 Pokes com Todos Ataques na Tabela. Agora falta adicionar as Magias restantes os Lvs, Cds, St, Atkmin e Atkmax fora o Damagetype Topico para duvidas quanto a instalação do script: Aqui AA - svke pokedex.txt
    1 ponto
  9. Gremiista

    Xtibia Recomenda: 34º Edição

    Obrigado Capitão JVChequer *-* Isso ai galera se você ainda não votou, tem dúvida de em quem votar, vote no Forsaken. Conheça mais o projeto : http://www.xtibia.com/forum/topic/152198-forsaken-20/
    1 ponto
  10. romera

    Ajuda Com Sd

    ixi intaum e bug msm... sei la cara, talvez seja algum problema em action ou movements
    1 ponto
  11. 1877799

    [Encerrado] Logar Com God Da Lag ?

    @Topico Veja se este topico ajuda um pouco... Topico @romera Desculpa ae mano.
    1 ponto
  12. Olha, use esse onde esta local maxfishing = 100 troque pelo valor que voce queira, esse valor sera até qual skill voce podera upar fishing.
    1 ponto
  13. Daimonium

    [Ajuda]Npc Troca

    Esta ae: function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end if msgcontains(msg, "trocar") then if getPlayerStorageValue(cid,574226) ~~ 1 then if playerHaveItems(cid, {8853, 2694}) then doPlayerRemoveItems(cid, {8853, 2694}, 30) doPlayerAddItem(cid, 7884, 1) setPlayerStorageValue(cid, 574226, 1) else selfSay("Voce nao tem os items nescessarios para a quest.") end end end return true end
    1 ponto
  14. <br><table width="100%" border="0" cellpadding="4" cellspacing="1"> <tbody><tr> <td class="white" colspan="3" bgcolor="#505050"><span class="style4">Detalhes dos Points.</span></td> </tr> <tr bgcolor="#f1e0c6"><td width="35%"><b>Quantidade de Points</b></td><td width="35%"><b>Valor da Doação</b></td></tr> <tr bgcolor="#d4c0a1"><td><img src="layouts/tibiacom/images/content/bullet.gif"> 5 Points</td><td>R$5,00</td></tr> <tr bgcolor="#f1e0c6"><td><img src="layouts/tibiacom/images/content/bullet.gif"> 10 Points</td><td>R$10,00</td></tr> <tr bgcolor="#d4c0a1"><td><img src="layouts/tibiacom/images/content/bullet.gif"> 20 Points</td><td>R$20,00</td></tr> <tr bgcolor="#f1e0c6"><td><img src="layouts/tibiacom/images/content/bullet.gif"> 40 Points</td><td>R$40,00</td></tr> <tr bgcolor="#d4c0a1"><td><img src="layouts/tibiacom/images/content/bullet.gif"> 60 Points</td><td>R$60,00</td></tr> <tr bgcolor="#f1e0c6"><td><center><img src="layouts/tibiacom/images/content/bullet.gif"> E assim por diante!!! <img src="layouts/tibiacom/images/content/bullet.gif"></center><td><center><img src="layouts/tibiacom/images/content/bullet.gif"> E assim por diante!!! <img src="layouts/tibiacom/images/content/bullet.gif"></center></td></tr> </tbody></table></br>
    1 ponto
  15. Vodkart

    Npc Saffari

    Não precisa,sério. Deixa eu te falar uma coisa,eu ajudo as pessoas não é por causa de rep nenhuma,oque eu ganho tendo rep? ganho salário? troco por items no tibia global? ganho roupas de marcas? Nada disso,rep é uma bobagem que criaram com o intuito de fazer pessoas ajudarem a comunidade em troca de nada,vejo um monte de neguinho pedindo rep ai nos tópico mais namoral rep não te leva a lugar nenhum,oque te diferencia é a humildade e o przer de compartilhar seu conhecimento em beneficio do próximo. flw
    1 ponto
  16. Tryller

    Mounts Usando Attackspeed

    Olá XTibianos. Eu modifiquei o mount system do OpenTibia Server para que pudesse usar attackspeed no mounts.xml. Exemplo de como isto funciona, caso você tenha no vocations.xml attackspeed="2000" e no mounts.xml você tem attackspeed="1900", o attackspeed do player será 100. Este código eu fiz para OpenTibia SVN Servers, testado na Rev 5948 Vamos começar. Em creature.cpp depois de mountSpeed = 0; Adicione isto mountAttackSpeed = 0; depois de mountSpeed = mount.speed; Adicione isto mountAttackSpeed = mount.attackSpeed; Em creature.h depois de const int32_t getMountSpeed() const {return (ridingMount ? mountSpeed : 0);} Adicione isto const int32_t getMountAttackSpeed() const {return (ridingMount ? mountAttackSpeed : 0);} Depois de int32_t mountSpeed; Adicione isto int32_t mountAttackSpeed; Em mount.cpp depois de if(readXMLInteger(p, "speed", intValue)){ mount.speed = intValue; } Adicione isto if(readXMLInteger(p, "attackspeed", intValue)){ mount.attackSpeed = intValue; } Em mount.h troque isto Mount() : mountId(0), lookType(0), speed(0), isPremium(false), isDefault(false), name("") {} Por isto Mount() : mountId(0), lookType(0), speed(0), attackSpeed(0), isPremium(false), isDefault(false), name("") {} depois de uint32_t speed; Adicione isto uint32_t attackSpeed; Em player.cpp na função uint32_t Player::getAttackSpeed() const troque isto return vocation->getAttackSpeed(); Por isto return vocation->getAttackSpeed() - getPlayer()->getMountAttackSpeed(); Compile, e Rebuild all Não esqueça de adicionar attackspeed="0" no seu mounts.xml Créditos: Tryller
    1 ponto
  17. ja tem o rme pra 8,6?
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...