Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/22/10 em todas áreas
-
Warsystem
NinjaPower e 2 outros reagiu a HeartBreak por um tópico no fórum
WarSystem para TFS 0.3.5 ou TFS 0.3.6. Precisa de Gesior. Para quem usa TFS 0.4 , veja o tópico :Warsystem Para TFS 0.4 [apenas o arquivo MOD] Bom , chega de enrolar , vamos começar o "tutorial": *Nota : é extremamente recomendavel que você limpe a tabela 'deaths_in_wars' antes de usar o sistema. 1) Adicione o arquivo a seguir , a pasta mods (OTServer/data/mod) basta criar um arquivo XML ou copiar algum outro e apagar tudo que tiver dentro , coloque o nome do arquivo de: guildWarSystem.xml: <?xml version="1.0" encoding="UTF-8"?> <mod name="Guild War System" version="0.3.5+" author="Xampy and Nahruto" contact="otland.net" enabled="yes"> <config name="function_config"><![CDATA[ DelayToCancel = 24 -- HOURS <-> [max: 47 -- min: 24] --> default: 24 hours [1 day] Maps = { ["map1"] = { Guild1Pos = {x=238, y=442, z=12}, Guild2Pos = {x=244, y=442, z=12} }, ["map2"] = { Guild1Pos = {x=994, y=1004, z=6}, Guild2Pos = {x=1000, y=1003, z=6} } } TimeToTeleport = 1 --minutes, when start a challenge StopBattle = TRUE --Stop battle after X time ? TRUE / FALSE TimeToStop = 60 --Minutes Time to Stop if StopBattle = TRUE. --Cancel messages~ CancelMessagesWar = { --Message when player try accept/reject/cancel a war but there is no a invitation. [1] = "Not pending invitations.", --Message when the player is not the guild leader. [2] = "Only Guild Leader can execute this command.", --Message when try Cancel the invitation but the war is already accepted. [3] = "The war is already accepted.", --MEssage when the invited guild name is not correct or does not exist. [4] = "Not correct guild name.", --Message when try invite any guild to a war but his guild already have a war or a pending invitation. [5] = "Your guild is already in war or have a pending invitation.", --Same of the cancel message 5 but the the enemy guild. [6] = "This guild is already in war or have a pending invitation.", --Message when use invite command but not write guild name. [7] = "Command needs param.", --Message when try invite his guild. [8] = "You can\'t invite you guild.", --Message when the map name is not correct. [9] = "Please write a correct name.", --Message when try go to any map but the guild is have no received/sent any war invitation [10] = "Your guild is not in any war.", --When try to cancel a war before the delay [11] = "You should wait ".. DelayToCancel .." hours to cancel the war" } --Broadcast messages when invite/accept/reject/cancel ~ Remember the Spaces. BroadCast_Type = MESSAGE_EVENT_ADVANCE BroadCast = { --Message when inviting [1] = { "Guild ", --Here will be the guild name " have invited guild ", --Here will be the invited guild name " to have a war." }, --Message when accept. [2] = { "Guild ", --Here will be the guild name " have accepted the invitation of the guild " , --Here will be the name of the guild who have invited em. " to have a war." }, --Message when reject. [3] = { "Guild ", --Here will be the guild name " have rejected the invitation of the guild " , --Here will be the name of the guild who have invited em. " to have a war." }, --Message when cancel. [4] = { "Guild ", --Here will be the guild name " have canceled the invitation to the guild " , --Here will be the name of the guild who have invited em. " to have a war." }, --Message whenstar a battle.. [5] = { "Guild ", --Here will be the guild name " and guild " , --Here will be the name of the guild who have invited em. " will have a battle in the map :" }, --message when a battle ends. [6] = { "The battle betwen guild ", --Here will be the guild name " and guild " , --Here will be the name of the guild who have invited em. " its over." }, } --Functions ~. function getShowInfo(id) local Info = db.getResult("SELECT `show` FROM `guilds` WHERE `id` = " .. id .. "") if Info:getID() ~= -1 then local showy = Info:getDataInt("show") Info:free() return showy end return -1 end function getKills(name) local Info = db.getResult("SELECT `kills` FROM `guilds` WHERE `name` = '"..name.."'") if Info:getID() ~= -1 then local killy = Info:getDataInt("kills") Info:free() return killy end return -1 end function getGuildWarInfo(id) local Info = db.getResult("SELECT `invited_to`, `invited_by`, `in_war_with`,`war_time` FROM `guilds` WHERE `id` = " .. id .. "") if Info:getID() ~= -1 then local invTo, invBy, warWith, Time = Info:getDataInt("invited_to"), Info:getDataInt("invited_by"), Info:getDataInt("in_war_with"), Info:getDataInt("war_time") Info:free() return {To = invTo, By = invBy, With = warWith, T = Time} end return -1 end function getGuildNameById(id) local Info = db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. id .. "") if Info:getID() ~= -1 then local Name = Info:getDataString("name") Info:free() return Name end return -1 end function GuildIsInPEace(id) local Info = getGuildWarInfo(id) return (Info.To == 0 and Info.By == 0 and Info.With == 0) end function doInviteToWar(myGuild, enemyGuild) local StartTime = os.time() db.executeQuery("UPDATE `guilds` SET `invited_to` = ".. enemyGuild ..", `war_time` = ".. StartTime .." WHERE `id` = ".. myGuild .."") db.executeQuery("UPDATE `guilds` SET `invited_by` = ".. myGuild .." WHERE `id` = ".. enemyGuild .."") end function WarAccept(myGuild, enemyGuild) local StartTime = os.time() db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `in_war_with` = ".. myGuild ..", `kills` = 0, `show` = 1 WHERE `id` = ".. enemyGuild .."") db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = ".. StartTime ..", `in_war_with` = ".. enemyGuild ..", `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."") end function cleanInfo(myGuild) db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = 0, `in_war_with` = 0, `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."") end function registerDeathOne(myGuild, enemyGuild, cid, target) db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`, `result1`, `result2`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..", 1, 0);") db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."") end function registerDeathTwo(myGuild, enemyGuild, cid, target) db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`, `result1`, `result2`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..", 0, 1);") db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."") end function removeDeaths(id) db.executeQuery("DELETE FROM `deaths_in_wars` WHERE `guild_id` = " ..id .. ";") end function StopWar(myGuild, enemyGuild) cleanInfo(myGuild) cleanInfo(enemyGuild) removeDeaths(myGuild) removeDeaths(enemyGuild) end function WeAreInWar(myGuild, enemyGuild) local myGuildInfo = getGuildWarInfo(myGuild) local enemyGuildInfo = getGuildWarInfo(enemyGuild) if myGuild == enemyGuildInfo.With and enemyGuild == myGuildInfo.With then if enemyGuildInfo.ON == 1 and myGuildInfo.ON == 1 then return TRUE end end return FALSE end function getOnlineMembers(id) local PlayersOnline = getPlayersOnline() local MembersOnline = {} for i, pid in ipairs(PlayersOnline) do if id == getPlayerGuildId(PlayersOnline[i]) then table.insert(MembersOnline, PlayersOnline[i]) end end return MembersOnline end function teleportGuild(id, pos) local Members = getOnlineMembers(id) if #Members > 0 then for i = 1, #Members do if #Members > 1 then if getTilePzInfo(getCreaturePosition(Members[i])) == TRUE then doTeleportThing(Members[i], pos, FALSE) doSendMagicEffect(pos, CONST_ME_TELEPORT) doSendMagicEffect(getCreaturePosition(Members[i]), CONST_ME_POFF) doPlayerSendTextMessage(Members[i], 22, 'Prepare to fight!') else doPlayerPopupFYI(Members[i], 'GuildWar challenge error:\n\nBoth guild members must stay in Protection Zone.') end else doPlayerPopupFYI(Members[i], 'GuildWar challenge error:\n\nBoth guilds must have more than one player online (leader & any member, at least).') end end end end function getGuildsWithWar() local res = db.getResult("SELECT `id` FROM `guilds` WHERE `in_war_with` > 0") local GuildW = {} if res:getID() ~= -1 then while true do table.insert(GuildW, res:getDataInt "id") if not res:next() then break end end res:free() end return GuildW end function guildExist(nom) local Get = db.getResult("SELECT `id` FROM `guilds` WHERE `name` = " .. db.escapeString(nom) .. ";") if Get:getID() ~= -1 then local ret = Get:getDataInt("id") Get:free() return ret end return -1 end function StartWar(x) teleportGuild(x.myGuild, Maps[x.map].Guild1Pos) teleportGuild(x.enemyGuild, Maps[x.map].Guild2Pos) if StopBattle == TRUE then addEvent(StopWarNow, 60 * 1000, {myGuild = x.myGuild, enemyGuild = x.enemyGuild}) end end function StopWarNow(c) StopWar(c.myGuild, c.enemyGuild) doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(c.myGuild).. BroadCast[6][2] ..getGuildNameById(c.enemyGuild).. BroadCast[6][3], BroadCast_Type) end function putWarOn(myGuild, enemyGuild) db.executeQuery("UPDATE `guilds` SET `war_time` = 1 WHERE `id` = ".. myGuild .."") db.executeQuery("UPDATE `guilds` SET `war_time` = 1 WHERE `id` = ".. enemyGuild .."") end]]></config> <talkaction words="!disband; /war-invite; /war-accept; /war-reject; /war-cancel-invite; /war-cancel" event="script"><![CDATA[ domodlib('function_config') function onSay(cid, words, param, channel) if getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER then local myGuild = getPlayerGuildId(cid) if words == "/war-invite" then if GuildIsInPEace(myGuild) == true then if param ~= "" then if guildExist(param) ~= -1 then local invitedGuild = getGuildId(param) if invitedGuild ~= -1 then if invitedGuild ~= myGuild then if GuildIsInPEace(invitedGuild) == true then if getPlayerStorageValue(cid, 65570) <= os.time() then doInviteToWar(myGuild, invitedGuild) doBroadcastMessage(BroadCast[1][1] ..getPlayerGuildName(cid).. BroadCast[1][2] ..getGuildNameById(invitedGuild).. BroadCast[1][3], BroadCast_Type) setPlayerStorageValue(cid, 65570, os.time()+(20*60)) else local waitTime = (getPlayerStorageValue(cid, 65570) - os.time()) doPlayerSendCancel(cid, "You must wait " .. os.date("%M", waitTime) .. " minutes and " .. os.date("%S", waitTime) .. " seconds until declare another war.") end else doPlayerSendCancel(cid, CancelMessagesWar[6]) end else doPlayerSendCancel(cid, CancelMessagesWar[8]) end else doPlayerSendCancel(cid, CancelMessagesWar[4]) end else doPlayerSendCancel(cid, CancelMessagesWar[4]) end else doPlayerSendCancel(cid, CancelMessagesWar[7]) end else doPlayerSendCancel(cid, CancelMessagesWar[5]) end elseif words == "/war-accept" then if getGuildWarInfo(myGuild).By ~= 0 then local enemyGuild = getGuildWarInfo(myGuild).By doBroadcastMessage(BroadCast[2][1] ..getPlayerGuildName(cid).. BroadCast[2][2] ..getGuildNameById(enemyGuild).. BroadCast[2][3], BroadCast_Type) WarAccept(myGuild, enemyGuild) else doPlayerSendCancel(cid, CancelMessagesWar[1]) end elseif words == "/war-reject" then if getGuildWarInfo(myGuild).By ~= 0 then doBroadcastMessage(BroadCast[3][1] ..getPlayerGuildName(cid).. BroadCast[3][2] ..getGuildNameById(getGuildWarInfo(myGuild).By).. BroadCast[3][3], BroadCast_Type) cleanInfo(getGuildWarInfo(myGuild).By) cleanInfo(myGuild) else doPlayerSendCancel(cid, CancelMessagesWar[1]) end elseif words == "/war-cancel-invite" then if getGuildWarInfo(myGuild).To ~= 0 then if getGuildWarInfo(myGuild).With == 0 then doBroadcastMessage(BroadCast[4][1] ..getPlayerGuildName(cid).. BroadCast[4][2] ..getGuildNameById(getGuildWarInfo(myGuild).To).. BroadCast[4][3], BroadCast_Type) cleanInfo(getGuildWarInfo(myGuild).To) cleanInfo(myGuild) else doPlayerSendCancel(cid, CancelMessagesWar[3]) end else doPlayerSendCancel(cid, CancelMessagesWar[1]) end elseif words == "/war-challenge" then local map = Maps[param] if map then if enemy ~= 0 then local enemyGuild = getGuildWarInfo(myGuild).With addEvent(StartWar, 15000, {myGuild = myGuild, enemyGuild = enemyGuild, map = param}) doBroadcastMessage(BroadCast[5][1] ..getPlayerGuildName(cid).. BroadCast[5][2] ..getGuildNameById(enemyGuild).. BroadCast[5][3] .. param ..".", BroadCast_Type) else doPlayerSendCancel(cid, CancelMessagesWar[10]) end else doPlayerSendCancel(cid, CancelMessagesWar[9]) end elseif words == "/war-cancel" then local enemy = getGuildWarInfo(myGuild).With if enemy ~= 0 then if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * 60 * DelayToCancel) then StopWar(myGuild, enemy) doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type) else local timeEnd = getGuildWarInfo(myGuild).T + (60 * 60 * DelayToCancel) local timeLeft = timeEnd - os.time() local hours = (os.date("%H", timeLeft) + 23) doPlayerSendCancel(cid, "Time remaining: "..hours.." hours, " .. os.date("%M", timeLeft) .. " minutes and " .. os.date("%S", timeLeft) .. " seconds.") end else doPlayerSendCancel(cid, CancelMessagesWar[10]) end elseif words == "!disband" then local enemy = getGuildWarInfo(myGuild).With if enemy > 0 then if channel == CHANNEL_GUILD then if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * 60 * DelayToCancel) then StopWar(myGuild, enemy) doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type) else local timeEnd = getGuildWarInfo(myGuild).T + (60 * 60 * DelayToCancel) local timeLeft = timeEnd - os.time() local hours = (os.date("%H", timeLeft) + 23) doPlayerSendCancel(cid, "Time remaining: "..hours.." hours, " .. os.date("%M", timeLeft) .. " minutes and " .. os.date("%S", timeLeft) .. " seconds.") end else doPlayerSendCancel(cid, "You have to say this command in your guild channel.") end else return FALSE end return FALSE end else doPlayerSendCancel(cid, CancelMessagesWar[2]) end local file = io.open("data/logs/Wars.txt", "a") file:write("".. os.date("%d %B %Y %X ", os.time()) .." --> "..getCreatureName(cid)..": "..words.." "..param.."\n") file:close() return TRUE end]]></talkaction> <event type="login" name="WarLogin" event="script"><![CDATA[ domodlib('function_config') function onLogin(cid) registerCreatureEvent(cid, "WarKill") return true end]]></event> <event type="kill" name="WarKill" event="script"><![CDATA[ domodlib('function_config') local PZ = createConditionObject(CONDITION_INFIGHT) setConditionParam(PZ, CONDITION_PARAM_TICKS, getConfigInfo('whiteSkullTime')) function onKill(cid, target, lastHit) if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then local config = { removeFrags = true -- If 'true' player won't gain frags from a player that is versus him; else, player will gain frags as normal. } local GUID = getPlayerGUID(cid) local namec = getPlayerName(cid) local namet = getPlayerName(target) local skull = getCreatureSkullType(cid) local skullend = getPlayerSkullEnd(cid) local playerPos = getPlayerPosition(cid) local targetPos = getPlayerPosition(target) local cidd = cid local timeA = os.time() local timesA = {today = (timeA - 86400), week = (timeA - (7 * 86400))} local contentsA, resultA = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (timeA - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(resultA:getID() ~= -1) then repeat local contentA = { name = resultA:getDataString("name"), level = resultA:getDataInt("level"), date = resultA:getDataInt("date") } if(contentA.date > timesA.today) then table.insert(contentsA.day, contentA) elseif(contentA.date > timesA.week) then table.insert(contentsA.week, contentA) else table.insert(contentsA.month, contentA) end until not resultA:next() resultA:free() end local sizeA = { day = table.maxn(contentsA.day), week = table.maxn(contentsA.week), month = table.maxn(contentsA.month) } local function removeFrag(cid) local timeB = os.time() local timesB = {today = (timeB - 86400), week = (timeB - (7 * 86400))} local contentsB, resultB = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. GUID .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (timeB - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(resultB:getID() ~= -1) then repeat local contentB = { name = resultB:getDataString("name"), level = resultB:getDataInt("level"), date = resultB:getDataInt("date") } if(contentB.date > timesB.today) then table.insert(contentsB.day, contentB) elseif(contentB.date > timesB.week) then table.insert(contentsB.week, contentB) else table.insert(contentsB.month, contentB) end until not resultB:next() resultB:free() end local sizeB = { day = table.maxn(contentsB.day), week = table.maxn(contentsB.week), month = table.maxn(contentsB.month) } if sizeB.day > sizeA.day or sizeB.week > sizeA.week or sizeB.month > sizeA.month then db.executeQuery("UPDATE `killers` SET `unjustified` = 0 WHERE `id` IN (SELECT `kill_id` FROM `player_killers` WHERE `player_id` = "..GUID..") ORDER BY `death_id` DESC LIMIT 1;") doPlayerSendTextMessage(cidd, 21, "Frag from "..namet.." wasn't counted.") end if skull == SKULL_RED then if getCreatureSkullType(cidd) == SKULL_BLACK then doPlayerSetSkullEnd(cidd, skullend, SKULL_RED) doCreatureSetSkullType(cidd, SKULL_RED) end elseif skull == SKULL_WHITE then if getCreatureSkullType(cidd) == SKULL_RED then doPlayerSetSkullEnd(cidd, timeB, SKULL_RED) doCreatureSetSkullType(cidd, SKULL_WHITE) end end end local myGuild = getPlayerGuildId(cid) local enemyGuild = getPlayerGuildId(target) if myGuild ~= 0 and enemyGuild ~= 0 then if enemyGuild == getGuildWarInfo(myGuild).With then local guildc = getPlayerGuildName(cid) local guildt = getPlayerGuildName(target) doAddCondition(cid, PZ) if lastHit == TRUE then if getTileZoneInfo(playerPos) == 0 and getTileZoneInfo(targetPos) == 0 then if getShowInfo(myGuild) == 1 then registerDeathOne(myGuild, enemyGuild, cid, target) else registerDeathTwo(myGuild, enemyGuild, cid, target) end else doPlayerSendTextMessage(cid, 19, "Remember: in PvP zone the system doesn't register the frag.") end end if config.removeFrags == true then addEvent(removeFrag, 150) end local gsim = getShowInfo(myGuild) local gsie = getShowInfo(enemyGuild) if gsim > gsie then resulta = getKills(guildc) resultb = getKills(guildt) else resulta = getKills(guildt) resultb = getKills(guildc) end local players = getOnlinePlayers() for i,playerName in ipairs(players) do local player = getPlayerByName(playerName); if getPlayerGuildId(player) == myGuild then if getTileZoneInfo(playerPos) == 0 and getTileZoneInfo(targetPos) == 0 then doPlayerSendChannelMessage(player, "", "Opponent "..namet.." of the "..guildt.." was killed by "..namec..". The new score is "..resulta..":"..resultb.." frags.", TALKTYPE_CHANNEL_W, CHANNEL_GUILD) end end end end end end return TRUE end]]></event> </mod> 2) Adicione isso a database (no phpMyAdmin): ALTER TABLE `guilds` ADD `invited_to` INT( 11 ) NOT NULL , ADD `invited_by` INT( 11 ) NOT NULL , ADD `in_war_with` INT( 11 ) NOT NULL , ADD `kills` INT( 11 ) NOT NULL , ADD `show` SMALLINT( 1 ) NOT NULL , ADD `war_time` INT( 11 ) NOT NULL ; e isso: CREATE TABLE `deaths_in_wars` ( `guild_id` INT( 11 ) NOT NULL , `player_id` INT( 11 ) NOT NULL , `killer_guild` INT( 11 ) NOT NULL , `killer` INT( 11 ) NOT NULL , `date` INT( 11 ) NOT NULL , `result1` INT( 11 ) NOT NULL , `result2` INT( 11 ) NOT NULL ) ENGINE = MYISAM ; e finalmente isso: UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `in_war_with` = 0, `kills` = 0, `show` = 0, `war_time` = 0 WHERE `id` > 0; não sabe como adicionar ? basta abrir o bloco de notas , copiar o conteudo acima e colar e salvar como "nome.sql" apos isso va a http://localhost/phpmyadmin , loga-se escolha a database clique em importar e selecione o arquivo que você salvou. 3) Va até xampp/htdocs. Crie um arquivo chamado wars.php: [copie um arquivo php e apague tudo que tiver dentro ou abra o bloco de notas coloque o conteudo e salve como "wars.php"] <?PHP //Litle Config $MaxShow = 100; //END if($action == '') { $main_content .= ' <P ALIGN=CENTER> <br> <FONT SIZE=4 COLOR=#8A0808> How to use... </FONT> <br> <br> <FONT SIZE=2 COLOR=#DF0101> * <b>/war-invite</b> : <FONT SIZE=1 COLOR=green> Send an invitation to start a war.<br> <u>Example</u>: /war-invite Death Hard </FONT><br> * <b>/war-accept</b> : <FONT SIZE=1 COLOR=green> Accept the invitation to start a war. </FONT><br> * <b>/war-reject</b> : <FONT SIZE=1 COLOR=green> Reject the invitation to start a war. </FONT><br> * <b>/war-cancel-invite</b> : <FONT SIZE=1 COLOR=green> Cancel the invitation already sent to start a war. </FONT><br> * <b>/war-cancel</b> : <FONT SIZE=1 COLOR=green> Finish the current war: it can only be used after 1 day of war. </FONT><br> </FONT> <br> <FONT SIZE=2 COLOR=#8A0808> Those commands can only be executed by guild leaders.<br><br> <table border="1"><tr border="1"><td border="1"><h3>Remember:</h3> <ul> <li>You won\'t get any frag if you kill someone that is VERSUS you.</li> <li>If you kill someone that is in your guild, you will get a frag.</li> </ul></td></tr></table> </FONT> </P> '; $wars = $SQL->query(" SELECT g.name AS gname, wg.name AS wgname, g.war_time AS gtime, wg.war_time AS wgtime, g.kills AS kills, wg.kills AS ekills, g.show AS s, g.id AS gid, wg.id AS wgid, g.logo_gfx_name AS glogo, wg.logo_gfx_name AS wglogo FROM guilds AS g INNER JOIN guilds AS wg ON wg.id = g.in_war_with ORDER BY s DESC LIMIT 50; "); foreach ($wars as $k=>$v) { if ($v[s] == 1) { $glogo = "default_logo.gif"; $wglogo = "default_logo.gif"; if(!empty($v[glogo])) $glogo = $v[glogo]; if(!empty($v[wglogo])) $wglogo = $v[wglogo]; if(is_int($number_of_rows / 2)) { $bgcolor = '#D4C0A1'; } else { $bgcolor = '#D5E1A2'; } $number_of_rows++; $stats .=" <TR BGCOLOR=".$bgcolor."> <TD WIDTH=30%><center><a href='index.php?subtopic=guilds&action=show&guild=" . $v[gname] . "'><font color='#5A2800'>$v[gname]</font></a></center></TD> <TD WIDTH=40%><center><a href='index.php?subtopic=wars&action=show&war=" . $v[gid] . "'><font color='#5A2800'>{$v[kills]} - {$v[ekills]}</font></a></center></TD> <TD WIDTH=30%><center><a href='index.php?subtopic=guilds&action=show&guild=" . $v[wgname] . "'><font color='#5A2800'>$v[wgname]</font></a></center></TD> </TR> <TR BGCOLOR=".$bgcolor."> <TD><center><img border=1 src='guilds/".$glogo."' width='64px' height='64px'/></center></TD> <TD><center><b>Declared at:</b><br />" . date("d/m/y H:i:s", $v[gtime]) . "<p><b>Started at:</b><br />" . date("d/m/y H:i:s", $v[wgtime]) . "</center></TD> <TD><center><img border=1 src='guilds/".$wglogo."' width='64px' height='64px'/></center></TD> </TR> "; } } $main_content .= ' <table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody> <TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b><blink>Active Wars</blink></b></font></td></tr></tbody></table> '; if(!$stats) { $main_content .= ' <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR='.$config['site']['darkborder'].'> <TD> No active wars in '.$config['server']['serverName'].' yet. </TD> </TR> </TABLE> '; } else { $main_content .= " <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> $stats </TABLE> "; } ?> <?PHP $invitations = $SQL->query(" SELECT ig.name AS igname, i.name AS iname, i.id AS iid, ig.id AS igid, i.war_time AS itime, i.logo_gfx_name AS ilogo, ig.logo_gfx_name AS iglogo FROM guilds AS i INNER JOIN guilds AS ig ON ig.id = i.invited_to ORDER BY itime ASC LIMIT 50; "); foreach ($invitations as $k=>$v) { $ilogo = "default_logo.gif"; $iglogo = "default_logo.gif"; if(!empty($v[ilogo])) $ilogo = $v[ilogo]; if(!empty($v[iglogo])) $iglogo = $v[iglogo]; if(is_int($number_of_rows / 2)) { $bgcolor = '#D4C0A1'; } else { $bgcolor = '#D5E1A2'; } $number_of_rows++; $invi .=" <TR BGCOLOR=".$bgcolor."> <TD width=30%> <center> <b> <a href='index.php?subtopic=guilds&action=show&guild=" . $v[iname] . "'><font color='#5A2800'>$v[iname]</font></a> </b> </center> </TD> <TD width=40%><center>0-0</center></TD> <TD width=30%> <center> <b> <a href='index.php?subtopic=guilds&action=show&guild=" . $v[igname] . "'><font color='#5A2800'>$v[igname]</font></a> </b> </center> </TD> </TR> <TR BGCOLOR=".$bgcolor."> <TD> <center> <img border=1 src='guilds/".$ilogo."' width='64px' height='64px'/> </center> </TD> <TD><center><b>Declared on:</b><br />" . date("d/m/y H:i:s", $v[itime]) . "</center></TD> <TD> <center> <img border=1 src='guilds/".$iglogo."' width='64px' height='64px'/> </center> </TD> </TR> "; } $main_content .= '<br><br><br> <table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody> <TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b><blink>Declared Wars</blink></b></font></td></tr></tbody></table>'; if(!$invi) { $main_content .= ' <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR='.$config['site']['darkborder'].'> <TD> No declared wars in '.$config['server']['serverName'].' yet. </TD> </TR> </TABLE> <br> '; } else { $main_content .= " <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> $invi </TABLE> "; } } //SHOW FRAGS ~~ if($action == 'show') { $guild = $ots->createObject('Guild'); $guild->load($_REQUEST['war']); $ranks = $SQL->query(" SELECT * FROM guild_ranks WHERE guild_id = ". $guild->getId() ." ORDER BY level DESC; "); foreach ($ranks as $y) { $Players = $SQL->query(" SELECT * FROM players WHERE rank_id = ". $y[id] ." ORDER BY name ASC;"); foreach ($Players as $v) { $totDeaths = 0; $deaths = $SQL->query(" SELECT COUNT(player_id) AS n FROM deaths_in_wars WHERE player_id = ". $v[id] ." GROUP BY player_id DESC LIMIT 1;"); foreach ($deaths as $q) { $totDeaths = $q[n]; } if($totDeaths > 1 || $totDeaths == 0){ $deathL = "deaths"; } else{ $deathL = "death"; } $membersDeaths1 .="<tr bgcolor=#D4C0A1> <td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td> <td width=30%>$totDeaths $deathL</td> </tr> "; $totFrags = 0; $frags = $SQL->query(" SELECT COUNT(killer) AS m FROM deaths_in_wars WHERE killer = ". $v[id] ." GROUP BY killer DESC LIMIT 1;"); foreach ($frags as $p) { $totFrags = $p[m]; } if($totFrags > 1 || $totFrags == 0){ $fragL = "frags"; } else{ $fragL = "frag"; } $membersFrags1 .= "<tr bgcolor=#D4C0A1> <td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td> <td width=30%>$totFrags $fragL</td> </tr> "; } } $guild2 = $ots->createObject('Guild'); $guild2->load($guild->getCustomField(in_war_with)); $ranks2 = $SQL->query(" SELECT * FROM guild_ranks WHERE guild_id = ". $guild2->getId() ." ORDER BY level DESC; "); foreach ($ranks2 as $y) { $Players = $SQL->query(" SELECT * FROM players WHERE rank_id = ". $y[id] ." ORDER BY name ASC;"); foreach ($Players as $v) { $totDeaths2 = 0; $deaths = $SQL->query(" SELECT COUNT(player_id) AS n FROM deaths_in_wars WHERE player_id = ". $v[id] ." GROUP BY player_id DESC LIMIT 1;"); foreach ($deaths as $q) { $totDeaths2 = $q[n]; } if($totDeaths2 > 1 || $totDeaths2 == 0){ $deathL = "deaths"; } else{ $deathL = "death"; } $membersDeaths2 .= "<tr bgcolor=#D4C0A1> <td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td> <td width=30%>$totDeaths2 $deathL</td> </tr> "; $totFrags2 = 0; $frags = $SQL->query(" SELECT COUNT(killer) AS m FROM deaths_in_wars WHERE killer = ". $v[id] ." GROUP BY killer DESC LIMIT 1;"); foreach ($frags as $p) { $totFrags2 = $p[m]; } if($totFrags2 > 1 || $totFrags2 == 0){ $fragL = "frags"; } else{ $fragL = "frag"; } $membersFrags2 .= "<tr bgcolor=#D4C0A1> <td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td> <td width=30%>$totFrags2 $fragL</td> </tr> "; } } $deaths3 = $SQL->query(" SELECT * FROM deaths_in_wars WHERE (killer_guild = ". $guild->getId() ." OR killer_guild = ". $guild2->getId() .") ORDER BY date DESC LIMIT ". $MaxShow .";"); $deathsG1 = $SQL->query(" SELECT * FROM deaths_in_wars WHERE killer_guild = ". $guild->getId() ." ORDER BY date DESC LIMIT ". $MaxShow .";"); $deathsG2 = $SQL->query(" SELECT * FROM deaths_in_wars WHERE killer_guild = ". $guild2->getId() ." ORDER BY date DESC LIMIT ". $MaxShow .";"); $Topfragger1 = $SQL->query(" SELECT killer, COUNT(killer) maximo FROM deaths_in_wars WHERE killer_guild = ". $guild->getId() ." GROUP BY killer ORDER BY maximo DESC LIMIT 1;"); foreach ($Topfragger1 as $y) { $name = $ots->createObject('Player'); $name->load($y[killer]); $TopFraggerName = $name->getName(); $numTop1 = $y[maximo]; } $Topfragger2 = $SQL->query(" SELECT killer, COUNT(killer) maximo FROM deaths_in_wars WHERE killer_guild = ". $guild2->getId() ." GROUP BY killer ORDER BY maximo DESC LIMIT 1;"); foreach ($Topfragger2 as $y) { $name = $ots->createObject('Player'); $name->load($y[killer]); $TopFraggerName2 = $name->getName(); $numTop2 = $y[maximo]; } $mostDead = $SQL->query(" SELECT player_id, COUNT(player_id) maximo FROM deaths_in_wars WHERE killer_guild = ". $guild->getId() ." GROUP BY player_id ORDER BY maximo DESC LIMIT 1;"); foreach ($mostDead as $y) { $name = $ots->createObject('Player'); $name->load($y[player_id]); $mostDeadName = $name->getName(); $mostDeadNum = $y[maximo]; } $mostDead2= $SQL->query(" SELECT player_id, COUNT(player_id) maximo FROM deaths_in_wars WHERE killer_guild = ". $guild2->getId() ." GROUP BY player_id ORDER BY maximo DESC LIMIT 1;"); foreach ($mostDead2 as $y) { $name = $ots->createObject('Player'); $name->load($y[player_id]); $mostDeadName2 = $name->getName(); $mostDeadNum2= $y[maximo]; } foreach ($deaths3 as $a=>$b) { $killed3 = $ots->createObject('Player'); $killed3->load($b[player_id]); $killedName3 = $killed3->getName(); $killer3 = $ots->createObject('Player'); $killer3->load($b[killer]); $killerName3 = $killer3->getName(); $guild3 = $ots->createObject('Guild'); $guild3->load($b[killer_guild]); $guildName3 = $guild3->getName(); $totKills1 = 0; $killss1 = $SQL->query(" SELECT COUNT(result1) AS m FROM deaths_in_wars WHERE (killer_guild = ". $guild->getId() ." AND date <= ". $b[date] .") GROUP BY result1 DESC LIMIT 1;"); foreach ($killss1 as $p) { $totKills1 = $p[m]; } $totKills2 = 0; $killss2 = $SQL->query(" SELECT COUNT(result2) AS n FROM deaths_in_wars WHERE (killer_guild = ". $guild2->getId() ." AND date <= ". $b[date] .") GROUP BY result2 DESC LIMIT 1;"); foreach ($killss2 as $q) { $totKills2 = $q[n]; } $kills3 .=" <TR BGCOLOR=#D4C0A1> <TD> <a href='index.php?subtopic=characters&name=" . $killerName3 . "'><u>$killerName3</u></a> </TD> <TD> <a href='index.php?subtopic=characters&name=" . $killedName3 . "'><u>$killedName3</u></a> </TD> <TD> $guildName3 </TD> <TD> $totKills1:$totKills2 </TD> <TD> " . date("d/m/y H:i:s", $b[date]) . " </TD> </TR> "; } if(!empty($mostDeadNum)){$mostDeadNum = $mostDeadNum;}else{$mostDeadNum = 0 + $mostDeadNum;} if(!empty($mostDeadNum2)){$mostDeadNum2 = $mostDeadNum2;}else{$mostDeadNum2 = 0 + $mostDeadNum2;} if(!empty($numTop1)){$numTop1 = $numTop1;}else{$numTop1 = 0 + $numTop1;} if(!empty($numTop2)){$numTop2 = $numTop2;}else{$numTop2 = 0 + $numTop2;} foreach ($deathsG1 as $k=>$v) { $killed = $ots->createObject('Player'); $killed->load($v[player_id]); $killedName = $killed->getName(); $killer = $ots->createObject('Player'); $killer->load($v[killer]); $killerName = $killer->getName(); $kills .=" <TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\"> <TD> <center> <b> <a href='index.php?subtopic=characters&name=" . $killedName . "'>$killedName</a> </b> </center> </TD> <TD> <center> <b> <a href='index.php?subtopic=characters&name=" . $killerName . "'>$killerName</a> </b> </center> </TD> <TD> <center> " . date("d/m/y H:i:s", $v[date]) . " </center> </TD> </TR> "; } foreach ($deathsG2 as $k=>$v) { $killed = $ots->createObject('Player'); $killed->load($v[player_id]); $killedName = $killed->getName(); $killer = $ots->createObject('Player'); $killer->load($v[killer]); $killerName = $killer->getName(); $kills2 .=" <TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\"> <TD> <center> <b> <a href='index.php?subtopic=characters&name=" . $killedName . "'>$killedName</a> </b> </center> </TD> <TD> <center> <b> <a href='index.php?subtopic=characters&name=" . $killerName . "'>$killerName</a> </b> </center> </TD> <TD> <center> " . date("d/m/y H:i:s", $v[date]) . " </center> </TD> </TR> "; } if($numTop1 > 1 || $numTop1 == 0){$fragl1 = "frags";}else{$fragl1 = "frag";} if($numTop2 > 1 || $numTop2 == 0){$fragl2 = "frags";}else{$fragl2= "frag";} if($mostDeadNum > 1 || $mostDeadNum == 0){$deathl1 = "deaths";}else{$deathl1 = "death";} if($mostDeadNum2 > 1 || $mostDeadNum2 == 0){$deathl2 = "deaths";}else{$deathl2 = "death";} $main_content .= ' <table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody> <TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>War Information</b></font></td></tr></tbody></table> '; $logo = "default_logo.gif"; $logo2 = "default_logo.gif"; $a = $guild->getCustomField(logo_gfx_name); $b = $guild2->getCustomField(logo_gfx_name); if(!empty($a)) $logo = $a; if(!empty($b)) $logo2 = $b; $main_content .= " <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR='#D4C0A1'> <TD WIDTH='35%'><center><a href='index.php?subtopic=guilds&action=show&guild=".$guild->getName()."'><font color='#5A2800'>".$guild->getName()."</font></a></center></TD> <TD WIDTH='30%'><center><font color='#5A2800'><b>".$guild->getCustomField(kills)." - ".$guild2->getCustomField(kills)."</b></font></center></TD> <TD WIDTH='35%'><center><a href='index.php?subtopic=guilds&action=show&guild=".$guild2->getName()."'><font color='#5A2800'>".$guild2->getName()."</font></a></center></TD> </TR> <TR BGCOLOR='#D4C0A1'> <TD><center><img border=1 src='guilds/".$logo."' width='64px' height='64px'/><p><b><u>Top fragger:</b></u><br /><a href='index.php?subtopic=characters&name=".$TopFraggerName."'>".$TopFraggerName."</a> (".$numTop1." ".$fragl1.")<p><b><u>Most dead:</b></u><br /><a href='index.php?subtopic=characters&name=".$mostDeadName2."'>".$mostDeadName2."</a> (".$mostDeadNum2." ".$deathl2.")</center></TD> <TD><center><b>Declared at:</b><br />" . date("d/m/y H:i:s", $guild->getCustomField(war_time)) . "<p><b>Started at:</b><br />" . date("d/m/y H:i:s", $guild2->getCustomField(war_time)) . "</center></TD> <TD><center><img border=1 src='guilds/".$logo2."' width='64px' height='64px'/><p><b><u>Top fragger:</u></b><br /><a href='index.php?subtopic=characters&name=".$TopFraggerName2."'>".$TopFraggerName2."</a> (".$numTop2." ".$fragl2.")<p><b><u>Most dead:</u></b><br /><a href='index.php?subtopic=characters&name=".$mostDeadName."'>".$mostDeadName."</a> (".$mostDeadNum." ".$deathl1.")</center></TD> </TR> </TABLE> "; $main_content .= ' <br><br><table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>Kills - '.$guild->getName().' vs '.$guild2->getName().'</b></font></td></tr></tbody></table> '; $main_content .= " <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR=#D4C0A1> <TD><b>Killer</b></TD> <TD><b>Victim</b></TD> <TD><b>Fragging Guild</b></TD> <TD><b>Result</b></TD> <TD><b>Date</b></TD> </TR> $kills3 </TABLE>"; $main_content .= ' <br><br><table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>Most Frags</b></font></td></tr></tbody></table>'; $main_content .= " <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR=#D4C0A1> <TD width=50%> <div align='right'> <B> ". $guild->getName() ." </B> </div> </TD> <TD width=50%> <div align='left'> <B> ". $guild2->getName() ." </B> </div> </TD> </TR> <TR BGCOLOR=#D4C0A1> <TD> <div align='right'> <img src=guilds/".$logo." width='64px' height='64px' border=1/> </div> </TD> <TD> <div align='left'> <img src=guilds/".$logo2." width='64px' height='64px'border=1/> </div> </TD> </TR> </TABLE> <TABLE ALIGN=LEFT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%> $membersFrags1 </TABLE> <TABLE ALIGN=RIGHT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%> $membersFrags2 </TABLE> "; $main_content .= ' <table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR><td><font color="white" size=1>.</font></td></tr></tbody></table>'; $main_content .= ' <table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>Most Deaths</b></font></td></tr></tbody></table>'; $main_content .= " <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%> <TR BGCOLOR=#D4C0A1> <TD width=50%> <div align='right'> <B> ". $guild->getName() ." </B> </div> </TD> <TD width=50%> <div align='left'> <B> ". $guild2->getName() ." </B> </div> </TD> </TR> <TR BGCOLOR=#D4C0A1> <TD> <div align='right'> <img src=guilds/".$logo." width='64px' height='64px' border=1 /> </div> </TD> <TD> <div align='left'> <img src=guilds/".$logo2." width='64px' height='64px'border=1 /> </div> </TD> </TR> </TABLE> <TABLE ALIGN=LEFT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%> $membersDeaths1 </TABLE> <TABLE ALIGN=RIGHT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%> $membersDeaths2 </TABLE> "; } $main_content .= " <table border='0' CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR><td><div style='text-align: right; margin: 20px auto; font-size: 10px;'> Created by <a target='blank' href='http://otland.net/members/xampy/'>Xampy</a></div></td></tr></tbody></table>"; ?> 4) Abra o arquivo guilds.php [da pasta htdocs] e DEPOIS de (linha 1740~): if($guild_leader) { if($_POST['todo'] == 'save') { delete_guild($guild->getId()); $saved = TRUE; } adicione isso: $war = $guild->getCustomField("in_war_with"); if($war == 0) { e depois de : else { $guild_errors[] = 'You are not a leader of guild!'; } } adicione: else { $guild_errors[] = 'You are in war with with some other guild!'; } } 5) Abra o arquivo index.php [na pasta htdocs] e depois ou antes de:(não faz diferença): case "buypoints"; $subtopic = "buypoints"; $topic = "Buy Points"; include("buypoints.php"); break; coloque: case "wars"; $subtopic = "wars"; $topic = "Wars"; include("wars.php"); break; 6) Abra xampp/htdocs/layouts/tibiacom/ e depois layout.php. Depois de: <a href='?subtopic=guilds'> <div id='submenu_guilds' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_guilds' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Guilds</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> coloque isso: <a href='index.php?subtopic=wars'> <div id='submenu_wars' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_wars' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color="red">Wars</font></div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> 7) Agora entre na seção Wars do seu Site -> Localhost - Wars Por favor , rep + Creditos: Recuso Imitações , Proibido Copia [Peço a um moderador que arrume o Topico se possivel]3 pontos -
Alissow OTs 4.11! Esta versão 4.11 foi meio apressada, só adicionamos as features novas do 8.6. Aproveitem. Créditos: Alissow Comedinha Luis Nirk TFS Team Viniply Xedegux Sobre o OT/Mapa: Principais quests: -Annihilator -Inquisition Quest -Pits of inferno -Demon Oak -Solar axe quest -HOTA -MPA quest -The Challenger Monstros: -Total monstros: 10292 -Total spawn: 5587+ Cidades: -12 Cidades -200 Houses+- Raids/Invasões: -Rat -Orshabaal -Ghazbaran -Giant spider/The old window -Ferumbras -Morgaroth Spells: -Magias editadas para balanceamento das vocações Changelog Atualização [3.4 BETA]: - Removido áreas não usadas no mapa, diminuindo o tamanho em MBs - Adicionado Anti Magebomb System - Corrigido bugs no npc addon - Adicionado sistema onde os npcs falam sozinhos (Igual como foi adicionado no global). First ;] - Adicionado Elf village em Venonh ( bem parecida com a do global ;]) - Potions desaparecem quando usadas - Corrigido sistema de Up - Corrigido sistema de Monster Counter - Nova dragon lair em Mirand Theraan (Subsolo) - Adicionado porta de level, que protege leveis baixos acessarem os demons da cidade de Flam - Ampliado deserto da cidade de Mirand Theraan - Adicionado Ilha de Goroma - Adicionado Forbidden islands - Ampliado floresta da cidade de alfon e colocado área de macacos parecida com Banuta. - Ligação de alfon com Mirand Theraan - Corrigido bugs reportados nas portas das casas - Corrigido posição dos buracos e escadas - Adicionado beds em todas as casas - Corrigido bugs em casas de yalahar - Adicionado Blue legs quest ( Koshei The Deathless global) - Corrigidas quase todas as areas de Yalahar - Teleports em Yalahar substituidos por NPCs de teleport do global - Corrigido pequenos erros no npc Capitao Coruja, e adicionado viagem à goroma - diminuido ataque do Eye of the seven - Ice rapier agora quebra - Corrigido npc Banker - Adicionado quase todos os items 8.5 - Adicionado medusa - Adicionado Todos os outfits novos - Corrigido NPC Banker (que dava dinheiro) Script By Ta4e - Corrigido Annihilator Quest - Adicionado Notice System - Adicionado novo distro, compilado por Comedinha Atualização nº 2 [3.4]: Otserv atualizado... Corrigido debugs frequentes Corrigido debugs na magia exevo pan Corrigido bugs nos npcs Roy e Firewalker Adicionados mais novos items 8.5, agora temos 90% dos items novos... Atualização 3.5 [06/08/2009]: - Cidade principal (dorion) totalmente reformada - corrigido blue legs quest - Corrigido alavancas de compra de potions - Adicionado alavancas de compra de runas - Corrigido npc Bank - Adicionado NPC King Arthas, que vende promotion - Adicionado npc Rashid, que vende items. - Arrumado Wild Growth rune - Arrumado Utani Hur - Magias reajustadas - Novo estilo de server save - Ilha de mystic reformulada (by Nirk) - Adicionado nova magia para knights "Exkordium". - Adicionado nova magia para mages (promoted) "Exura Seil". - Adicionado nova magia para mages (promoted) "Exevo Gran Frigo". (arrumar -> sem exhausted nem gasta mana) - Adicionados novos monstros. - Adicionado quest challenge (lvl 250) - Corrigido bug do Dead Cyclops - Bug aol Arrumado - Poi Modificada - Corrigido teleports ghouls yalahar - Modificada demon helmet quest, assim como o premio da quest - Corrigido nome do Hallowed axe - Corrigido bug das houses - Corrigido bug dos items andaveis Atualização Patch 3.5.1 [07/08/2009]: - Corrigido erro na inicialização do Ot - Bug das potions corrigido - Bug do aol corrigido (pelomenos pra mim) - Bug dos outfits corrigido - Corrigido erros nas escadas na ilha PvP - O monstro The Fastest Turtle agora não morre, se tornando um monstro apenas para atrapalhar - Retirada suposta quest dos 3 hellhounds e 1 minishabaal - Adicionado teleport de retorno na Ferumbras Tower - Corrigido posições da raid de The old widow - Corrigido bug das escadas nas minas de demons - Corrigido alguns bugs vistos no mapa Atualização 3.6 [10/08/2009]: - Arrumado bugs criticos - Arrumado comando !promote/!demote - Atualizado Items.xml - Bug das Beds arrumado - Modificações na cidade, como, nature e caves - Nova sala de treino - Adicionado comando !highscores Atualização 3.7! Beta [18/12/2009]: - Guildhall support (Elf) - Nova deathlist(Elf, OpenTibia SVN) - Frags funcionando (Elf) - Atualizado monstros e items (slawkens, KaczooH, Elf) - Novas talkactions: /commands, /wp, /storage, /config, /promote & /demote. (slawkens) - Novas funções lua - Novos creatureevents (slawkens, Elf) - Novos configuráveis (Elf, slawkens) - Modificado ataque de monstros existentes (especialmente outfits e velocidade) (Elf) - Monstros reorganizados & atualizados (Nem todos) (slawkens) - Melhorado sistema de banimentos (Elf) - Reescrita janela de Rule Violation (Elf) - Arrumado Stamina (Elf, OpenTibia SVN) - Casas agora são salvas nas modificações do dono (Elf) - Escadas de yalahar funcionando perfeitamente (Elf, Talaturen) - Sistema de nado & waterball completo (slawkens) - Monstros invisiveis não são mais mandandos ao client (anti bot) (OpenTibia SVN) - Anti-dash (OpenTibia SVN) - Sistema de leilão de casas, possibilidade de usar site para vender casas (house_actions table) (OpenTibia SVN, Elf) - Salvando bot actions para /logs/bots por cada player. Por exemplo, bot pode enviar mensagem com mais de 255 caracteres (slawkens) - Novos raid events- item spawning & disappearing and more (Elf) - Modificações no NPC system (Elf) - NPCs OutfitModule (Elf) - Completo 8.53 support, com wars (Elf) - Completo 8.54 support (Elf) - Arrumado NPC voices (Elf) - Players serão informados quando o Gamemaster logar ou ficar invisivel (slawkens) - Arrumado Player Deaths (Elf, slawkens) - Arrumado Abuso de PZ (slawkens) - Portas agora não ajudam players a entrar em PZ (slawkens) - Magic level formula (OpenTibia SVN, KaczooH) - Memory leaks (Elf) - Queries optimization (Talaturen) - Janelas podem ser abertas do lado de fora da casa- agora apenas GMs podem fazer isso (slawkens) - arrumado Efeitos para o Ghost (GM)- configuravel (slawkens) - Corrigido >> Ghost debugging players (OpenTibia SVN, Elf) - Corrigido erro na promotion (Elf) - Corrigido vários erros no console. (slawkens) - Corrigido Spam de magias (Elf) - Corrigido stamina premium (Elf) - Corrigido Clean (Elf) - Corrigido vários outfits (Elf) - Corrigido Ghost (Elf) - Todas as correções no OpenTibia SVN (Open Tibia SVN, Elf) - Corrigido Todos os crashes possiveis (Elf) - Npcs Corrigidos (Comedinha) - Distro Reformulado (comedinha) - Bugs de reports arrumados (Comedinha) - Novos outfits (Alissow) - Actions Arrumadas (Comedinha) - Libs trocadas (Comedinha) - Talkactions bugadas arrumadas (Comedinha) - Reforma na área Sul da cidade Dorion (Alissow) - Adicionado monstros 8.54 (Alissow) - Corrigido bug das potions infinitas (Alissow) Atualização 3.7 Patch 1 [27/12/2009]: - Rampa na frente da loja de foods retirada (Alissow) - Arrumado bugs de mapa em anknor (Alissow) - Bug na Lib dos npcs corrigido (Alissow) - Bug do acc manager arrumado! (Alissow) - Magias "Exkordium" e "Ice Storm" arrumadas (Alissow) - Monstros 8.54 funcionando (Alissow) - 2º Addon Yalaharian arrumado (Alissow) - Addons Warmaster adicionados no NPC Addoner (Alissow) - Pequenas modificações na cidade principal, Dorion, para melhora da jogabilidade (Alissow) - Comando /Deathlist retirado (Alissow) - Magic Wall Rune arrumada (Alissow) - Quest Annihilator arrumada (Alissow) - "Your depot contain x items" Arrumado (Alissow) - Addons reorganizados, mais facil aggora (Alissow) - Tempo de Red skull e Black skull reduzidos para 24 e 42 horas (Alissow) - Reduzida porcentagem de morte (Alissow) - Acrescentado chance de critical hits (Alissow) - ShowHealingDamage Adicionado (Alissow) - Várias partes do mapa remapeadas (Alissow) - NPCs para recarga de Soft boots & Firewalker boots arrumados [Não testado] (Alissow) - Comando !frags arrumado! (Alissow) - Agora é possivel fazer addons sem precisar do comando !buypremium (Alissow) Atualização 3.8 [17/01/2010]: - Arrumado bug nas escadas do Dlair (Alissow) - Todos os bugs nos NPCs arrumados (Comedinha) - Novas talkactions [a pedidos] (Comedinha) - Deathlist arrumada (Comedinha) - Novo Distro (Comedinha) - MySQL Atualizada (Comedinha) - Firewarker boots não é mais gasta quando não está usando (Comedinha) - Problemas com items no Rashid arrumados (Alissow, Comedinha, Comunidade) - O NPC Banker foi corrigido, mas achei mais seguro retira-lo, visto que ninguem usava e poderia causar outro tipo de bug - Ilha (Sim aqui é uma ilha) de Zao adicionada (Alissow, Barker) - Monstros 8.54 aperfeiçoados (Alissow, Markithu, Zkum) - Reduzido danos da magia Exkordium (Alissow) - Os npcs Dark Rodo e Rachel vendem Blank Runes (Alissow) - Magias que não hitavam anteriormente foram arrumadas (Alissow) - Comando !buypremium arrumado (Alissow) - Arena PVM - Mais conhecida como Arena Svargrond - FUNCIONANDO!!! (Alissow) - Magia LightChain Retirada (Alissow) - Adicionado um sisteminha legal no templo (Alissow) - NPC Rashid retirado (Alissow) Atualização 3.8 Minor Patch 1 [17/01/2010]: - Comando Deathlist retirado novamente, fizemos testes equivocados. Se você é uma das 16 pessoas que baixou a versão anterior (3.8) não precisa baixar esta, basta retirar o comando !deathlist e /deathlist do seu Talkactions.xml, Os comandos causam quedas no servidor. Atualização 3.9 [15/02/2010]: - Cidade principal (Dorion) reformada, novo templo, novo depot, novo porto, novos npcs :] (Alissow) - Adicionado Reputation System (Comedinha, Cybermaster) - Adicionado !bless system (Comedinha) - /info melhorado (Comedinha) - Jail System (Comedinha) - Bug chatinho nos tiles pretos arrumado. - Magic Wall Funcionando! (Alissow) - Agora você pode fazer bolos e pães :] (Comedinha, Jean, Ojani) - Adicionado sistema de casamento (Comedinha, ScorpiOOn93, Alissow) - Loot The Fastest Turtle diminuido (Alissow) - Loot e experiencia do Feromous mais baixo (Alissow) - Sistema de parceis para Dorion funcionando (Alissow) - Guildwar System (Comedinha) - Anti MageBomb System (Comedinha, Huggen) - Adicionado Anti Nuker - Esse funciona! (Comedinha) - Adicionado Map Marks, para os players novos (Alissow, Comedinha) Atualização 4.0 [15/02/2010]: - Cidade Mountain totalmente reformada (Alissow) - Montanha de Goblins de Dorion reformada (Alissow) - Demonic Castle de Dorion reformado (Alissow) - Cidade de Venonh modificada (Luis) - Distro atualizado, funcionando nos clients 8.54, 8.55, 8.56 e 8.57 (Comedinha) - Comando !bless retirado (Alissow) - O NPC Ermes não vende mais items de decoração (Alissow) - Arrumado bugs na Ferumbras Tower (Alissow) - O comando !AFK on agora mantem o player parado (Comedinha) - Arrumado bugs nas escadas da área de DeathFans (Alissow) - Comando !Deathlist funcionando! (Alissow, Doidinmapper, GT Thionix) - Sistema de REP atualizado (Comedinha) - Sistema de Polls (Comedinha) - Banco por comandos (Comedinha) - Novos comandos de addon e accounts (Comedinha) - Sistema de futebol completo! (Comedinha) - Sistema Antibot (Comedinha) - Magia Spared Hur modificada (Alissow, Orzeleagle) - Adicionado sistema de montaria (Alissow, unknown666) - Adicionado Canivetes (Alissow, Siramix) - Nova hunt Subaquatica (Luis) Atualização 4.11! [11/07/2010]: - Versão 8.6, todos os items, outfits e monstros novos (Comedinhasss, Fireelement) - Adicionados os novos monstros 8.6 (Alissow) - Bug das potions arrumado (Comedinha, Matheusmkalo, Gabriel linhares, Fireelement) - Erros das runas arrumado (Comedinha, Gabriel linhares, Matheusmkalo, fireelement) Download Servidor: 4shared Tamanho: 17,416 KB Download: http://www.4shared.com/file/ez8XKrju/860_Alissow_Ots_411.html Link protegido: http://lix.in/-8d4bc0 Scan VirusTotal: http://www.virustotal.com/pt/analisis/983abb574dbb957a75aa1fd29eb804065f775e6a0c43216aa277686d32bce22a-1263702373 Atenção - Acc do God: god/god - LEIA o tópico antes de postar qualquer coisa ou duvida - Reportem se houver algum bug - A database fica na pasta schemas+Database - Proibido o uso do nosso distro sem o nosso consenso, obrigado. Andei percebendo que há muitos mapas feitos por mim em outros servidores postados aqui no xtibia, eu não sei se vocês sabem, mas isso é PLÁGIO. Eu não sou uma pessoa egoista, tudo que eu posto aqui no XTibia é para ser compartilhado, mas desde que mantenham os devidos créditos. Será denunciado qualquer tipo de "roubo" sem minha autorização para beneficio próprio. Eu sei que vocês não se importam muito com isso, eu também não deveria me importar, mas é o tempo e a dedicação de outra pessoa que vocês estão roubando, então peço gentilmente aos que tem conhecimento desses mapas, que me apontem. Não tem graça trabalhar horas e horas e ser roubado em dois minutos.2 pontos
-
Mudar Versão Do Otserv
Uchiha Itach1 e um outro reagiu a luisfe23 por um tópico no fórum
Eae XTibianos, muitas pessoas me perguntam como mudar a versão do OTserv, por exemplo de 8.50 para 8.54, então estou trazendo esse tutorial. • Entendendo as versões Praticamente toda a configuração feita sobre a versão é feita nas source, que quando compilada se transforma em um “.exe” , portanto para mudar a versão devemos mudar o executável “.exe”. Existe algumas “regras” que devemos seguir para que não ocorra erro nesta transição, uam delas é que você deve usar a “evolução” de seu servidor exemplo, Você usa TFS 0.3.4 para mudar deve usar 0.3.6. • Entendendo mudança na pasta data O motivo de usarmos um executável do mesmo modelo do anterior é que cada tipo de servidor interpreta a pasta data de uma maneira ou seja uma pasta data de um TFS 0.2.6 tem diferença de uma pasta data 0.2.7, tanto em scripts quanto nos xmls, para evitar erros usamos a pasta data do servidor mais atualizado e apenas modificamos scripts e configurações necessárias, que o servidor atualizado não tem, um bom exemplo são sistemas exclusivos (forja), ou arquivos de biblioteca (data/lib). • Pasta items Esta é uma pasta importante e merece exclusividade na hora de explicar, a pasta items contem informações sobre os items, ou seja se você quer mesmo atualizar seu servidor usar os novos itens você vai ter de usar a pasta items do servidor atualizado, caso tenha itens editados terá que editar novamente, amenos que queria adicionar os itens novos manualmente na pasta antiga. • Config.lua Peça fundamental para montar um servidor a config.lua não pode ficar de fora, com a ”evolução” do servidor normalmente a config.lua sofre modificações, assim se você quiser ter seu servidor “configurado” você devera utilizar a config.lua do servidor atualizado assim como a pasta items. • Data Base Em alguns servidores, TFS por exemplo, atualizam o database automaticamente caso a versão deste seja diferente da atual, portanto se você esta mudando a versão de um “TFS da vida” não terá problemas com database, caso tenha devera mudar as tabelas e colunas manualmente. • Mão na Massa Agora que você já entendeu alguns itens importantes na hora de mudar a versão, podemos aprender como mudá-la. Primeiro você deve descobrir a versão e o “nome” do seu servidor para isso clicamos com o botão direito do mouse no executável (.exe) , e ir em propriedades. Ira abrir uma janela de propriedades onde você deve ir na aba detalhes. Na linha descrição do arquivo podemos descobrir o nome do distro, na linha Versão do arquivo podemos ver a versão no meu caso 0.3.5. Como eu estou usando um servidor 8.50 (0.3.5) eu vou atualizar meu servidor para 8.54 (0.3.6), para isso devemos fazer o download do executavel: http://www.xtibia.com/forum/topic/125013-854-the-forgotten-server-036pl1-crying-damson/ Agora para facilitar e evitar erros usaremos a pasta atualizada, no meu caso do TFS 0.3.6, como base. • Mapa Para evitar erros de “incompatibilidade” mudaremos a versão do mapa utilizando este tutorial: http://www.xtibia.com/forum/topic/122394-mudar-a-versao-do-mapa/ Perfeito agora com o mapa na versão atualizada do seu ot basta colocá-lo na pasta World, tanto os arquivos xmls quanto o otbm. • Scripts Caso você tenha alguns scripts próprios ou scripts que não existem na pasta data base do ot, você deve mudar apenas esses e adicionar linha a linha no arquivo XML. • NPC Na maioria das vezes não existe modificações de grande nível nos npcs, portanto você não terá nenhum problema em copiar e colar a pasta npcs. • XML Esta pasta não sofre modificações constantes porem algumas pode ser de grande porte e influenciar no andamento do servidor, portanto recomendo reconfigurar o servidor. • Lib Esta é uma pasta de extrema importância nos sistemas do servidor caso tenha algo modificado nela terá que reconfigurar na pasta lib nova. • Itens Como falei posteriormente a pasta itens é importante caso queira um servidor realmente atualizado, portanto se você tem itens editados você vai ter que editá-los novamente. • Config.lua Para evitar erros de configuração recomendo que use a config.lua do novo servidor assim configurando novamente. Assim chegamos ao fim deste tutorial gostaria de lembrar que não é nessesario fazer muitas coisas que falei neste tutorial porem falei para evitar um erro fatal em seu servidor por conta da incompatibilidade. Tutorial feito por : _LG • Créditos • _LG • Henrique Moura • alissow • TFS • luisfe232 pontos -
aqui foi só 1 click.. Como aqui tem net separada pra o not, eu testei no not que tem net de 2MB e deu normal.. Na de 25 do pc normal tbm deu mesma coisa rsrs. Qual sua net?2 pontos
-
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: Vodkart1 ponto
-
Olá Vi Augumas Pessoas Presisando Desse Script Entao Descidi Postar ;D 1º Va Em: C:\xampp\htdocs Abra o Shopsystem Apague Tudo E Cole Isso. <?PHP // ALTER TABLE `z_shop_history_item` CHANGE `offer_id` `offer_id` VARCHAR( 255 ) NOT NULL; // UPDATE `z_shop_history_item`, `z_shop_offer` SET `z_shop_history_item`.`offer_id` = `z_shop_offer`.`offer_name` WHERE `z_shop_history_item`.`offer_id` = `z_shop_offer`.`id`; if($config['site']['shop_system'] == 1) { if($logged) { $user_premium_points = $account_logged->getCustomField('premium_points'); } else { $user_premium_points = 'Login first'; } function getItemByID($id) { $id = (int) $id; $SQL = $GLOBALS['SQL']; $data = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_offer').' WHERE '.$SQL->fieldName('id').' = '.$SQL->quote($id).';')->fetch(); if ($data['offer_type'] == 'pacc') { $offer['id'] = $data['id']; $offer['type'] = $data['offer_type']; $offer['days'] = $data['count1']; $offer['points'] = $data['points']; $offer['description'] = $data['offer_description']; $offer['name'] = $data['offer_name']; } elseif ($data['offer_type'] == 'item') { $offer['id'] = $data['id']; $offer['type'] = $data['offer_type']; $offer['item_id'] = $data['itemid1']; $offer['item_count'] = $data['count1']; $offer['points'] = $data['points']; $offer['description'] = $data['offer_description']; $offer['name'] = $data['offer_name']; } elseif ($data['offer_type'] == 'container') { $offer['id'] = $data['id']; $offer['type'] = $data['offer_type']; $offer['container_id'] = $data['itemid2']; $offer['container_count'] = $data['count2']; $offer['item_id'] = $data['itemid1']; $offer['item_count'] = $data['count1']; $offer['points'] = $data['points']; $offer['description'] = $data['offer_description']; $offer['name'] = $data['offer_name']; } return $offer; } function getOfferArray_cat1() { $offer_list = $GLOBALS['SQL']->query('SELECT * FROM '.$GLOBALS['SQL']->tableName('z_shop_offer').' WHERE `category` = 1 ORDER BY `id`;'); $i_pacc = 0; $i_item = 0; $i_container = 0; while($data = $offer_list->fetch()) { if ($data['offer_type'] == 'item') { $offer_array['item'][$i_item]['id'] = $data['id']; $offer_array['item'][$i_item]['item_id'] = $data['itemid1']; $offer_array['item'][$i_item]['item_count'] = $data['count1']; $offer_array['item'][$i_item]['points'] = $data['points']; $offer_array['item'][$i_item]['description'] = $data['offer_description']; $offer_array['item'][$i_item]['name'] = $data['offer_name']; $i_item++; } } return $offer_array; } function getOfferArray_cat2() { $offer_list = $GLOBALS['SQL']->query('SELECT * FROM '.$GLOBALS['SQL']->tableName('z_shop_offer').' WHERE `category` = 2 ORDER BY `id`;'); $i_pacc = 0; $i_item = 0; $i_container = 0; while($data = $offer_list->fetch()) { if ($data['offer_type'] == 'item') { $offer_array['item'][$i_item]['id'] = $data['id']; $offer_array['item'][$i_item]['item_id'] = $data['itemid1']; $offer_array['item'][$i_item]['item_count'] = $data['count1']; $offer_array['item'][$i_item]['points'] = $data['points']; $offer_array['item'][$i_item]['description'] = $data['offer_description']; $offer_array['item'][$i_item]['name'] = $data['offer_name']; $i_item++; } } return $offer_array; } function getOfferArray_cat3() { $offer_list = $GLOBALS['SQL']->query('SELECT * FROM '.$GLOBALS['SQL']->tableName('z_shop_offer').' WHERE `category` = 3 ORDER BY `id`;'); $i_pacc = 0; $i_item = 0; $i_container = 0; while($data = $offer_list->fetch()) { if ($data['offer_type'] == 'pacc') { $offer_array['pacc'][$i_pacc]['id'] = $data['id']; $offer_array['pacc'][$i_pacc]['days'] = $data['count1']; $offer_array['pacc'][$i_pacc]['points'] = $data['points']; $offer_array['pacc'][$i_pacc]['description'] = $data['offer_description']; $offer_array['pacc'][$i_pacc]['name'] = $data['offer_name']; $i_pacc++; } elseif ($data['offer_type'] == 'item') { $offer_array['item'][$i_item]['id'] = $data['id']; $offer_array['item'][$i_item]['item_id'] = $data['itemid1']; $offer_array['item'][$i_item]['item_count'] = $data['count1']; $offer_array['item'][$i_item]['points'] = $data['points']; $offer_array['item'][$i_item]['description'] = $data['offer_description']; $offer_array['item'][$i_item]['name'] = $data['offer_name']; $i_item++; } elseif ($data['offer_type'] == 'container') { $offer_array['container'][$i_container]['id'] = $data['id']; $offer_array['container'][$i_container]['container_id'] = $data['itemid2']; $offer_array['container'][$i_container]['container_count'] = $data['count2']; $offer_array['container'][$i_container]['item_id'] = $data['itemid1']; $offer_array['container'][$i_container]['item_count'] = $data['count1']; $offer_array['container'][$i_container]['points'] = $data['points']; $offer_array['container'][$i_container]['description'] = $data['offer_description']; $offer_array['container'][$i_container]['name'] = $data['offer_name']; $i_container++; } } return $offer_array; } if($action == "category=3") { unset($_SESSION['viewed_confirmation_page']); $main_content .= '<h2><center>Welcome to the Server Name Shop!<br /> Here you can buy some items.</center></h2>'; $offer_list = getOfferArray_cat3(); //show list of items offers if(count($offer_list['item']) > 0) { $main_content .= '<a href="index.php?subtopic=shopsystem" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #aaaaaa;">Items</a><a href="index.php?subtopic=shopsystem&action=category=2" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #aaaaaa;">Addon Items</a><a href="index.php?subtopic=shopsystem&action=category=3" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #000000;">Others</a>'; $main_content .= '<table style="width:100%;" cellpadding="1" cellspacing="1"><tr style="background:#F1E0C6;"><td colspan="4" style="height:5px;"></td></tr></table>'; $main_content .= '<table border="0" cellpadding="1" cellspacing="1" width="650"><tr width="650" bgcolor="#b7a58a"><td colspan="3"><font color="#F1E0C6" size="4"><b> ITEMS</b></font></td></tr><tr bgcolor="#b7a58a"><td width="50" align="center"><font color=#FFFFFF><b>Picture</b></font></td><td width="350" align="left"><font color=#FFFFFF><b>Description</b></font></td><td width="250" align="center"><font color=#FFFFFF><b>Select product</b></font></td></tr>'; foreach($offer_list['item'] as $item) { $main_content .= '<tr bgcolor="#F1E0C6"><td align="center"><img src="item_images/'.$item['id'].'.jpg"></td><td><b>'.$item['name'].'</b> ('.$item['points'].' points)<br />'.$item['description'].'</td><td align="center">'; if(!$logged) { $main_content .= '<b>Login to buy</b>'; } else { $main_content .= '<form action="?subtopic=shopsystem&action=select_player" method=POST><input type="hidden" name="buy_id" value="'.$item['id'].'"><input type="submit" value="Buy '.$item['name'].'"><br><b>for '.$item['points'].' points</b></form>'; } $main_content .= '</td></tr>'; } $main_content .= '</table><br />'; } //show list of containers offers if(count($offer_list['container']) > 0) { $main_content .= '<table border="0" cellpadding="1" cellspacing="1" width="650"><tr width="650" bgcolor="#b7a58a"><td colspan="3"><font color="#F1E0C6" size="4"><b> CONTAINERS WITH ITEMS</b></font></td></tr><tr bgcolor="#b7a58a"><td width="50" align="center"><font color=#FFFFFF><b>Picture</b></font></td><td width="350" align="left"><font color=#FFFFFF><b>Description</b></font></td><td width="250" align="center"><font color=#FFFFFF><b>Select product</b></font></td></tr>'; foreach($offer_list['container'] as $container) { $main_content .= '<tr bgcolor="#F1E0C6"><td align="center"><img src="item_images/'.$container['id'].'.jpg"></td><td><b>'.$container['name'].'</b> ('.$container['points'].' points)<br />'.$container['description'].'</td><td align="center">'; if(!$logged) { $main_content .= '<b>Login to buy</b>'; } else { $main_content .= '<form action="?subtopic=shopsystem&action=select_player" method=POST><input type="hidden" name="buy_id" value="'.$container['id'].'"><input type="submit" value="Buy '.$container['name'].'"><br><b>for '.$container['points'].' points</b></form>'; } $main_content .= '</td></tr>'; } $main_content .= '</table><br />'; } //show list of pacc offers if(count($offer_list['pacc']) > 0) { $main_content .= '<table border="0" cellpadding="1" cellspacing="1" width="650"><tr width="650" bgcolor="#b7a58a"><td colspan="3"><font color="#F1E0C6" size="4"><b> PACC</b></font></td></tr><tr bgcolor="#b7a58a"><td width="50" align="center"><font color=#FFFFFF><b>Days</b></font></td><td width="350" align="left"><font color=#FFFFFF><b>Description</b></font></td><td width="250" align="center"><font color=#FFFFFF><b>Select product</b></font></td></tr>'; foreach($offer_list['pacc'] as $pacc) { $main_content .= '<tr bgcolor="#F1E0C6"><td align="center">'.$pacc['days'].'</td><td><b>'.$pacc['name'].'</b> ('.$pacc['points'].' points)<br />'.$pacc['description'].'</td><td align="center">'; if(!$logged) { $main_content .= '<b>Login to buy</b>'; } else { $main_content .= '<form action="?subtopic=shopsystem&action=select_player" method=POST><input type="hidden" name="buy_id" value="'.$pacc['id'].'"><input type="submit" value="Buy '.$pacc['name'].'"><br><b>for '.$pacc['points'].' points</b></form>'; } } $main_content .= '</table><br />'; } } if($action == "category=2") { unset($_SESSION['viewed_confirmation_page']); $main_content .= '<h2><center>Welcome to the Server Name Shop!<br /> Here you can buy some items.</center></h2>'; $offer_list = getOfferArray_cat2(); //show list of items offers if(count($offer_list['item']) > 0) { $main_content .= '<a href="index.php?subtopic=shopsystem" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #aaaaaa;">Items</a><a href="index.php?subtopic=shopsystem&action=category=2" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #000000;;">Addon Items</a><a href="index.php?subtopic=shopsystem&action=category=3" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #aaaaaa;">Others</a>'; $main_content .= '<table style="width:100%;" cellpadding="1" cellspacing="1"><tr style="background:#F1E0C6;"><td colspan="4" style="height:5px;"></td></tr></table>'; $main_content .= '<table border="0" cellpadding="1" cellspacing="1" width="650"><tr width="650" bgcolor="#b7a58a"><td colspan="3"><font color="#F1E0C6" size="4"><b> ITEMS</b></font></td></tr><tr bgcolor="#b7a58a"><td width="50" align="center"><font color=#FFFFFF><b>Picture</b></font></td><td width="350" align="left"><font color=#FFFFFF><b>Description</b></font></td><td width="250" align="center"><font color=#FFFFFF><b>Select product</b></font></td></tr>'; foreach($offer_list['item'] as $item) { $main_content .= '<tr bgcolor="#F1E0C6"><td align="center"><img src="item_images/'.$item['id'].'.jpg"></td><td><b>'.$item['name'].'</b> ('.$item['points'].' points)<br />'.$item['description'].'</td><td align="center">'; if(!$logged) { $main_content .= '<b>Login to buy</b>'; } else { $main_content .= '<form action="?subtopic=shopsystem&action=select_player" method=POST><input type="hidden" name="buy_id" value="'.$item['id'].'"><input type="submit" value="Buy '.$item['name'].'"><br><b>for '.$item['points'].' points</b></form>'; } $main_content .= '</td></tr>'; } $main_content .= '</table><br />'; } } if($action == '') { unset($_SESSION['viewed_confirmation_page']); $main_content .= '<h2><center>Welcome to the Server Name Shop!<br /> Here you can buy some items.</center></h2>'; $offer_list = getOfferArray_cat1(); //show list of items offers if(count($offer_list['item']) > 0) { $main_content .= '<a href="index.php?subtopic=shopsystem" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #000000;">Items</a><a href="index.php?subtopic=shopsystem&action=category=2" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #aaaaaa;">Addon Items</a><a href="index.php?subtopic=shopsystem&action=category=3" style="padding: 5px 5px 1px 5px; margin: 5px 1px 0px 1px; background-color: #F1E0C6; color: #aaaaaa;">Others</a>'; $main_content .= '<table style="width:100%;" cellpadding="1" cellspacing="1"><tr style="background:#F1E0C6;"><td colspan="4" style="height:5px;"></td></tr></table>'; $main_content .= '<table border="0" cellpadding="1" cellspacing="1" width="650"><tr width="650" bgcolor="#b7a58a"><td colspan="3"><font color="#FFFFFF" size="4"><b> ITEMS</b></font></td></tr><tr bgcolor="#b7a58a"><td width="50" align="center"><font color=#FFFFFF><b>Picture</b></font></td><td width="350" align="left"><font color=#FFFFFF><b>Description</b></font></td><td width="250" align="center"><font color=#FFFFFF><b>Select product</b></font></td></tr>'; foreach($offer_list['item'] as $item) { $main_content .= '<tr bgcolor="#F1E0C6"><td align="center"><img src="item_images/'.$item['id'].'.jpg"></td><td><b>'.$item['name'].'</b> ('.$item['points'].' points)<br />'.$item['description'].'</td><td align="center">'; if(!$logged) { $main_content .= '<b>Login to buy</b>'; } else { $main_content .= '<form action="?subtopic=shopsystem&action=select_player" method=POST><input type="hidden" name="buy_id" value="'.$item['id'].'"><input type="submit" value="Buy '.$item['name'].'"><br><b>for '.$item['points'].' points</b></form>'; } $main_content .= '</td></tr>'; } $main_content .= '</table><br />'; } } elseif($action == 'select_player') { unset($_SESSION['viewed_confirmation_page']); if(!$logged) { $main_content .= 'Please login first.'; } else { $buy_id = (int) $_REQUEST['buy_id']; if(empty($buy_id)) { $main_content .= 'Please <a href="?subtopic=shopsystem">select item</a> first.'; } else { $buy_offer = getItemByID($buy_id); if(isset($buy_offer['id'])) //item exist in database { if($user_premium_points >= $buy_offer['points']) { $main_content .= '<h2>Select player</h2> <table border="0" cellpadding="1" cellspacing="1" width="650"> <tr bgcolor="#b7a58a"><td colspan="2"><font color="#F1E0C6" size="4"><b>Selected offer</b></font></td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>Name:</b></td><td width="550">'.$buy_offer['name'].'</td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>Description:</b></td><td width="550">'.$buy_offer['description'].'</td></tr> </table><br /> <form action="?subtopic=shopsystem&action=confirm_transaction" method=POST><input type="hidden" name="buy_id" value="'.$buy_id.'"> <table border="0" cellpadding="1" cellspacing="1" width="650"> <tr bgcolor="#b7a58a"><td colspan="2"><font color="#F1E0C6" size="4"><b>Give item/pacc* to player from your account</b></font></td></tr> <tr bgcolor="#F1E0C6"><td width="110"><b>Name:</b></td><td width="550"><select name="buy_name">'; $players_from_logged_acc = $account_logged->getPlayersList(); if(count($players_from_logged_acc) > 0) { $players_from_logged_acc->orderBy('name'); foreach($players_from_logged_acc as $player) { $main_content .= '<option>'.$player->getName().'</option>'; } } else { $main_content .= 'You don\'t have any character on your account.'; } $main_content .= '</select> <input type="submit" value="Give"></td></tr> </table> </form><br /><form action="?subtopic=shopsystem&action=confirm_transaction" method=POST><input type="hidden" name="buy_id" value="'.$buy_id.'"> <table border="0" cellpadding="1" cellspacing="1" width="650"> <tr bgcolor="#b7a58a"><td colspan="2"><font color="#F1E0C6" size="4"><b>Give item/pacc* to other player</b></font></td></tr> <tr bgcolor="#F1E0C6"><td width="110"><b>To player:</b></td><td width="550"><input type="text" name="buy_name"> - name of player</td></tr> <tr bgcolor="#F1E0C6"><td width="110"><b>From:</b></td><td width="550"><input type="text" name="buy_from"> <input type="submit" value="Give"> - your nick, \'empty\' = Anonymous</td></tr> </table><br /> </form>'; $main_content .= '*PACC is for all characters from account of selected player name'; } else { $main_content .= 'For this item you need <b>'.$buy_offer['points'].'</b> points. You have only <b>'.$user_premium_points.'</b> premium points. Please <a href="?subtopic=shopsystem">select other item</a> or buy premium points.'; } } else { $main_content .= 'Offer with ID <b>'.$buy_id.'</b> doesn\'t exist. Please <a href="?subtopic=shopsystem">select item</a> again.'; } } } } elseif($action == 'confirm_transaction') { if(!$logged) { $main_content .= 'Please login first.'; } else { $buy_id = (int) $_POST['buy_id']; $buy_name = stripslashes(urldecode($_POST['buy_name'])); $buy_from = stripslashes(urldecode($_POST['buy_from'])); if(empty($buy_from)) { $buy_from = 'Anonymous'; } if(empty($buy_id)) { $main_content .= 'Please <a href="?subtopic=shopsystem">select item</a> first.'; } else { if(!check_name($buy_from)) { $main_content .= 'Invalid nick ("from player") format. Please <a href="?subtopic=shopsystem&action=select_player&buy_id='.$buy_id.'">select other name</a> or contact with administrator.'; } else { $buy_offer = getItemByID($buy_id); if(isset($buy_offer['id'])) //item exist in database { if($user_premium_points >= $buy_offer['points']) { if(check_name($buy_name)) { $buy_player = new OTS_Player(); $buy_player->find($buy_name); if($buy_player->isLoaded()) { $buy_player_account = $buy_player->getAccount(); if($_SESSION['viewed_confirmation_page'] == 'yes' && $_POST['buy_confirmed'] == 'yes') { 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="?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } elseif($buy_offer['type'] == 'item') { $sql = 'INSERT INTO '.$SQL->tableName('z_ots_comunication').' (id, name, type, action, param1, param2, param3, param4, param5, param6, param7, delete_it) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', \'login\', \'give_item\', '.$SQL->quote($buy_offer['item_id']).', '.$SQL->quote($buy_offer['item_count']).', \'\', \'\', \'item\', '.$SQL->quote($buy_offer['name']).', \'\', \'1\');'; $SQL->query($sql); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_item').' (id, to_name, to_account, from_nick, from_account, price, offer_id, trans_state, trans_start, trans_real) VALUES ('.$SQL->lastInsertId().', '.$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['name']).', \'wait\', '.$SQL->quote(time()).', \'0\');'; $SQL->query($save_transaction); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; $main_content .= '<h2>Item added!</h2><b>'.$buy_offer['name'].'</b> added to player <b>'.$buy_player->getName().'</b> items (he will get this items after relog) 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="?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } elseif($buy_offer['type'] == 'container') { $sql = 'INSERT INTO '.$SQL->tableName('z_ots_comunication').' (id, name, type, action, param1, param2, param3, param4, param5, param6, param7, delete_it) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', \'login\', \'give_item\', '.$SQL->quote($buy_offer['item_id']).', '.$SQL->quote($buy_offer['item_count']).', '.$SQL->quote($buy_offer['container_id']).', '.$SQL->quote($buy_offer['container_count']).', \'container\', '.$SQL->quote($buy_offer['name']).', \'\', \'1\');'; $SQL->query($sql); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_item').' (id, to_name, to_account, from_nick, from_account, price, offer_id, trans_state, trans_start, trans_real) VALUES ('.$SQL->lastInsertId().', '.$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['name']).', \'wait\', '.$SQL->quote(time()).', \'0\');'; $SQL->query($save_transaction); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; $main_content .= '<h2>Container of items added!</h2><b>'.$buy_offer['name'].'</b> added to player <b>'.$buy_player->getName().'</b> items (he will get this container with items after relog) 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="?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } } else { $set_session = TRUE; $_SESSION['viewed_confirmation_page'] = 'yes'; $main_content .= '<h2>Confirm transaction</h2> <table border="0" cellpadding="1" cellspacing="1" width="650"> <tr bgcolor="#b7a58a"><td colspan="3"><font color="#F1E0C6" size="4"><b>Confirm transaction</b></font></td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>Name:</b></td><td width="550" colspan="2">'.$buy_offer['name'].'</td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>Description:</b></td><td width="550" colspan="2">'.$buy_offer['description'].'</td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>Cost:</b></td><td width="550" colspan="2"><b>'.$buy_offer['points'].' premium points</b> from your account</td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>For Player:</b></td><td width="550" colspan="2"><font color="#FFFFFF">'.$buy_player->getName().'</font></td></tr> <tr bgcolor="#F1E0C6"><td width="100"><b>From:</b></td><td width="550" colspan="2"><font color="#FFFFFF">'.$buy_from.'</font></td></tr> <tr bgcolor="#FFFFFF"><td width="100"><b>Transaction?</b></td><td width="275" align="left"> <form action="?subtopic=shopsystem&action=confirm_transaction" method="POST"><input type="hidden" name="buy_confirmed" value="yes"><input type="hidden" name="buy_id" value="'.$buy_id.'"><input type="hidden" name="buy_from" value="'.urlencode($buy_from).'"><input type="hidden" name="buy_name" value="'.urlencode($buy_name).'"><input type="submit" value="Accept"></form></td> <td align="right"><form action="?subtopic=shopsystem" method="POST"><input type="submit" value="Cancel"></form></td></tr> </table> '; } } else { $main_content .= 'Player with name <b>'.$buy_name.'</b> doesn\'t exist. Please <a href="?subtopic=shopsystem&action=select_player&buy_id='.$buy_id.'">select other name</a>.'; } } else { $main_content .= 'Invalid name format. Please <a href="?subtopic=shopsystem&action=select_player&buy_id='.$buy_id.'">select other name</a> or contact with administrator.'; } } else { $main_content .= 'For this item you need <b>'.$buy_offer['points'].'</b> points. You have only <b>'.$user_premium_points.'</b> premium points. Please <a href="?subtopic=shopsystem">select other item</a> or buy premium points.'; } } else { $main_content .= 'Offer with ID <b>'.$buy_id.'</b> doesn\'t exist. Please <a href="?subtopic=shopsystem">select item</a> again.'; } } } } if(!$set_session) { unset($_SESSION['viewed_confirmation_page']); } } elseif($action == 'show_history') { if(!$logged) { $main_content .= 'Please login first.'; } else { $items_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($items_history_received)) { foreach($items_history_received as $item_received) { if($account_logged->getId() == $item_received['to_account']) $char_color = 'green'; else $char_color = '#FFFFFF'; $items_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$item_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $item_received['from_account']) $items_received_text .= '<i>Your account</i>'; else $items_received_text .= $item_received['from_nick']; $items_received_text .= '</td><td>'.$item_received['offer_id'].'</td><td>'.date("j F Y, H:i:s", $item_received['trans_start']).'</td>'; if($item_received['trans_real'] > 0) $items_received_text .= '<td>'.date("j F Y, H:i:s", $item_received['trans_real']).'</td>'; else $items_received_text .= '<td><b><font color="#FFFFFF">Not realized yet.</font></b></td>'; $items_received_text .= '</tr>'; } } $paccs_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccs_history_received)) { foreach($paccs_history_received as $pacc_received) { if($account_logged->getId() == $pacc_received['to_account']) $char_color = 'green'; else $char_color = '#FFFFFF'; $paccs_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$pacc_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $pacc_received['from_account']) $paccs_received_text .= '<i>Your account</i>'; else $paccs_received_text .= $pacc_received['from_nick']; $paccs_received_text .= '</td><td>'.$pacc_received['pacc_days'].' days</td><td>'.$pacc_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $pacc_received['trans_real']).'</td></tr>'; } } $main_content .= '<center><h1>Transactions History</h1></center>'; if(!empty($items_received_text)) { $main_content .= '<h2>Item transactions</h2><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=100%><tr bgcolor="#F1E0C6"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Bought on page</b></td><td><b>Received on OTS</b></td></tr>'.$items_received_text.'</table><br />'; } if(!empty($paccs_received_text)) { $main_content .= '<h2>PACC transactions</h2><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=100%><tr bgcolor="#F1E0C6"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccs_received_text.'</table><br />'; } if(empty($paccs_received_text) && empty($items_received_text)) $main_content .= 'You did not buy/receive any item or PACC.'; } } $main_content .= '<br><br><b><font color="green">You have premium points: </font></b>'.$user_premium_points; } else $main_content .= 'Shop system is blocked on this server. Admin must install this script (LUA and in database only, PHP is installed) on server and set <b>shop_system = "1"</b> in config.ini file'; ?> Salve E feche. Agora Va Em: Shopadmin Apague Tudo E Cole Isso: <?PHP if($group_id_of_acc_logged >= $config['site']['access_admin_panel']) { $offertype = $_REQUEST['offer_type']; if((empty($action)) AND (empty($offertype))) { $main_content .= '<br><h2><center><a href="?subtopic=shopadmin&offer_type=item">ADD SHOP OFFER</a><br><br> <a href="?subtopic=shopadmin&action=viewoffer">VIEW SHOP OFFER <i>(EDIT/DELETE)</i></a><br><br><a href="?subtopic=shopadmin&action=points">ADD POINTS</a></center>'; } if($_REQUEST['offer_type']){ $shop_points = stripslashes(ucwords(strtolower(trim($_REQUEST['shop_points'])))); $shop_offer_type = stripslashes(trim($_REQUEST['offer_type'])); if(empty($shop_points)) { $main_content .= '<table border="0"><tr><td align="center"><b>Select offer type:</b></td><td><table border="0" ><tr bgcolor="#505050"> <td><font color="white">Item</td><td><font color="white">Container</td><td><font color="white">Pacc</td><td><font color="white">Redskull</td><td><font color="white">Unban</td><td><font color="white">Changename</td></tr> <tr bgcolor="#D4C0A1"> <td align="center"><a href="?subtopic=shopadmin&offer_type=item"><input type="radio" name="offer_type" value="item"></a></td> <td align="center"><a href="?subtopic=shopadmin&offer_type=container"><input type="radio" name="offer_type" value="container" ></a></td> <td align="center"><a href="?subtopic=shopadmin&offer_type=pacc"><input type="radio" name="offer_type" value="pacc" ></a></td> <td align="center"><a href="?subtopic=shopadmin&offer_type=redskull"><input type="radio" name="offer_type" value="redskull" ></a></td> <td align="center"><a href="?subtopic=shopadmin&offer_type=unban"><input type="radio" name="offer_type" value="unban" ></a></td> <td align="center"><a href="?subtopic=shopadmin&offer_type=changename"><input type="radio" name="offer_type" value="changename" ></a></td> </tr></table></td></tr>'; $main_content .= '<form action="?subtopic=shopadmin&offer_type='.$shop_offer_type.'&check" method="post" ><table border="0"><tr><td align="center" ><b>Points:</b></td> <td><input type="textbox" name="shop_points" maxlenght="7" style="width: 70px"></td></tr>'; if($_REQUEST['offer_type'] == 'container'){ $main_content .= '<tr><td align="center" ><b>Container ID:</b></td> <td><input type="text" name="shop_itemid1" maxlenght="7" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Count Container:</b></td> <td><input type="text" name="shop_count1" maxlenght="7" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Item ID:</b></td> <td><input type="text" name="shop_itemid2" maxlenght="7" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Count Item:</b></td> <td><input type="text" name="shop_count2" maxlenght="7" style="width: 70px" ></td></tr>'; } if($_REQUEST['offer_type'] == 'item'){ $main_content .= '<tr><td align="center"><b>Item ID:</b></td> <td><input type="text" name="shop_itemid1" maxlenght="7" style="width: 70px" ></td></tr> <tr><td align="center"><b>Item Count:</b></td> <td><input type="text" name="shop_count1" maxlenght="7" style="width: 70px" ></td></tr>'; } if($_REQUEST['offer_type'] == 'pacc'){ $main_content .= '<tr><td align="center" ><b>Days:</b></td> <td><input type="text" name="shop_count1" maxlenght="7" style="width: 70px" ></td></tr>'; } $main_content .= '<tr><td align="center" ><b>Offer Description:</b></td> <td ><textarea name="shop_offer_description" rows="2" cols="35"></textarea></td></tr> <tr><td align="center" ><b>Category:</b></td> <td><input type="text" name="shop_category" maxlenght="7" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Offer Name:</b></td> <td><input type="text" name="shop_offer_name" maxlenght="40" style="width: 200px" ></td></tr> <tr><td><input name="submit" type="submit" value="Submit" /></form></td><td> <form action="?subtopic=shopadmin&offer_type=container" method="post" > <input name="submit" type="submit" value="Reset" /></form></td></tr></table>'; $main_content .= '<form action="?subtopic=shopadmin" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form>'; } else { $shop_points = stripslashes(trim($_POST['shop_points'])); $shop_offer_type = stripslashes(trim($_REQUEST['offer_type'])); $shop_itemid1 = stripslashes(trim($_POST['shop_itemid1'])); $shop_count1 = stripslashes(trim($_POST['shop_count1'])); $shop_itemid2 = stripslashes(trim($_POST['shop_itemid2'])); $shop_count2 = stripslashes(trim($_POST['shop_count2'])); $shop_offer_description = stripslashes(trim($_POST['shop_offer_description'])); $shop_offer_name = stripslashes(trim($_POST['shop_offer_name'])); $shop_category = stripslashes(trim($_POST['shop_category'])); $SQL->query('INSERT INTO `z_shop_offer` (id, points, itemid1, count1, itemid2, count2, offer_type, offer_description, offer_name, pid, category) VALUES (NULL, '.$SQL->quote($shop_points).', '.$SQL->quote($shop_itemid1).', '.$SQL->quote($shop_count1).', '.$SQL->quote($shop_itemid2).', '.$SQL->quote($shop_count2).', '.$SQL->quote($shop_offer_type).', '.$SQL->quote($shop_offer_description).', '.$SQL->quote($shop_offer_name).', 0, '.$SQL->quote($shop_category).')'); $main_content .= '<center><h2><font color="red">Added to Shop:</font></h2></center><hr/> <tr><td align="center" ><b>Points:</b></td> <td>'.$shop_points.'</td></tr><br>'; if($shop_offer_type == 'container'){ $main_content .= '<tr><td align="center" ><b>Container ID:</b></td> <td>'.$shop_itemid1.'</td></tr><br> <tr><td align="center" ><b>Count Container:</b></td> <td>'.$shop_count1.'</td></tr><br> <tr><td align="center" ><b> Item ID (in Container):</b></td> <td>'.$shop_itemid2.'</td></tr><br> <tr><td align="center" ><b>Count Item (in Container):</b></td> <td>'.$shop_count2.'</td></tr><br> <tr><td align="center" ><b>Category:</b></td> <td>'.$shop_category.'</td></tr><br>'; } if ($shop_offer_type == 'item'){ $main_content .= '<tr><td align="center" ><b>Item ID:</b></td> <td>'.$shop_itemid1.'</td></tr><br> <tr><td align="center" ><b>Count Item:</b></td> <td>'.$shop_count1.'</td></tr><br> <tr><td align="center" ><b>Category:</b></td> <td>'.$shop_category.'</td></tr><br>'; } if ($shop_offer_type == 'pacc'){ $main_content .= '<tr><td align="center" ><b>Days:</b></td> <td>'.$shop_count1.'</td></tr><br> <tr><td align="center" ><b>Category:</b></td> <td>'.$shop_category.'</td></tr><br>'; } $main_content .= '<tr><td align="center" ><b>Offer Type:</b></td> <td>'.$shop_offer_type.'</td></tr><br> <tr><td align="center" ><b>Offer Description:</b></td> <td>'.$shop_offer_description.'</td></tr><br> <tr><td align="center" ><b>Offer Name:</b></td> <td>'.$shop_offer_name.'</td></tr> <br><form action="?subtopic=shopadmin&offer_type=item" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form>'; } } if($action == "viewoffer") { $items = simplexml_load_file($config['site']['server_path'].'/data/items/items.xml') or die('<b>Could not load items!</b>'); foreach($items->item as $v) $itemList[(int)$v['id']] = $v['name']; $order = array("id" => "id", "points" => "points", "offer_type" => "offer_type", "itemid1" => "itemid1", "itemid2" => "itemid2"); $main_content .= '<center><table width="550"><tr BGCOLOR="#505050"><td width="5"><font color="white"><a href="index.php?subtopic=shopadmin&action=viewoffer&order=' . getOrder($order, 'order', 'id') . '" class=white>ID:</td><td width="5"><font color="white"><a href="index.php?subtopic=shopadmin&action=viewoffer&order=' . getOrder($order, 'order', 'points') . '" class=white>Points:</td><td width="7"> <font color="white"><a href="index.php?subtopic=shopadmin&action=viewoffer&order=' . getOrder($order, 'order', 'itemid1') . '" class=white>Item ID:</td><td width="5"><font color="white">Count:</td><td width="7"><center><font color="white"><a href="index.php?subtopic=shopadmin&action=viewoffer&order=' . getOrder($order, 'order', 'itemid2') . '" class=white>Container ID:</center></td><td width="5"><font color="white">Count:</td><td width="7"><font color="white"><a href="index.php?subtopic=shopadmin&action=viewoffer&order=' . getOrder($order, 'order', 'offer_type') . '" class=white>Offer Type:</td> <td width="85"><font color="white">Offer Description:</td><td width="30"><font color="white">Offer Name:</td><td width="30"></td></tr>'; $shopoffers = $SQL->query('SELECT id, points, itemid1, count1, itemid2, count2, offer_type, offer_description, offer_name, pid FROM z_shop_offer ' . makeOrder($order, 'order', 'id')); foreach($shopoffers as $shop) { $main_content .= '</B><tr BGCOLOR="#D4C0A1"><td align="center">'.$shop['id'].'<td align="center">'.$shop['points'].'</td>'; if($shop['itemid1'] == "0") { $main_content .= '<td align="center">'.$shop['itemid1'].'<br></td>'; } else { $main_content .= '<td align="center">'.$shop['itemid1'].'<br>(' . $itemList[(int)$shop['itemid1']] . ')</td>'; } $main_content .= '<td align="center">'.$shop['count1'].'</td>'; if($shop['itemid2'] == "0") { $main_content .= '<td align="center">'.$shop['itemid2'].'</td>'; } else { $main_content .= '<td align="center">'.$shop['itemid2'].'<br>(' . $itemList[(int)$shop['itemid2']] . ')</td>'; } $main_content .= '<td align="center">'.$shop['count2'].'</td><td align="center">'.$shop['offer_type'].'</td><td align="left">'.$shop['offer_description'].'</td><td align="left">'.$shop['offer_name'].'</td>'; $main_content .= '<td align="center"><a href="?subtopic=shopadmin&action=editoffer&id='.$shop['id'].'"><img src="'.$layout_name.'/images/news/edit_news.png" border="0"></a><br><br><a href="?subtopic=shopadmin&action=deleteoffer&id='.$shop['id'].'"><img src="'.$layout_name.'/images/news/delete_news.png" border="0"></a></td>'; } $main_content .= '</td></tr></TABLE><br><form action="?subtopic=shopadmin" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form>'; } if($action == "deleteoffer") { $id = (int) $_REQUEST['id']; $SQL->query('DELETE FROM z_shop_offer WHERE id = '.$id.' LIMIT 1;'); $main_content .= '<center>Shop offer has been deleted.</center><br><center><form action="?subtopic=shopadmin&action=viewoffer" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form></center>'; } if($action == "editoffer") { $id = (int) $_REQUEST['id']; $shopoffers = $SQL->query('SELECT * FROM z_shop_offer WHERE id = '.$id.' LIMIT 1;'); foreach($shopoffers as $shop) { $main_content .= '<form action="?subtopic=shopadmin&action=edited&id='.$id.'" method="post" ><table border="0"><tr><td align="center" ><b>Points:</b></td> <td><input type="textbox" name="shop_points" maxlenght="7" value="'.$shop['points'].'" style="width: 70px"></td></tr>'; if($shop['offer_type'] == 'container'){ $main_content .= '<tr><td align="center" ><b>Container ID:</b></td> <td><input type="text" name="shop_itemid1" maxlenght="7" value="'.$shop['itemid1'].'" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Count Container:</b></td> <td><input type="text" name="shop_count1" maxlenght="7" value="'.$shop['count1'].'" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Item ID:</b></td> <td><input type="text" name="shop_itemid2" maxlenght="7" value="'.$shop['itemid2'].'" style="width: 70px" ></td></tr> <tr><td align="center" ><b>Count Item:</b></td> <td><input type="text" name="shop_count2" maxlenght="7" value="'.$shop['count2'].'" style="width: 70px" ></td></tr>'; } if($shop['offer_type'] == 'item'){ $main_content .= '<tr><td align="center"><b>Item ID:</b></td> <td><input type="text" name="shop_itemid1" maxlenght="7" value="'.$shop['itemid1'].'" style="width: 70px" ></td></tr> <tr><td align="center"><b>Item Count:</b></td> <td><input type="text" name="shop_count1" maxlenght="7" value="'.$shop['count1'].'" style="width: 70px" ></td></tr>'; } if($shop['offer_type'] == 'pacc'){ $main_content .= '<tr><td align="center" ><b>Days:</b></td> <td><input type="text" name="shop_count1" maxlenght="7" style="width: 70px" ></td></tr>'; } $main_content .= '<tr><td align="center" ><b>Offer Type:</b></td> <td><input type="text" name="shop_offer_type" value="'.$shop['offer_type'].'" maxlenght="40" style="width: 200px" ></td></tr> <tr><td align="center" ><b>Offer Description:</b></td> <td ><textarea name="shop_offer_description" rows="2" cols="35">'.$shop['offer_description'].'</textarea></td></tr> <tr><td align="center" ><b>Offer Name:</b></td> <td><input type="text" name="shop_offer_name" value="'.$shop['offer_name'].'" maxlenght="40" style="width: 200px" ></td></tr> <tr><td><input name="submit" type="submit" value="Submit" /></form></td><td></td></tr></table>'; $main_content .= '<form action="?subtopic=shopadmin&action=viewoffer" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form>'; } } if($action == "edited") { $id = (int) $_REQUEST['id']; $shop_points = stripslashes(trim($_POST['shop_points'])); $shop_offer_type = stripslashes(trim($_POST['shop_offer_type'])); $shop_itemid1 = stripslashes(trim($_POST['shop_itemid1'])); $shop_count1 = stripslashes(trim($_POST['shop_count1'])); $shop_itemid2 = stripslashes(trim($_POST['shop_itemid2'])); $shop_count2 = stripslashes(trim($_POST['shop_count2'])); $shop_offer_description = stripslashes(trim($_POST['shop_offer_description'])); $shop_offer_name = stripslashes(trim($_POST['shop_offer_name'])); $SQL->query('UPDATE `z_shop_offer` SET `points` = '.$shop_points.', `itemid1` = '.$SQL->quote($shop_itemid1).', `count1` = '.$SQL->quote($shop_count1).', `itemid2` = '.$SQL->quote($shop_itemid2).', `count2` = '.$SQL->quote($shop_count2).', `offer_type` = '.$SQL->quote($shop_offer_type).', `offer_description` = '.$SQL->quote($shop_offer_description).', `offer_name` = '.$SQL->quote($shop_offer_name).' WHERE `id` = '.$id.';'); $main_content .= '<b><center>Shop offer successfully edited.</b><br><br><form action="?subtopic=shopadmin&action=viewoffer" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form><meta http-equiv="refresh" content="1;url=/?subtopic=shopadmin&action=viewoffer" />'; } if($action == "points") { $player = stripslashes(ucwords(strtolower(trim($_REQUEST['character'])))); $points = $_POST['points']; if(empty($player)) { $main_content .= '<form action="" method="post"><B>Enter Character Name:</B><input type="textbox" name="character"><br> <B>Enter Points Amount:</B><input type="textbox" name="points"><br><input type="submit" value="Submit"> </form></center><form action="?subtopic=shopadmin" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form>'; } else { $player_data = $SQL->query("SELECT * FROM `players` WHERE `name` = '".$player."';")->fetch(); $SQL->query("UPDATE `accounts` SET `premium_points` = `premium_points` + '".$points."' WHERE `id` = '".$player_data['account_id']."'"); $main_content .= '<b><center>'.$points.' Premium Points added to the account of <i>'.$player.'</i> !</b></center><br> <form action="?subtopic=shopadmin" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form>'; } } } else { $main_content .= 'Sorry, you have not the rights to access this page.'; } ?> Salve E Feche. Agora Va Em Sua Detabase E adicione Isso: ALTER TABLE `z_shop_offer` ADD `category` INT( 11 ) NOT NULL DEFAULT '1'; Quando Voçê for adicionar um iten ira aparecer a opçao, Category Ali Voçê Coloca 1 Para Aparecer Nos Itens, 2 Para Aparecer nos Addon Items, e 3 para aparecer em Others. Pronto. Bom Uso.1 ponto
-
Como Fazer Um Templo
EddyHavaiano reagiu a Caspita por um tópico no fórum
Templos. Bom, resolvi criar esse tutorial, sei que já tem um a respeito do tema, mas não é muito bom para ensinar os noobs inciantes. Nesse eu ensinarei o que é, a fazer e a detalhar um templo. O que é um templo? Alguém sabe? dou um ponto na média pra quem responder essa. Bom um templo é uma construção sagrada, mágica muitas vezes (no caso do jogo), pode ser um local de adoração e sempre é feito em tributo à algum deus, deusa ou semi-deus. Um templo não apenas para o retardado jogador renasçer, o templo é a referência que ele tem a respeito do mapa, mas eles não podem ser feito como local de ressureição apenas, também podem ser somente para encher-liguiça exposição. Também pode haver templos de adoração demoniaca (caverna e 4458~) Os pisos de um templo devem ser combinados, para que fiquem bonitos e para que tenha um piso central no qual o jogador renasça ou seja criado. Um templo deve ter uma história a respeito de sua mágica (peidei). Ponto para o senhor Caspita, respondeu certinho a resposta, esse é um dos que passam no vestibular. Brigado professor Caspita meu numero é o 8. Exemplo de combinação de pisos (para templos em cidades comuns): Próximo passo é a estrutura. A estrutura deve ser bonita, agradavél e ainda deve ser harmoniosa, para deixar o templo com um tom de agradavel e sagrado. O local do templo muda o estilo dele e também muda os deuses, nesse tutorial não vamos construir todos os tipos de templos (peidei de novo). A estrutura de um templo (um exemplo é claro): 1º A sala principal (onde o jogador renasçe): 2º A sala secundária (onde os jogadores vagabundos que não querem caçar ficam conversando): Agora seu templo está bem estruturado, vamos aos detalhes (na ordem do RAW Pallet). -* Arquitetura: ~ Pilares - IDs:- 1514, 1515, 1549, 1551, 3766, 3767, 8538, 8539, 8540, ~ Musgos de parede - IDs:- 1909 até 1944. OBS: Nunca coloque grades no seu templo, fica horrivel! (puts, acho que eu devo ter comido algo podre) -* Exterior: ~ Fontes de água:- 1360 até 1367, 1370 até 1378. ~ Estatuas:- 1442 até 1478, 8834 até 8837, 8777 até 8780, 8615, 8616, 8625, 8626, 3697 até 3710, 3715 até 3742, 9597 até 9599. ~ Coal basin:- (acho que não precisa colocar os ids) ~ Musgos de chão:- também não precisa colocar os ids -* Hangables: É possivel usar todos os items dessa divisão (na raw pallet) em um templo. [exceto bloodstains] -* Interior: Apenas tapetes, flores e estantes de livros são possiveis de usar nessa divisão. -* Nature: Pedrinhas pequenas, alguns tufos de grama e aquelas trepadeiras. -* Others: Apenas as rachaduras, as fontes e os detalhes de gelo, e os brilhosinhos pra dar um ar de sagrado. Ai está seu templo :positive: Tutorial 100% de minha autoria. Mapas 100% de minha autoria. Até o próximo esterco tutorial1 ponto -
Indice: Introdução Downloads Tutorial: Adicionando efeitos Adicionando efeitos no servidor Adicionando monstros Adicionando Itens Problemas possívels Extras Links úteis introdução Neste tuto você aprenderá a base de como modificar seu jogo! Adicionando novos efeitos; Novos monstros; Novos itens. E como configur=a-los no servidor. Downloads Procure aqui as Sources que deseja usar. Tibia Dat Editor Créditos a Demonic Applications Otitemeditor 8.54 caso queira outra versão, procure. Dev C++-->http://www.speedysha...gottenDevCpp.7z Tutorial Efeitos Vamos usar o DatEditor agora: clique na pastinha e navegue até o '.spr' e o '.dat' do seu cliente, escolha 780 ao lado do open, e clique em 'Open'. [File/New/Effect] Abriu um espaço em branco nas lista de efeitos. [import/Sprites] Navegue até as imagens e selecione todas; Se aparecer algo como "Overwrite" clique em "no". Agora iremos configurar os efeitos; E para isso devemos saber de algumas coisas. Quantas animações tem meu efeito?. Qual o tamanho do meu efeito: Em [sprite information/Animation] coloque a quantidade de animações do seu efeito. Em [sprite information/Width&Height] ajuste o tamanho da animação. Agora terá de arrumar as direções. tome outro efeitos como base para arrumar as setas. Depois de pronto salve [clique no disquete] --PARTE NÃO ALTERADA DIA 22/04/2011 Efeitos no Servidor continuando... Agora vamos mecher com as sources do servidor, com essas sources que se faz aquele executável que faz seu servidor rodar. Com o Dev C++, abra o projeto, '0.3.4pl2'/dev-cpp/TheForgottenServer.dev na parte da esquerda vá até 'const.h' vá até isso NM_ME_BATS = 0x42, //66 copie a linha e adicione uma linha a mais, renomeie e mude os números. nesta linha mude tb- NM_ME_LAST = NM_ME_BATS, bote o ultimo efeito adicionado, como na imagem. -- agora vamos para 'tools.cpp' na coluna da esquerda. copie novamente uma linha e adicione, mudando como na imagem, a perte em vermelho, é tipo um apelido, pode ser minúsculo tb. mas não esqueça de botar virgula, apenas no ultimo que não.como na imagem. salve os dois arquivos é claro. 'arquivos/salvar todos' Agora esta na hora de compilar. 'executar/compilar' ou Ctrl+f9 espere, até aparecer 'done'. depois de compilado, vai na pasta '0.3.4pl2/dev-cpp' e pegue seu executável-'TheForgottenServer.exe' copie, ou recorte e cole na pasta do seu servidor... agora na pasta do seu servidor vá em data/lib/constant--se seu servidor não tem 'lib' vá em data/global procure por 'CONST_ME_BATS' faça novamente o processo de cópia, mudando o número.e mudando tb o CONST_ME_LAST faça isso botando o mesmo nome que pôs no const.h, no Dev C++. bom agora sim acabou... --FIM DA PARTE NÃO ALTERADA DIA 22/04/2011 Adicionando Monstros 1ª Parte: adicionando monstros em 32x32 [File/New/Monster] Abriu um espaço em branco. [import/Sprites] Navegue até as sprites do seu monstro e escolha todas as imagens, se aparecer algo sobre "Overwrite" clique em 'no'. [sprite information/Animation] Coloque 3, pois é o pé D na frente, pé E na frente e 2 pés juntos. [sprite information/X Div] Coloque 4 (acredito que seja a quantidade de lados). Se for um bixo que voe(ou que precise ficar mudando de posição mesmo sem andar marque a opção:[item Stats/[V]Idle Animated] Para ajustar a posição dos monstros mecha nas flechas em baixo de "Blend Layers". --Pegue o nº do monstro em [Extra/Itemtype] Pronto seu monstro está pronto para ser posto em batalha! pode usá-lo agora. para poder usar o comando de trocar de outfit e que pegue o seu novo monstro, vá em [data/talkactions/scripts/newtype.lua], verá uma parte parecida com está: o quem a fazer é mudar a parte onde tem o '351', só acresentar 1 a cada monstro adicionado. Itens !!!!!!!!! Vou arrumar depois quando resolver um problema com otitemeditor versão para 8.54 até lá vai ficar incompleto. !!!!!!!!! .::Bônus::. Para efetios que não sejam de apenas 1 SQM em width-largura bote 2 em heigth-altura bote 2 tb assim seu efeito será maior. mas a área de contato, ou ataque será apenas no quadrado de baixo, e a ordem fica assim, na composição dos efeitos-itens-criaturas-shots Possíveis problemas Para Adicionar as sprites aos efitos/items/mosntros, basta arrastá-la da janela [sprites] para un espaço em cima de onde esta escrito "Blend Layers" Ao selecionar os arquivos para editar deu algum problema -> troque a "versão" ao lado do open[780/760]. O programa para de funcionar do nada, então salve seu projeto de tempo em tempo. A sprite não aparece quando você navega até o seu diretório -> troque a extensão do arquivo a ser procurado. Ao importar sprites elas ficam "bugadas" -> bote em outra extensão. PNG ou BMP. As janelas não aparecem -> vá em window e ative as janelas que deseja. Links úteis: compilando servidor compilando servidor@2 Acho que acabo! perguntas?1 ponto
-
[Action] Magic Teleport'
MateusAlexandro reagiu a MarcelloMendes por um tópico no fórum
Bom galera, vim trazer pra vcs um script criado POR MIM, (é um dos meus primeiros)... E reparado por Kydrai... ' Ele e um 'Teleport Magico' , que quando usado, irá teleportar o player para sua 'townId' ou para cidade principal, onde vc colocará as cordenadas... Então Vamos la: --[[ SCRIPT BY: MarcelloMkez ]] function onUse(cid, item, pos, item2, topos) config = { ptemp ="no", --[[ Teleportar para ciade principal "yes ou no". ]] townp ="yes", --[[ Teleportar para Cidade onde o player mora, "yes ou no". ]] rmvitem ="yes", --[[ Remover item quando for usado? "yes ou no". ]] vip ="no", --[[ Precisa ser Premium Account para usar o item? "yes ou no" ]] batlle ="yes", --[[ Precisa estar sem Batlle para usar o item? "yes ou no "]] possibilidade = 10 , --[[ Possibilidade do player ser teleportado em porcentagem. ]] princ = {x=100, y=40, z=7}, --[[ Posição da Cidade Principal. ]] pz ="yes" --[[ Precisa estar em Protection Zone para Usar o Magic Teleport? "yes ou no"]] } local p = getPlayerTown(cid) local townpos = getTownTemplePosition(p) local cityname = getTownName(p) local chance = math.random(1, 100) --[[ de 1 a 100 % de chance, Não mude. ]] local msgp ="~ "..getPlayerName(cid).." Foi Teleportado para Cidade Principal. ~" local msgt ="~ "..getPlayerName(cid).." Foi Teleportado para "..cityname..". ~" local fail ="'O Teleport Falhou.'" if(config.vip =="yes") and not isPremium(cid) then doPlayerSendCancel(cid, "Você precisa ser Premium Account Para usar o Teleport Magico.") return 1 elseif (config.batlle == "yes") and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then doPlayerSendCancel(cid, "Você precisa estar sem o batlle para usar o Teleport Magico.") return 1 elseif (config.pz =="yes") and (getTilePzInfo(getCreaturePosition(cid)) == FALSE) then doPlayerSendCancel(cid, "Você precisa estar em Protection Zone para usar o Teleport Magico.") return 1 elseif (config.ptemp =="yes" and config.townp =="yes") then doPlayerPopupFYI(cid, "'ERROR': Não é Possivel teleportar para duas cidades ao mesmo tempo.") return 1 --[[ Menssagem quando o player marcar 'yes' para as duas opçoes de teleport. ]] elseif chance >= 1 and chance <= config.possibilidade then doCreatureSay(cid, fail, TALKTYPE_ORANGE_1) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return 1 elseif(config.ptemp == "yes") then doTeleportThing(cid, config.princ) doCreatureSay(cid, msgp, TALKTYPE_ORANGE_1) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_RED) return 1 elseif(config.townp == "yes") then doTeleportThing(cid, townpos) doCreatureSay(cid, msgt, TALKTYPE_ORANGE_1) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_RED) return 1 end if(config.rmvitem =="yes") then doRemoveItem(item.uid, 1) end return TRUE end Tag: <action itemid="2349" script="teleportmagico.lua"/> Vermelho: Id do item quer vc quer usar como Teleport Magico. Bom como ta explicando ali no script... Qualquer duivida poste e irei ajuda-los... Muito Obrigado Galera Espero que gostem!!! o/1 ponto -
Construções No Tibia: Templos, Telhados, Casas, Detalhes, Etc.
furlanetto reagiu a Alissow por um tópico no fórum
Atenção! Este tópico contém muitas (25 imagens = 41.559.864 bits) imagens, algumas em tamanho G, então se alguma delas não carregar, atualize a pagina no seu navegador. Obrigado pela atenção. Imagem por: Kaonic [Construções] Construções no Tibia são como na vida real, não se pode viver sem elas. No inicio o jogador nasce no templo, que é talvez o lugar mais importante e visitado do servidor, todos passam por ele no começo e é onde você renasce depois de morrer, também é onde você foge daquele Power abuser fdpfdpfdpfdp. Em segundo lugar na escala de importância vem o Depot, é onde você guarda seus itens mais preciosos (se você não tiver uma casa), onde você faz aquela feirinha maneirinha pra vender seus itens. Temos também as casas, que, com camas, servem pra regeneração fácil e rápida de stamina ou soul, servem pra guardar seus itens, fazer inveja em quem você odeia, brincar de casa da Barbie, etc. Enfim, construções no Tibia são mesmo importantes. Templos: Começaremos pelo, na minha opinião, o lugar mais importante de um servidor. Como você já sabe, templos são aqueles lugares sagrados onde os players nascem e renascem. Claro que esta não é uma construção, mas templos não precisam ser necessariamente quadrados, simétricos e "sem vida". A historia do templo acima, por exemplo, diz que no passado ele era um "templo de verdade", mas devido a ataques simultâneos de bombas atômicas Magos, o templo foi destruído, e mesmo assim os habitantes não quiseram abandoná-lo, por ser um templo sagrado e possuidor de forças sobrenaturais. Templos e construções são diferentes em cada tipo de cidade, cidades desérticas tendem a ter templos com paredes no estilo "egypt wall" e "egypt Stone wall", cidades em selvas usam templos de bambu, as construções em cidades de gelo possuem paredes de madeira, e assim sucessivamente. Dica: Em cidades pequenas, templos devem ser pequenos, e em cidades grandes, templos devem ser grandes, respectivamente. Este é o templo do popular Alissow OTS, como podem ver é um templo simples e totalmente retangular, mas mesmo assim não é feio – pelo menos eu acho que não é. Vocês aprenderão mais sobre construções quadradas um pouco mais abaixo. Casas: As casas precisam ter: - Pilares, para garantir o sustento da construção, como está indicado em vermelho. Isto não é obrigatório, apenas se tiver algo "solto por ai" que necessite alguma sustentação. - Janelas nos telhados e nas paredes – indicação em verde - dão um charme a mais na sua casa, além de permitir a visualização dos players de dentro e fora da mesma. - Uma porta, logicamente, para o player entrar e sair da casa. - E por ultimo enfeite da maneira que quiser, sempre respeitando a coerência (Leia Detalhes mais abaixo). Telhados: Em sua construção você pode usar diversos tipos de telhados, em casas pequenas eu aconselho o seguinte tipo de telhado: Em construções maiores, é aconselhável usar um telhado baixo, pois o alto pode ficar alto demais, resultando num mapa feio. Também é válido utilizar pedras e plantas nos telhados. Detalhes: Detalhes em construções são uma coisa muito simples, geralmente usa-se tochas, janelas, portas, musgos, flores, plantas, etc. OBS: Tochas em paredes de madeira são prejudiciais à saúde das mesmas, por isso o ministério da saúde recomenda o uso de lâmpadas. Veja alguns exemplos de detalhes nas construções: Observe que nesta casa temos plantas nas paredes, plantas no telhado, além de musgos nas paredes e uma calha com um barril de água, muito comum em casas de toda parte do mundo. Rçrç Nesta, temos um contraste de paredes, além de musgos e chaminés nos telhados. Construções Grandes: Os castelos (eu adoro esse mapa) também fazem parte do mundo tibiano, os reinos precisam ter uma fortaleza que sirva de uma moradia digna para o seu rei e seus seguidores. Observe como as paredes foram usadas. Tamanhos. Eu vejo bastante gente fazendo casas extremamente gigantescas, quadradas ou curvas e com apenas uma porta e uma janela. A não ser que você queira criar monstros lá dentro, 13x13 SQMs já é grande o suficiente para uma casa grande e 6x7 para uma casa normal. Se você não sabe o que é SQM, preste atenção: SQM significa Square Metre, que em português, significa Metro quadrado. Passando para o Tibia, um player ocupa um SQM, assim como um Demon (ou qualquer outro monstro) também ocupa um SQM. Um pedaço de chão ou uma parede Também possuem 1 SQM. Uma casa grande no tamanho certo. Uma casa grotesca do jeito totalmente errado. Quadrado X Curvo: Quando se fala em construções quadradas a primeira coisa que vem à cabeça é que é um mapa muito simples, feio e... quadrado (what?), o que não é verdade. Construções curvas atrapalham a jogabilidade, acompanhe. Mapa 1: A primeira vista você poderá dizer que é um mapa muito simples, feio e quadrado, continue acompanhando. Mapa 2: Qual dos dois mapas é mais bonito? Qual deles suporta mais items? Com certeza é a casa quadrada certo? Por isso pense bem antes de querer fazer algo "incomum". Isso não quer dizer que deve-se fazer tudo quadrado, algumas curvinhas às vezes também deixam um mapa bonito: Aplicando a "técnica do olha e faz" também é possível fazer lindas construções e com formas diferentes. Observe: Depois: É certo que um servidor sem construções não funcionará como deveria, ele ficará totalmente incompleto, os players precisam de um lugar bonito pra renascer, precisam de um depósito seguro para guardar seus items, precisam de casas para viver e de qualquer forma essas construções precisam ser bem feitas, seja para atrair o publico ou para simplesmente mostrar seu trabalho. ______________________________________________________________________________ Considerações finais: Os mapas não ficaram muito beeem feitos, alguns deles serviram apenas de demonstração. Gostou do artigo? Deseja criticar? Elogiar? Comente1 ponto -
Kreuus Otserv V 1.0 SEM DEBUGS Nova versão ;D Mapa propio Criado por mim! KreuusOT@hotmail.com Meadiciona.com/kreuus Gostou? entre na comunidade! do Sv Canal youtube! Entre e aprenda jogar no mapa Informações Versão V 0.10 19/02/2010 Versão V 0.20 02/03/2010 Versão V 1.00 09/07/2010 Account do ADM 56/56 ScreenShots do Mapa As imagens demoram para caregar pois a qualidade e impecavel Update V 0.20 Mini-mapa Update outifit e potions! Download do Kreuus V 1.0 4 shared ;D Clique ake! Scan Livre de virus! Link akee. Link pra baixa o remeres aqui! -> Aqui! <- Creditos AdminKreuus LeozeraRox Shynzo Fezzin Comedinhasss Anti-nuker • Ele e ativado sempre quando o ot esta online • Não precisa mexe e automatico! • Thanks comedinhas ;D Bom pessoal postem oque acham, e se achar bug reporte para um de meus contatos ou aqui em baixo! Videos! http://www.youtube.com/watch?v=1PzNMstCPek http://www.youtube.com/watch?v=EyFd4-OiGSQ + Pits of Inferno Link. Rep +1 ponto
-
I aew galera do :XTibia_smile: to akew pra apresenta uma spells mto loka feita por min! Script code: (spells/script/...) local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HEARTS) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_HEARTS) setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat5 = createCombatObject() setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat5, COMBAT_PARAM_EFFECT, CONST_ME_HEARTS) setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat6 = createCombatObject() setCombatParam(combat6, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat6, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat6, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat7 = createCombatObject() setCombatParam(combat7, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat7, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat7, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat8 = createCombatObject() setCombatParam(combat8, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat8, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat8, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat9 = createCombatObject() setCombatParam(combat9, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat9, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat9, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat10 = createCombatObject() setCombatParam(combat10, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat10, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat10, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat11 = createCombatObject() setCombatParam(combat11, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat11, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat11, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat12 = createCombatObject() setCombatParam(combat12, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat12, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat12, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat13 = createCombatObject() setCombatParam(combat13, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat13, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat13, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat14 = createCombatObject() setCombatParam(combat14, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat14, COMBAT_PARAM_EFFECT, 27) setCombatFormula(combat14, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat15 = createCombatObject() setCombatParam(combat15, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat15, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat15, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat16 = createCombatObject() setCombatParam(combat16, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat16, COMBAT_PARAM_EFFECT, CONST_ME_SOUND_PURPLE) setCombatFormula(combat16, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat17 = createCombatObject() setCombatParam(combat17, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat17, COMBAT_PARAM_EFFECT, CONST_ME_HEARTS) setCombatFormula(combat17, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat18 = createCombatObject() setCombatParam(combat18, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat18, COMBAT_PARAM_EFFECT, CONST_ME_FIREWORK_RED) setCombatFormula(combat18, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat19 = createCombatObject() setCombatParam(combat19, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat19, COMBAT_PARAM_EFFECT, 27) setCombatParam(combat19, COMBAT_PARAM_CREATEITEM, 1492) setCombatFormula(combat19, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) local combat20 = createCombatObject() setCombatParam(combat20, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat20, COMBAT_PARAM_EFFECT, 27) setCombatParam(combat20, COMBAT_PARAM_CREATEITEM, 1685) setCombatFormula(combat20, COMBAT_FORMULA_LEVELMAGIC , -1.3, -9, -1.2, -10) arr1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr2 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr3 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 2, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr4 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr5 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr6 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr7 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 2, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr8 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr9 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr10 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr11 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 2, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr12 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr13 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr14 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr15 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 2, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr16 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr17 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, } arr18 = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } arr19 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1}, {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1}, {0, 1, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 0, 0, 1}, {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1}, {1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } arr20 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1}, {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1}, {0, 1, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 0, 0, 1}, {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1}, {1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) local area3 = createCombatArea(arr3) local area4 = createCombatArea(arr4) local area5 = createCombatArea(arr5) local area6 = createCombatArea(arr6) local area7 = createCombatArea(arr7) local area8 = createCombatArea(arr8) local area9 = createCombatArea(arr9) local area10 = createCombatArea(arr10) local area11 = createCombatArea(arr11) local area12 = createCombatArea(arr12) local area13 = createCombatArea(arr13) local area14 = createCombatArea(arr14) local area15 = createCombatArea(arr15) local area16 = createCombatArea(arr16) local area17 = createCombatArea(arr17) local area18 = createCombatArea(arr18) local area19 = createCombatArea(arr19) local area20 = createCombatArea(arr20) setCombatArea(combat1, area1) setCombatArea(combat2, area2) setCombatArea(combat3, area3) setCombatArea(combat4, area4) setCombatArea(combat5, area5) setCombatArea(combat6, area6) setCombatArea(combat7, area7) setCombatArea(combat8, area8) setCombatArea(combat9, area9) setCombatArea(combat10, area10) setCombatArea(combat11, area11) setCombatArea(combat12, area12) setCombatArea(combat13, area13) setCombatArea(combat14, area14) setCombatArea(combat15, area15) setCombatArea(combat16, area16) setCombatArea(combat17, area17) setCombatArea(combat18, area18) setCombatArea(combat19, area19) setCombatArea(combat20, area20) local function onCastSpell1(parameters) doCombat(parameters.cid, parameters.combat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, parameters.combat2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, parameters.combat3, parameters.var) end local function onCastSpell4(parameters) doCombat(parameters.cid, parameters.combat4, parameters.var) end local function onCastSpell5(parameters) doCombat(parameters.cid, parameters.combat5, parameters.var) end local function onCastSpell6(parameters) doCombat(parameters.cid, parameters.combat6, parameters.var) end local function onCastSpell7(parameters) doCombat(parameters.cid, parameters.combat7, parameters.var) end local function onCastSpell8(parameters) doCombat(parameters.cid, parameters.combat8, parameters.var) end local function onCastSpell9(parameters) doCombat(parameters.cid, parameters.combat9, parameters.var) end local function onCastSpell10(parameters) doCombat(parameters.cid, parameters.combat10, parameters.var) end local function onCastSpell11(parameters) doCombat(parameters.cid, parameters.combat11, parameters.var) end local function onCastSpell12(parameters) doCombat(parameters.cid, parameters.combat12, parameters.var) end local function onCastSpell13(parameters) doCombat(parameters.cid, parameters.combat13, parameters.var) end local function onCastSpell14(parameters) doCombat(parameters.cid, parameters.combat14, parameters.var) end local function onCastSpell15(parameters) doCombat(parameters.cid, parameters.combat15, parameters.var) end local function onCastSpell16(parameters) doCombat(parameters.cid, parameters.combat16, parameters.var) end local function onCastSpell17(parameters) doCombat(parameters.cid, parameters.combat17, parameters.var) end local function onCastSpell18(parameters) doCombat(parameters.cid, parameters.combat18, parameters.var) end local function onCastSpell19(parameters) doCombat(parameters.cid, parameters.combat19, parameters.var) end local function onCastSpell20(parameters) doCombat(parameters.cid, parameters.combat20, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var, combat1 = combat1, combat2 = combat2, combat3 = combat3, combat4 = combat4, combat5 = combat5, combat6 = combat6, combat7 = combat7, combat8 = combat8, combat9 = combat9, combat10 = combat10, combat11 = combat11, combat12 = combat12, combat13 = combat13, combat14 = combat14, combat15 = combat15, combat16 = combat16, combat17 = combat17, combat18 = combat18, combat19 = combat19, combat20 = combat20 } addEvent(onCastSpell1, 100, parameters) addEvent(onCastSpell2, 300, parameters) addEvent(onCastSpell3, 500, parameters) addEvent(onCastSpell4, 700, parameters) addEvent(onCastSpell5, 900, parameters) addEvent(onCastSpell6, 1100, parameters) addEvent(onCastSpell7, 1300, parameters) addEvent(onCastSpell8, 1500, parameters) addEvent(onCastSpell9, 1700, parameters) addEvent(onCastSpell10, 1900, parameters) addEvent(onCastSpell11, 2100, parameters) addEvent(onCastSpell12, 2300, parameters) addEvent(onCastSpell13, 2500, parameters) addEvent(onCastSpell14, 2800, parameters) addEvent(onCastSpell15, 3200, parameters) addEvent(onCastSpell16, 3800, parameters) addEvent(onCastSpell17, 4000, parameters) addEvent(onCastSpell18, 4400, parameters) addEvent(onCastSpell19, 4800, parameters) addEvent(onCastSpell20, 5000, parameters) end Dps abra spells.xml copie i cole o seguinte code: <instant name="love" words="exevo love" lvl="100" mana="495" prem="1" direction="0" exhaustion="1000" needlearn="0" script="attack/love.lua"> <vocation name="Knight" /> <vocation name="Elite Knight" /> <vocation name="sorcerer" /> <vocation name="master sorcerer" /> <vocation name="druid" /> <vocation name="elder druid" /> <vocation name="paladin" /> <vocation name="royal paladin" /> I é isu aew... :smile_positivo: lembrando q n eh exatamente spell pra combat, eh mais um "spell art" :appearance: screen shot: Print By DarkRonan1 ponto
-
[Spell] [8.5+] Exevo Gran Mas Mort
warcraftzz reagiu a miter por um tópico no fórum
Olá XTibianos, Resolvir criar uma magia para que seu OT fique mais legal, somente Sorcerers e Druids podem usar. Agora vamos aos Scripts: Vá na pasta data/spells/attack, copie qualquer arquivo, cole e renomei-o para "fear" (sem aspas), abra-o e cole isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2.2, -40, -2.2, 0) local area = createCombatArea(AREA_CROSS5X5) setCombatArea(combat, area) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") local condition = createConditionObject(CONDITION_CURSED) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 7, 2000, -80) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Agora abra a pasta data\spells e abra o arquivo "spells.XML", em "instant spells" adicione o seguinte codigo: <instant name="Fear of the Dark" words="exevo gran mas mort" lvl="100" maglv="40" mana="1200" prem="1" exhaustion="1500" needlearn="0" script="attack/fear.lua"> <vocation name="Sorcerer"/> <vocation name="Master Sorcerer"/> <vocation name="Druid"/> <vocation name="Elder Druid"/> </instant> Pronto, agora você tem aquela magia simples e que todo OT gostaria de ter, e que vai ajudar muito os mages do seu OT. Ahhh! mais algumas coisa esqueci de dizer, ela fica com efeito de Death tirando de "80". Lembre-se para usa-la, basta apenas digitar exevo gran mas mort. Até a próxima, fiquem com Deus. Magia 100% by Miter1 ponto -
[Arquivado]Criando Meu Curriculo
Temperance reagiu a Voxnot por um tópico no fórum
Novamente estava em duvida sobre onde postar, preferia na seção de "Formação de Equipes", mas la é para formar um equipe ^^. Vamos ao Tutorial... Currículo Índice 1- Introdução 2- Montando o Currículo * Itens Curriculares 3- Esquema Final * Exemplo 4- Finalização 5- Links 1- Introdução Um bom currículo com certeza abrira boas vagas para você. Com este tutorial você aprendera com usufruir de um bom currículo para ter sucesso em uma pré-seleção. Vamos ao Tutorial... 2- Montando o currículo Em seu currículo devem ser colocadas as principais características suas, como por exemplo: o que você sabe fazer, apresentação, comentários, dentre outros (mostrando sempre competência e interesse). Não exagere se não seu currículo fica com um tom apelativo, o que é péssimo para uma primeira impressão. -> Itens Curriculares: (Lembrando que o seu currículo esta sendo modificado para corresponder ao Tibia, então pularemos algumas partes que poderiam ser encontradas nos currículo para empresas reais). * Nome: Extremamente necessário, pois se trata de você mesmo =) * Nick: Opcional, emita este detalhe somente quando for admitido na equipe. * E-mail Obrigatório, é o meio que o contratante tem para lhe encontrar. * Função: Coloque alem de sua função, um pequeno texto como: “A escolhi, pois é a que retrata melhor o meu trabalho profissional”. * Tempo Livre: Mentir nesta parte é quase fatal, a sinceridade pode lhe render pontos na entrevista. * Apresentação: Diga como você se sente concorrendo à vaga, por que a escolheu dentre tantas e por que pretende se dedicar a ela. * Auto Avaliação: Novamente, lhe digo: “Seja sincero”, um bom administrador observara com bons olhos seu gesto de honestidade. * Nota Para seu Trabalho (de 5 á 10): Ainda faz parte da auto-avaliação é somente um extra, para saber se você estaria mentindo, caso seu trabalho seja ruim. * Comentário: Bom, esta é a melhor parte. Este quesito visa saber o que você tem em mente e quais são, de uma forma superficial, seu sonhos, comece falando de seu trabalho profissional, seja sincero, mas não pense duas vezes em exagerar um pouco, abuse dos adjetivos, mas sempre pense no que este comentário pode lhe render (tanto para positivo, quanto para negativo). Tente falar também de seus planos para a equipe, diga algo que possa chamar a atenção do contratante. OBSERVAÇÃO: Erro de ortografia e gramática são indiscutíveis, então leia bem antes de postar. Uma boa dica é usar o corretor do Word, para que você tenha certeza quanto à escrita das palavras. 3- Esquema Final Exemplo de currículo, já preenchido: Nome: Thomas; Nick: --; E-mail: tutorialsobrecurriculo@hotmail.com; Função: Escritor, “Sei me expressar corretamente e manipulo muito bem as palavras”; Tempo livre: 3 horas diárias; Apresentação: Não sou como uma pessoa qualquer, estou aqui para mostrar o meu valor quanto ao meu ser profissional, e quero junto de sua equipe ser bem sucedido. Auto- Avaliação: Crio e escrevo estórias perfeitamente, manipulo as palavras de acordo com o contexto, tenho como característica: mistério, emoção, perfeição e competência. Nota para meu Trabalho: 9.0 Comentário: Acredito ser a pessoa ideal para esta vaga, sou dinâmico e flexível, sei me comportar dentre as pessoas e nos diversos ambientes e faço com extrema certeza o meu trabalho de forma competente e rápida. Sua equipe, ao meu ver, é bem organizada, tem como objetivo a diversão, mas sempre visando a parte operacional da mesma, será este o seu diferencial no mundo dos ATS que fará com que ela seja bem sucedida. 4- Finalização Espero ter ajudado. Extraia ao máximo as informações aqui contidas, podendo usa-las corretamente e da melhor forma possível para adquirir uma boa vaga dentre uma grande equipe. 5- Links Veja também: "Como contratar um novo membro" <a href="http://www.xtibia.com/forum/index.php?showtopic=70562" target="_blank">http://www.xtibia.com/forum/index.php?showtopic=70562</a> -------------------------------------------------------- x -------------------------------------------------------- Novamente vós lhe digo: "Este tutorial é de minha autoria" ATENCIOSAMENTE //VOXNOT1 ponto -
[8.60] War On Rookgaard 2 Team
evovando reagiu a Toridox4ever por um tópico no fórum
postei o distro e as dlls Agr o Server ta 100% (:1 ponto -
Não existe a coluna na database. Execute a query de acordo com o tipo de sua database: MySQL: ALTER TABLE `players` ADD `rep` INT( 11 ) NOT NULL DEFAULT '0'; SQlite: ALTER TABLE "players" ADD "rep" INT( 11 ) NOT NULL DEFAULT "0"; flw1 ponto
-
Cara a unica coisa que eu consegui faze foi isso Qualquer coisa da um toque ai1 ponto
-
Desculpe a demora, bom essa seção não é visitada por muitos por isso a demora. Caso queira adicionar algo me avise. se estiver satisfeito reporte o tópico ;D1 ponto
-
Cara eu fiz ai espero que goste... a imagem não era das melhores eu fiz oque eu consegui. qualquer coisa me avise. Tuto que você pediu Clique aqui1 ponto
-
O site Tibiopedia.pl está começando com suas atualizações. Melhorias técnicas foram feitas, e agora você pode conferir todo o site com tradução total para o Inglês! Também foi adicionado Tirinhas Cômicas e muito mais! Não fique desatualizado! Eles prometem mais novidades. Fonte: Tibia.com1 ponto
-
tente assim: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid -- Conversa Jogador/NPC if(msgcontains(msg, 'list')) then selfSay('Eu vendo {Ultrax Cometta Hat}, {Ultrax Cometta Armor}, {Ultrax Cometta Legs}, {Ultrax Cometta Boots}, {Cometta Blade}, {Cometta Axe}, {Cometta Club}, {Cometta Bow}, {Ultrax Cometta Shield}, {Ultrax Cometta Blade}, {Ultrax Cometta Axe}, {Ultrax Cometta Club}, {Ultrax Cometta Wand}, {Ultrax Cometta Rod}, e {Ultrax Cometta Bow}.Por Moedas VIP', cid) elseif(msgcontains(msg, 'ultrax cometta hat')) then selfSay('Voc\ê quer comprar Ultrax Cometta Hat por 100 VIP coins?', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'ultrax cometta armor')) then selfSay('Voc\ê quer comprar Ultrax Cometta Armor por 100 VIP coins?', cid) talkState[talkUser] = 2 elseif(msgcontains(msg, 'ultrax cometta legs') )then selfSay('Voc\ê quer comprar Ultrax Cometta Legs por 100 VIP coins?', cid) talkState[talkUser] = 3 elseif(msgcontains(msg, 'ultrax cometta boots')) then selfSay('Voc\ê quer comprar Ultrax Cometta Boots por 100 VIP coins?', cid) talkState[talkUser] = 4 elseif(msgcontains(msg, 'cometta blade')) then selfSay('Voc\ê quer comprar Cometta Blade por 50 VIP coins?', cid) talkState[talkUser] = 5 elseif(msgcontains(msg, 'cometta axe')) then selfSay('Voc\ê quer comprar Cometta Axe por 50 VIP coins?', cid) talkState[talkUser] = 6 elseif(msgcontains(msg, 'cometta club')) then selfSay('Voc\ê quer comprar Cometta Club por 50 VIP coins?', cid) talkState[talkUser] = 7 elseif(msgcontains(msg, 'cometta bow')) then selfSay('Voc\ê quer comprar Cometta Bow por 50 VIP coins?', cid) talkState[talkUser] = 8 elseif(msgcontains(msg, 'ultrax cometta shield')) then selfSay('Voc\ê quer comprar Ultrax Cometta Shield por 100 VIP coins?', cid) talkState[talkUser] = 9 elseif(msgcontains(msg, 'ultrax cometta blade')) then selfSay('Voc\ê quer comprar Ultrax Cometta Blade por 100 VIP coins?', cid) talkState[talkUser] = 10 elseif(msgcontains(msg, 'ultrax cometta axe')) then selfSay('Voc\ê quer comprar Ultrax Cometta Axe por 100 VIP coins?', cid) talkState[talkUser] = 11 elseif(msgcontains(msg, 'ultrax cometta club')) then selfSay('Voc\ê quer comprar Ultrax Cometta Club por 100 VIP coins?', cid) talkState[talkUser] = 12 elseif(msgcontains(msg, 'ultrax cometta wand')) then selfSay('Voc\ê quer comprar Ultrax Cometta Wand por 100 VIP coins?', cid) talkState[talkUser] = 13 elseif(msgcontains(msg, 'ultrax cometta rod')) then selfSay('Voc\ê quer comprar Ultrax Cometta Rod por 100 VIP coins?', cid) talkState[talkUser] = 14 elseif(msgcontains(msg, 'ultrax cometta bow')) then selfSay('Voc\ê quer comprar Ultrax Cometta Bow por 100 VIP coins?', cid) talkState[talkUser] = 15 -- Confirmação da Compra elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 6096, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 6095, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 3) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 5918, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 4) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 5462, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 5) then if(doPlayerRemoveItem(cid, 2157, 50) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 8932, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 50 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 6) then if(doPlayerRemoveItem(cid, 2157, 50) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 7388, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 50 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 7) then if(doPlayerRemoveItem(cid, 2157, 50) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 7437, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 50 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 8) then if(doPlayerRemoveItem(cid, 2157, 50) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 8858, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 50 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 9) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 11368, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 10) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 2408, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 11) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 8925, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 12) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 2444, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 13) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 2184, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 14) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 7735, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 15) then if(doPlayerRemoveItem(cid, 2157, 100) == true) then selfSay('Obrigado por comprar!', cid) doPlayerAddItem(cid, 8856, 1) talkState[talkUser] = 0 else selfSay('Voc\ê n\ão tem 100 VIP coins', cid) talkState[talkUser] = 0 end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())1 ponto
-
1 ponto
-
Subwat Editado 8.54/8.57
vinidias reagiu a HeartBreak por um tópico no fórum
mano esses comandos/magias estraga tudo ja: EDIT: Scan Resultado: 2/40 (5%)1 ponto -
affz, fui alertado 2x ? nem xinguei ninguem, pqp --' E la vamos nós denovo... ._. Pergunta sobre o projeto: O fly de vocês vai ser na base do void tbm? Cya!1 ponto
-
Embora eu n seja tão bom scripter axoq é so trocar "local costPerLevel = 300" por "local costPerLevel = 0"1 ponto
-
[Monster] Monstro Do Circo
giovanerox reagiu a giovane94 por um tópico no fórum
Nome: Monstro do Circo Tipo de Script: Monstro Versão: 8.4+ (acho que funciona nas anteriores versões desde a 8.1) Autor: Phoenix Monstro Do Circo Lembrando: O monstro é totalmente editável, edite ele a seu gosto e de acordo com seu servidor. Bom gente, como esse é o meu 2º monstro, aceito críticas, sugestões, elogios... =) 1º Passo: Abra a pasta aque se encontra na pasta data do seu OT. Copie e cole qualquer arquivo e renomeie para Monstro do Circo.xml Abra o arquivo, delete tudo e cole isso: 2º Passo: Salve e fexe. 3º Passo: Abra o arquivo monsters.xml que se encontra na pasta monster e adicione: Loot (O gold coin pode variar de 1 a 30) Espero que gostem, dúvidas sobre o monster? retire aqui mesmo1 ponto -
[8.60] Big List De Otserver
felipete9645 reagiu a Alissow por um tópico no fórum
Toridox4ever, já existe um tópico parecido na mesma área, agradeço a contribuição mas não é necessário mais que uma lista de servidores. Tópico fechado!1 ponto -
Pedido Fanbar!
Snooz reagiu a moskitinho por uma questão
Nunca fui de fazer Fan Bars pra ser sincero está é minha primeira, aguardo a resposta, se gostar de REP+1 ponto -
New Slayer Yurots [8.54 Ao 8.57]
danielbello1 reagiu a NockPlays por um tópico no fórum
@ Flavinho: New Slayer existe muito antes do baiak entao ele tem seus creditos... @Felipete9645: Cuidado isso é considerado como flood post do tipo, quando for postar, poste bugs ou oque ele pode melhorar... dessa vez passa mas que nao se repita...1 ponto -
[ Scripting Geral ] Chat Vip
glugluguga reagiu a MatheusGlad por uma questão
Script (data/talkactions/scripts): ------ Script By MatheusMkalo for Xtibia.com Users ------- local configs = { cobrar = "sim", ------ Use sim ou nao para cobrar price = 1000, storage = 5656 } function onSay(cid, words, param) nada = {" "} if table.isStrIn(param, nada) then return doPlayerSendTextMessage(cid, 22, "Voce precisa falar alguma coisa.") end if param == "" then return doPlayerSendTextMessage(cid, 22, "Voce precisa falar alguma coisa.") end if configs.cobrar == "nao" then if getPlayerStorageValue(cid, configs.storage) >= 1 then doBroadcastMessage("[VIP]"..getPlayerName(cid)..": "..param.."", MESSAGE_INFO_DESCR) else doPlayerSendTextMessage(cid, 22, "Voce nao é vip.") end elseif configs.cobrar == "sim" then if getPlayerStorageValue(cid, configs.storage) >= 1 then if doPlayerRemoveMoney(cid, configs.price) then doBroadcastMessage("[VIP]"..getPlayerName(cid)..": "..param.."", MESSAGE_INFO_DESCR) else doPlayerSendTextMessage(cid, 22, "Voce nao tem dinheiro para falar.") end else doPlayerSendTextMessage(cid, 22, "Voce nao é vip account.") end end return TRUE end Mude o numero que esta em storage = 5656 para o storage da sua vip. Tag (data/talkactions.xml) <talkaction words="/chatvip" event="script" value="NOMEDOARQUIVO.lua"/> @Edit Corrigi um bug pois se voce falasse /chatvip e desse espaços logo depois ia mandar uma mensagem em branco @Edit² Botei a opçao de cobrar ou nao cobrar e o preço da cobrança.1 ponto -
-1 pontos