Hola bueno he sacodo este sistema de elitepvpers y para los que alli no se enteran mucho las traigo aqui,alla vamos.
Está viendo el "sistema de la minería", que ha sido publicado recientemente.
¿Qué se puede hacer?
-> puedes comprar minas
-> Se puede ajustar la APN de trabajo para obtener más yang de las minas
-> Puede permitir a los jugadores trabajar, lo que da a ambas partes Yang
-> puedes cambiar un balance en el que se puede ver la cantidad de las minas
-> puedes tratar de atacar a otras minas
-> Se necesitan pases de plata y Yang para la apertura de una mina de plata
-> La búsqueda es fácilmente personalizable.
La quest:
quest mine begin
state start begin
function get_minecount(playername)
if playername == nil then
local playername = pc.get_name()
end
local curmines = mysql_query("SELECT mines FROM player.player WHERE player.`name`='"..playername."'")
return tonumber(curmines[1][1])
end
function get_working()
local result = mysql_query("SELECT working FROM player.player WHERE player.name='"..pc.get_name().."'")
return tonumber(result[1][1])
end
function buy_mine()
local curmine = mine.get_minecount()
mysql_query("UPDATE player.player SET mines=mines+1 WHERE player.`name`='"..pc.get_name().."'")
mysql_query("INSERT INTO player.mine_proto (owner) VALUES('"..pc.get_id(pc.get_name()).."')")
mysql_query("INSERT INTO player.mine_index (id) SELECT id FROM sh_player.mine_proto WHERE mine_proto.`owner`='"..pc.get_id(pc.get_name()).."'")
chat("Du hast eine Silbermine gekauft!")
chat("Du hast nun "..curmine.." Minen")
end
function calc_price()
local pricelist = { }
local curmine = mine.get_minecount()
local calcprice = curmine*100000000+100000000
table.insert(pricelist, calcprice)
table.insert(pricelist, 1)
return pricelist
end
function get_title(mine_id)
assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
local title = mysql_query("SELECT bezeichnung FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
return tostring(title[1][1])
end
function get_money(mine_id)
assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
local money = mysql_query("SELECT money FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
return tonumber(money[1][1])
end
function get_workers(mine_id)
assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
local workers = mysql_query("SELECT workers FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
return tonumber(workers[1][1])
end
function get_user_workers(mine_id)
assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
local result = {}
local title = mysql_query("SELECT user1,user2,user3,user4,user5 FROM player.mine_index WHERE mine_index.id='"..mine_id.."'")
for x = 1, 5, 1 do
table.insert(result, tonumber(title[1][x]))
end
return result
end
function get_income(mine_id)
assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
local workers = mine.get_workers(mine_id)
local workers2 = mine.get_user_workers(mine_id)
local counter = 0
for x = 1, 5, 1 do
if workers2[x] != 0 then
local counter=counter+1
end
end
local income1 = workers*10000
local income2 = counter*50000
return tonumber(income1+income2)
end
function update(mine_id)
assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
local last_update = mysql_query("SELECT last_update FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
local calcdif = get_time()-tonumber(last_update[1][1])
local abstand = math.floor(calcdif/3600)
if abstand == 0 then return end
local mine_income = mine.get_income(mine_id)
local give_money = mine_income*abstand
mysql_query("UPDATE player.mine_proto SET last_update='"..get_time().."' WHERE mine_proto.id='"..mine_id.."'")
mysql_query("UPDATE player.mine_proto SET money=money+'"..tonumber(give_money).."' WHERE mine_proto.id='"..mine_id.."'")
end
function get_mines(playername)
if playername == nil then
local playername = pc.get_name()
end
local mymines = mine.get_minecount()
local get_mines = mysql_query("SELECT id FROM player.mine_proto WHERE owner='"..pc.get_id(playername).."'")
local result = {}
for x = 1, mymines, 1 do
table.insert(result, tonumber(get_mines[1][x]))
end
return result
end
when 20092.chat."Die Silberminen" begin
local silberpass = 100079
local yangkosten = 100000000
say_title("Die Silberminen")
say("Hallo "..pc.get_name().."!")
say("Die Silberminen sind offen!")
say("Wenn du einen Pass dafür hast und")
say("die Aufwendungen bezahlen kannst,")
say("kannst du gerne eine Silbermine eröffnen!")
say_reward("Du brauchst einen Silberpass.")
say_reward("Du brauchst "..yangkosten.." Yang!")
local a = select("Silbermine eröffnen!", "Was ist das?", "Abbrechen")
if a== 3 then return end
if a == 2 then
say_title("Die Silberminen")
say("Wenn du eine Silbermine aufmachst,")
say("erhälst du immer wieder Yang. Das Yang")
say("werden deine Arbeiter in der Mine lagern.")
say("Du kannst es jederzeit abholen.")
say("Je mehr Arbeiter darin arbeiten, desto")
say("mehr Yang erhälst du.")
return
end
if pc.count_item(silberpass) == 0 then
say_title("Die Silberminen")
say("Du hast leider keinen Pass!")
say("Bitte finde einen Silberpass!")
say_item_vnum(silberpass)
return
end
if pc.get_gold() < yangkosten then
say_title("Die Silberminen")
say("Du hast leider nicht genug Yang.")
say("Komm wieder, wenn du genug hast.")
return
end
pc.change_gold(-yangkosten)
pc.remove_item(silberpass)
mine.buy_mine()
say_title("Die Silberminen -> Mine anlegen")
say("Du hast die Silbermine gekauft.")
say("Ab sofort kannst du sie verwalten!")
wait()
setstate(mines)
end
end
state mines begin
when login or enter begin
send_letter("Silberminen")
end
when button or info begin
local silberpass = 100079
say_title("Silberminen")
say("Was möchtest du tun?")
if pc.getqf("mines") == 5 then
local a = select("Silberminen", "Minen überfallen","Bilanz", "Abbrechen")
else
local a = select("Silberminen", "Minen überfallen","Bilanz", "Abbrechen", "Mine kaufen")
end
if a == 4 then
return
end
if a == 5 then
local pricer = mine.calc_price()
say_title("Silbermine kaufen")
say("Du möchtest eine Silbermine aufmachen?")
say("Das kostet dich "..pricer[1].." Yang.")
say("Zudem brauchst du noch:")
say(pricer[2].." Silberpässe.")
local a2 = select("Kaufen", "Abbrechen")
if a2 == 2 then return end
if pc.get_gold() < tonumber(pricer[1]) then say("Du hast nicht genug Yang!") return end
if pc.count_item(silberpass) < tonumber(pricer[2]) then say("Du hast nicht genügend Silberpässe!") return end
pc.change_gold(-tonumber(pricer[1]))
pc.remove_item(silberpass, tonumber(pricer[2]))
mine.buy_mine()
setskin(NOWINDOW)
return
end
if a == 3 then
local getmines = mine.get_mines()
local moneymines = {}
local incomemines = {}
for x = 1, table.getn(getmines), 1 do
mine.update(getmines[x])
table.insert(moneymines, mine.get_money(tonumber(getmines[x])))
table.insert(incomemines, mine.get_income(tonumber(getmines[x])))
end
local endincome = 0
local endmoney = 0
for x = 1, table.getn(moneymines), 1 do
local endincome = endincome+incomemines[x]
local endmoney = endmoney+moneymines[x]
end
say_title("Silberminen -> Bilanz")
for x = 1, table.getn(getmines), 1 do
say("Einkommen "..mine.get_title(getmines[x])..": "..incomemines[x])
say("Yang "..mine.get_title(getmines[x])..": "..moneymines[x])
say("---")
end
say("---")
say("Kumuliertes Einkommen: "..endincome)
say("Kumuliertes Yang: "..endmoney)
return
end
if a == 1 then
local getmines = mine.get_mines()
local moneymines = {}
local incomemines = {}
for x = 1, table.getn(getmines), 1 do
mine.update(getmines[x])
table.insert(moneymines, mine.get_money(tonumber(getmines[x])))
table.insert(incomemines, mine.get_income(tonumber(getmines[x])))
end
for x = 1, table.getn(getmines), 1 do
say_title(mine.get_title(getmines[x]))
say("Einkommen: "..incomemines[x])
say("Yang: "..moneymines[x])
say("Arbeiter: "..mine.get_workers(getmines[x]))
say("Beschäftigte Arbeiter:")
local userworkers = mine.get_user_workers(getmines[x])
local counter = 0
for y = 1, table.getn(userworkers), 1 do
if userworkers[y] != 0 then
local counter = counter+1
end
end
for y = 1, counter, 1 do
say(" - "..pc.get_name_by_id(userworkers[y]))
end
local b = select("Auszahlen", "Arbeiter feuern", "NPC-Arbeiter verändern", "Fertig")
if b == 1 then
say_title("Auszahlen")
say("Wie viel möchtest du auszahlen?")
local c = input("")
if c == "" or c == 0 then return end
local c = tonumber(c)
if c < 0 then return end
if moneymines[x] < c then
say_title("Auszahlen")
say("Du hast nicht so viel Yang in der Mine!")
return
end
mysql_query("UPDATE player.mine_proto SET money=money-"..c.." WHERE id='"..getmines[x].."'")
pc.give_gold(c)
chat("Du hast "..c.. " Yang entnommen!")
return
end
if b == 2 then
say_title("Arbeiter feuern")
say("Welchen Arbeiter möchtest du entlassen?")
local cleanlist = {}
for x2 = 1, table.getn(userworkers), 1 do
if userworkers[x2] != 0 then
table.insert(cleanlist, userworkers[x2])
else
table.insert(cleanlist, "---")
end
end
local c2 = select(cleanlist[1], cleanlist[2], cleanlist[3], cleanlist[4], cleanlist[5])
if c2 <= 5 and c2 >= 1 then
if userworkers[c2] == 0 then
return
end
say_title("Arbeiter entlassen")
say("Bist du sicher, dass du den Arbeiter entlassen willst?")
local c3 = select("Entlassen", "Abbrechen")
if c3 == 2 then return end
mysql_query("UPDATE player.mine_index SET user"..c2.."='0' WHERE id='"..getmines[x].."'")
chat("Du hast den Arbeiter entlassen!")
end
return
end
if b == 3 then
say_title("NPC-Arbeiter verändern")
say("Gib bitte die Veränderung an.")
say("Jeder Arbeiter kostet dich 1000000 Yang.")
say("Du erhälst das Yang beim Entlassen zu 50% zurück.")
say("Negative Zahlen lässt Arbeiter verschwinden, bis keine")
say("mehr übrig sind.")
local c = input("")
if c == "" or c == 0 then return end
local c = tonumber(c)
if c < 0 then
local workers = mine.get_workers(getmines[x])
if workers-math.abs(c) < 0 then
mysql_query("UPDATE player.player SET workers=0 WHERE id='"..getmines[x].."'")
pc.give_gold(workers*500000)
else
mysql_query("UPDATE player.player SET workers=workers-"..math.abs(c).." WHERE id='"..getmines[x].."'")
pc.give_gold(math.abs(c)*500000)
end
else
if pc.get_gold() < math.abs(c)*1000000 then
say("Du hast leider nicht genug Yang!")
return
end
pc.change_gold(-math.abs(c)*1000000)
mysql_query("UPDATE player.player SET workers=workers+"..math.abs(c).." WHERE id='"..getmines[x].."'")
say("Du hast erfolgreich die NPC-Arbeiter eingestellt!")
end
end
end
return
end
if a == 2 then
say_title("Mine überfallen")
say("Von welchem Spieler möchtest du eine Mine überfallen?")
local b = input("")
if b == "" then return end
if pc.exists(b) == false then
say("Den Spieler gibt es nicht!")
return
end
local minecount = mine.get_minecount(b)
if minecount == 0 then
say("Dieser Spieler hat keine Minen!")
return
end
say("Wie viel Yang möchtest du für den überfall einsetzen?")
local d = input("")
if d == "" or d <= 0 then return end
if pc.get_money() < d then
say("Du hast nicht genug Yang!")
return
end
local factor = d / number(10, 100)
if d > 1000000 then
local chance = 10
elseif d > 750000 then
local chance = 9
elseif d > 500000 then
local chance = 8
elseif d > 250000 then
local chance = 7
elseif d > 100000 then
local chance = 6
elseif d > 75000 then
local chance = 5
elseif d > 50000 then
local chance = 4
elseif d > 25000 then
local chance = 3
elseif d > 10000 then
local chance = 2
else
local chance = 1
end
local finishchance = number(chance, 15)
if finishchance == 15 then
local c = number(1, minecount)
local playermines = mine.get_mines(b)
local get_themoney = mine.get_money(playermines[c])
local moneycalc = get_the_money/4
mysql_query("UPDATE player.mine_proto SET money=money-"..moneycalc.." WHERE id='"..playermines[c].."'")
pc.give_gold(moneycalc)
say_title("überfall -> Erfolg!")
say("Du hast die Mine erfolgreich überfallen.")
say("Deine Beute: "..moneycalc)
else
say_title("überfall -> Fehlschlag")
say("Du hast es leider nicht geschafft.")
end
end
end
when 20092.chat."In den Minen arbeiten" with mine.get_working() < 5 begin
say_title("In den Minen arbeiten")
say("Du kannst in einer Mine arbeiten, wenn du willst.")
say("Du erhälst dafür 500.000 Yang jeden Tag!")
say("Du musst aber daran denken, hier vorbei zu kommen.")
say("Möchtest du dich in eine Mine eintragen?")
local a = select("Eintragen", "Abbrechen")
if a == 2 then return end
say_title("In einer Mine arbeiten")
say("Bitte gib' den Spielernamen an, bei")
say("dem du arbeiten willst.")
local b = input("")
if b == "" then return end
if pc.exists(b) == false then
say("Der Spieler existiert nicht!")
return
end
local minecount = mine.get_minecount(b)
if minecount == 0 then
say("Dieser Spieler hat keine Minen!")
return
end
local playermines = mine.get_mines(b)
for x = 1, minecount, 1 do
local userworkers = mine.get_user_workers(playermines[x])
for y = 1, table.getn(userworkers), 1 do
if userworkers[y] == 0 then
say_title("Platz gefunden!")
say("Ein Platz in "..mine.get_title(playermines[x]).." ist frei!")
say("Möchtest du dort arbeiten?")
local c = select("Auswählen", "Abbrechen")
if c == 1 then
mysql_query("UPDATE player.mine_index SET user"..y.." = '"..pc.get_id().."'")
mysql_query("UPDATE player.player SET working=working+1 WHERE `name`='"..pc.get_name().."'")
chat("Du arbeitest nun in der Mine!")
return
end
end
end
end
say("Leider konnten keine weiteren Stellen gefunden werden.")
end
when 20092.chat."Minenarbeit belohnen!" with mine.get_working() >= 1 begin
setskin(NOWINDOW)
local thisdate = tonumber(os.date("%d"))
if pc.getqf("lastdate") != thisdate then
local belohnung = mine.get_working()*500000
pc.give_gold(belohnung)
pc.setqf("lastdate", thisdate)
chat("Du hast deine Belohnung abgeholt!")
else
chat("Leider gibt es heute keine Belohnung mehr.")
chat("Komm' morgen wieder.")
end
end
end
end
Y las funciones que se necesitan en questlib:
function pc.exists(playername)
assert(type(playername)=="string", "Spielername ist kein String!")
local ergebnis = mysql_query("SELECT exists FROM player.player WHERE player.`name`='"..playername.."'")
local result = tonumber(ergebnis[1][1])
if result == 1 then
return true
end
return false
end
function pc.get_id(playername)
if playername == nil then
local playername = pc.get_name()
end
local result = mysql_query("SELECT id FROM player.player WHERE player.`name`='"..playername.."'")
assert(type(result[1][1])!="nil", "Keine ID zum Namen!")
return tonumber(result[1][1])
end
function pc.get_name_by_id(playerid)
assert(type(playerid)=="number", "Playerid ist keine Nummer!")
local result = mysql_query("SELECT `name` FROM player.player WHERE player.id='"..playerid.."'")
assert(type(result[1][1])!="nil", "Kein Name zur ID!")
return tostring(result[1][1])
end
Además, es necesario ampliar la tabla de la DB del jugador:
ALTER TABLE player ADD `exists` enum('1','0') NOT NULL DEFAULT '1';
ALTER TABLE player ADD `mines` int(1) NOT NULL DEFAULT '0';
ALTER TABLE player ADD `working` int(1) NOT NULL DEFAULT '0';
Acontinuancion deberas crear otras 2 tablas:
CREATE TABLE `mine_index` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`user1` int(12) unsigned NOT NULL DEFAULT '0',
`user2` int(12) unsigned NOT NULL DEFAULT '0',
`user3` int(12) unsigned NOT NULL DEFAULT '0',
`user4` int(12) unsigned NOT NULL DEFAULT '0',
`user5` int(12) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `mine_proto` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(12) unsigned NOT NULL DEFAULT '0',
`money` bigint(64) unsigned NOT NULL DEFAULT '0',
`controller` int(12) unsigned NOT NULL DEFAULT '0',
`workers` int(12) unsigned NOT NULL DEFAULT '0',
`bezeichnung` varchar(18) NOT NULL DEFAULT 'Mine',
`last_update` bigint(64) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
Creditos:
.Alessa
Fuente:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Las traducciones de las quest es a gusto de cada uno yo solo traigo para la gente que no visita Epvp
Buenas chicos, pues edito este post, con nuevos links e imagenes, a lo que vamos.
1-Descargar el archivo que hay adjunto más abajo para 34k o 2089M
2-Segunda opción bajar los txt para 40k o superior.
3-Para los txt simplemente lo metéis en vuestra carpeta /db del filezilla o winscp
4- Para instalar la 1 opción vamos al navicat:
-Después vamos a navicat, -->player-->tables damos botón derecho y ejecutamos en execute files sql Quedaría así:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
esto me lo paso el creador de los files 2013 invoice de elitepvpers y esta en elitepvpers obviamente la acomode un poco en español y aqui engo a ponerla.
algunos de nosotros estamos familiarizados con el problema de que los jugadores solo lleguen hasta elejir personaje y los devuelva al login, si el servidor si se ejecuta en una máquina local y no en un dedicado.
La razón por la que este problema se está produciendo es la sucesión de paquetes de inicio de sesión:
Codigo:
struct SSimplePlayer {
unsigned long dwID;
unsigned char szName[25];
unsigned char byJob;
unsigned char byLevel;
unsigned long dwPlayMinutes;
unsigned char byST;
unsigned char byHT;
unsigned char byDX;
unsigned char byIQ;
unsigned short wMainPart;
bool bChangeName;
unsigned short wHairPart;
unsigned char bDummy[4];
long int x;
long int y;
unsigned long int lAddr;
unsigned short wPort;
unsigned char skill_group;
};
typedef SSimplePlayer TSimplePlayer;
struct packet_login_success
{
unsigned char bHeader;
TSimplePlayer players[4];
unsigned long guild_id[4];
unsigned char guild_name[4][13];
unsigned long handle;
unsigned long random_key;
};
TSimplePlayer :: laddr es la dirección de destino para el servidor (laddr equivalente a g_szPublicIP). g_szPublicIP es la dirección de la tarjeta de interfaz de red local, por ejemplo, 192.168.0.1. El significado de esto es que el jugador consiga esta dirección local al iniciar sesion y conectarse al servidor creado en estas direcciones ... Así, cuando el jugador selecciona el carácter, el jugador obtiene una desconexión, ya que la dirección local no está disponible en Internet.
¿Cómo solucionarlo?
Patch (r2089M ~ Versión 47 MB):
(es el game que tienen en los server files)
Codigo:
Y empezar los núcleos con los siguientes argumentos:
. /game -I <PUBLIC_ADDRESS>
Si lo desea, puede configurar el puerto con -p <PUERTO> y si lo desea, puede especificar el archivo de configuración con -n <TAG> (esquema:. CONFIG {TAG}).
Así que los jugadores no necesitan un mc o sura para entrar a servidores locales o múltiples servidores!
Diff Pacth:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.
Creditos:
Anohros
Fuente:
Debes iniciar sesión para ver el contenido del enlace en esta publicación.