Hiho,
da ich mich nicht mehr mit ArcEmu befasse, möchte ich ein paar LUA-Scripts veröffentlichen, welche ich nicht mehr brauchen werde.
Diese dienen nur zum lernen, ich werde keinen Support von meiner Seite aus geben. Auch ist mir bewusst, dass einige Dinge eher schlecht als recht gelöst sind. In diesen Scripts ist mir dann nichts weiteres eingefallen, ich hatte keine Lust es anders zu lösen oder es war einfach anders nicht möglich.
Ich wiederhole: Für Lernzwecke! Kein Support von mir!
Glücksspiel NPC
Code:
local kosten = 10000
local hauptgewinn = 50000
local gewinn = 20000
local chanceVerlieren = 70
local menuid = 384
local npcid = 47
print("Gluecksspiel NPC geladen - ID: " .. npcid)
function gluecksspiel_NPC_Gossip(Unit, Event, player, pMisc)
Unit:GossipCreateMenu(menuid, player, 0)
Unit:GossipMenuAddItem(0, "Nur eine Runde...", 1, 0)
Unit:GossipSendMenu(player)
end
function gluecksspiel_NPC_OnSelect(Unit, Event, player, id, intid, code, pMisc)
if(intid == 1) then
if(player:GetCoinage() >= kosten) then
player:DealGoldCost(kosten)
local rand = math.random(1, 100)
if(rand==99) then
player:DealGoldMerit(hauptgewinn)
Unit:SendChatMessage(12, 0, "Du hast den Hauptpreis gewonnen!")
elseif(rand>=chanceVerlieren) then
player:DealGoldMerit(gewinn)
Unit:SendChatMessage(12, 0, "Wir haben einen Gewinner!")
elseif(rand<chanceVerlieren) then
Unit:SendChatMessage(12, 0, "Du hast leider verloren!")
end
else
Unit:SendChatMessage(12, 0, "Komm wieder, wenn du genug Gold hast.")
end
Unit:GossipComplete(player)
Unit:GossipCreateMenu(menuid, player, 0)
Unit:GossipMenuAddItem(0, "Nur eine Runde...", 1, 0)
Unit:GossipSendMenu(player)
end
end
RegisterUnitGossipEvent(npcid, 1, "gluecksspiel_NPC_Gossip")
RegisterUnitGossipEvent(npcid, 2, "gluecksspiel_NPC_OnSelect")
Custom Erz
Code:
-- Dont Change
local used = 0
-- Gameobject
local gobject = 70001 -- Gameobject Entry ID
local respawn = 5000 -- Respawntime
local mineable = 1 -- How often u can use it
local size = 1 -- Scale of the vein
-- Loot
local loot = 70000 -- Item ID
local lootmin = 1 -- Min. Value
local lootmax = 2 -- Max. Value
-- Tool
local tool = 2901 -- Tool (2901 = Pickaxe)
local range = 15 -- Range
-- Emote
local emote = 233 -- Animation
local emotelength = 4000 -- Length of Emote (Milliseconds)
print("Custom Veins geladen - GO: " .. gobject)
function GameObject_OnCreate(Unit, Event)
Unit:SetScale(size)
end
function GameObject_OnUse(Unit, Event, player)
if(player:GetEquippedItemBySlot(15):GetEntryId() == tool) then -- Spitzhacke tragen
if(player:GetDistance(Unit) < range) then -- Reichweite
player:SetPlayerLock(1) -- Spieler unbeweglich machen
player:Emote(emote, emotelength)
player:AddItem(loot, math.random(lootmin, lootmax)) -- Item mit der ID 70000 1-2x adden
RegisterTimedEvent("AddLoot", emotelength, 1, player, Unit)
else
player:SendBroadcastMessage("Du bist zuweit entfernt!")
end
else
player:SendBroadcastMessage("Lege deine Spitzhacke an")
end
end
function AddLoot(player, Unit)
player:SetPlayerLock(0) -- Spieler bewegbar machen
used = used + 1
if(used >= mineable) then
Unit:Despawn(0, respawn) -- 2. Wert Respawnzeit
used = 0 -- Wieder abbaubar
end
end
RegisterGameObjectEvent(gobject, 1, "GameObject_OnCreate");
RegisterGameObjectEvent(gobject, 4, "GameObject_OnUse");
Sehr simples "Phasingsystem", welches ein bestimmtes Areal phased, sobald eine Quest abgeschlossen ist
Code:
function Gebietsabfrage()
for k,v in pairs(GetPlayersInWorld()) do
local area = v:GetAreaId()
-- Sonnenwindposten
if(area == 3622) then
if(v:HasFinishedQuest(18)) then
local phase = v:GetPhase()
if(phase == 1) then
v:SetPhase(2,1)
end
end
else
v:SetPhase(1,1)
end
end
end
RegisterTimedEvent("Gebietsabfrage", 1000, 0)
Simples "Upgradesystem"
Code:
local gobject = 70003 -- Gameobject id
print("Upgradesystem geladen - GO: " .. gobject)
function Schmiede_OnUse(pGo, event, player)
pGo:GossipObjectCreateMenu(197, player, 0)
if(player:GetItemCount(25) >= 1) then
pGo:GossipObjectMenuAddItem(0, "Schwert upgrade", 1, 0)
end
-- item 2 code
pGo:GossipObjectSendMenu(player)
end
function Schmiede_OnSelect(pGo, event, player, id, intid)
-- Item 1
if (intid == 1) then
if(player:GetCoinage() >= 100000) then
local rand = math.random(1, 100)
if(rand >= 80) then
player:DealGoldCost(100000)
player:RemoveItem(25, 1)
player:AddItem(35, 1)
player:PlayerSendChatMessage(1, 0, "Upgrade erfolgreich!")
else
player:DealGoldCost(100000)
player:RemoveItem(25, 1)
player:PlayerSendChatMessage(1, 0, "Upgrade fehlgeschlagen!")
end
else
player:PlayerSendChatMessage(1, 0, "Du hast zu wenig Gold!")
end
player:GossipComplete()
end
-- Item 2
if(intid == 2) then
-- usw.
end
end
RegisterGameObjectEvent (gobject, 4, "Schmiede_OnUse")
RegisterGOGossipEvent(gobject, 2, "Schmiede_OnSelect")
Simpler Teleport-NPC mit Quest- und Gebietsabfrage
Code:
function NPC_Gossip(Unit, Event, player, pMisc)
if(player:HasFinishedQuest(22)) then
local zone = player:GetZoneId()
if(zone == 3518) then
Unit:GossipCreateMenu(68, player, 0)
Unit:GossipMenuAddItem(0, "Bringt mich hin!", 1, 0)
Unit:GossipSendMenu(player)
else
Unit:GossipCreateMenu(68, player, 0)
Unit:GossipMenuAddItem(0, "Bringt mich weg!", 2, 0)
end
else
Unit:GossipCreateMenu(68, player, 0)
Unit:GossipAddQuests(player)
Unit:GossipSendMenu(player)
end
Unit:GossipSendMenu(player)
end
function NPC_OnSelect(Unit, Event, player, id, intid, code, pMisc)
if(intid == 1) then
player:Teleport(1, 7192.58, -740.68, 59.65, 0.87)
Unit:GossipComplete(player)
end
if(intid == 2) then
player:Teleport(530, -1577.98, 7958.89, -22.28, 1.2)
Unit:GossipComplete(player)
end
if(intid == 3) then
end
end
RegisterUnitGossipEvent(35, 1, "NPC_Gossip")
RegisterUnitGossipEvent(35, 2, "NPC_OnSelect")
"Customschmiede" via Gossip
Code:
-- npc_text
-- 4: Hauptmenü
-- 5: Item 1
-- 68: Item 2
function Schmiede_OnUse(pGo, event, player)
pGo:GossipObjectCreateMenu(4, player, 0)
if(player:GetItemCount(36910) >= 2) then
pGo:GossipObjectMenuAddItem(0, "Titanbarren herstellen", 1, 0)
end
pGo:GossipObjectSendMenu(player)
end
function Schmiede_OnSelect(pGo, event, player, id, intid)
if (intid == 1) then
pGo:GossipObjectCreateMenu(5, player, 0)
pGo:GossipObjectMenuAddItem(0, "Titanbarren herstellen", 2, 0)
pGo:GossipObjectSendMenu(player)
end
if(intid == 2) then
if(player:GetItemCount(36910) >= 2) then
if(player:AddItem(41163, 1)) then
player:RemoveItem(36910, 2) -- Titanerz abziehen
else
player:SendAreaTriggerMessage("Dein Inventar ist voll.")
end
else
player:SendAreaTriggerMessage("Du hast leider nicht genug Titanerz.")
end
player:GossipComplete()
end
end
RegisterGameObjectEvent (70002, 4, "Schmiede_OnUse")
RegisterGOGossipEvent(70002, 2, "Schmiede_OnSelect")
Falls es euch helfen sollte, wäre ich über ein Thanks sehr erfreut.
In Zukunft werde ich nurnoch TrinityCore-Scripts releasen, welche in C++ geschrieben sind.
~ Kaev